Búsqueda de pruebas de carga lateral de DLL con PowerShell y Sysmon

Vista lateral de un desarrollador de software programando en su computadora mientras trabaja desde casa.

Autor

John Dwyer

Head of Research

IBM Security X-Force

Recientemente, X-Force Red lanzó una herramienta llamada Cazador de Características de Windows, que identifica objetivos para la carga lateral de bibliotecas de vínculos dinámicos (DLL) en un sistema Windows utilizando Frida. Para proporcionar una perspectiva de contramedida defensiva para la carga lateral de DLL, X-Force Incident Response ha lanzado SideLoaderHunter, que es un script de creación de perfiles del sistema y una configuración de Sysmon diseñado para identificar evidencia de carga lateral en sistemas Windows. En esta publicación se explicará por qué IBM X-Force considera que esta herramienta es necesaria, se describirán sus funciones y se analizarán algunos casos de uso.

¿Qué es la carga lateral de DLL?

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 recurso incrustado dentro de una aplicación que se utiliza para administrar los nombres y versiones de ensamblados compartidos en paralelo en los que la aplicación debe cargarse 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 Windows buscará 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 usar 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.

Las últimas noticias tecnológicas, respaldadas por los insights de expertos

Manténgase al día sobre las tendencias más importantes e intrigantes de la industria sobre IA, automatización, datos y más con el boletín Think. Consulte la Declaración de privacidad de IBM.

¡Gracias! Ya está suscrito.

Su suscripción se entregará en inglés. En cada boletín, encontrará un enlace para darse de baja. Puede gestionar sus suscripciones o darse de baja aquí. Consulte nuestra Declaración de privacidad de IBM para obtener más información.

Escenario de amenazas de carga lateral de DLL

La carga lateral de DLL no es una técnica nueva, ya que la vulnerabilidad de secuestro del orden de búsqueda dentro de 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 de DLL se utiliza cada vez más por los operadores de ransomware, que han aprovechado la carga lateral de DLL para ejecutar la carga útil del ransomware y 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.

Mixture of Experts | 12 de diciembre, episodio 85

Decodificación de la IA: Resumen semanal de noticias

Únase a nuestro panel de ingenieros, investigadores, responsables de producto y otros profesionales de talla mundial que se abren paso entre el revuelo de la IA para ofrecerle las últimas noticias e insights al respecto.

Detección de carga lateral de DLL

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 causar que un sistema se bloquee o cree 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 confiar en dos comportamientos antes de ejecutar un ataque:

  1. Plante un ejecutable firmado en un directorio de destino junto con la DLL maliciosa.
  2. Mueva un ejecutable de Windows de System32 o SysWow64 en la máquina de destino a un directorio no estándar y plante la DLL maliciosa dentro de la misma carpeta.

El primer caso de uso es una metodología de detección bastante sencilla. Si bien el binario puede estar firmado, su ejecución aún se consideraría una anomalía dentro de un conjunto de datos de ejecución de programa. En el ejemplo de Metamorfo mencionado anteriormente, el malware plantó la empresa de servicios públicos de volcado de memoria de Avast AVDump32.exe, renombrado como jesus.exe, que cargaba lateralmente 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.

Análisis de frecuencia del nombre binario en el 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 del programa.

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 resulta demasiado ineficaz.

En su lugar, el conjunto de datos de ejecución del programa se puede filtrar solo para incluir nombres ejecutables que residen dentro de 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 con los ejecutables System32 o SysWow64 donde 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, contra el cual los defensores pueden identificar anomalías.

El siguiente script de PowerShell enumerará los ejecutables dentro de System32 y SysWow64 y exportará los resultados a un CSV.

El uso de sysbins.csv como grupo de control permite la identificación de la ejecución del programa y proporciona evidencia de 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 | Nombre seleccionado;$SysBinLobj
= $SysBinList.Name | select -Unique | Select-Object @{Name=’Name’;
Expression={$_}};$SysBinLobj | export-csv sysbins.csv -NoTypeInformation
Análisis de frecuencia en la ruta completa de los binarios de System32

Figura 2: Análisis de frecuencia en la ruta completa de los binarios de System32

Es importante tener en cuenta que los actores de amenazas pueden evadir la detección utilizando la coincidencia de nombres de archivo cambiando el nombre del ejecutable binario, ya que la técnica de carga lateral seguirá siendo viable independientemente del nombre del ejecutable.

Side-LoadSide-Loading mspaint.exe (renombrado como notmspaint.exe) con msftedit.dll

Figura 3: Side-LoadSide-Loading mspaint.exe (renombrado como notmspaint.exe) con msftedit.dll

Una forma de detectar ejecutables renombrados es mediante un mayor perfilado 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 de destino. Algunas soluciones de monitoreo de 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.

Listado del atributo de nombre de archivo original en PowerShell

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 usar como un 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
\syswow64\ -Recurse -ErrorAction SilentlyContinue
| Where-Object {($_.Extension -like “.exe”)} -ErrorAction SilentlyContinue | Seleccionar FullName,Name

foreach($bin en $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 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 despliega utilidades de recopilación de datos para recopilar metadatos de endpoints a escala. Una de esas empresas de servicios públicos es SideLoadHunter, que perfilará el endpoint para archivos 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, los artefactos de ejecución de programas se analizan en busca de pruebas de ejecutables de carga lateral que ya no existen en el disco. Esta herramienta fue portada a PowerShell y está disponible para descargar aquí.

SideLoadHunter

Las funciones principales de SideLoadHunter son:

  • Get-SideLoadDetect: función de análisis comparativo diseñada para identificar situaciones en las que un ejecutable System32/SysWow64 se encuentra en un directorio de usuario junto con una DLL que coincide con un nombre de DLL System32/SysWow64 pero no está firmada por Microsoft.
  • Get-SusShimcache: para proporcionar algunas detecciones de ejecutables de carga lateral que ya no están en el disco, SusShimcache analizará las entradas de ShimCache para los ejecutables System32 y SysWow64 que se ejecutaron desde una ubicación no estándar.
  • Get-SusExecs & Get-SusDLLs: perfila un sistema para localizar los ejecutables System32 y SysWow64 y los archivos DLL que no existen dentro de su ubicación predeterminada.
Ejecución de Side-Loadhunter.ps1

Figura 6: Ejecución de Side-Loadhunter.ps1

Detección de carga lateral

A través de Continuar investigación 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.

Aquí puede encontrar una lista completa de los objetivos de carga lateral.

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í.

Evento Sysmon de Side-Loadhunter.xml

Figura 7: Evento Sysmon de Side-Loadhunter.xml

Más que System32 y SysWow64

Si bien el malware y los adversarios suelen tener como objetivo los ejecutables dentro 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, a través de 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, se puede cargar lateralmente a través de WofUtil.dll, que reside en %windir%\system32\ de forma predeterminada.

Carga lateral de OneDriveStandaloneUpdater.exe con WofUtil.dll

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 objetivos de carga lateral, así que manténgase atento a futuras actualizaciones.