lunes, 10 de junio de 2013

Windows Installer Detection

Hoy en el trabajo me encontré con un problema curioso.

Estaba trabajando en Windows 7 y tenía un binario (PE) que se suponía no debía pedirme permisos a través del UAC para poder ejecutarlo. Sin embargo, me pedía confirmación al ejecutarlo:




Primeramente, pensé que esto se debía a un archivo manifest pero examinando el archivo con, por ejemplo, CFF Explorer, no había señales de ningún manifest. Qué estaba pasando?.

Le conté a marciano lo que estaba pasando y comenzamos a verlo un poco más de cerca, con una búsqueda en Google, encontró un link interesante y me dijo: "Mirá, me parece que es esto", el link era a una página en la MSDN donde se explicaba algo llamado Windows Installer Detection.

La historia es la siguiente: con la aparición de Windows Vista y UAC los programas comenzaron a correr con privilegios de un usuario standard, o sea, el usuario Administrador de Windows XP ya no era más Administrador en Vista. Esto acarreó el problema de que muchos programas que necesitaban de privilegios de Administrador para poder correr ya no funcionaban, sobre todo, instaladores de programas que necesitaban, por ejemplo, escribir en algún directorio especial.

Cómo se solucionó este problema? La gente de Microsoft desarrollo un sistema muy complejo basado en heurísticas muy complejas también, para poder determinar si un programa necesita o no de privilegios de Administrador para poder correr.

La verdad es que no se si se me va a hacer fácil explicar estas heurísticas pero voy a hacer el intento. La heuristica está basada en ... el nombre del archivo!!! (WTF?).

Si, aunque no lo crean es así, hagan la prueba. Windows se fija si el nombre del archivo contiene palabras tales como "setup", "install" o "update" y si ese es el caso, entonces, supone que el programa necesita de privilegios de Administrador para poder correr y agrega el prompt de UAC.

Entonces, hicimos la prueba de renombrar el archivo y mágicamente, el control de UAC desapareció:



 
Esto es lo que dice el artículo de Microsoft:

With the arrival of User Access Control (UAC) in Windows Vista, applications run with standard user privileges by default. Some programs, however, need to run with administrative privileges, most notably installers that need to write to privileged locations. These programs will fail with access denied errors when run as standard user. To remedy this, starting with Windows Vista, the operating system will apply some heuristics to determine whether the executable is, in fact, an installer, and if so, attempt to elevate to administrator privileges. However, sometimes these heuristics can themselves cause problems. This unit will explain these installer detection heuristics, and show you how to overcome common problems due to these.
Acá pueden leer algo más de información.
Los invito a que hagan la prueba!!!.

Hasta pronto!.

3 comentarios:

Mario Vilas dijo...

Jaaa, si, lo habia visto tambien, haciendo unas pruebas con un exploit kit que mandaba el payload como update.exe :D

Otra cosa curiosa es que si sacás a calc.exe fuera de System32 deja de funcionar. Le había cambiado el payload para que en vez de la viruta se descargara la calculadora, y cuando lo ejecuté y no se abrió nada pensé que lo había hecho mal. Me la pasé descartando VMs al pedo hasta que entendí lo que pasaba. :P

Unknown dijo...

Lo probé también con notepad.exe en un Windows 7 de 32 bits y tampoco pasaba nada. De alguna manera sabe que es un notepad y no prende UAC.

Germán Sánchez Garcés dijo...

Incluso Patch.exe funciona. En Visual Basic 6 no hay forma de incluir el recurso de manifest y que funcione.

Con lo que para distribución de malware es muy común el uso de esta técnica.

Saludos!