jueves, 13 de julio de 2017

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.

Hoy 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.


¿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.