
Marco de detección de ofuscación de PowerShell


Revoke-Obfuscation es un framework de detección de ofuscación de PowerShell compatible con PowerShell v3.0+.
Daniel Bohannon (@danielhbohannon) Lee Holmes (@Lee_Homes)
Artículo: https://www.fireeye.com/blog/threat-research/2017/07/revoke-obfuscation-powershell.html
Documento técnico: https://www.fireeye.com/content/dam/fireeye-www/blog/pdfs/revoke-obfuscation-report.pdf
En el otoño de 2016 y la primavera de 2017, Daniel Bohannon (@danielhbohannon) publicó Invoke-Obfuscation e Invoke-CradleCrafter, dos frameworks de ofuscación de PowerShell de código abierto. El objetivo de esta investigación y de estos frameworks era resaltar las limitaciones de un enfoque puramente basado en firmas para detectar el uso de PowerShell por parte de atacantes. El mensaje central para los defensores ha sido centrarse en detectar Indicadores de Ofuscación además de la sintaxis sospechosa conocida.
Sin embargo, los niveles extremos de aleatorización en Invoke-Obfuscation e Invoke-CradleCrafter, junto con las opciones de ofuscación a nivel de token que no se desofuscan en el registro de bloques de script de PowerShell, han llevado a los defensores a buscar una nueva forma escalable de detectar de manera genérica tanto técnicas de ofuscación conocidas como desconocidas.
Pocas semanas después del lanzamiento de Invoke-Obfuscation, Lee Holmes (@Lee_Homes) publicó un artículo titulado More Detecting Obfuscated PowerShell en el que destacaba técnicas de análisis estadístico para detectar características anómalas presentes en scripts muy ofuscados, en particular los producidos por Invoke-Obfuscation.
Desde ese intercambio, Daniel y Lee se hicieron buenos amigos y compartieron muchos intereses/obsesiones comunes: el amor por el café de especialidad y la búsqueda de nuevas formas de detectar a fondo PowerShell ofuscado.
La cantidad de tiempo que ambos miembros del equipo azul dedicaron a investigar y al código de prueba podría equivaler a varios miles de tazas de café preparado en Chemex, asumiendo el tiempo de preparación objetivo de 4 minutos (y asumiendo que al menos otro entusiasta del café captara este juego de palabras con "pour over").
Revoke-Obfuscation es el producto final artesanal de estos esfuerzos.
Revoke-Obfuscation es un framework de código abierto compatible con PowerShell v3.0+ para detectar comandos y scripts de PowerShell ofuscados a escala. Se basa en el AST (Árbol de Sintaxis Abstracta) de PowerShell para extraer rápidamente miles de características de cualquier script de PowerShell de entrada y comparar este vector de características con uno de varios vectores de características ponderados predefinidos, calculados mediante un proceso de aprendizaje automatizado realizado sobre un corpus de más de 408.000 scripts de PowerShell. Este corpus completo se puede descargar desde (https://aka.ms/PowerShellCorpus). Puede encontrar los detalles detrás de los aspectos de ciencia de datos de este trabajo en el subdirectorio 'DataScience' del repositorio.
Dado que Revoke-Obfuscation se basa en la extracción y comparación de características en lugar de IOCs puros o coincidencias RegEx, es más robusto en su capacidad para identificar técnicas de ofuscación desconocidas, incluso cuando los atacantes intentan atenuar su ofuscación rellenándola con contenido de script no ofuscado para anular comprobaciones básicas como el análisis de frecuencia de caracteres.
Revoke-Obfuscation puede medir fácilmente la mayoría de los scripts de PowerShell de entrada en 100-300 milisegundos. Este nivel de rendimiento permite a una organización medir la ofuscación de (como máximo) más de 12.000 scripts de PowerShell por hora sin necesidad de indexar registros detallados de bloques de script de PowerShell en un SIEM.
Por último, Revoke-Obfuscation admite una funcionalidad sencilla de listas blancas, junto con la capacidad de ingerir registros de eventos operativos de PowerShell y reensamblar bloques de script que se registran en numerosos registros de bloques de script EID 4104. Puede convertirse fácilmente en una ventanilla única para ingerir los registros de eventos operativos de PowerShell de un entorno, reensamblar y deduplicar todos los scripts de esos registros, y luego identificar los scripts de PowerShell ofuscados que merecen una inspección manual.
El código fuente de Revoke-Obfuscation está alojado en Github, y puede descargarlo, bifurcarlo y revisarlo desde este repositorio (https://github.com/danielbohannon/Revoke-Obfuscation). Informe de problemas o solicitudes de funciones a través del rastreador de errores de Github asociado con este proyecto.
Para instalar (desde Github):
Import-Module .\Revoke-Obfuscation.psd1
El código fuente también se puede instalar directamente desde la Galería de PowerShell mediante los siguientes comandos:
Para instalar (desde la Galería de PowerShell):
Install-Module Revoke-Obfuscation
Import-Module Revoke-Obfuscation
Revoke-Obfuscation proporcionará un tutorial detallado, así como algunas otras sorpresas divertidas. Pero si no le interesan las bromas, simplemente puede ejecutar Get-Help Measure-RvoObfuscation para ver la sintaxis de uso o continuar leyendo.
Hay dos funciones principales utilizadas en este framework:
Si necesita reensamblar y extraer registros de bloques de script de los registros operativos de PowerShell, entonces Get-RvoScriptBlock es la función que debe elegir. Automáticamente devuelve solo bloques de script únicos y excluye ciertos valores de bloques de script predeterminados que no se consideran maliciosos. Esto se puede anular con el parámetro -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 también admite resultados de auditoría MIR/HX, así como registros operativos de PowerShell obtenidos a través del proyecto CimSweep de Matt Graeber (@mattifestation)
(https://github.com/PowerShellMafia/CimSweep). Para CimSweep se requiere un
pequeño ajuste en el registro para engañar a WMI y que consulte un registro de eventos no clásico.
Los detalles se pueden encontrar en la sección NOTAS de Get-RvoScriptBlock.
Get-ChildItem C:\MirOrHxAuditFiles\*_w32eventlogs.xml | Get-RvoScriptBlock -VerboseGet-CSEventLogEntry -LogName Microsoft-Windows-PowerShell/Operational | Get-RvoScriptBlockA continuación se muestra un ejemplo completo con datos de prueba registrados en demo.evtx:
$obfResults = Get-WinEvent -Path .\Demo\demo.evtx | Get-RvoScriptBlock | Measure-RvoObfuscation -OutputToDisk -Verbose
A continuación se muestra un ejemplo completo con scripts de prueba alojados local y remotamente:
Measure-RvoObfuscation -Url 'http://bit.ly/DBOdemo1' -Verbose -OutputToDiskGet-Content .\Demo\DBOdemo*.ps1 | Measure-RvoObfuscation -Verbose -OutputToDiskGet-ChildItem .\Demo\DBOdemo*.ps1 | Measure-RvoObfuscation -Verbose -OutputToDiskEl parámetro -OutputToDisk generará automáticamente todos los scripts ofuscados en .\Results\Obfuscated. De cualquier forma, todos los resultados se devolverán como objetos PSCustomObject que contienen el contenido del script junto con metadatos como una puntuación de ofuscación, tiempo de medición, resultado de la lista blanca, todas las características del script extraídas, etc.
Existen tres opciones de listas blancas en dos ubicaciones en Revoke-Obfuscation:
-WhitelistFile .\files\*.ps1,.\more_files\*.ps1,.\one_more_file.ps1-WhitelistContent 'cadena 1 para lista blanca','cadena 2 para lista blanca'-WhitelistRegex 'regex 1 para lista blanca','regex 2 para lista blanca'Si está interesado en crear su propio conjunto de datos de entrenamiento y generar un vector ponderado para la función Measure-Vector, entonces ModelTrainer.cs/ModelTrainer.exe se puede ejecutar contra un conjunto de datos etiquetados. El siguiente comando extraerá vectores de características de todos los scripts de entrada y los agregará en un único CSV utilizado en esta fase de entrenamiento:
Get-ChildItem .\*.ps1 | ForEach-Object { [PSCustomObject](Get-RvoFeatureVector -Path $_.FullName) | Export-Csv .\all_features.csv -Append }
Por último, si busca una plataforma para crear indicadores (IOCs) que aprovechen el poder del AST de PowerShell (Árbol de Sintaxis Abstracta) — lo cual recomendaríamos encarecidamente para identificar actividad maliciosa de PowerShell que NO está ofuscada — entonces PS Script Analyzer es un excelente framework diseñado para manejar dichas tareas.
Revoke-Obfuscation se publica bajo la licencia Apache 2.0.
v1.0 - 2017-07-27 Black Hat USA y 2017-07-30 DEF CON: Lanzamiento público de Revoke-Obfuscation.