Portada » eLKcro, Featured, Programacion, Seguridad

DLL Hijacking

11 febrero 2011 Sin comentarios
escrito por : aKcro

Hoy voy a explicar esta técnica a grandes rasgos:

En primer lugar el termino Hijacking es utilizado en el ámbito informático para referirse al secuestro de algo como web browser hijacking que es cuando se cambia de alguna forma la página de inicio con algún fin malicioso.

Dll es el acrónimo de “dynamic-link library” y son archivos con código ejecutable que se carga bajo la demanda de algún programa, como por ejemp wsock32.dll que proporciona una interfaz para las API de los sockets de windows.

Cuando se programa existen 3 formas de invocar direcciones, utilizando una ruta absoluta que sería algo como “c:/archivos de programa/hola mundo folder/hola mundo.dll”, utilizando rutas relativas como “../../hola mundo folder/hola mundo.dll”, y llamando al archivo directamente, es decir, “hola mundo.dll”.

Esta última es la más interesante, ya que llama al archivo a la carpeta actual desde donde se invoca por ejemplo un archivo asociado.  Supongamos que existe un archivo llamado “web.html” en el escritorio y que esta predeterminado que los archivos .html se abrán con un programa que se llamara “navegador.exe”, y que este programa intenta llamar a “hola mundo.dll”  sin rutas absolutas ni relativas. Veamos como sería al intentar cargar un dll, desde aquí deberíamos tener alguna idea de programación:

Cuando la función ShellExecute* es evocada, las siguientes ubicaciones son buscadas por el archivo que realiza la petición
1. El directorio de trabajo actual (CWD)
2.  (Windows\System32)
3.  (Windows\System)
4. El directorio de Windows (Windows)
5. Los directorios en las variables de entorno.
6. Los directorios agregados al registro.

Cuando SeachPath, CreateProcess*, y LoadModule son evocadas, las siguientes ubicaciones son buscadas por el archivo que realiza la petición.

1. El directorio desde donde la aplicación se carga

2. El directorio de trabajo actual (CWD)

3. (Windows\System)

4.  El directorio de Windows (Windows)

5.  Los directorios en las variables de entorno.

Falta información sobre algunas funciones como WinExec, LoadLibrary pero es información que esta en la red.

Ahora como saber en que orden se cargan las dll y si tienen rutas absolutas, relativas etc., debemos monitorear los procesos, para eso debemos descargar algún monitor:

Descargar

La recomendación es agregar filtros, algo como esto (result is name not found, path ends with.dll):

Y una vez hecho esto deberían ver algo como esto:

Encontrando una aplicación vulnerable bastaría con reemplazar la dll por una a gusto y correr el programa vulnerable (si es que busca en una carpeta la dll y podemos ponerla ahí antes de que la encuentre en otra por eso es importante el orden de la búsqueda):

#include <windows.h>

    int POC()
    {
      WinExec("calc", 0);
      exit(0);
      return 0;
    }

    BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
    {
      POC();
      return 0;
    }

Espero que se haya entendido un poco esta técnica.

Comparte:
  • Facebook
  • Twitter
  • Google Bookmarks
  • Meneame
  • Tumblr
  • Live
  • del.icio.us
Line Break

Author: aKcro (56 Articulos)

Deja tu comentario!

Debes estar Logeado para dejar un comentario.

Get Adobe Flash playerPlugin by wpburn.com wordpress themes