viernes, julio 05, 2019

Hacking Windows 10: Bypass de UAC con DLL Hijacking vía SystemPropertiesAdvanced.exe

Hoy hablamos de un nuevo bypass de UAC, el cual utiliza un método ya bastante conocido. Lo curioso de este bypass es que la aplicación systempropertiesadvanced.exe utiliza una carpeta de usuario para cargar una DLL. Esto supone un gran problema, ya que si un binario que se ejecuta en un nivel de integridad alto busca en una carpeta donde el usuario, sin elevación, puede escribir es realmente problemático.

Figura 1: Hacking Windows 10: Bypass de UAC con DLL Hijacking vía SystemPropertiesAdvanced.exe

Este tipo de bypass es similar a otros que hemos ido estudiando en el blog como, por ejemplo, el de invoke-compmgmtlauncher.exe o el de Code Profiler y .NET. La técnica base es DLL Hijacking, es decir, secuestro de una DLL legítima, que una aplicación busca para ejecutar para que encuentre una DLL que suplanta a la original y ejecutar el código que nos interesa.
[modebreak on] Este artículo coincide con la renovación del MVP de Microsoft para la temporada 2019-2020. Siempre comento en charlas y formaciones que este reconocimiento de Microsoft me llena de orgullo y es el tercer año que lo tengo. Artículos, charlas, tecnología, formaciones han ayudado a que año tras año pueda optar al premio y, como comenté, me llena de orgullo. Prometo seguir dando guerra, apoyar en la divulgación y seguir al pie del cañón. [modebreak off]
Dicho esto, vamos a tratar de diseccionar el funcionamiento de este bypass de UAC, el cual es fácilmente automatizable y no necesita de ningún método auxiliar para conseguir copiar la DLL en una ubicación protegida, ya que directamente el usuario puede escribir en la ruta dónde debe estar la DLL.

Binario: SystemPropertiesAdvanced.exe

El binario es el que se encuentra en SysWOW64, esto es importante. Si probamos con el de system32 las cosas no nos funcionarán igual. Lo interesante de este hecho es que funciona en Windows 10 y, a día de hoy, no está parcheado. Se puede revisar el Manifest del binario y ver que está firmado por Microsoft y que la directiva AutoElevate está a True.

Figura 2: Ejecución del binario en SysWOW64 para su análisis

Si se observa con el ProcMon o Process Monitor de Sysinternals podemos ver que al ejecutar el binario SystemPropertiesAdvanced.exe se realiza una serie de búsquedas, entre ellas archivos DLL que no se encuentran.  Es importante que la ejecución del binario sea el binario de 64 bits. Si nos fijamos en la ruta \Users\[user]\AppData\Local\Microsoft\WindowsApps vemos que no se encuentra el fichero srrstr.dll.

Figura 3: Rutas DLL no encontradas

Lo que llama más la atención es la ruta, ¿qué permisos tiene dicha ruta en Windows 10? Pues es fácil de imaginar que en esa ruta el usuario, ieuser en este caso, puede escribir, por lo que ya podemos generar una DLL y ponerla en esa ubicación. Cuando el binario sea ejecutado, acabará encontrando la ruta con una DLL que podría ser legítima, pero no lo es. Una técnica clásica del Hacking de Windows.

Figura 4: Libro de Hacking Windows: Ataques a sistemas y redes Microsoft de 0xWord

Como ya sabemos hoy en día, es un fallo importante y, en principio, sencillo de solucionar. Para la primera prueba se genera una DLL con Metasploit, por ejemplo. El código de la DLL ejecutaría una calculadora. La DLL la copiamos a la ruta dónde se busca la DLL srrstr.dll. Lógicamente, el usuario no tiene problema en realizar dicha copia. Si nos ponemos desde el punto de vista de un usuario remoto o que tiene acceso al sistema a través de una Shell remota, no habría tampoco mucho problema.

Casos de uso y posibilidades

Ahora para probar el caso, ejecutamos la instrucción desde una cmd.exe c:\windows\syswow64\systempropertiesadvanced.exe. El resultado se puede ver en la imagen, en ver de abrir la aplicación de propiedades avanzadas de sistema nos encontramos con la calculadora de Windows 10. Parece que el bypass funciona.

Figura 5: Calucladora ejecutada. Bypass con éxito

El segundo caso es sustituir la DLL que abre una calculadora por una que ejecuta una cmd.exe. Un tercer caso sería ya colocar una Shell inversa a través de dicha DLL, por ejemplo, un Meterpreter con Metasploit. En este segundo caso, al ejecutarse la aplicación se obtiene un nuevo proceso cmd.exe.

Figura 6: Niveles de integridad

Como se puede ver en la imagen, ejecutamos un whoami /all sobre la nueva cmd.exe que se ha abierto y podemos leer los permisos y privilegios disponibles, así como el nivel de integridad en el que se está ejecutando el cmd.exe. Como se puede ver tenemos el proceso ejecutando en un nivel de integridad alto, sin que la pantalla del UAC saltase para notificar el hecho de la elevación.

Figura 7: Libro de "Máxima Seguridad en Windows: Secretos Técnicos 4ª Edición" de
Sergio de los Santos, MVP Microsoft en Seguridad, donde se explica en detalle
la arquitectura de seguridad en Windows.

Para verlo aún más claro, podemos abrir la aplicación Process Explorer y ver como la nueva cmd.exe se ejecuta en un nivel de integridad alto.

Figura 8: Nivel de Integridad "High" en Process Explorer

Por último, os dejamos un video del proceso completo. Estoy seguro que herramientas como ibombshell, uac-a-mola, Empire o Metasploit tendrá próximamente módulos para que el pentester pueda automatizar el proceso.

Figura 9: PoC de Bypass de UAC usando DLL Hijacking vía SystemPropertiesAdvanced.exe

Este tipo de herramientas y técncas no son solo útiles por el hecho de la sencillez, si no también por su funcionamiento en Windows 10 y las posibilidades que ofrece en un Ethical Hacking.

Saludos,

Autor: Pablo González Pérez (@pablogonzalezpe), escritor de los libros "Metasploit para Pentesters", "Hacking con Metasploit: Advanced Pentesting" "Hacking Windows", "Ethical Hacking", "Got Root" y “Pentesting con Powershell”, Microsoft MVP en Seguridad y Security Researcher en el equipo de "Ideas Locas" de la unidad CDO de Telefónica.

1 comentario:

Velow dijo...

¿Podría por tanto poder utilizar una dll no firmada para ejecutarla en alguna aplicación desde la que tengo siempre problemas de ejecución en el arranque del sistema y la única manera que tenía de ejecutarla hasta ahora era desabilitar la comprobación de firmas digitales en el arranque?¿Por tanto sin tener que desabilitar el UAC?

Entrada destacada

10 maneras de sacarle el jugo a tu cuenta de @MyPublicInbox si eres un Perfil Público

Cuando doy una charla a algún amigo, conocido, o a un grupo de personas que quieren conocer MyPublicInbox , siempre se acaban sorprendiendo ...

Entradas populares