DLL-order hijacking.


Cuando un sistema Windows requiere cargar una DLL, la busca en los siguientes directorios por orden:

  • El directorio donde reside la imagen del proceso que carga la DLL; por ejemplo, si el ejecutable reside en C:\WINDOWS, intentará cargar la DLL desde ese directorio.
  • El directorio actual.
  • El directorio de sistema (normalmente C:\WINDOWS\SYSTEM32).
  • El directorio de sistema para 16-bit (normalmente C:\WINDOWS\SYSTEM).
  • El directorio de Windows (normalmente C:\WINDOWS).
  • Los directorios listados en la variable de entorno PATH.
Este hecho se puede explotar ubicando una DLL maliciosa con el mismo nombre que la DLL legítima en una posición más prioritaria dentro del orden de búsqueda anterior. Por ejemplo, si se sabe que un proceso ubicado en C:\WINDOWS carga la DLL foo.dll, que normalmente está ubicada en C:\WINDOWS\SYSTEM32, y se ubica una versión maliciosa de la DLL con el mismo nombre foo.dll en C:\WINDOWS, que está antes en el orden de búsqueda para la carga, se cargará la versión maliciosa, y no la versión legítima. Este ataque es conocido como «DLL-order hijacking» (algo así como «secuestro en el orden de la DLLs»).

Para tratar de contrarestar este tipo de ataques, Microsoft introdujo en el registro la familia de claves KnownDLLs, que permiten fijar "a fuego" la ruta absoluta de ciertas DLLs, para que sólo puedan cargarse desde sus ubicaciones legítimas.

Contenido completo en fuente original Security Art Work