La enumeración es la fase en la que el auditor recopila información detallada y específica sobre el entorno, como usuarios, grupos, recursos compartidos, servicios de red, y demás configuraciones. El objetivo es identificar puertas de entrada y debilidades que puedan ser explotadas en fases posteriores de la auditoría.
Ahora que sabemos lo que es la enumeración recordemos que Directorio Activo (AD) es un sistema de directorio jerárquico desarrollado por Microsoft, que permite gestionar de forma centralizada usuarios, equipos, impresoras y políticas de seguridad dentro de un dominio. El Controlador de Dominio (DC) almacena esta base de datos y controla la autenticación y autorización.
En este artículo hablaremos sobre la enumeración sin credenciales o enumeración externa dónde se verán las tecnologías y servicios que tienen las máquinas que forman el dominio y la enumeración con credenciales, es decir una enumeración dentro del Directorio Activo, dónde se verá la estructura y las características de éste.
La enumeración sin credenciales en el Directorio Activo permite detectar qué información es visible para un atacante sin acceso previo. Es clave para identificar configuraciones inseguras y los posibles fallos que pueda haber de configuración.
Lo primero que haremos es escanear la red en busca de puertos clave con herramientas como Nmap. Los puertos más interesantes son los puertos relacionados con servicios de Directorio Activo como DNS (53), Kerberos (88), RPC (135), LDAP (389 y 636), SMB (445), Kerberos kpasswd (464), el Global Catalog (3268 y 3269), y RDP (3389). Detectar estos servicios puede ayudarnos a identificar Controladores de Dominio activos. No obstante, el recolectar información sobre otros servicios, siempre puede ser útil porque, aunque no correspondan a servicios del AD, siempre pueden ser vulnerables y una entrada para los atacantes.
Una vez localizados los puertos, pasaremos a interactuar con los servicios que hemos descubierto, un inicio lógico pueden ser los servicios de SMB y RPC, ya que muchas veces están configurados para responder sin necesidad de autenticación.
Con Smbclient podemos listar recursos compartidos que estén abiertos al acceso anónimo. También se puede usar Rpcclient para consultar información del dominio, con comandos que nos permiten listar usuarios y políticas de contraseñas sin necesita de contar con credenciales.
Para agilizar esta recolección de datos, podemos recurrir a herramientas automatizadas. Enum4linux-ng, por ejemplo, ofrece un escaneo bastante completo del dominio a través de SMB. CrackMapExec y NetExec son especialmente útiles para obtener información sobre recursos compartidos, usuarios, y configuraciones de contraseñas en los servicios SMB. También se puede usar Smbmap para visualizar qué recursos están disponibles sin necesidad de autenticarse, lo que puede revelar información valiosa sobre la estructura del sistema de archivos compartidos.
Otra técnica muy efectiva es el RID Cycling, que consiste en enumerar usuarios del dominio basándose en sus identificadores relativos (RIDs). Esta prueba puede ser realizada con NetExec o CrackMapExec para descubrir cuentas activas del dominio sin tener credenciales.
Cuando encontramos puertos LDAP abiertos, se pueden usar herramientas como ldapsearch para consultar información básica del directorio como los namingContexts, lo que nos da una visión general de la estructura del dominio y las unidades organizativas.
Además de LDAP, también podemos aprovechar el servicio Kerberos. Con Kerbrute se pueden hacer ataques de enumeración de usuarios, spraying de contraseñas, y búsqueda de cuentas vulnerables a AS-REP Roasting. Si se lograra obtener hashes Kerberos de usuarios sin preautenticación, se guardarían e intentarían crackear con hashcat utilizando distintos diccionarios.
Utilizando estas técnicas, sin tener credenciales, podemos construir una imagen bastante completa del entorno, identificar objetivos prioritarios y, en algunos casos, conseguir un acceso inicial dentro del Directorio Activo. Esta fase de reconocimiento es fundamental para preparar cualquier movimiento posterior dentro de una red de Windows.
En cuanto a la enumeración con credenciales se presentan dos situaciones bien diferenciadas. La primera, en la se haya obtenido un usuario a través de ataques realizados durante una auditoría de seguridad. Y la segunda, partiendo de un usuario proporcionado por el cliente, lo que llamamos el “asumir brecha”.
Las pruebas realizadas y sus resultados durante este apartado estarán sujetas al rol o nivel de permisos del usuario obtenido, ya que la información que se puede obtener enumerando no es la misma viniendo de un usuario básico, que de un administrador local o incluso el administrador de Dominio.
En este artículo, nos centraremos en la enumeración que puede realizar un usuario básico y en algún caso, un administrador local.
Para realizar esta enumeración existe un gran número de herramientas, pero nosotros nos basaremos en lo que pueden hacer los scripts de PowerView, ADModule y finalmente hablaremos brevemente de Bloodhound.
Antes de realizar las pruebas es necesario entender los scripts que vamos a utilizar. Tanto Powerview como ADModule son módulos PowerShell (.ps1) servirán para realizar consultas que nos proporcionen información del Directorio Activo, del equipo o de los usuarios configurados en dichas máquinas.
Para poder hacer estas consultas tendremos que, primero subir los archivos .ps1 e importarlos en la máquina a la que tengamos acceso dentro del Directorio Activo. Este proceso viene explicado en cada uno de los GitHubs de las herramientas.
Una vez importados podríamos empezar a enumerar. Empezaremos haciendo una búsqueda de la información básica del propio Dominio, por ejemplo, buscando su nombre y sus características principales además de identificadores como el GUID y el SID. Miramos también si el Dominio pertenece a un bosque.
También enumeraremos las características del Directorio Activo, una búsqueda del controlador del dominio, sus políticas de Seguridad, etc. También es ideal el análisis de las Relaciones de Confianza a nivel del Dominio y Bosque.
Luego se enumerarían los usuarios del dominio y sus propiedades. Aquí podríamos buscar un usuario concreto o algún grupo, estas búsquedas sirven tanto para conocer los detalles del usuario que hemos obtenido durante la auditoría, los grupos a los que pertenece junto con las características de estos o sus permisos, lo que nos permite identificar que opciones o ataques podrían llegar a hacerse con los usuarios capturados.
También es interesante buscar usuarios pertenecientes al grupo de Administradores de Dominio, ya que se tratan de usuarios críticos con los que podría comprometer la plataforma. Se puede, además, realizar la búsqueda de las políticas de grupos del dominio (GPOs) y su identificador, siendo la más importante la del grupo 'Domain Admins'.
Otra tarea de enumeración esencial podría ser búsqueda de ‘objetivos importantes’, como “shares”, archivos sensibles expuestos o servidores de archivos dentro del Directorio Activo.
Aunque hasta ahora se haya hablado únicamente sobre enumeración del Dominio, no sólo se debe enumerar y buscar en la máquina inicial sino también en las máquinas a las que puede acceder. Esto es importante ya que un usuario puede no tener privilegios en una máquina, pero pertenecer a grupos locales con mayores privilegios y capacidad de acción en otras máquinas del dominio. Un usuario sin permisos sigue siendo de utilidad para escalar si comparte máquina con usuarios que los tengan, estos usuarios podrán ser objetivos para atacar en las siguientes fases de la auditoría logrando así una escalada de privilegios.
Otro apartado importante de la enumeración son las ACL (Access Control List) que son una lista de las ACE (Access Control Entities) que corresponden al permiso o acceso de un objeto, es decir determinan qué objetos tienen permisos sobre otro objeto del Directorio Activo (recordemos que, en el Directorio Activo, todo son objetos, tanto máquinas como usuarios, grupos, etc.).
Por último, podríamos hablar del User Hunting que es el descubrimiento de los administradores locales en cada máquina, las máquinas en las que nuestro usuario es administrador local o las sesiones abiertas en cada máquina del Directorio Activo.
Una vez acabada la enumeración a través de estos scripts podemos utilizar Bloodhound que es una herramienta de mapeo del Directorio Activo. Y su funcionamiento es el siguiente, primero hará una serie de consultas al Dominio haciendo así ‘una foto' del estado que tiene en el momento en el que se lanza, esto generará una serie de archivos que contienen la información sobre los objetos del dominio y las relaciones que tienen entre sí. Una vez generados estos archivos, estos tendrán que subirse a una base de datos creada por el propio Bloodhound.
En esta base de datos podremos hacer una serie de querys sobre el estado y las características del Directorio Activo, por ejemplo, mirar cuantos Administradores del Dominio hay, las máquinas del dominio que estén descatalogadas o que usuarios tienen acceso a que máquinas o los grupos a los que pertenecen entre otras opciones. Pero lo más interesante de Bloodhound es que este representará estas consultas en forma de gráficos con los que podremos interactuar, obteniendo así una imagen mucho más clara del Directorio Activo.
Es necesario tener en cuenta que la cantidad de información que obtiene Bloodhound depende enteramente de los permisos del usuario con el que se lance la herramienta, teniendo más visibilidad y haciendo una ‘foto’ más completa cuantos más permisos tenga el usuario con la que se haya lanzado, siempre verá más un Domain Admin que un usuario sin privilegios.
Reiterando lo escrito al inicio del artículo, la importancia de la enumeración es vital dentro de una auditoría, siendo esta parte la que forma los cimientos sobre los cuales se realizarán el resto de pruebas. Conocer el entorno que auditamos y sus detalles hace que los siguientes pasos dentro de nuestro trabajo sean mucho más sencillos, eficaces y por tanto mejores.
Internet Security Auditors cuenta con especialistas en Red Team y Pentest Interno y a través de los cuales podrá obtener un nivel de seguridad de su Directorio Activo y un planteamiento de mejoras para el entorno.
Bibliografía y enlaces útiles a la hora de realizar la enumeración del directorio activo:
Ahora que sabemos lo que es la enumeración recordemos que Directorio Activo (AD) es un sistema de directorio jerárquico desarrollado por Microsoft, que permite gestionar de forma centralizada usuarios, equipos, impresoras y políticas de seguridad dentro de un dominio. El Controlador de Dominio (DC) almacena esta base de datos y controla la autenticación y autorización.
En este artículo hablaremos sobre la enumeración sin credenciales o enumeración externa dónde se verán las tecnologías y servicios que tienen las máquinas que forman el dominio y la enumeración con credenciales, es decir una enumeración dentro del Directorio Activo, dónde se verá la estructura y las características de éste.
La enumeración sin credenciales en el Directorio Activo permite detectar qué información es visible para un atacante sin acceso previo. Es clave para identificar configuraciones inseguras y los posibles fallos que pueda haber de configuración.
Lo primero que haremos es escanear la red en busca de puertos clave con herramientas como Nmap. Los puertos más interesantes son los puertos relacionados con servicios de Directorio Activo como DNS (53), Kerberos (88), RPC (135), LDAP (389 y 636), SMB (445), Kerberos kpasswd (464), el Global Catalog (3268 y 3269), y RDP (3389). Detectar estos servicios puede ayudarnos a identificar Controladores de Dominio activos. No obstante, el recolectar información sobre otros servicios, siempre puede ser útil porque, aunque no correspondan a servicios del AD, siempre pueden ser vulnerables y una entrada para los atacantes.
Una vez localizados los puertos, pasaremos a interactuar con los servicios que hemos descubierto, un inicio lógico pueden ser los servicios de SMB y RPC, ya que muchas veces están configurados para responder sin necesidad de autenticación.
Con Smbclient podemos listar recursos compartidos que estén abiertos al acceso anónimo. También se puede usar Rpcclient para consultar información del dominio, con comandos que nos permiten listar usuarios y políticas de contraseñas sin necesita de contar con credenciales.
Para agilizar esta recolección de datos, podemos recurrir a herramientas automatizadas. Enum4linux-ng, por ejemplo, ofrece un escaneo bastante completo del dominio a través de SMB. CrackMapExec y NetExec son especialmente útiles para obtener información sobre recursos compartidos, usuarios, y configuraciones de contraseñas en los servicios SMB. También se puede usar Smbmap para visualizar qué recursos están disponibles sin necesidad de autenticarse, lo que puede revelar información valiosa sobre la estructura del sistema de archivos compartidos.
Otra técnica muy efectiva es el RID Cycling, que consiste en enumerar usuarios del dominio basándose en sus identificadores relativos (RIDs). Esta prueba puede ser realizada con NetExec o CrackMapExec para descubrir cuentas activas del dominio sin tener credenciales.
Cuando encontramos puertos LDAP abiertos, se pueden usar herramientas como ldapsearch para consultar información básica del directorio como los namingContexts, lo que nos da una visión general de la estructura del dominio y las unidades organizativas.
Además de LDAP, también podemos aprovechar el servicio Kerberos. Con Kerbrute se pueden hacer ataques de enumeración de usuarios, spraying de contraseñas, y búsqueda de cuentas vulnerables a AS-REP Roasting. Si se lograra obtener hashes Kerberos de usuarios sin preautenticación, se guardarían e intentarían crackear con hashcat utilizando distintos diccionarios.
Utilizando estas técnicas, sin tener credenciales, podemos construir una imagen bastante completa del entorno, identificar objetivos prioritarios y, en algunos casos, conseguir un acceso inicial dentro del Directorio Activo. Esta fase de reconocimiento es fundamental para preparar cualquier movimiento posterior dentro de una red de Windows.
En cuanto a la enumeración con credenciales se presentan dos situaciones bien diferenciadas. La primera, en la se haya obtenido un usuario a través de ataques realizados durante una auditoría de seguridad. Y la segunda, partiendo de un usuario proporcionado por el cliente, lo que llamamos el “asumir brecha”.
Las pruebas realizadas y sus resultados durante este apartado estarán sujetas al rol o nivel de permisos del usuario obtenido, ya que la información que se puede obtener enumerando no es la misma viniendo de un usuario básico, que de un administrador local o incluso el administrador de Dominio.
En este artículo, nos centraremos en la enumeración que puede realizar un usuario básico y en algún caso, un administrador local.
Para realizar esta enumeración existe un gran número de herramientas, pero nosotros nos basaremos en lo que pueden hacer los scripts de PowerView, ADModule y finalmente hablaremos brevemente de Bloodhound.
Antes de realizar las pruebas es necesario entender los scripts que vamos a utilizar. Tanto Powerview como ADModule son módulos PowerShell (.ps1) servirán para realizar consultas que nos proporcionen información del Directorio Activo, del equipo o de los usuarios configurados en dichas máquinas.
Para poder hacer estas consultas tendremos que, primero subir los archivos .ps1 e importarlos en la máquina a la que tengamos acceso dentro del Directorio Activo. Este proceso viene explicado en cada uno de los GitHubs de las herramientas.
Una vez importados podríamos empezar a enumerar. Empezaremos haciendo una búsqueda de la información básica del propio Dominio, por ejemplo, buscando su nombre y sus características principales además de identificadores como el GUID y el SID. Miramos también si el Dominio pertenece a un bosque.
También enumeraremos las características del Directorio Activo, una búsqueda del controlador del dominio, sus políticas de Seguridad, etc. También es ideal el análisis de las Relaciones de Confianza a nivel del Dominio y Bosque.
Luego se enumerarían los usuarios del dominio y sus propiedades. Aquí podríamos buscar un usuario concreto o algún grupo, estas búsquedas sirven tanto para conocer los detalles del usuario que hemos obtenido durante la auditoría, los grupos a los que pertenece junto con las características de estos o sus permisos, lo que nos permite identificar que opciones o ataques podrían llegar a hacerse con los usuarios capturados.
También es interesante buscar usuarios pertenecientes al grupo de Administradores de Dominio, ya que se tratan de usuarios críticos con los que podría comprometer la plataforma. Se puede, además, realizar la búsqueda de las políticas de grupos del dominio (GPOs) y su identificador, siendo la más importante la del grupo 'Domain Admins'.
Otra tarea de enumeración esencial podría ser búsqueda de ‘objetivos importantes’, como “shares”, archivos sensibles expuestos o servidores de archivos dentro del Directorio Activo.
Aunque hasta ahora se haya hablado únicamente sobre enumeración del Dominio, no sólo se debe enumerar y buscar en la máquina inicial sino también en las máquinas a las que puede acceder. Esto es importante ya que un usuario puede no tener privilegios en una máquina, pero pertenecer a grupos locales con mayores privilegios y capacidad de acción en otras máquinas del dominio. Un usuario sin permisos sigue siendo de utilidad para escalar si comparte máquina con usuarios que los tengan, estos usuarios podrán ser objetivos para atacar en las siguientes fases de la auditoría logrando así una escalada de privilegios.
Otro apartado importante de la enumeración son las ACL (Access Control List) que son una lista de las ACE (Access Control Entities) que corresponden al permiso o acceso de un objeto, es decir determinan qué objetos tienen permisos sobre otro objeto del Directorio Activo (recordemos que, en el Directorio Activo, todo son objetos, tanto máquinas como usuarios, grupos, etc.).
Por último, podríamos hablar del User Hunting que es el descubrimiento de los administradores locales en cada máquina, las máquinas en las que nuestro usuario es administrador local o las sesiones abiertas en cada máquina del Directorio Activo.
Una vez acabada la enumeración a través de estos scripts podemos utilizar Bloodhound que es una herramienta de mapeo del Directorio Activo. Y su funcionamiento es el siguiente, primero hará una serie de consultas al Dominio haciendo así ‘una foto' del estado que tiene en el momento en el que se lanza, esto generará una serie de archivos que contienen la información sobre los objetos del dominio y las relaciones que tienen entre sí. Una vez generados estos archivos, estos tendrán que subirse a una base de datos creada por el propio Bloodhound.
En esta base de datos podremos hacer una serie de querys sobre el estado y las características del Directorio Activo, por ejemplo, mirar cuantos Administradores del Dominio hay, las máquinas del dominio que estén descatalogadas o que usuarios tienen acceso a que máquinas o los grupos a los que pertenecen entre otras opciones. Pero lo más interesante de Bloodhound es que este representará estas consultas en forma de gráficos con los que podremos interactuar, obteniendo así una imagen mucho más clara del Directorio Activo.
Es necesario tener en cuenta que la cantidad de información que obtiene Bloodhound depende enteramente de los permisos del usuario con el que se lance la herramienta, teniendo más visibilidad y haciendo una ‘foto’ más completa cuantos más permisos tenga el usuario con la que se haya lanzado, siempre verá más un Domain Admin que un usuario sin privilegios.
Reiterando lo escrito al inicio del artículo, la importancia de la enumeración es vital dentro de una auditoría, siendo esta parte la que forma los cimientos sobre los cuales se realizarán el resto de pruebas. Conocer el entorno que auditamos y sus detalles hace que los siguientes pasos dentro de nuestro trabajo sean mucho más sencillos, eficaces y por tanto mejores.
Internet Security Auditors cuenta con especialistas en Red Team y Pentest Interno y a través de los cuales podrá obtener un nivel de seguridad de su Directorio Activo y un planteamiento de mejoras para el entorno.
Bibliografía y enlaces útiles a la hora de realizar la enumeración del directorio activo:
- Domain Enumeration | Hacking Notes
- GitHub - S1ckB0y1337/Active-Directory-Exploitation-Cheat-Sheet: A cheat sheet that contains common enumeration and attack methods for Windows Active Directory.
- How to Enumerate Active Directory in Ethical Hacking | by S3Curiosity | Medium
- bloodhound | Kali Linux Tools
- PowerSploit/Recon/PowerView.ps1 at master · PowerShellMafia/PowerSploit · GitHub
- GitHub - samratashok/ADModule: Microsoft signed ActiveDirectory PowerShell module
- GitHub - ropnop/kerbrute: A tool to perform Kerberos pre-auth bruteforcing
- nmap | Kali Linux Tools
- GitHub - byt3bl33d3r/CrackMapExec: A swiss army knife for pentesting networks
- netexec | Kali Linux Tools
- GitHub - sqlmapproject/sqlmap: Automatic SQL injection and database takeover tool
✒️Autores:
Carlos Mayor Analista de Seguridad Depto. de Auditoría |
Héctor Berrocal CEH, MCP, CCNA, eJPT, ITIL Analista de Seguridad Depto. de Auditoría |