IconJector: una curiosa técnica de inyección en el explorador

IconJector usa una técnica de inyección de DLL del Explorador de Windows que utiliza el cuadro de diálogo de cambio de icono en Windows.

En primer lugar, se crea una carpeta en el directorio temporal y las propiedades de la carpeta se abren usando SHObjectProperties. Para recuperar el identificador de la ventana independientemente del idioma del sistema, EnumWindows se utiliza con una función de callback que comprueba el nombre de la carpeta distinta en cada ventana abierta.

A través de la página de propiedades, se invoca el cuadro de diálogo de cambio de icono, cuyo identificador también se recupera con EnumWindows. Por último, la ruta del icono se cambia a una DLL (que tiene una extensión .ico en este caso), lo que hace que el explorador cargue la DLL después de presionar el botón Aceptar.

El "icono" es en realidad un simple archivo DLL con una extensión .ico que abre la aplicación de la calculadora con un recurso de icono que se agregó mediante Resource Hacker.

Existen algunas anomalías en cuanto a la apariencia del icono en la vista de carpetas.

El autor de la herramienta aka 0xda568, lo probó en dos versiones diferentes de Windows 10 (la más nueva y la anterior) y en Windows 11.

Windows 10

En ambas versiones de Windows 10, el icono almacenado dentro de la DLL no se mostró cuando se cambió la extensión a .ico

Sin embargo, en la versión más reciente de Windows 10, funcionó hasta que intentó abrir el "icono" dentro de la aplicación de fotos. Desde entonces no pudo volver a recrearlo.

Windows 11

En Windows 11, el icono se mostraba como un icono normal en la vista del Explorador. Sin embargo, cuando se abre en la aplicación de fotos, se muestra un error.


Este comportamiento es ciertamente interesante, ya que un usuario que simplemente quiera cambiar el icono de una carpeta puede inyectar una DLL maliciosa en su explorador. Esto podría verse así:

Como veis, es una forma muy sigilosa de inyectar una DLL en el proceso del Explorador porque no utiliza la API de inyección habitual. Produce dos ventanas emergentes breves, que sin embargo no son demasiado molestas. Por lo tanto, un atacante puede utilizarlo como técnica de evasión del antivirus para ejecutar código a través del proceso de exploración legítimo o para cargar un rootkit UMD.

Además, difundir archivos DLL enmascarados como archivos .ico puede ser un vector de ataque interesante.

Tenéis el código y más info en la página del proyecto: 

https://github.com/0xda568/IconJector

Comentarios