¿Qué es el secuestro de DLL?

Un simple archivo DLL fue el catalizador del ciberataque más devastador contra Estados Unidos por parte de piratas informáticos estatales.

Esta brecha cinematográfica demuestra la formidable potencia del secuestro de DLL y su capacidad para desmantelar organizaciones enteras con un solo archivo infectado.

Analizamos aquí qué es el secuestro de DLL, cómo funciona, cómo detectar este ataque y cómo prevenirlo.

¿Qué es el secuestro de DLL?

El secuestro de DLL es un método para inyectar código malicioso en una aplicación explotando la forma en que algunas aplicaciones de Windows buscan y cargan Bibliotecas de vínculos dinámicos (DLL).

Solo los sistemas operativos de Microsoft son susceptibles a los secuestros de DLL.

Al reemplazar un archivo DLL requerido con una versión infectada y colocarlo dentro de los parámetros de búsqueda de una aplicación, el archivo infectado será llamado cuando la aplicación se cargue, activando sus operaciones maliciosas.

Para que un secuestro de DLL sea exitoso, la víctima debe cargar un archivo DLL infectado desde el mismo directorio que la aplicación de destino.

Si las aplicaciones que se cargan automáticamente al iniciarse se ven comprometidas con un archivo DLL contaminado, los ciberdelincuentes tendrán acceso a la computadora infectada siempre que se cargue.

El secuestro de DLL no es un método innovador de ciberataque. Ha estado en circulación entre los ciberdelincuentes desde el lanzamiento de Windows 2000.

¿Qué son los archivos DLL?

Los archivos DLL, o archivos de biblioteca de vínculos dinámicos, contienen los recursos que una aplicación necesita para ejecutarse correctamente. Estos podrían incluir imágenes y una biblioteca de funciones ejecutables.

Los usuarios finales no pueden abrir los archivos DLL, solo puede abrirlos su aplicación asociada, lo que suele suceder cuando se inicia la aplicación.

Los sistemas Windows requieren archivos DLL para comprender cómo usar sus recursos, la memoria de la computadora host y el espacio del disco duro de manera más eficiente.

Los archivos DLL generalmente terminan con una extensión .dll, pero algunos pueden terminar en .drv, .drov e incluso .exe.

Un solo archivo DLL podría ejecutar varios programas, por lo que varios programas podrían potencialmente estar incluidos en un ataque de secuestro de DLL.

¿Cómo funciona?

Para que un ataque de secuestro de DLL tenga éxito, es necesario engañar a una aplicación de Windows para que cargue un archivo DLL infectado en lugar del DLL legítimo.

Al explotar el orden de búsqueda de DLL publicitado de las aplicaciones de Microsoft, este truco es relativamente sencillo de ejecutar.

El orden de búsqueda estándar de DLL de las aplicaciones de Microsoft depende de si la búsqueda segura de DLL está habilitada.

Cuando el modo de búsqueda segura de DLL está habilitado , las aplicaciones buscan los archivos DLL necesarios en el siguiente orden:

  • El directorio desde el que se carga la aplicación.
  • El directorio del sistema.
  • Directorio del sistema de 16 bits.
  • El directorio de Windows.
  • El directorio actual.
  • Los directorios que se enumeran en la variable de entorno PATH.

Cuando el modo de búsqueda segura de DLL está deshabilitado, el orden de búsqueda es el siguiente:

  • El directorio desde el que se carga la aplicación.
  • El directorio actual.
  • Directorio del sistema.
  • El directorio de 16 bits.
  • El directorio de Windows
  • Directorio listado en la variable de entorno PATH.

La diferencia entre los dos modos de búsqueda es el orden en el que se busca en el directorio actual del usuario, está ligeramente elevado en la jerarquía cuando la búsqueda segura está deshabilitada.

Cuando la búsqueda segura está deshabilitada, el directorio actual del usuario se eleva ligeramente en el orden de búsqueda.

Las aplicaciones de Windows utilizarán de forma predeterminada cualquiera de los protocolos de búsqueda de DLL anteriores si una aplicación no especifica la ruta completa de los archivos DLL asociados.

Este es el exploit que hace posible la piratería de DLL.

Por ejemplo, si una aplicación de Windows requiere un archivo DLL ubicado en el directorio del sistema C: \ Windows \ System32 pero no hay instrucciones en su código para buscar en esta ubicación explícita, la aplicación funcionará mediante una orden de búsqueda de DLL para ubicar el archivo.

