Análisis de malware

Secuestro de orden de carga de DLL

26 de marzo de por Srinivas

El secuestro del orden de carga de DLL es una técnica popular que se utiliza para obligar a un programa legítimo a cargar un archivo DLL malicioso en Windows abusando de la función de orden de carga de DLL de Windows. En este artículo, analizaremos cómo funciona el secuestro del orden de carga de DLL y cómo pueden utilizarlo los autores de malware al escribir programas maliciosos.

¿Qué es una DLL?

Una biblioteca de vínculos dinámicos (DLL) es una biblioteca que contiene código reutilizable. Otros programas pueden invocar código disponible en las DLL sin tener que reescribirlo.

Según Microsoft : “Una DLL es una biblioteca que contiene código y datos que pueden ser utilizados por más de un programa al mismo tiempo. Por ejemplo, en los sistemas operativos Windows, la DLL Comdlg32 realiza funciones comunes relacionadas con los cuadros de diálogo. Por lo tanto, cada programa puede utilizar la funcionalidad contenida en esta DLL para implementar un cuadro de diálogo Abrir. Esto ayuda a promover la reutilización de código y el uso eficiente de la memoria”.

¿Qué es el orden de carga de DLL?

El orden de carga de DLL es la forma en que se buscan los archivos de la biblioteca de vínculos dinámicos (DLL) en los sistemas operativos Windows cuando es necesario cargarlos. Cabe señalar que solo es aplicable cuando no se especifica el nombre de ruta completo de la DLL.

Cuando no se especifica un nombre de ruta completo, Windows intenta localizar la DLL buscando en un conjunto predefinido de carpetas en un orden específico. Esto se muestra a continuación.

  1. El directorio desde el que se cargó la aplicación.
  2. El directorio del sistema
  3. El directorio del sistema de 16 bits
  4. El directorio de Windows
  5. El directorio actual
  6. Los directorios que se enumeran en la variable de entorno PATH

¿Qué es el secuestro del orden de carga de DLL?

Supongamos que una aplicación está diseñada para cargar una DLL desde el directorio actual, como se muestra en el siguiente extracto.

LoadLibrary(«miarchivo.dll»);

Como podemos observar, no se especifica un nombre completo al cargar el archivo DLL. Se activará una búsqueda de este archivo DLL para encontrar esta DLL.

Como se mencionó anteriormente, Windows intenta ubicar la DLL buscando en un conjunto predefinido de carpetas en un orden específico que se muestra en la sección anterior. En este caso, asumimos que el archivo DLL original está disponible en el directorio actual. Pero, según el orden de búsqueda, se buscarán en otros directorios antes de buscar en el directorio actual.

Si un atacante puede colocar un archivo DLL malicioso en una de las siguientes ubicaciones, la aplicación cargará el DLL malicioso en lugar del original:

  1. El directorio desde el que se cargó la aplicación.
  2. El directorio del sistema
  3. El directorio del sistema de 16 bits
  4. El directorio de Windows

Sin embargo, esto puede alterar la funcionalidad de la aplicación original. Para evitar esta situación, la DLL maliciosa se puede escribir de manera que cargue la DLL original a su vez.

¿Cómo puede el malware utilizar el secuestro de orden de carga de DLL?

El secuestro del orden de carga de DLL es una de las técnicas populares utilizadas por los autores de malware para lograr persistencia con relativa facilidad. Esta técnica también se puede utilizar para lograr una escalada de privilegios si el programa vulnerable objetivo se ejecuta en un nivel de privilegio más alto.

Cómo saber si un programa es vulnerable al secuestro del orden de carga de DLL

Es posible identificar si un programa determinado es vulnerable al secuestro del orden de carga de DLL utilizando una herramienta llamada Process Monitor. La herramienta Process Monitor se puede descargar aquí .

Los siguientes pasos describen cómo utilizar Process Monitor para identificar operaciones de carga de DLL en una aplicación determinada.

  1. Inicie Process Monitor y aplique algunos filtros para filtrar la salida en la ventana principal. Podemos aplicar un filtro navegando a la ventana Filtro y eligiendo las opciones deseadas como se muestra en la siguiente figura.

Como podemos ver en la imagen anterior, estamos examinando un binario llamado dvta.exe. Nos gustaría explorar todos los eventos de la aplicación donde el resultado es NOMBRE NO ENCONTRADO. Esto es para detectar si se busca alguna DLL y no se encuentra.

  1. Ahora inicie la aplicación de destino y observe la ventana Process Monitor.
  2. Como se muestra en la anterior, aquí se muestran todos los eventos que tienen el resultado NOMBRE NO ENCONTRADO. Si en la salida se encuentra alguna ruta que parezca sospechosa (como una llamada al directorio actual para cargar una DLL), la aplicación puede ser potencialmente vulnerable al secuestro del orden de carga de la DLL.

    ¡Conviértete en un ingeniero inverso certificado!

    Obtenga capacitación práctica en vivo sobre análisis de malware desde cualquier lugar y conviértase en un analista certificado de ingeniería inversa. Comienza a aprender

    Conclusión

    En este artículo, analizamos qué es el secuestro del orden de carga de DLL y cómo pueden aprovecharlo actores malintencionados. También analizamos cómo se pueden identificar estas vulnerabilidades mediante el uso de una herramienta como Process Monitor.

    Fuentes