
Framework di rilevamento dell'offuscamento di PowerShell


Revoke-Obfuscation è un framework di rilevamento dell'offuscamento di PowerShell compatibile con PowerShell v3.0+.
Daniel Bohannon (@danielhbohannon) Lee Holmes (@Lee_Homes)
Post sul blog: https://www.fireeye.com/blog/threat-research/2017/07/revoke-obfuscation-powershell.html
Whitepaper: https://www.fireeye.com/content/dam/fireeye-www/blog/pdfs/revoke-obfuscation-report.pdf
Nell'autunno 2016 e nella primavera 2017, Daniel Bohannon (@danielhbohannon) ha rilasciato Invoke-Obfuscation e Invoke-CradleCrafter, due framework open-source per l'offuscamento di PowerShell. L'obiettivo di questa ricerca e di questi framework era evidenziare i limiti di un approccio puramente basato su firme per rilevare l'uso di PowerShell da parte degli aggressori. Il messaggio principale per i difensori è stato quello di concentrarsi sul rilevamento degli Indicatori di Offuscamento oltre alla sintassi sospetta conosciuta.
Tuttavia, gli estremi livelli di randomizzazione in Invoke-Obfuscation e Invoke-CradleCrafter, abbinati alle opzioni di offuscamento a livello di token che non vengono deoffuscate nella registrazione dei blocchi di script di PowerShell, hanno portato i difensori a cercare un nuovo e scalabile metodo per rilevare genericamente tecniche di offuscamento sia note che sconosciute.
Poche settimane dopo il rilascio di Invoke-Obfuscation, Lee Holmes (@Lee_Homes) ha scritto un post sul blog intitolato More Detecting Obfuscated PowerShell in cui ha evidenziato tecniche di analisi statistica per rilevare caratteristiche anomale presenti in script pesantemente offuscati, in particolare quelli prodotti da Invoke-Obfuscation.
Da questo scambio, Daniel e Lee sono diventati buoni amici e condividevano molti interessi/ossessioni comuni — segnatamente, l'amore per il buon caffè e la ricerca per creare nuovi modi per rilevare a fondo PowerShell offuscato.
Il tempo che entrambi i Blue Teamer hanno speso a studiare ricerche e codice POC equivarrebbe a diverse migliaia di tazze di caffè preparato con Chemex, ipotizzando il corretto tempo di infusione di 4 minuti (supponendo che almeno un altro appassionato di caffè abbia colto questo gioco di parole "pour over").
Revoke-Obfuscation è il prodotto finale artigianale di questi sforzi.
Revoke-Obfuscation è un framework open-source PowerShell v3.0+ per rilevare comandi e script PowerShell offuscati su larga scala. Si basa sull'AST (Abstract Syntax Tree) di PowerShell per estrarre rapidamente migliaia di caratteristiche da qualsiasi script PowerShell in input e confrontare questo vettore di caratteristiche con uno dei diversi vettori di caratteristiche pesati predefiniti, calcolati attraverso un processo di apprendimento automatico condotto su un corpus di oltre 408.000 script PowerShell. Questo corpus completo può essere scaricato da (https://aka.ms/PowerShellCorpus). Puoi trovare i dettagli sugli aspetti di data science di questo lavoro nella sottodirectory 'DataScience' del repository.
Poiché Revoke-Obfuscation si basa sull'estrazione e il confronto di caratteristiche anziché su puri IOC o corrispondenza RegEx, è più robusto nella sua capacità di identificare tecniche di offuscamento sconosciute, anche quando gli aggressori tentano di attenuare il loro offuscamento riempiendolo con contenuti di script non offuscati per sovvertire controlli di base come l'analisi della frequenza dei caratteri.
Revoke-Obfuscation può misurare facilmente la maggior parte degli script PowerShell in input entro 100-300 millisecondi. Questo livello di prestazioni consente a un'organizzazione di misurare l'offuscamento di (al peggio) oltre 12.000 script PowerShell all'ora, senza la necessità di indicizzare i log verbosi dei blocchi di script PowerShell in un SIEM.
Infine, Revoke-Obfuscation supporta una facile funzionalità di whitelist, insieme alla capacità di ingerire i record del log eventi operativi di PowerShell e riassemblare i blocchi di script registrati in numerosi record di blocchi di script EID 4104. Può facilmente diventare uno sportello unico per ingerire i log eventi operativi PowerShell di un ambiente, riassemblare e rendere unici tutti gli script all'interno di quei log, e poi identificare gli script PowerShell offuscati che meritano un'ispezione manuale.
Il codice sorgente di Revoke-Obfuscation è ospitato su Github, e puoi scaricarlo, forkarlo e revisionarlo da questo repository (https://github.com/danielbohannon/Revoke-Obfuscation). Segnala problemi o richieste di funzionalità tramite il bug tracker di Github associato a questo progetto.
Per installare (da Github):
Import-Module .\Revoke-Obfuscation.psd1
Il codice sorgente può anche essere installato direttamente dalla PowerShell Gallery tramite i seguenti comandi:
Per installare (da PowerShell Gallery):
Install-Module Revoke-Obfuscation
Import-Module Revoke-Obfuscation
Revoke-Obfuscation fornirà un tutorial dettagliato così come alcune altre divertenti sorprese. Ma se non sei interessato allo svago, puoi semplicemente eseguire Get-Help Measure-RvoObfuscation per vedere la sintassi di utilizzo o semplicemente continuare a leggere.
Ci sono due funzioni principali utilizzate in questo framework:
Se hai bisogno di riassemblare ed estrarre i log dei blocchi di script dai log operativi di PowerShell, allora Get-RvoScriptBlock è la funzione giusta. Restituisce automaticamente solo blocchi di script unici ed esclude alcuni valori predefiniti dei blocchi di script ritenuti non malevoli. Questo può essere sovrascritto con il flag -Deep.
Get-RvoScriptBlock -Path 'C:\Windows\System32\Winevt\Logs\Microsoft-Windows-PowerShell%4Operational.evtx' -VerboseGet-ChildItem .\Demo\demo.evtx | Get-RvoScriptBlock -VerboseGet-WinEvent -LogName Microsoft-Windows-PowerShell/Operational | Get-RvoScriptBlock -VerboseGet-RvoScriptBlock supporta anche i risultati di audit MIR/HX così come i log operativi PowerShell recuperati tramite il progetto CimSweep di Matt Graeber (@mattifestation) (https://github.com/PowerShellMafia/CimSweep). Per CimSweep è necessaria una piccola modifica al registro per ingannare WMI e fargli interrogare un log eventi non classico. I dettagli si trovano nella sezione NOTE di Get-RvoScriptBlock.
Get-ChildItem C:\MirOrHxAuditFiles\*_w32eventlogs.xml | Get-RvoScriptBlock -VerboseGet-CSEventLogEntry -LogName Microsoft-Windows-PowerShell/Operational | Get-RvoScriptBlockUn esempio completo sui dati di test registrati in demo.evtx può essere trovato qui sotto:
$obfResults = Get-WinEvent -Path .\Demo\demo.evtx | Get-RvoScriptBlock | Measure-RvoObfuscation -OutputToDisk -Verbose
Un esempio completo su script di test locali e remoti può essere trovato qui sotto:
Measure-RvoObfuscation -Url 'http://bit.ly/DBOdemo1' -Verbose -OutputToDiskGet-Content .\Demo\DBOdemo*.ps1 | Measure-RvoObfuscation -Verbose -OutputToDiskGet-ChildItem .\Demo\DBOdemo*.ps1 | Measure-RvoObfuscation -Verbose -OutputToDiskIl flag -OutputToDisk produrrà automaticamente tutti gli script offuscati in .\Results\Obfuscated. Indipendentemente da ciò, tutti i risultati saranno restituiti come PSCustomObject contenenti il contenuto dello script insieme a metadati come punteggio di offuscamento, tempo di misurazione, risultato whitelist, tutte le caratteristiche dello script estratte, ecc.
Esistono tre opzioni di whitelist in due posizioni in Revoke-Obfuscation:
-WhitelistFile .\files\*.ps1,.\more_files\*.ps1,.\one_more_file.ps1-WhitelistContent 'string 1 to whitelist','string 2 to whitelist'-WhitelistRegex 'regex 1 to whitelist','regex 2 to whitelist'Se sei interessato a creare il tuo set di dati di addestramento e generare un vettore pesato per la funzione Measure-Vector, allora ModelTrainer.cs/ModelTrainer.exe può essere eseguito su un set di dati etichettati. Il seguente comando estrarrà i vettori di caratteristiche da tutti gli script in input e li aggregherà in un singolo CSV utilizzato in questa fase di addestramento:
Get-ChildItem .\*.ps1 | ForEach-Object { [PSCustomObject](Get-RvoFeatureVector -Path $_.FullName) | Export-Csv .\all_features.csv -Append }
Infine, se stai cercando una piattaforma per creare indicatori (IOC) che sfruttano la potenza dell'AST (Abstract Syntax Tree) di PowerShell — che raccomandiamo vivamente per identificare attività PowerShell malevoli che NON sono offuscate — allora PS Script Analyzer è un eccellente framework progettato per gestire tali compiti.
Revoke-Obfuscation è rilasciato sotto licenza Apache 2.0.
v1.0 - 2017-07-27 Black Hat USA & 2017-07-30 DEF CON: Rilascio pubblico di Revoke-Obfuscation.