Recientemente se ha publicado un truco para hacer un bypass de GPO (Group Policy Objetcs -Políticas de Grupo). El propio funciona en políticas locales y en políticas aplicadas por un administrador de dominio. Hay que decir que, probando este bypass pues la máquina puede sufrir algún inter-bloqueo (deadlock) o inestabilidad, por lo que si quieres probarlo, hazlo sobre un entorno virtual y en un entorno controlado totalmente por ti.
Me llamó la atención la sencillez y el paso a paso que siguió el investigador para lograr su objetivo. Hay que tener en cuenta que saltarse una política de grupo es algo interesante para los pentesters que se encuentran en proyectos de Ethical Hacking o en grupos de Red Team, pero existen muchas protecciones por detrás que pueden ayudar a seguir protegiendo el equipo. ¿Qué quiero decir? Que no es el fin del mundo hacer un bypass de esto, pero que ayuda y que, por supuesto, la gente de IT debe proteger y restringir ciertas acciones mediante un buen uso de la política de grupo.
Teniendo en cuenta que en una semana son los RootedLab y donde estaré con el de Ethical Hacking y el de Offensive Powershell, pues quería mostrar el tipo de cosas que se pueden aprender en estos lab. Así que si te interesa este mundo, no dudes en pasarte por los labs y por RootedCON dónde daremos charla varios compañeros de Telefónica.
El investigador que ha publicado la técnica indica que lo ha probado en Microsoft Windows 7 y Microsoft Windows 10. Como parte del trabajo en Hacking Windows, yo lo he probado en Windows 10 con buen resultado, aunque la pantalla puede provocar algún “tembleque” hasta que se carga correctamente el hive de registro.
¿En qué consiste todo esto?
La técnica consiste en aprovecharse de la forma en que se carga el registro, en particular el hive HKCU, al iniciar sesión en el equipo. Cuando el usuario inicia sesión se cargan ajustes desde la rama HKEY_CURRENT_USER. Este hive contiene ajustes relacionados con el usuario y aplicaciones que se relacionarán con él. Este hive es un archivo que se puede encontrar en la siguiente ruta: %USERPROFILE%\ntuser.dat. Cuando se inicia sesión, el servicio de perfiles de usuario utiliza NtLoadKeyEx para cargar el hive en el registro.
¿Y si quieres cambiar algo en la clave del registro durante el inicio de sesión? Pues hay que pasar por las APIs de Microsoft que comprobarán los permisos de las claves que se quieren modificar. Como dijo David, el investigador que descubrió el truco, es un mini sistema de archivos.
¿Dónde está el problema?
Con ProcMon (y boot logging activo) se puede ver que el servicio ProfSvc comprueba si existe %USERPROFILE%\ntuser.man, antes de cargar el fichero ntuser.dat. Esto nos debe sonar mucho de la parte de los bypasses de UAC o de la técnica DLL Hijacking.
Uno se puede preguntar, ¿qué es ntuser.man? Es un archivo similar a ntuser.dat o, a efectos prácticos, igual. La diferencia sería que se utiliza cuando se requiere un perfil obligatorio. En %USERPROFILE% el usuario puede escribir, por lo que podrá escribir el fichero ntuser.man que mejor le interese para conseguir el bypass de la política que le marquen. Como se puede ver, la idea es sencilla. Los pasos serían:
El cliente de política de grupo de Windows o GpSvc se ejecuta y encuentra una subclave en el hive llamado “Políticas” o Policies. Entonces llama a una función interna denominada ForceRegCreateKeyEx, la cual intenta abrir una de las subclaves de políticas con permisos de escritura, si falla, llama a AddPolicyPermissionOnKey para que tome la propiedad de la clave y restaure “SISTEMA” con permisos de escritura en la clave. Luego se reabre la clave y se sobrescriben las entradas de la política de grupo.
Entonces, David vio que la rutina AddPolicyPermissionOnKey modificaba la ACL de la subclave para agregar a SYSTEM, pero no eliminaba ninguna entrada de la ACL existente. Esto quiere decir que si se estable una entrada explícita para denegar los permisos de escritura de SYSTEM, entonces se bloquea a SYSTEM y no podrá obtener los permisos necesarios para restablecer la política de grupo.
Después de la teoría, vamos con los ejemplos
En la presentación de la técnica se mostraba un ejemplo con el Task Manager (administrador de tareas). Para el artículo he realizado el mismo ejemplo, pero también añadiendo la prohibición de la ejecución de un CMD por parte de un usuario por GPO (que es típico de encontrar por ahí). El primer ejemplo, se puede habilitar de la siguiente forma, a través del MMC y las GPO:
En la ruta System (sin entrar en Ctrl+Alt+Del Options) se puede encontrar la directiva para bloquear la ejecución de un CMD. El resultado es que el "Administrador de Tareas" no está accesible para el usuario y que el CMD queda bloqueado como puede verse en la siguiente imagen.
Ahora empezamos con la creación del fichero ntuser.man. Lo primero es conseguir uno de un Windows con la misma versión, esto es importante. Se puede copiar de un usuario que esté “no conectado”, es decir, no haya iniciado sesión. Una vez se tiene un archivo copiado de ntuser.dat, lo podemos “abrir” con el registro de Windows. Abrimos con regedit.exe y en el menú "Archivo" podemos encontrar la opción Cargar hive. Una vez cargamos el hive, en el ejemplo lo hemos hecho sobre HKEY_LOCAL_MACHINE, le ponemos un nombre y podemos modificar todo lo necesario.
Lo primero es cambiar los permisos sobre la raíz, para que haya un control total, por parte del usuario “todos”, sobre todas las subclaves que hay debajo de la raíz. Hay que recordar que, aunque lo he llamado “poc”, esa clave y su jerarquía corresponde con el HKEY_CURRENT_USER que queremos “emular” para conseguir el bypass de las políticas de grupo GPO.
Ahora, hay que llegar a \Software\Microsoft\Windows\CurrentVersion\Policies. En función de la política que se quiera sobrescribir o añadir, se necesitará encontrar la subclave correspondiente. En el caso del administrador de tareas y del CMD la clave es \Software\Microsoft\Windows\CurrentVersion\Policies\System. La subclave System es donde añadiremos la regla DENY para lograr que SYSTEM no tenga privilegios de escritura/creación. De esta forma se logra el bypass.
Por último, se mueve el fichero ntuser.man a la ruta %USERPROFILE% y se puede cerrar e iniciar sesión de nuevo, tal y como se ve en la Figura 8.
El resultado es que volvemos a tener “Task Manager” y que la CMD vuelve a estar disponible.
Es un buen truco que cualquier pentester debe llevar consigo en la mochila para las auditorías y proyectos de hacking ético. Estos trucos dan un valor añadido a la figura del pentester. Recordad probarlo en un entorno controlado por vosotros, ya que puede causar inestabilidad en el sistema si se aplica incorrectamente.
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", “Pentesting con Powershell” y de "Empire: Hacking Avanzado en el Red Team", Microsoft MVP en Seguridad y Security Researcher en el equipo de "Ideas Locas" de la unidad CDCO de Telefónica. Para consultas puedes usar el Buzón Público para contactar con Pablo González
Figura 1: Hacking Trick: Bypass de Políticas de Grupo (GPO) en Windows 10 |
Me llamó la atención la sencillez y el paso a paso que siguió el investigador para lograr su objetivo. Hay que tener en cuenta que saltarse una política de grupo es algo interesante para los pentesters que se encuentran en proyectos de Ethical Hacking o en grupos de Red Team, pero existen muchas protecciones por detrás que pueden ayudar a seguir protegiendo el equipo. ¿Qué quiero decir? Que no es el fin del mundo hacer un bypass de esto, pero que ayuda y que, por supuesto, la gente de IT debe proteger y restringir ciertas acciones mediante un buen uso de la política de grupo.
Figura 2: Hacking avanzado en el Red Team |
Teniendo en cuenta que en una semana son los RootedLab y donde estaré con el de Ethical Hacking y el de Offensive Powershell, pues quería mostrar el tipo de cosas que se pueden aprender en estos lab. Así que si te interesa este mundo, no dudes en pasarte por los labs y por RootedCON dónde daremos charla varios compañeros de Telefónica.
Figura 3: RootedLab "Offensive Powershell" |
El investigador que ha publicado la técnica indica que lo ha probado en Microsoft Windows 7 y Microsoft Windows 10. Como parte del trabajo en Hacking Windows, yo lo he probado en Windows 10 con buen resultado, aunque la pantalla puede provocar algún “tembleque” hasta que se carga correctamente el hive de registro.
¿En qué consiste todo esto?
La técnica consiste en aprovecharse de la forma en que se carga el registro, en particular el hive HKCU, al iniciar sesión en el equipo. Cuando el usuario inicia sesión se cargan ajustes desde la rama HKEY_CURRENT_USER. Este hive contiene ajustes relacionados con el usuario y aplicaciones que se relacionarán con él. Este hive es un archivo que se puede encontrar en la siguiente ruta: %USERPROFILE%\ntuser.dat. Cuando se inicia sesión, el servicio de perfiles de usuario utiliza NtLoadKeyEx para cargar el hive en el registro.
Figura 4: Libro de Hacking Windows |
¿Y si quieres cambiar algo en la clave del registro durante el inicio de sesión? Pues hay que pasar por las APIs de Microsoft que comprobarán los permisos de las claves que se quieren modificar. Como dijo David, el investigador que descubrió el truco, es un mini sistema de archivos.
¿Dónde está el problema?
Con ProcMon (y boot logging activo) se puede ver que el servicio ProfSvc comprueba si existe %USERPROFILE%\ntuser.man, antes de cargar el fichero ntuser.dat. Esto nos debe sonar mucho de la parte de los bypasses de UAC o de la técnica DLL Hijacking.
Uno se puede preguntar, ¿qué es ntuser.man? Es un archivo similar a ntuser.dat o, a efectos prácticos, igual. La diferencia sería que se utiliza cuando se requiere un perfil obligatorio. En %USERPROFILE% el usuario puede escribir, por lo que podrá escribir el fichero ntuser.man que mejor le interese para conseguir el bypass de la política que le marquen. Como se puede ver, la idea es sencilla. Los pasos serían:
1. Crear el hive ntuser.man
2. Añadir o eliminar las políticas clave/valor que se quieran del hive
3. Mover el archivo a la ruta %USERPROFILE%
4. Salir de la sesión y volver a iniciarlaEl bypass parece sencillo, pero no lo es tanto. Las políticas se sincronizan y se vuelven a aplicar al inicio de sesión o en intervalos regulares. Si se intenta evitar la anulación eliminando la rama SYSTEM o SISTEMA de la ACL de nuestra clave, el cliente de GPO de Windows detectará esta situación y corregirá la ACL. Es decir, recuperará los permisos de escritura y volverá a escribir la configuración de la política de grupo.
El cliente de política de grupo de Windows o GpSvc se ejecuta y encuentra una subclave en el hive llamado “Políticas” o Policies. Entonces llama a una función interna denominada ForceRegCreateKeyEx, la cual intenta abrir una de las subclaves de políticas con permisos de escritura, si falla, llama a AddPolicyPermissionOnKey para que tome la propiedad de la clave y restaure “SISTEMA” con permisos de escritura en la clave. Luego se reabre la clave y se sobrescriben las entradas de la política de grupo.
Entonces, David vio que la rutina AddPolicyPermissionOnKey modificaba la ACL de la subclave para agregar a SYSTEM, pero no eliminaba ninguna entrada de la ACL existente. Esto quiere decir que si se estable una entrada explícita para denegar los permisos de escritura de SYSTEM, entonces se bloquea a SYSTEM y no podrá obtener los permisos necesarios para restablecer la política de grupo.
Después de la teoría, vamos con los ejemplos
En la presentación de la técnica se mostraba un ejemplo con el Task Manager (administrador de tareas). Para el artículo he realizado el mismo ejemplo, pero también añadiendo la prohibición de la ejecución de un CMD por parte de un usuario por GPO (que es típico de encontrar por ahí). El primer ejemplo, se puede habilitar de la siguiente forma, a través del MMC y las GPO:
Figura 5: Habilitar GPO para eliminar el Task Manager |
En la ruta System (sin entrar en Ctrl+Alt+Del Options) se puede encontrar la directiva para bloquear la ejecución de un CMD. El resultado es que el "Administrador de Tareas" no está accesible para el usuario y que el CMD queda bloqueado como puede verse en la siguiente imagen.
Figura 6: Task Manager está deshabilitado |
Ahora empezamos con la creación del fichero ntuser.man. Lo primero es conseguir uno de un Windows con la misma versión, esto es importante. Se puede copiar de un usuario que esté “no conectado”, es decir, no haya iniciado sesión. Una vez se tiene un archivo copiado de ntuser.dat, lo podemos “abrir” con el registro de Windows. Abrimos con regedit.exe y en el menú "Archivo" podemos encontrar la opción Cargar hive. Una vez cargamos el hive, en el ejemplo lo hemos hecho sobre HKEY_LOCAL_MACHINE, le ponemos un nombre y podemos modificar todo lo necesario.
Lo primero es cambiar los permisos sobre la raíz, para que haya un control total, por parte del usuario “todos”, sobre todas las subclaves que hay debajo de la raíz. Hay que recordar que, aunque lo he llamado “poc”, esa clave y su jerarquía corresponde con el HKEY_CURRENT_USER que queremos “emular” para conseguir el bypass de las políticas de grupo GPO.
Figura 7: Cambio de permisos sobre "poc" |
Ahora, hay que llegar a \Software\Microsoft\Windows\CurrentVersion\Policies. En función de la política que se quiera sobrescribir o añadir, se necesitará encontrar la subclave correspondiente. En el caso del administrador de tareas y del CMD la clave es \Software\Microsoft\Windows\CurrentVersion\Policies\System. La subclave System es donde añadiremos la regla DENY para lograr que SYSTEM no tenga privilegios de escritura/creación. De esta forma se logra el bypass.
Figura 8: Se mueve el fichero ntuser.man al %USERPROFILE% |
Por último, se mueve el fichero ntuser.man a la ruta %USERPROFILE% y se puede cerrar e iniciar sesión de nuevo, tal y como se ve en la Figura 8.
Figura 9: Task Manager vuelve a estar disponible |
El resultado es que volvemos a tener “Task Manager” y que la CMD vuelve a estar disponible.
Figura 10: CMD vuelve a estar disponible |
Es un buen truco que cualquier pentester debe llevar consigo en la mochila para las auditorías y proyectos de hacking ético. Estos trucos dan un valor añadido a la figura del pentester. Recordad probarlo en un entorno controlado por vosotros, ya que puede causar inestabilidad en el sistema si se aplica incorrectamente.
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", “Pentesting con Powershell” y de "Empire: Hacking Avanzado en el Red Team", Microsoft MVP en Seguridad y Security Researcher en el equipo de "Ideas Locas" de la unidad CDCO de Telefónica. Para consultas puedes usar el Buzón Público para contactar con Pablo González
Figura 11: Contactar con Pablo González |
No hay comentarios:
Publicar un comentario