
Framework de Detecção de Ofuscação do PowerShell


O Revoke-Obfuscation é um framework de detecção de ofuscação PowerShell compatível com PowerShell v3.0+.
Daniel Bohannon (@danielhbohannon) Lee Holmes (@Lee_Homes)
Post no Blog: https://www.fireeye.com/blog/threat-research/2017/07/revoke-obfuscation-powershell.html
White Paper: https://www.fireeye.com/content/dam/fireeye-www/blog/pdfs/revoke-obfuscation-report.pdf
No outono de 2016 e na primavera de 2017, Daniel Bohannon (@danielhbohannon) lançou Invoke-Obfuscation e Invoke-CradleCrafter, dois frameworks de ofuscação PowerShell de código aberto. O objetivo desta pesquisa e destes frameworks era destacar as limitações de uma abordagem puramente baseada em assinaturas para detectar o uso do PowerShell por atacantes. A mensagem central para os defensores tem sido focar na detecção de Indicadores de Ofuscação além da sintaxe suspeita conhecida.
No entanto, os níveis extremos de randomização no Invoke-Obfuscation e no Invoke-CradleCrafter, combinados com as opções de ofuscação em camada de token que não são desofuscadas no log de blocos de script do PowerShell, levaram os defensores a buscar uma nova forma escalável de detectar genericamente técnicas de ofuscação conhecidas e desconhecidas.
Algumas semanas após o lançamento do Invoke-Obfuscation, Lee Holmes (@Lee_Homes) escreveu um post de blog intitulado More Detecting Obfuscated PowerShell no qual destacou técnicas de análise estatística para detectar características anômalas encontradas em scripts fortemente ofuscados, especialmente aqueles produzidos pelo Invoke-Obfuscation.
Desde essa troca, Daniel e Lee se tornaram bons amigos e compartilharam muitos interesses/obsessões em comum — nomeadamente, o amor por café de qualidade e a busca por criar novas maneiras de detectar completamente PowerShell ofuscado.
O tempo que ambos os Blue Teamers passaram debruçados sobre pesquisa e código de prova de conceito equivaleria a vários milhares de xícaras de café preparado no Chemex, assumindo o tempo de preparo alvo de 4 minutos (presumindo que pelo menos outro entusiasta do café tenha pego esse trocadilho com "pour over").
O Revoke-Obfuscation é o produto final artesanal desses esforços.
O Revoke-Obfuscation é um framework de código aberto compatível com PowerShell v3.0+ para detectar comandos e scripts PowerShell ofuscados em escala. Ele depende da AST (Árvore Sintática Abstrata) do PowerShell para extrair rapidamente milhares de características de qualquer script PowerShell de entrada e comparar esse vetor de características com um de vários vetores de características ponderadas pré-definidos, calculados por meio de um processo de aprendizado automatizado conduzido contra um corpus de mais de 408 mil scripts PowerShell. Este corpus completo pode ser baixado de (https://aka.ms/PowerShellCorpus). Você pode encontrar os detalhes por trás dos aspectos de ciência de dados deste trabalho no subdiretório 'DataScience' do repositório.
Como o Revoke-Obfuscation depende de extração e comparação de características em vez de IOCs puros ou correspondência de RegEx, ele é mais robusto em sua capacidade de identificar técnicas de ofuscação desconhecidas, mesmo quando atacantes tentam suavizar sua ofuscação preenchendo-a com conteúdo de script não ofuscado para derrubar verificações básicas como análise de frequência de caracteres.
O Revoke-Obfuscation pode medir facilmente a maioria dos scripts PowerShell de entrada em 100-300 milissegundos. Esse nível de desempenho permite que uma organização meça a ofuscação de (no pior caso) mais de 12 mil scripts PowerShell por hora, sem a necessidade de indexar logs verbosos de blocos de script PowerShell em um SIEM.
Por último, o Revoke-Obfuscation suporta funcionalidade fácil de whitelisting, juntamente com a capacidade de ingerir registros de log de eventos operacionais do PowerShell e remontar blocos de script que são registrados em vários registros de bloco de script EID 4104. Pode facilmente se tornar uma solução completa para ingerir logs de eventos operacionais do PowerShell de um ambiente, remontar e unique todos os scripts nesses logs, e então identificar scripts PowerShell ofuscados que merecem inspeção manual.
O código-fonte do Revoke-Obfuscation está hospedado no Github, e você pode baixá-lo, fazer fork e revisá-lo a partir deste repositório (https://github.com/danielbohannon/Revoke-Obfuscation). Por favor, reporte problemas ou solicitações de recursos através do rastreador de bugs do Github associado a este projeto.
Para instalar (do Github):
Import-Module .\Revoke-Obfuscation.psd1
O código-fonte também pode ser instalado diretamente da PowerShell Gallery através dos seguintes comandos:
Para instalar (da PowerShell Gallery):
Install-Module Revoke-Obfuscation
Import-Module Revoke-Obfuscation
Revoke-Obfuscation fornecerá um tutorial detalhado, além de algumas outras surpresas divertidas. Mas se você não está interessado nas gracinhas, pode simplesmente executar Get-Help Measure-RvoObfuscation para ver a sintaxe de uso ou apenas continuar lendo.
Existem duas funções principais usadas neste framework:
Se você precisa remontar e extrair logs de blocos de script dos logs operacionais do PowerShell, então Get-RvoScriptBlock é a função de sua escolha. Ela retorna automaticamente apenas blocos de script únicos e exclui certos valores padrão de blocos de script considerados não maliciosos. Isso pode ser sobrescrito com a opção -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 também suporta resultados de auditoria MIR/HX, bem como logs operacionais do PowerShell recuperados através do projeto CimSweep de Matt Graeber (@mattifestation)
(https://github.com/PowerShellMafia/CimSweep). Para o CimSweep, é necessário um pequeno ajuste no registro
para enganar o WMI e consultar um log de eventos não clássico.
Detalhes podem ser encontrados na seção NOTES de Get-RvoScriptBlock.
Get-ChildItem C:\MirOrHxAuditFiles\*_w32eventlogs.xml | Get-RvoScriptBlock -VerboseGet-CSEventLogEntry -LogName Microsoft-Windows-PowerShell/Operational | Get-RvoScriptBlockUm exemplo completo com dados de teste gravados em demo.evtx pode ser encontrado abaixo:
$obfResults = Get-WinEvent -Path .\Demo\demo.evtx | Get-RvoScriptBlock | Measure-RvoObfuscation -OutputToDisk -Verbose
Um exemplo completo com scripts de teste locais e remotos pode ser encontrado abaixo:
Measure-RvoObfuscation -Url 'http://bit.ly/DBOdemo1' -Verbose -OutputToDiskGet-Content .\Demo\DBOdemo*.ps1 | Measure-RvoObfuscation -Verbose -OutputToDiskGet-ChildItem .\Demo\DBOdemo*.ps1 | Measure-RvoObfuscation -Verbose -OutputToDiskA opção -OutputToDisk irá automaticamente gerar todos os scripts ofuscados em .\Results\Obfuscated. Independentemente disso, todos os resultados serão retornados como PSCustomObjects contendo o conteúdo do script juntamente com metadados como pontuação de ofuscação, tempo de medição, resultado de whitelisting, todas as características extraídas do script, etc.
Três opções de whitelisting existem em dois locais no 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 você tiver interesse em criar seu próprio conjunto de dados de treinamento e gerar um vetor ponderado para a função Measure-Vector, então ModelTrainer.cs/ModelTrainer.exe pode ser executado contra um conjunto de dados rotulado. O comando a seguir extrairá vetores de características de todos os scripts de entrada e os agregará em um único CSV usado nesta fase de treinamento:
Get-ChildItem .\*.ps1 | ForEach-Object { [PSCustomObject](Get-RvoFeatureVector -Path $_.FullName) | Export-Csv .\all_features.csv -Append }
Por último, se você procura uma plataforma para criar indicadores (IOCs) que aproveitem o poder da AST do PowerShell — o que recomendaríamos fortemente para identificar atividade maliciosa do PowerShell que NÃO é ofuscada — então PS Script Analyzer é um excelente framework projetado para lidar com tais tarefas.
O Revoke-Obfuscation é lançado sob a licença Apache 2.0.
v1.0 - 2017-07-27 Black Hat USA e 2017-07-30 DEF CON: Lançamento PÚBLICO do Revoke-Obfuscation.