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.
|
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.
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:
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 iniciarla
El
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