Independientemente de si la búsqueda segura está habilitada o no, el directorio desde el que se inicia la aplicación es la primera ubicación que se busca.

Si un ciberdelincuente deposita un archivo DLL infectado en esta ubicación, la aplicación lo abrirá en lugar del original porque primero se buscó en su ubicación, antes que en el directorio del sistema.

Esta técnica también se conoce como secuestro de orden de búsqueda DLL.

Para iniciar un secuestro de DLL, un ciberdelincuente solo necesita depositar una DLL de carga útil en el directorio de una aplicación específica.

Existen múltiples vectores de ataque que podrían facilitar dicho depósito, incluidos los ataques de ingeniería social, phishing y cadena de suministro.

Para evitar la detección, los archivos DLL infectados imitan una firma digital de la aplicación de destino. Dicha firma verifica que un archivo sea auténtico, lo que podría permitir la transferencia de archivos DLL maliciosos a socios proveedores en un ataque a la cadena de suministro.

El archivo DLL malicioso que causó la violación de datos del gobierno de EE.UU. fue firmado digitalmente por el proveedor externo de confianza del gobierno, SolarWinds.

Tipos

Hay varias formas de secuestro de DLL, todas las cuales son variaciones del tema central de poder inyectar una DLL maliciosa en el proceso de carga del programa.

Ajuste de DLL conocido

Al igual que la lista de sitios web de confianza en un navegador, cuando un cargador de aplicaciones encuentra un comando para importar una DLL, primero busca un directorio KnownDLL que contenga los nombres de las DLL del sistema conocidas. Si la DLL mencionada en el comando «importar nombre» coincide con una KnownDLL, entonces esta biblioteca de vínculos dinámicos se asignará al espacio de direcciones del proceso correspondiente, en la memoria del sistema.

Hay una clave de registro de Windows que especifica dónde se encuentra la lista de KnownDLL, y los piratas informáticos pueden modificar una clave de registro relacionada para excluir sus propias DLL maliciosas del procesamiento a través del protocolo KnownDLL.

Ataque de carga lateral DLL

Un ataque de carga lateral de DLL explota el directorio WinSxS, que se encuentra en C: \ Windows \ WinSxS, contiene varias versiones de DLL y muchas aplicaciones lo utilizan para evitar problemas asociados con versiones actualizadas o duplicadas de las bibliotecas de vínculos dinámicos.

Una aplicación que desee utilizar el directorio WinSxS para recuperar una DLL debe consultar primero un manifiesto que enumera las DLL a las que una aplicación en particular puede llamar en tiempo de ejecución, y que se utiliza para determinar qué versión de una DLL elegir.

Los atacantes pueden insertar una DLL falsificada en el directorio WinSxS, ya que este manifiesto solo valida las DLL enumeradas en él a partir de los metadatos que se incluyen con ellos, lo cual es bastante fácil de manipular.

Secuestro de DLL fantasma

Este método aprovecha la concesión del sistema operativo Windows a archivos DLL heredados o de uso poco frecuente cuyas aplicaciones pueden contener instrucciones para cargar en el inicio, incluso si no son esenciales para usar el software.

Para aprovechar esta laguna, los atacantes simplemente necesitan nombrar su biblioteca de vínculos dinámicos maliciosos como una de estas DLL de la «vieja escuela» y colocarla en la ruta de búsqueda relevante para que la aplicación la encuentre.

Efectos del secuestro de DLL

El objetivo del secuestro de DLL es que el atacante coloque su DLL falso más alto en el sistema operativo o en la ruta de búsqueda de la aplicación que cualquier alternativa mejor, para que se cargue con éxito en el programa objetivo. Una vez que se ha logrado esta estrategia de ubicación, el daño que pueden causar está limitado solo por sus habilidades para codificar el malware que entrega la DLL maliciosa.

Hay varios recursos en línea que detallan casos documentados de compromiso de las aplicaciones Samsung y el software antivirus por ataques de carga lateral de DLL. Los foros de desarrolladores contienen publicaciones sobre cómo se pueden utilizar diversas técnicas de secuestro de DLL con fines tanto benévolos como maliciosos. Y hay videos de YouTube que demuestran cómo los archivos DLL se pueden introducir fácilmente en las aplicaciones de Microsoft Office o se pueden invocar desde tipos de archivos registrados.

Cómo identificar estos ataques

Puedes identificar si se está produciendo un ataque de secuestro de DLL utilizando Process Explorer (Procmon) de Windows.

