Ir al contenido principal
Blog de Tanium

¡No se deje engañar! Detección de ataques basados en el orden de carga de archivos DLL con Tanium

Explicación del secuestro de DLL

El secuestro de DLL, conocido comúnmente como secuestro del orden de carga o del orden de búsqueda, es una técnica de persistencia del malware ampliamente documentada que sigue eludiendo la detección y supone un reto importante para los investigadores. Si no está familiarizado con esta técnica, ¡no se preocupe! En esta entrada analizaremos brevemente los antecedentes del secuestro del orden de carga y presentaremos una nueva funcionalidad de Tanium para la detección a gran escala.

Windows no exige que las aplicaciones especifiquen una ruta completa para las bibliotecas de enlace dinámico (DLL) que se cargan en tiempo de ejecución. Cuando no se indica una ruta completa, Windows intenta localizar el archivo DLL buscando en ubicaciones predeterminadas siguiendo un orden predecible. Por lo tanto, es posible que un atacante altere este orden añadiendo una DLL maliciosa, con el mismo nombre que la versión legítima, en una ubicación situada antes que la biblioteca legítima; lo que provocaría que el sistema operativo cargara inadvertidamente la DLL maliciosa. Si una aplicación carga una DLL (por ejemplo, ntshrui.dll) indicando únicamente su nombre, Windows sigue un orden definido públicamente para identificar y cargar la primera biblioteca que encuentre con el nombre «ntshrui.dll».

Si se tiene en cuenta que el «modo de búsqueda segura de DLL» está activado (lo cual es el caso por defecto), el sistema operativo comprobará en primer lugar si ya hay una DLL con el mismo nombre cargada en memoria o si dicha DLL está definida en la clave de registro «KnownDLLs» (HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\KnownDLLs). Si no se cumple ninguna de estas condiciones, Windows cargará las bibliotecas siguiendo el siguiente orden:

  1. El directorio desde el que se inició la aplicación
  2. El directorio del sistema (C:\Windows\System32)
  3. El directorio del sistema de 16 bits (C:\Windows\System)
  4. El directorio de Windows
  5. El directorio actual
  6. Directorios definidos en las variables PATH

Microsoft ofrece aquí más detalles sobre el orden de carga:

https://msdn.microsoft.com/en-us/library/windows/desktop/ms682586(v=vs.85).aspx (se abre en una nueva pestaña)

Biblioteca de DLL conocidas

En cualquier sistema Windows, la superficie de ataque —representada por el número de puntos que pueden ser objeto de un secuestro— es mucho mayor de lo que cabría suponer. Por regla general, las aplicaciones que se ejecutan fuera de «C:\Windows\System32” » y que cargan una biblioteca sin indicar la ruta completa son objetivos potenciales. Nota: La biblioteca en cuestión tampoco debe existir ya en la memoria ni figurar en el valor del Registro «KnownDLLs». Se ha demostrado que incluso los archivos binarios del sistema central, en particular explorer.exe, son vulnerables (https://capec.mitre.org/data/definitions/471.html (se abre en una nueva pestaña)).

Una biblioteca maliciosa diseñada adecuadamente puede actuar como «puente» para la biblioteca legítima, preservando así la estabilidad de la aplicación vulnerable que la carga. El mero hecho de enumerar las aplicaciones en ejecución o las ubicaciones habituales de almacenamiento no constituye un método eficaz para detectar el ataque. En total, la amplia variedad de aplicaciones que podrían ser objeto de explotación y de DLL cargadas ha supuesto un gran quebradero de cabeza para muchos investigadores que intentan detectar esta técnica.

Módulo de respuesta ante incidentes de Tanium (versión 2.3.1)

La última versión del módulo de respuesta a incidentes de Tanium (versión 2.3.1) incluye un nuevo sensor denominado «Búsqueda de secuestro del orden de carga de DLL». Esta función se ha diseñado para ayudar a las organizaciones a detectar el secuestro del orden de carga de los archivos DLL a gran escala. El sensor funciona analizando las DLL cargadas por los procesos en ejecución y aplica diversas heurísticas y pasos de filtrado para identificar situaciones en las que pueda haberse producido un secuestro. Cuando se identifica un proceso que podría haber sido secuestrado, el sensor proporciona información sobre dicho proceso y la DLL para ayudar al analista a determinar la legitimidad de la alerta. En concreto, el sensor proporciona la siguiente información:

  • Nombre y ruta del proceso
  • Ruta de la DLL
  • Hash de DLL MD5
  • Si la DLL cuenta con una firma digital
  • Motivo por el que se sospecha que el archivo DLL es malicioso

Tanium lleva a cabo todo este proceso, desde la búsqueda hasta la obtención de resultados, en cuestión de segundos, independientemente de la envergadura del entorno.

La captura de pantalla que figura a continuación muestra un ejemplo de los resultados del sensor «DLL Load Order Hijacking» en una pequeña implementación de laboratorio. Creamos una detección por etapas en la que «Explorer.exe» cargaba «ntshrui.dll» desde el directorio «C:\WINDOWS», en lugar de «C:\WINDOWS\system32” », en un único sistema «infectado».

En entornos de grandes empresas, este sensor puede generar un cierto número de resultados falsos positivos. Las aplicaciones suelen cargar copias de bibliotecas legítimas dentro del mismo directorio siguiendo el orden de búsqueda de DLL previsto, con el fin de garantizar que puedan ejecutarse de forma coherente en diferentes instalaciones y versiones de Windows. Tanium proporciona automáticamente, en tiempo real, datos sobre la frecuencia de aparición de cada resultado, lo que permite a los analistas descartar fácilmente los resultados habituales junto con los datos de hash y de firma digital facilitados por el sensor. La captura de pantalla que figura a continuación muestra un ejemplo de un falso positivo que se podría haber descartado aplicando un filtro basado en la firma digital o en los datos de recuento de frecuencias.

Para contribuir a reducir aún más los falsos positivos, el sensor también permite a los usuarios definir una lista blanca de bibliotecas que se sabe que son correctas. De hecho, los sensores adicionales de Tanium pueden consultar fácilmente todas las DLL cargadas o almacenadas en disco, así como sus respectivos hash, en grupos de sistemas que se sabe que están libres de amenazas, con el fin de ayudar a los usuarios a crear y mantener listas blancas adaptadas específicamente a su entorno.

El sensor «DDL Load Order Hijacking» es un ejemplo de los esfuerzos de nuestro equipo de Detección y Respuesta en Terminales (EDR) por simplificar las investigaciones de incidentes y ayudar a las organizaciones a detectar de forma proactiva los «elementos desconocidos» presentes en un entorno.

En los próximos meses, publicaremos regularmente en nuestro blog información sobre nuevas funcionalidades y casos prácticos.

¡No se pierdan las novedades!

¿Le interesa ver cómo funciona Tanium? Concierte una demostración e individual o participe en nuestro seminario web semanal. Hable con nuestros expertos en Tanium en nuestros próximos eventos « » ().