Saltarse AppLocker en Windows 10 con los CPLs del Panel de Control
Hemos hablado recientemente de AppLocker y las técnicas de Bypass. Son técnicas interesantes para cualquier proyecto de Ethical Hacking, ya que nos permiten evitar las políticas de restricción de aplicaciones que pueden contener los distintos equipos de una organización. Hace unas semanas hablábamos de una técnica que utilizaba la herramienta BGInfo de Sysinternals para saltarse la restricción de ejecución. Por otro lado, vimos una segunda técnica que utilizaba las reglas por defecto de AppLocker para llevar a cabo el Bypass.
En otras ocasiones hemos hablado de los Bypass de UAC en entornos Windows y os dejamos algunos de los más relevantes para que los tengáis en vuestra mochila:
¿Qué es un CPL?
Pues es básicamente una Librería de vínculo dinámico (DLL). Es decir, cuando el panel de control es ejecutado se cargan diferentes CPL que tienen ciertas funcionalidades, pero, a efectos prácticos funciona como una DLL. El escenario que se va a mostrar es un AppLocker configurado con las reglas por defecto. Una vez creadas las reglas por defecto, se deniega el uso del cmd.exe, por lo que cuando intentemos ejecutar una cmd.exe no se podrá.
Si se ejecuta el Panel de Control, a través del binario control.exe, y se indica el CPL concreto, como rundll32 está en una lista negra, no se podría ejecutar el contenido de la CPL, si ésta fuera a invocar un cmd.exe. Es en este punto donde debemos pensar en ¿cómo el panel de control carga por defecto los CPLs? Al final, como hemos dicho anteriormente, no son más que DLLs, por lo que el panel de control hace uso de estas funcionalidades en su ejecución.
Con Procmon se puede visualizar de dónde se cogen los CPLs, y se verá como están todos en HKLM\Software\Microsoft\Windows\CurrentVersion\Control Panel\CPLs. Lo curioso es que con Procom, se puede ver como el binario explorer.exe busca en HKCU primero. Como sabemos esta rama es manipulable por el usuario, sin necesidad de privilegio, por lo que podremos crear la rama HKCU\Software\Microsoft\Windows\CurrentVersion\Control Panel\CPLs.
Para escribir la clave en el registro apuntando al CPL, se puede utilizar la siguiente instrucción, aunque en el caso de que reg o regedit se encuentren bloqueadas, se puede utilizar VBScript o Javascript para crear esas ramas en el registro:
Ahora, para crear la DLL utilizamos msfvenom y la movemos como fichero CPL. Desde Windows nos descargamos el fichero CPL y lo dejamos en el escritorio. El fichero debe encontrarse en la ruta dónde apunte la clave del registro que previamente se ha creado. La instrucción con msfvenom es sencilla y rápida: msfvenom –p [payload] -f [formato] -o [ruta salida].
Para ejecutar el Panel de Control se puede utilizar la ruta completa C:\Windows\System32\control.exe. El resultado debe ser que, aunque tengamos AppLocker con reglas por defecto y restricciones, el código del CPL debe ser ejecutado, evitando la restricción de rundll32.exe, y la propia de la no ejecución de cmd.exe. Para muestra el vídeo siguiente:
Recapitulando, este es un trick que debemos tener en la mochila, como los comentados anteriormente sobre AppLocker. Los ingredientes a modo de receta son:
Figura 1: Saltarse AppLocker en Windows 10 con los CPLs del Panel de Control |
En otras ocasiones hemos hablado de los Bypass de UAC en entornos Windows y os dejamos algunos de los más relevantes para que los tengáis en vuestra mochila:
• UAC Bypass Fileless 1Hoy hablaremos de una técnica que se basa en el abuso de los CPLs utilizados por el panel de control de los sistemas operativos MS Windows.
• UAC Bypass Fileless 2
• UAC Bypass Fileless 3
• Nuestro Invoke-CompMgmtLauncher
• Hijacking DLL en WinSxS
¿Qué es un CPL?
Pues es básicamente una Librería de vínculo dinámico (DLL). Es decir, cuando el panel de control es ejecutado se cargan diferentes CPL que tienen ciertas funcionalidades, pero, a efectos prácticos funciona como una DLL. El escenario que se va a mostrar es un AppLocker configurado con las reglas por defecto. Una vez creadas las reglas por defecto, se deniega el uso del cmd.exe, por lo que cuando intentemos ejecutar una cmd.exe no se podrá.
Figura 2: Reglas por defecto y denegación de cmd.exe |
Si se ejecuta el Panel de Control, a través del binario control.exe, y se indica el CPL concreto, como rundll32 está en una lista negra, no se podría ejecutar el contenido de la CPL, si ésta fuera a invocar un cmd.exe. Es en este punto donde debemos pensar en ¿cómo el panel de control carga por defecto los CPLs? Al final, como hemos dicho anteriormente, no son más que DLLs, por lo que el panel de control hace uso de estas funcionalidades en su ejecución.
Con Procmon se puede visualizar de dónde se cogen los CPLs, y se verá como están todos en HKLM\Software\Microsoft\Windows\CurrentVersion\Control Panel\CPLs. Lo curioso es que con Procom, se puede ver como el binario explorer.exe busca en HKCU primero. Como sabemos esta rama es manipulable por el usuario, sin necesidad de privilegio, por lo que podremos crear la rama HKCU\Software\Microsoft\Windows\CurrentVersion\Control Panel\CPLs.
Figura 3: Manipulación de la clave de registro |
Para escribir la clave en el registro apuntando al CPL, se puede utilizar la siguiente instrucción, aunque en el caso de que reg o regedit se encuentren bloqueadas, se puede utilizar VBScript o Javascript para crear esas ramas en el registro:
reg add “HKCU\Software\Microsoft\Windows\CurrentVersion\Control Panel\CPLs” /v [nombre CPL] /t REG_SZ /d [ruta CPL]
Ahora, para crear la DLL utilizamos msfvenom y la movemos como fichero CPL. Desde Windows nos descargamos el fichero CPL y lo dejamos en el escritorio. El fichero debe encontrarse en la ruta dónde apunte la clave del registro que previamente se ha creado. La instrucción con msfvenom es sencilla y rápida: msfvenom –p [payload] -f [formato] -o [ruta salida].
Figura 4: Ejecución co msfvenom en Kali Linux |
Para ejecutar el Panel de Control se puede utilizar la ruta completa C:\Windows\System32\control.exe. El resultado debe ser que, aunque tengamos AppLocker con reglas por defecto y restricciones, el código del CPL debe ser ejecutado, evitando la restricción de rundll32.exe, y la propia de la no ejecución de cmd.exe. Para muestra el vídeo siguiente:
Figura 5: PoC de saltar AppLocker en Windows con los CPLs del Panel de Control
Recapitulando, este es un trick que debemos tener en la mochila, como los comentados anteriormente sobre AppLocker. Los ingredientes a modo de receta son:
• Creación de la DLL, por ejemplo, con msfvenom. Ponle imaginación y piensa en una shell_bind_tcp u otros.
• Renombrar el fichero DLL a CPL.
• Creación de la ruta en HKCU.
• Lanzar el control.exe utilizando algún método válido.Si todo va bien, tendremos la ejecución del código de la DLL en nuestro equipo evitando la política de AppLocker. Para mitigar este tipo de técnicas, se puede habilitar lo que se denomina DLL Rule Collection en la pestaña de configuración avanzada de AppLocker. Esta opción viene deshabilitada por defecto.
Autor: Pablo González Pérez (@pablogonzalezpe), escritor de los libros "Metasploit para Pentesters", "Ethical Hacking", "Got Root" y “Pentesting con Powershell”, Microsoft MVP en Seguridad y Security Researcher en ElevenPaths
2 comentarios:
Excelente!!!
Publicar un comentario