Process Monitor muestra todos los sistemas de archivos que se cargan en tiempo real. Al aplicar los filtros adecuados, puede identificar si se están cargando archivos DLL externos en lugar de los originales.

  • Instala y carga el Explorador de procesos de Windows.
  • Busca la aplicación sospechosa de ser el objetivo de un ataque de secuestro de DLL.
  • Aplica un filtro para mostrar solo archivos DLL Para aplicar un filtro en el Explorador de procesos, presiona ctrl + L. Configura el filtro para que solo muestre los archivos activos con una ruta que termine en .dll.
  • Aplica un filtro para el directorio: nombre no encontrado. Debido a que el secuestro de DLL ocurre principalmente cuando se carga un archivo DLL externo en lugar de la versión auténtica en el directorio del sistema, debes aplicar un filtro que muestre los archivos DLL que se han cargado directamente fuera del sistema. Process Monitor marca estos archivos como FILE NOT FOUND. Para aplicar el filtro, presione Ctrl + L y establezca las siguientes condiciones: El resultado es NOMBRE NO ENCONTRADO. Haz clic en Agregar y en Aplicar.

La lista resultante representa todos los archivos DLL que la aplicación especificada está cargando fuera del directorio del sistema.

El archivo DLL de Windows malicioso se ubicará en el mismo directorio que la aplicación de destino. Para consultar esta posibilidad, aplica un filtro adicional para mostrar solo los archivos DLL en el directorio de la Aplicación.

Presiona Ctrl + L y establece las siguientes condiciones: La ruta es [dirección de ruta], haz clic en Agregar y luego en Aplicar.

Cómo prevenir el secuestro de DLL

Los desarrolladores de software deben establecer la primera línea de defensa. Los desarrolladores deben seguir prácticas de codificación seguras y especificar la ubicación exacta de todos los archivos DLL asociados para evitar que Windows no utilice de forma predeterminada su protocolo de ruta de búsqueda de DLL.

Nunca se puede garantizar la adherencia a las prácticas de codificación segura, por lo que las organizaciones deben implementar las siguientes defensas adicionales:

Mantén el software antivirus actualizado

Las tácticas de ataque a la cadena de suministro profundamente sofisticadas podrían evitar la detección por parte del software antivirus, pero hay muchos casos en los que se detectan y bloquean intentos de inyección de DLL maliciosos.

Es importante mantener actualizado el software antivirus para que sus métodos de detección sean astutos.

DLLSPY es un software eficaz de defensa contra el secuestro de DLL que incluso puede detectar vulnerabilidades de escalada de privilegios. Este software está disponible en GitHub.

Educar al personal sobre las señales de advertencia de phishing e ingeniería social

El secuestro de DLL solo es posible si se introduce un archivo DLL malicioso en un ecosistema. Al mitigar la posibilidad de tal inyección, una organización podría evitar secuestros de DLL.

La mayoría de las inyecciones de DLL y malware cargadas se producen porque los miembros del personal las introducen sin saberlo en un ecosistema. Para evitar esto, el personal debe aprender a identificar las señales de advertencia de los ataques de phishing e ingeniería social e implementar las mejores prácticas de seguridad.

Algunas de las mejores prácticas incluyen:

  • Establecer una Política de Seguridad de la Información accesible.
  • Aplicación de la autenticación multifactor.
  • Remitir correos electrónicos sospechosos a miembros clave del personal antes de interactuar con ellos.
  • Reforzar la postura de seguridad

Al monitorizar continuamente su superficie de ataque, puede identificar instantáneamente cualquier vulnerabilidad dentro de sus ecosistemas, lo que coloca a tu organización en un mayor riesgo de ataques de secuestro de DLL.

Implementar una solución de gestión de riesgos para proveedores

Desafortunadamente, no todos los proveedores siguen las mejores prácticas de ciberseguridad, que es la razón detrás de la creciente prevalencia de los ataques a la cadena de suministro.

Los desarrollos innovadores en la tecnología de gestión de riesgos de los proveedores ahora permiten a las organizaciones monitorizar continuamente la postura de seguridad de toda tu red de proveedores.

Los proveedores identificados como vulnerables a los ciberataques pueden ser examinados con cuestionarios basados ​​en los mejores requisitos normativos y de la industria.

Los esfuerzos de remediación también se pueden rastrear de manera eficiente con una puntuación de seguridad del proveedor en tiempo real basada en más de 70 posibilidades de vectores de ataque.