Recientemente, X-Force Red lanzó una herramienta llamada Windows Feature Hunter, que identifica objetivos de carga lateral de bibliotecas de vínculos dinámicos (DLL) en un sistema Windows utilizando Frida. Para proporcionar una perspectiva defensiva de contramedidas para la carga lateral de DLL, X-Force Incident Response ha publicado SideLoaderHunter, que es un script de perfilado de sistemas y una configuración Sysmon diseñados para identificar evidencias de carga lateral en sistemas Windows. Esta publicación hablará sobre por qué IBM X-Force considera que la herramienta es necesaria, describirá sus funciones y analizará algunos casos de uso.
En Microsoft Windows, los programas pueden definir qué bibliotecas se cargan en tiempo de ejecución especificando una ruta completa o utilizando otro mecanismo como un manifiesto. Un manifiesto de programa es un archivo externo o un recurso incrustado dentro de una aplicación que se utiliza para gestionar los nombres y las versiones de los ensamblados compartidos en paralelo que la aplicación debe cargar al ejecutarse. Un manifiesto de programa puede incluir redirecciones de DLL, nombres de archivo o rutas completas. Si un manifiesto hace referencia solo a un nombre de archivo de biblioteca, se considera una referencia débil y es vulnerable a un ataque de carga lateral de DLL.
Si se hace una referencia débil a una biblioteca, Windows intenta localizar la DLL a través de un orden de búsqueda predefinido. La primera ubicación en la que buscará Windows es el directorio desde el que se carga la aplicación.
Un ataque de carga lateral de DLL es una técnica adversaria que tiene como objetivo beneficiarse de las referencias de biblioteca débiles y el orden de búsqueda predeterminado de Windows colocando un archivo DLL malicioso disfrazado de DLL legítimo en un sistema, que será cargado automáticamente por un programa legítimo.
Para obtener más información sobre la carga lateral de DLL, consulte MITRE ATT&CK Technique T1574.002.
Manténgase al día sobre las tendencias más importantes e intrigantes del sector en materia de IA, automatización, datos y mucho más con el boletín Think. Consulte la Declaración de privacidad de IBM.
La carga lateral de DLL no es una técnica nueva, ya que la vulnerabilidad de secuestro de órdenes de búsqueda en Windows existe desde Windows XP. X-Force ha observado la carga lateral de DLL utilizada por el troyano bancario Metamorfo, que suelta archivos MSI maliciosos que extraen un binario firmado y una DLL maliciosa para ejecutar un cargador de malware de segunda etapa. Debido al orden de búsqueda predeterminado integrado en Windows, el binario firmado cargará la DLL maliciosa y continuará el flujo de ejecución maliciosa.
Aunque no es la técnica más común utilizada por los actores de amenazas, la carga lateral DLL está siendo cada vez más empleada por los operadores de ransomware, que han aprovechado la carga lateral DLL para ejecutar la carga útil y así evadir la detección por parte de los productos de seguridad.
Por ejemplo, el operador de ransomware REvil aprovechó una vulnerabilidad de carga lateral DLL dentro de un ejecutable de Windows Defender (MsMpEng.exe) para cargar una DLL maliciosa llamada mpsvc.dll que contiene la carga útil del ransomware.
X-Force no ha observado que muchos actores de amenazas o malware sobrescriban binarios o módulos existentes en un sistema para ejecutar un ataque de carga lateral de DLL porque esto podría provocar que un sistema se bloquee o crear errores que podrían conducir a la detección.
En cambio, los actores de amenazas o el malware que han aprovechado la carga lateral de DLL suelen depender de dos comportamientos antes de ejecutar un ataque:
El primer caso de uso es una metodología de detección bastante sencilla. Aunque el binario puede estar firmado, su ejecución seguiría considerándose una anomalía dentro de un conjunto de datos de ejecución de programas. En el ejemplo de Metamorfo mencionado anteriormente, el malware plantó los servicios de volcado de memoria de Avast AVDump32.exe, renombrado como jesus.exe, que cargaba una DLL maliciosa llamada dbghelp.dll.
En este ejemplo, la identificación de jesus.exe se logró realizando un análisis de frecuencia en los nombres de archivo registrados dentro de un conjunto de datos de ejecución del programa.
Figura 1: Análisis de frecuencia del nombre binario en el conjunto de datos de ejecución de programas
El segundo caso de uso puede ser más difícil de detectar, ya que suele aprovechar aplicaciones estándar de Windows de confianza para ejecutar la DLL maliciosa, lo que ayuda a que la actividad maliciosa se mezcle con los datos de ejecución de programas no maliciosos. Existen oportunidades de detección mediante el análisis de frecuencia de la ruta completa del binario dentro de un conjunto de datos de ejecución de programas, pero sin ningún tipo de filtrado este análisis es demasiado ineficiente.
En su lugar, el conjunto de datos de ejecución del programa se puede filtrar solo para incluir nombres de ejecutables que residen en System32 o SysWow64 de forma predeterminada. En este caso, el análisis se realizaría en todos los datos de ejecución del programa asociados a los ejecutables System32 o SysWow64 en los que la ruta completa del binario no coincidiera con la predeterminada.
Para realizar este análisis, cree una tabla de búsqueda de los ejecutables predeterminados System32 y SysWow64 de los sistemas Windows, que actuarán como un conjunto de datos de control, con el que los defensores pueden identificar anomalías.
El siguiente script de PowerShell enumerará los ejecutables dentro de System32 y SysWow64 y exportará los resultados a CSV.
El uso de sysbins.csv como grupo de control permite identificar la ejecución del programa y proporciona pruebas de las aplicaciones de Windows fuera de sus directorios predeterminados System32 o SysWow64.
| $SysBinList = Get-ChildItem $env:SystemRoot\system32\ ,$env:SystemRoot\syswow64\ -Recurse -ErrorAction SilentlyContinue | Where-Object {($_.Extension -like “.exe”)} -ErrorAction SilentlyContinue | Select Name;$SysBinLobj = $SysBinList.Name | select -Unique | Select-Object @{Name=’Name’; Expression={$_}};$SysBinLobj | export-csv sysbins.csv -NoTypeInformation |
Figura 2: Análisis de frecuencia en la ruta completa de los binarios de System32
Es importante señalar que los actores de amenazas pueden evadir la detección mediante la coincidencia de nombres de archivo renombrando el ejecutable binario, ya que la técnica de carga lateral seguirá siendo viable independientemente del nombre del ejecutable.
Figura 3: Side-LoadSide-Loading mspaint.exe (renombrado como notmspaint.exe) con msftedit.dll
Una forma de detectar los ejecutables renombrados es mediante un perfilado adicional de los valores hash de los ejecutables System32 y SysWow64 en máquinas Windows o recopilando el nombre interno de los archivos ejecutables de los sistemas objetivo. Algunas soluciones de monitorización de la ejecución de procesos como Sysmon capturarán el nombre interno de un ejecutable en el momento de la ejecución. Además, PowerShell tiene la capacidad de enumerar el nombre de archivo original de un ejecutable después de que se le haya cambiado el nombre.
Figura 4: Listado del atributo de nombre de archivo original en PowerShell
El siguiente script enumerará una lista de hashes ejecutables en los directorios System32 y SysWow64, que también se pueden utilizar como conjunto de datos de control para identificar ejecutables estándar de Windows en ubicaciones no estándar.
$binarray=@()$SysBinList = Get-ChildItem $env:SystemRoot\system32\,$env:SystemRoot foreach($bin in $SysBinList) { $binhash = Get-FileHash $bin.FullName -Algorithm SHA1 $binobject = New-Object psobject $binobject | Add-Member -MemberType NoteProperty -Name “Name” -Value $bin.Name $binobject | Add-Member -MemberType NoteProperty -Name “Hash” -Value $binhash.Hash $binarray += $binobject } $binarray | export-csv sysbinhash.csv -NoTypeInformation |
Figura 5: Script de PowerShell para recopilar hashes de archivos
Sin embargo, las detecciones antes mencionadas son más efectivas cuando hay datos de ejecución de procesos centralizados y la capacidad de establecer líneas de base de actividad a lo largo del tiempo dentro de un entorno. Eso es muy raro durante una investigación.
Para superar este desafío, X-Force implementa servicios de recopilación de datos para recopilar metadatos de los endpoints a escala. Uno de esos servicios es SideLoadHunter, que perfilará el punto final para DLL y ejecutables dentro de los perfiles de usuario, System32 y SysWow64. Una vez que se han perfilado los ejecutables y las DLL, X-Force realiza un análisis comparativo para identificar posibles pruebas de carga lateral de DLL a través de nombres de archivo, valores hash y nombres internos. Además, se analizan los artefactos de ejecución del programa en busca de pruebas de ejecutables cargados lateralmente que ya no existen en el disco. Esta herramienta ha sido portada a PowerShell y está disponible para descargar aquí.
Las principales funciones de SideLoadHunter son:
Figura 6: Ejecución de Side-Loadhunter.ps1
A través de la investigación continua de archivos ejecutables vulnerables a la carga lateral en sistemas Windows, X-Force ha identificado una lista de nombres ejecutables y las DLL asociadas que pueden cargarse lateralmente.
Puede encontrar una lista completa de objetivos de carga lateral aquí.
Para ayudar en la detección en tiempo real de estos objetivos de carga lateral, X-Force ha migrado la lista de carga lateral conocida a una configuración de Sysmon destinada a registrar cargas de módulos para los ejecutables y DLL asociados.
La configuración de Sysmon se puede encontrar aquí.
Figura 7: Evento Sysmon de Side-Loadhunter.xml
Aunque el malware y los adversarios suelen tener como objetivo los ejecutables de los directorios System32 y SysWow64 para la carga lateral, el potencial de carga lateral de una DLL en un ejecutable no se limita a esos directorios. Por ejemplo, gracias a los esfuerzos de colaboración entre X-Force Incident Response y X-Force Red, el ejecutable OneDriveStandaloneUpdater.exe, que existe dentro de %userprofile%\appdata\local\Microsoft\OneDrive de forma predeterminada en los sistemas Windows 10, puede cargarse lateralmente a través de WofUtil.dll, que reside en %windir%\system32\ de forma predeterminada.
Figura 8: Carga lateral de OneDriveStandaloneUpdater.exe con WofUtil.dll
Actualmente, X-Force está realizando más investigaciones para crear una lista más exhaustiva de archivos ejecutables y DLL que son objeto de carga lateral, así que esté atento a futuras actualizaciones.