
Generatore di offuscamento dei comandi di cmd.exe e banco di prova per il rilevamento

Invoke-DOSfuscation è un framework di offuscamento dei comandi cmd.exe compatibile con PowerShell v2.0+. (White paper: https://www.fireeye.com/blog/threat-research/2018/03/dosfuscation-exploring-obfuscation-and-detection-techniques.html)
Negli ultimi anni, come consulente di risposta agli incidenti, ho assistito a una miriade di tecniche di offuscamento e evasione impiegate da diversi attori delle minacce. Alcune di queste tecniche sono incredibilmente complesse, altre elegantemente semplici, ma entrambe le categorie sono utilizzate per eludere il rilevamento. Nella mia esperienza, ho scoperto che APT32 e FIN7 hanno messo in atto le tecniche di offuscamento più accattivanti e la loro creatività è degna di nota.
Nel giugno 2017, dopo una serie di tecniche incrementali di offuscamento della riga di comando, FIN7 ha utilizzato una funzionalità di sostituzione di stringhe delle variabili d'ambiente nativa di cmd.exe di cui all'epoca non sapevo nemmeno esistesse. Spinto da questa scoperta, ho co-scritto un post sul blog con Nick Carr (@ItsReallyNick) intitolato Obfuscation in the Wild: Targeted Attackers Lead the Way in Evasion Techniques in cui abbiamo evidenziato le tecniche di offuscamento di numerosi gruppi identificate in natura.
Il fine settimana successivo ho esplorato questa funzionalità di sostituzione nativa di cmd.exe e ho costruito e rilasciato un semplice strumento di Prova di Concetto chiamato Out-FINcodedCommand. Appena rilasciato questo POC, mi sono fermato a pensare: "Forse ci sono altre capacità di offuscamento in cmd.exe che dovrei esplorare e per le quali costruire rilevamenti, prima di scoprire che vengono usate in natura."
Questa è stata l'origine della mia ricerca che alla fine mi ha portato a sviluppare questo framework Invoke-DOSfuscation.
Gli attaccanti utilizzano sempre più tecniche di offuscamento per eludere i rilevamenti basati principalmente sui valori degli argomenti della riga di comando. Per contrastare questo fenomeno, ho dedicato cinque mesi alla ricerca e allo sviluppo di tecniche di offuscamento e codifica native di cmd.exe, in modo da poter creare rilevamenti robusti per queste tecniche fondamentali che non ho ancora visto in natura.
L'unico scopo di questo framework è permettere ai difensori di generare casualmente migliaia di comandi di esempio univocamente offuscati per testare e mettere a punto le loro capacità di rilevamento contro queste tecniche. Ho incluso il mio test harness completo in questo rilascio per automatizzare questo processo di test di rilevamento.
In molti modi, questo framework consente ai difensori di eseguire fuzzing delle tecniche di offuscamento di cmd.exe, e durante la costruzione di questo strumento ho scoperto numerose ulteriori opportunità di offuscamento che non avevo individuato nella mia ricerca iniziale.
Ho anche condiviso queste informazioni con Microsoft nel novembre 2017 e ho chiesto informazioni su opportunità per esporre una maggiore visibilità sul funzionamento interno dell'utilizzo di cmd.exe delle tecniche fondamentali che costituiscono i mattoni di tutte le funzioni di offuscamento integrate in questo framework.
Come difensore, l'obiettivo finale di questa ricerca e sviluppo è aumentare la consapevolezza e guidare il cambiamento per aiutare gli utenti finali a proteggersi meglio contro le TTP (Strumenti, Tecniche e Procedure) in continua evoluzione degli attaccanti.
Sebbene tutti i componenti di offuscamento siano sviluppati in funzioni formali autonome, la maggior parte degli utenti troverà la funzione Invoke-DOSfuscation il modo più semplice per esplorare e visualizzare le tecniche di offuscamento supportate da questo framework. Per il fuzzing e l'esplorazione approfondita delle numerose opzioni di regolazione per ciascuna categoria di offuscamento, si consiglia comunque di utilizzare le singole funzioni direttamente al di fuori del wrapper della funzione Invoke-DOSfuscation.
Per consentire ai difensori di iniziare facilmente a fare fuzzing e testare idee di rilevamento, questo framework include anche un modulo aggiuntivo, Invoke-DOSfuscationTestHarness.psm1 che viene importato automaticamente con il resto del progetto. Le due funzioni chiave di questo modulo per i difensori sono:
Invoke-DosTestHarness - Genera (con impostazioni predefinite degli argomenti) oltre 1000 comandi offuscati casualmente da un elenco di comandi di test sia per l'integrità del payload che per scopi di rilevamento. Ogni iterazione del test harness randomizza tutti gli argomenti delle funzioni disponibili e chiama direttamente le quattro funzioni di offuscamento invece di utilizzare i valori standardizzati -ObfuscationLevel (1-3) che la funzione basata su menu Invoke-DOSfuscation utilizza per impostazione predefinita. Questo produce una gamma significativamente più ampia di output offuscato contro cui si possono costruire rilevamenti più approfonditi. Ogni comando offuscato viene quindi verificato rispetto alla seconda funzione:Get-DosDetectionMatch - Controlla un comando di input (stringa) rispetto a tutti i valori di rilevamento regex inseriti nell'array $regexDetectionTerms della funzione. Viene chiamato automaticamente da Invoke-DosTestHarness ma può essere chiamato anche in modo autonomo.Alla fine di ogni invocazione del test harness vengono visualizzate le statistiche per l'esecuzione corretta dei comandi e il rilevamento, in modo che i difensori possano identificare rapidamente quali comandi hanno 0 o solo 1-2 corrispondenze di rilevamento e quali potrebbero aver bisogno di una copertura migliore.
Infine, per evitare che i difensori debbano eseguire il test harness per iniziare, ho fornito 1000 comandi di esempio nella directory Samples suddivisi in ciascuna delle quattro funzioni di offuscamento. I formati includono file .txt e file .evtx di Security e Sysmon. Ho incluso un paio di regole di rilevamento di esempio nell'array $regexDetectionTerms in Invoke-DOSfuscationTestHarness.psm1, ma dovrai aggiungere e testare molte più regole mentre testi i comandi offuscati di esempio). Oltre ai file .txt con i comandi grezzi, ci sono file .evtx contenenti i log di esecuzione dei processi (eventi Sysmon EID 1) per ciascuno dei 1000 comandi di esempio. Questi log degli eventi sono estremamente utili per costruire indicatori basati su esecuzioni di processi figlio sfumate che sono sottoprodotti di diverse tecniche di base su cui è costruito Invoke-DOSfuscation.
Per iniziare, visualizza i comandi offuscati di esempio che non corrispondono a nessuna delle tue attuali regole di rilevamento semplicemente eseguendo:
(Get-Content .\Samples\STATIC_1-of-4_Out-DosConcatenatedCommand.txt) | where-object { -not (Get-DosDetectionMatch -Command $_).Detected }
Per testare sia i comandi offuscati che i processi figlio dai log degli eventi di esecuzione registrati in Security EID 4688, basta eseguire:
(Get-WinEvent -Path .\Samples\DYNAMIC_SECURITY_EID4688_1-of-4_Out-DosConcatenatedCommand.evtx) | where-object { $_.Message } | foreach-object { ($_.Message.Split("`n") | select-string '^\tProcess Command Line:\t') -replace '^\tProcess Command Line:\t','' } | where-object { -not (Get-DosDetectionMatch -Command $_).Detected }
Il codice sorgente di Invoke-DOSfuscation è ospitato su Github; puoi scaricarlo, farne il fork e revisionarlo da questo repository (https://github.com/danielbohannon/Invoke-DOSfuscation). Segnala problemi o richieste di funzionalità tramite il bug tracker di Github associato a questo progetto.
Per installare:
Import-Module .\Invoke-DOSfuscation.psd1
Invoke-DOSfuscation
Invoke-DOSfuscation è rilasciato sotto licenza Apache 2.0.
v1.0 - 2018-03-23 Black Hat Asia (Singapore): RILASCIO PUBBLICO di Invoke-DOSfuscation.