Enumerating Active Directory
Última actualización
Última actualización
Antes de pasar a los objetos AD y la enumeración, hablemos primero sobre los métodos de inyección de credenciales. Desde la red Breaching AD, habrás visto que las credenciales a menudo se encuentran sin comprometer una máquina unida a un dominio. Es posible que técnicas de enumeración específicas requieran una configuración particular para funcionar.
"Si conoces al enemigo y te conoces a ti mismo, no debes temer los resultados de cien batallas. Si te conoces a ti mismo pero no al enemigo, por cada victoria obtenida también sufrirás una derrota". - Sun Tzu, El arte de la guerra.
Puede llegar increíblemente lejos realizando la enumeración de AD desde una máquina Kali. Aún así, si realmente quieres hacer una enumeración profunda e incluso explotarlo, necesitas comprender e imitar a tu enemigo. Por lo tanto, necesita una máquina con Windows. Esto nos permitirá utilizar varios métodos integrados para preparar nuestra enumeración y exploits. En esta red, exploraremos una de estas herramientas integradas, llamada binariarunas.exe
.
¿Alguna vez encontró credenciales de AD pero no pudo iniciar sesión con ellas? ¡Runas puede ser la respuesta que has estado buscando!
En las evaluaciones de seguridad, a menudo tendrá acceso a la red y acaba de descubrir las credenciales de AD , pero no tendrá medios ni privilegios para crear una nueva máquina unida a un dominio. Por lo tanto, necesitamos la capacidad de usar esas credenciales en una máquina con Windows que controlemos.
Si tenemos las credenciales de AD en el formato de:, podemos usar Runas, un binario legítimo de Windows, para inyectar las credenciales en la memoria. El comando habitual de Runas se vería así:
Veamos los parámetros:
/netonly : dado que no estamos unidos a un dominio, queremos cargar las credenciales para la autenticación de red pero no autenticarnos contra un controlador de dominio. Por lo tanto, los comandos ejecutados localmente en la computadora se ejecutarán en el contexto de su cuenta estándar de Windows, pero cualquier conexión de red se realizará utilizando la cuenta especificada aquí.
/usuario : aquí proporcionamos los detalles del dominio y el nombre de usuario. Siempre es una apuesta segura utilizar el nombre de dominio completo (FQDN) en lugar de sólo el nombre NetBIOS del dominio, ya que esto ayudará con la resolución.
cmd.exe : este es el programa que queremos ejecutar una vez inyectadas las credenciales. Esto se puede cambiar a cualquier cosa, pero la apuesta más segura es cmd.exe, ya que luego puedes usarlo para iniciar lo que quieras, con las credenciales inyectadas.
Una vez que ejecute este comando, se le pedirá que proporcione una contraseña. Tenga en cuenta que, dado que agregamos el parámetro /netonly, un controlador de dominio no verificará las credenciales directamente para que acepte cualquier contraseña. Aún necesitamos confirmar que las credenciales de red se cargaron exitosa y correctamente.
Nota: Si utiliza su propia máquina con Windows, debe asegurarse de ejecutar su primer símbolo del sistema como administrador. Esto inyectará un token de administrador en CMD. Si ejecuta herramientas que requieren privilegios administrativos locales desde su CMD generado por Runas, el token ya estará disponible. Esto no le otorga privilegios administrativos en la red, pero garantizará que cualquier comando local que ejecute se ejecutará con privilegios administrativos.
Nota: Estos siguientes pasos solo debes realizarlos si utilizas tu propia máquina con Windows para el ejercicio. Sin embargo, es un buen conocimiento aprender cómo actuar, ya que puede resultar útil en los ejercicios del equipo rojo.
Después de proporcionar la contraseña, se abrirá una nueva ventana del símbolo del sistema. Ahora todavía necesitamos verificar que nuestras credenciales estén funcionando. La forma más segura de hacerlo es incluir SYSVOL. Cualquier cuenta AD , sin importar sus privilegios, puede leer el contenido del directorio SYSVOL.
SYSVOL es una carpeta que existe en todos los controladores de dominio. Es una carpeta compartida que almacena los objetos de política de grupo (GPO) y la información junto con cualquier otro script relacionado con el dominio. Es un componente esencial para Active Directory ya que entrega estos GPO a todas las computadoras del dominio. Las computadoras unidas a un dominio pueden luego leer estos GPO y aplicar los correspondientes, realizando cambios de configuración en todo el dominio desde una ubicación central.
Antes de que podamos incluir SYSVOL, debemos configurar nuestro DNS . A veces tienes suerte y el DNS interno se configurará automáticamente a través de DHCP o la conexión VPN, pero no siempre (como esta red TryHackMe). Es bueno entender cómo hacerlo manualmente. Su apuesta más segura para un servidor DNS suele ser un controlador de dominio. Usando la IP del controlador de dominio, podemos ejecutar los siguientes comandos en una ventana de PowerShell:
Por supuesto, 'Ethernet' será cualquier interfaz conectada a la red TryHackMe. Podemos verificar que DNS esté funcionando ejecutando lo siguiente:
Lo que ahora debería resolverse en la IP del DC , ya que aquí es donde se aloja el FQDN. Ahora que DNS está funcionando, finalmente podemos probar nuestras credenciales. Podemos usar el siguiente comando para forzar una lista basada en red del directorio SYSVOL:
No profundizaremos demasiado en el contenido de SYSVOL, pero tenga en cuenta que también es bueno enumerar su contenido, ya que puede haber algunas credenciales de AD adicionales escondidas allí.
Pregunta: ¿Existe alguna diferencia entre _dir \\za.tryhackme.com\SYSVOL
y dir \\<DC IP>\SYSVOL
_por qué tanto alboroto por el DNS?
Hay una gran diferencia y se reduce al método de autenticación que se utiliza. Cuando proporcionamos el nombre de host, la autenticación de red intentará primero realizar la autenticación Kerberos . Dado que la autenticación Kerberos utiliza nombres de host integrados en los tickets, si proporcionamos la IP, podemos forzar que el tipo de autenticación sea NTLM. Si bien en apariencia esto no nos importa en este momento, es bueno comprender estas pequeñas diferencias, ya que pueden permitirte permanecer más sigiloso durante una evaluación del equipo Rojo. En algunos casos, las organizaciones estarán monitoreando los ataques OverPass y Pass-The-Hash. Forzar la autenticación NTLM es un buen truco para evitar la detección en estos casos.
Ahora que hemos inyectado nuestras credenciales de AD en la memoria, aquí es donde comienza la diversión. Con la opción /netonly, todas las comunicaciones de red utilizarán estas credenciales inyectadas para la autenticación. Esto incluye todas las comunicaciones de red de las aplicaciones ejecutadas desde esa ventana del símbolo del sistema.
Presione Inicio
Busque "Aplicaciones y funciones" y presione Intro
Haga clic en Administrar funciones opcionales
Haga clic en Agregar una característica
Buscar "RSAT"
Seleccione " RSAT: Servicios de dominio de Active Directory y herramientas de directorio ligeras" y haga clic en Instalar
Puede iniciar MMC usando el botón Inicio de Windows, buscando ejecutar y escribiendo MMC. Si ejecutamos MMC normalmente, no funcionará ya que nuestra computadora no está unida a un dominio y nuestra cuenta local no se puede usar para autenticarse en el dominio.
Aquí es donde entra en juego la ventana Runas de la tarea anterior. En esa ventana, podemos iniciar MMC, lo que garantizará que todas las conexiones de red MMC utilicen nuestras credenciales de AD inyectadas .
En MMC, ahora podemos adjuntar el complemento AD RSAT:
Haga clic en Archivo -> Agregar o quitar complemento
Seleccione y agregue los tres complementos de Active Directory
Haga clic en los errores y advertencias.
Haga clic derecho en Dominios y confianzas de Active Directory y seleccione Cambiar bosque
Ingrese za.tryhackme.com como dominio raíz y haga clic en Aceptar
Haga clic derecho en Sitios y servicios de Active Directory y seleccione Cambiar bosque
Ingrese za.tryhackme.com como dominio raíz y haga clic en Aceptar
Haga clic derecho en Usuarios y computadoras de Active Directory y seleccione Cambiar dominio
Ingrese za.tryhackme.com como dominio y haga clic en Aceptar
Haga clic derecho en Usuarios y computadoras de Active Directory en el panel izquierdo
Haga clic en Ver -> Funciones avanzadas
Si todo hasta este punto funcionó correctamente, su MMC ahora debería apuntar y autenticarse en el dominio de destino:
Ahora podemos comenzar a enumerar información sobre la estructura AD aquí.
Echemos un vistazo a la estructura de Active Directory. Para esta tarea, nos centraremos en los usuarios y las computadoras de AD . Expanda ese complemento y expanda el dominio za para ver la estructura de unidad organizativa (OU) inicial:
Echemos un vistazo al directorio de Personas. Aquí vemos que los usuarios se dividen según las unidades organizativas del departamento. Al hacer clic en cada una de estas OU se mostrarán los usuarios que pertenecen a ese departamento.
Al hacer clic en cualquiera de estos usuarios nos permitirá revisar todas sus propiedades y atributos. También podemos ver a qué grupos pertenece:
También podemos usar MMC para encontrar hosts en el entorno. Si hacemos clic en Servidores o Estaciones de trabajo, se mostrará la lista de máquinas unidas al dominio.
Si tuviéramos los permisos pertinentes, también podríamos usar MMC para realizar cambios directamente en AD , como cambiar la contraseña del usuario o agregar una cuenta a un grupo específico. Experimente con MMC para comprender mejor la estructura del dominio AD. Utilice la función de búsqueda para buscar objetos.
La GUI proporciona un método excelente para obtener una visión holística del entorno de AD.
Se puede realizar una búsqueda rápida de diferentes objetos AD .
Proporciona un método directo para ver actualizaciones específicas de objetos AD .
Si tenemos privilegios suficientes, podemos actualizar directamente los objetos AD existentes o agregar otros nuevos.
La GUI requiere acceso RDP a la máquina donde se ejecuta.
Aunque la búsqueda de un objeto es rápida, no se pueden recopilar propiedades o atributos de todo AD .
Hay ocasiones en las que solo necesita realizar una búsqueda rápida y sucia de AD , y el símbolo del sistema lo respalda. El buen y confiable CMD es útil cuando quizás no tenga acceso RDP a un sistema, los defensores están monitoreando el uso de PowerShell y necesita realizar su enumeración de AD a través de un troyano de acceso remoto (RAT). Incluso puede resultar útil incorporar un par de comandos simples de enumeración de AD en su carga útil de phishing para ayudarle a obtener información vital que le ayudará a preparar el ataque final.
CMD tiene un comando incorporado que podemos usar para enumerar información sobre AD , es decirnet
. El net
comando es una herramienta útil para enumerar información sobre el sistema local y AD . Veremos un par de cosas interesantes que podemos enumerar desde esta posición, pero esta no es una lista exhaustiva.
Nota: Para esta tarea tendrás que usar THMJMP1 y no podrás usar tu propia máquina virtual de Windows . Esto se explicará en los inconvenientes.
Podemos usar el net
comando para enumerar todos los usuarios en el dominio AD usando lauser
subopción:
Esto nos devolverá todos los usuarios de AD y puede ser útil para determinar el tamaño del dominio para realizar más ataques. También podemos usar esta subopción para enumerar información más detallada sobre una única cuenta de usuario:
Nota: Si el usuario solo forma parte de una pequeña cantidad de grupos de AD , este comando podrá mostrarnos membresías de grupos. Sin embargo, normalmente, después de más de diez membresías en grupos, el comando no podrá enumerarlos a todos.
Podemos usar el net
comando para enumerar los grupos del dominio usando la group
subopción:
Esta información puede ayudarnos a encontrar grupos específicos a los que dirigirnos para la ejecución de objetivos. También podríamos enumerar más detalles, como la pertenencia a un grupo, especificando el grupo en el mismo comando:
Podemos usar el net
comando para enumerar la política de contraseñas del dominio usando la accounts
subopción:
Esto nos proporcionará información útil como:
Duración del historial de contraseñas conservado. Es decir, cuántas contraseñas únicas debe proporcionar el usuario antes de poder reutilizar una contraseña anterior.
El umbral de bloqueo para intentos de contraseña incorrectos y durante cuánto tiempo estará bloqueada la cuenta.
La longitud mínima de la contraseña.
La edad máxima que pueden alcanzar las contraseñas indica si las contraseñas deben rotarse a intervalos regulares.
Esta información puede beneficiarnos si queremos realizar ataques adicionales de pulverización de contraseñas contra las otras cuentas de usuario que hemos enumerado. Puede ayudarnos a adivinar mejor qué contraseñas únicas debemos usar en el ataque y cuántos ataques podemos ejecutar antes de correr el riesgo de bloquear cuentas. Sin embargo, cabe señalar que si realizamos un ataque de distribución ciega de contraseñas, podemos bloquear cuentas de todos modos, ya que no verificamos cuántos intentos le quedaron a esa cuenta específica antes de ser bloqueada.
No se requieren herramientas adicionales o externas y el equipo azul a menudo no supervisa estos comandos simples.
No necesitamos una GUI para hacer esta enumeración.
VBScript y otros lenguajes de macros que se utilizan a menudo para cargas útiles de phishing admiten estos comandos de forma nativa, por lo que pueden usarse para enumerar información inicial sobre el dominio AD antes de que se diseñen cargas útiles más específicas.
Los net
comandos deben ejecutarse desde una máquina unida a un dominio. Si la máquina no está unida a un dominio, de forma predeterminada utilizará el dominio WORKGROUP.
Es posible que los net
comandos no muestren toda la información. Por ejemplo, si un usuario es miembro de más de diez grupos, no todos estos grupos se mostrarán en el resultado.
Usando nuestra terminal SSH , podemos actualizarla a una terminal PowerShell usando el siguiente comando:powershell
Podemos usar el Get-ADUser
cmdlet para enumerar los usuarios de AD :
Los parámetros se utilizan para lo siguiente:
-Identidad – El nombre de la cuenta que estamos enumerando.
-Propiedades: qué propiedades asociadas con la cuenta se mostrarán, * mostrará todas las propiedades
-Servidor: como no estamos unidos a un dominio, tenemos que usar este parámetro para apuntar a nuestro controlador de dominio.
Para la mayoría de estos cmdlets, también podemos usar el -Filter
parámetro que permite un mayor control sobre la enumeración y usar el Format-Table
cmdlet para mostrar resultados como los siguientes de forma ordenada:
Podemos usar el Get-ADGroup
cmdlet para enumerar grupos de AD :
También podemos enumerar la membresía del grupo usando el Get-ADGroupMember
cmdlet:
Se puede realizar una búsqueda más genérica de cualquier objeto ADGet-ADObject
utilizando el cmdlet. Por ejemplo, si buscamos todos los objetos AD que se cambiaron después de una fecha específica:
SSH PowerShell
Si quisiéramos, por ejemplo, realizar un ataque de pulverización de contraseñas sin bloquear cuentas, podemos usar esto para enumerar las cuentas que tienen un badPwdCount mayor que 0, para evitar estas cuentas en nuestro ataque:
Esto sólo mostrará resultados si uno de los usuarios de la red escribió mal su contraseña un par de veces.
Podemos utilizar Get-ADDomain
para recuperar información adicional sobre el dominio específico:
Lo mejor de los cmdlets AD -RSAT es que algunos incluso le permiten crear objetos AD nuevos o modificar los existentes. Sin embargo, nuestro enfoque para esta red es la enumeración. Crear nuevos objetos o alterar los existentes se consideraría explotación de AD, lo cual se trata más adelante en el módulo AD.
Sin embargo, mostraremos un ejemplo de esto forzando el cambio de contraseña de nuestro usuario de AD usando elSet-ADAccountPassword
cmdlet:
Recuerde cambiar el valor de identidad y la contraseña de la cuenta que se le proporcionó para la enumeración en la página web del distribuidor en la Tarea 1.
Los cmdlets de PowerShell pueden enumerar mucha más información que los comandos net del símbolo del sistema.
Podemos especificar el servidor y el dominio para ejecutar estos comandos usando runas desde una máquina que no está unida al dominio.
Podemos crear nuestros propios cmdlets para enumerar información específica.
Podemos usar los cmdlets AD -RSAT para cambiar directamente objetos AD, como restablecer contraseñas o agregar un usuario a un grupo específico.
Los equipos azules suelen supervisar más PowerShell que el símbolo del sistema.
Tenemos que instalar las herramientas AD-RSAT o utilizar otros scripts potencialmente detectables para la enumeración de PowerShell .
Durante una cantidad significativa de tiempo, los jugadores del equipo rojo (y, desafortunadamente, los atacantes) tuvieron la ventaja. Tanto es así que Microsoft integró su propia versión de Bloodhound en su solución Advanced Threat Protection. Todo se redujo a la siguiente frase:
"Los defensores piensan en listas, los atacantes piensan en gráficos". - Desconocido
Bloodhound permitió a los atacantes (y ahora también a los defensores) visualizar el entorno AD en un formato gráfico con nodos interconectados. Cada conexión es un camino posible que podría aprovecharse para alcanzar una meta. Por el contrario, los defensores utilizaron listas, como una lista de administradores de dominio o una lista de todos los hosts del entorno.
Este pensamiento basado en gráficos abrió un mundo a los atacantes. Permitió un ataque en dos etapas. En la primera etapa, los atacantes realizarían ataques de phishing para obtener una entrada inicial para enumerar la información de AD . Esta carga útil inicial solía ser increíblemente ruidosa y el equipo azul la detectaría y la contenería antes de que los atacantes pudieran realizar cualquier acción aparte de filtrar los datos enumerados. Sin embargo, los atacantes ahora podrían utilizar estos datos fuera de línea para crear una ruta de ataque en formato gráfico, que muestre con precisión los pasos y saltos necesarios. Utilizando esta información durante la segunda campaña de phishing, los atacantes a menudo podían alcanzar su objetivo en minutos una vez que se lograba la infracción. A menudo es incluso más rápido de lo que le tomaría al equipo azul recibir su primera alerta. Este es el poder de pensar en gráficos, razón por la cual tantos equipos azules también han comenzado a utilizar este tipo de herramientas para comprender mejor su postura de seguridad.
A menudo escuchará a los usuarios referirse a Sharphound y Bloodhound indistintamente. Sin embargo, no son lo mismo. Sharphound es la herramienta de enumeración de Bloodhound. Se utiliza para enumerar la información de AD que luego se puede mostrar visualmente en Bloodhound. Bloodhound es la GUI real que se utiliza para mostrar los gráficos de ataque de AD. Por lo tanto, primero debemos aprender a usar Sharphound para enumerar AD antes de poder ver los resultados visualmente usando Bloodhound.
Hay tres coleccionistas de Sharphound diferentes:
Sharphound.ps1 : script de PowerShell para ejecutar Sharphound. Sin embargo, la última versión de Sharphound dejó de publicar la versión del script Powershell. Esta versión es buena para usar con RAT ya que el script se puede cargar directamente en la memoria, evadiendo los análisis AV en el disco.
Sharphound.exe : una versión ejecutable de Windows para ejecutar Sharphound.
AzureHound.ps1 : script de PowerShell para ejecutar instancias de Sharphound para Azure (servicios de computación en la nube de Microsoft). Bloodhound puede ingerir datos enumerados desde Azure para encontrar rutas de ataque relacionadas con la configuración de Azure Identity and Access Management.
Nota: sus versiones Bloodhound y Sharphound deben coincidir para obtener mejores resultados. Por lo general, se realizan actualizaciones en Bloodhound, lo que significa que los resultados antiguos de Sharphound no se pueden ingerir. Esta red fue creada usando Bloodhound v4.1.0. Asegúrese de utilizar esta versión con los resultados de Sharphound.
Al utilizar estos scripts recopiladores en una evaluación, existe una alta probabilidad de que estos archivos sean detectados como malware y generen una alerta al equipo azul. Aquí es nuevamente donde nuestra máquina Windows que no está unida a un dominio puede ayudar. Podemos usar el runas
comando para inyectar las credenciales de AD y señalar a Sharphound a un controlador de dominio. Dado que controlamos esta máquina con Windows, podemos desactivar el AV o crear excepciones para archivos o carpetas específicos, lo cual ya se realizó en la máquina THMJMP1. Puede encontrar los archivos binarios de Sharphound en este host en elC:\Tools\
directorio. Usaremos la versión SharpHound.exe para nuestra enumeración, pero siéntete libre de jugar con las otras dos. Ejecutaremos Sharphound de la siguiente manera:
Sharphound.exe --CollectionMethods <Methods> --Domain za.tryhackme.com --ExcludeDCs
Parámetros explicados:
CollectionMethods: determina qué tipo de datos recopilaría Sharphound. Las opciones más comunes son Predeterminado o Todo. Además, dado que Sharphound almacena información en caché, una vez que se ha completado la primera ejecución, solo puede usar el método de recopilación de sesiones para recuperar nuevas sesiones de usuario para acelerar el proceso.
Dominio: aquí especificamos el dominio que queremos enumerar. En algunos casos, es posible que desee enumerar un dominio principal u otro dominio que confíe en su dominio existente. Puede indicarle a Sharphound qué dominio debe enumerarse modificando este parámetro.
Excluir DC: esto le indicará a Sharphound que no toque los controladores de dominio, lo que reduce la probabilidad de que la ejecución de Sharphound genere una alerta.
Usando su sesión SSH PowerShell de la tarea anterior, copie el binario Sharphound al directorio de Documentos de su usuario de AD:
Ejecutaremos Sharphound utilizando los métodos de recopilación All y Session:
Sharphound tardará aproximadamente 1 minuto en realizar la enumeración. En organizaciones más grandes, esto puede llevar bastante más tiempo, incluso horas, para ejecutarlo por primera vez. Una vez completado, tendrá un archivo ZIP con marca de tiempo en la misma carpeta desde la que ejecutó Sharphound.
Ahora podemos usar Bloodhound para ingerir este ZIP y mostrarnos visualmente las rutas de ataque.
Como se mencionó anteriormente, Bloodhound es la GUI que nos permite importar datos capturados por Sharphound y visualizarlos en rutas de ataque. Bloodhound utiliza Neo4j como base de datos backend y sistema de gráficos. Neo4j es un sistema de gestión de bases de datos de gráficos. Si estás usando AttackBox, puedes usar el ícono rojo de Bloodhound en el Dock para iniciarlo. En todos los demás casos, asegúrese de que Bloodhound y neo4j estén instalados y configurados en su máquina atacante. De cualquier manera, es bueno entender lo que sucede en segundo plano. Antes de que podamos iniciar Bloodhound, necesitamos cargar Neo4j:
En otra pestaña de Terminal, ejecute bloodhound --no-sandbox
. Esto le mostrará la GUI de autenticación :
Las credenciales predeterminadas para la base de datos neo4j serán neo4j:neo4j
. Utilice esto para autenticarse en Bloodhound. Para importar nuestros resultados, necesitará recuperar el archivo ZIP del host de Windows. La forma más sencilla es utilizar el comando SCP en tu AttackBox:
scp <AD Username>@THMJMP1.za.tryhackme.com:C:/Users/<AD Username>/Documents/<Sharphound ZIP> .
Una vez que proporcione su contraseña, se copiarán los resultados a su directorio de trabajo actual. Arrastre y suelte el archivo ZIP en la GUI de Bloodhound para importarlo a Bloodhound. Mostrará que está extrayendo los archivos e iniciando la importación.
Una vez que se hayan importado todos los archivos JSON , podemos comenzar a usar Bloodhound para enumerar rutas de ataque para este dominio específico.
Hay varias rutas de ataque que Bloodhound puede mostrar. Al presionar las tres rayas al lado de "Buscar un nodo" se mostrarán las opciones. La primera pestaña nos muestra la información sobre nuestras importaciones actuales.
Tenga en cuenta que si importa una nueva ejecución de Sharphound, estos recuentos aumentarán acumulativamente. Primero, veremos la información del nodo. Busquemos nuestra cuenta AD en Bloodhound. Debe hacer clic en el nodo para actualizar la vista. También tenga en cuenta que puede cambiar el esquema de etiquetas presionando LeftCtrl.
Podemos ver que hay una cantidad importante de información devuelta sobre nuestro uso. Cada una de las categorías proporciona la siguiente información:
Descripción general : proporciona información resumida, como la cantidad de sesiones activas que tiene la cuenta y si puede alcanzar objetivos de alto valor.
Propiedades del nodo : muestra información sobre la cuenta de AD , como el nombre para mostrar y el título.
Propiedades adicionales : proporciona información AD más detallada , como el nombre distintivo y cuándo se creó la cuenta.
Membresía de grupo : muestra información sobre los grupos a los que pertenece la cuenta.
Derechos de administrador local : proporciona información sobre los hosts unidos al dominio donde la cuenta tiene privilegios administrativos.
Derechos de ejecución : proporciona información sobre privilegios especiales, como la capacidad de realizar RDP en una máquina.
Derechos de control de salida : muestra información sobre los objetos AD donde esta cuenta tiene permisos para modificar sus atributos.
Derechos de control entrante : proporciona información sobre los objetos AD que pueden modificar los atributos de esta cuenta.
Si deseas obtener más información en cada una de estas categorías, puedes presionar el número al lado de la consulta de información. Por ejemplo, veamos la membresía del grupo asociada con nuestra cuenta. Al presionar el número al lado de "Membresía de grupo de primer grado", podemos ver que nuestra cuenta es miembro de dos grupos.
A continuación, veremos las consultas de análisis. Estas son consultas que los propios creadores de Bloodhound han escrito para enumerar información útil.
En la sección Información del dominio, podemos ejecutar la consulta Buscar todos los administradores de dominio. Tenga en cuenta que puede presionar LeftCtrl para cambiar la configuración de visualización de la etiqueta.
Los iconos se llaman nodos y las líneas se llaman aristas. Profundicemos en lo que nos muestra Bloodhound. Hay una cuenta de usuario de AD con el nombre de usuario T0_TINUS.GREEN , que es miembro del grupo ADMINS de nivel 0 . Sin embargo, este grupo es un grupo anidado en el grupo ADMINISTRADORES DE DOMINIO , lo que significa que todos los usuarios que forman parte del grupo ADMINISTRADORES de nivel 0 son efectivamente DA.
Además, hay una cuenta AD adicional con el nombre de usuario ADMINISTRADOR que forma parte del grupo DOMAIN ADMINS . Por lo tanto, hay dos cuentas en nuestra superficie de ataque que probablemente podamos intentar comprometer si queremos obtener derechos de DA. Dado que la cuenta ADMINISTRADOR es una cuenta integrada, probablemente nos centraremos en la cuenta de usuario.
Cada objeto AD que se analizó en las tareas anteriores puede ser un nodo en Bloodhound y cada uno tendrá un ícono diferente que representa el tipo de objeto que es. Si queremos formular una ruta de ataque, debemos observar los límites disponibles entre la posición actual y los privilegios que tenemos y hacia dónde queremos ir. Bloodhound tiene varios bordes disponibles a los que se puede acceder mediante el ícono de filtro:
Estos también se actualizan constantemente a medida que se descubren nuevos vectores de ataque. Buscaremos explotar estos diferentes bordes en una red futura. Sin embargo, veamos la ruta de ataque más básica usando solo la opción predeterminada y algunas especiales. Realizaremos una búsqueda en Bloodhound para enumerar la ruta de ataque. Presione el icono de ruta para permitir la búsqueda de rutas.
Nuestro nodo de inicio sería nuestro nombre de usuario de AD y nuestro nodo final será el grupo ADMINS de nivel 1 , ya que este grupo tiene privilegios administrativos sobre los servidores.
Si no hay una ruta de ataque disponible utilizando los filtros de borde seleccionados, Bloodhound mostrará "No se encontraron resultados". Tenga en cuenta que esto también puede deberse a una discrepancia entre Bloodhound y Sharphound, lo que significa que los resultados no se ingirieron correctamente. Utilice Bloodhound v4.1.0. Sin embargo, en nuestro caso, Bloodhound muestra una ruta de ataque. Muestra que uno de los ADMINISTRADORES T1, CUENTA, rompió el modelo de niveles al usar sus credenciales para autenticarse en THMJMP1 , que es una estación de trabajo. También muestra que cualquier usuario que forme parte del grupo USUARIOS DE DOMINIO , incluida nuestra cuenta AD , tiene la capacidad de realizar RDP en este host.
Podríamos hacer algo como lo siguiente para explotar esta ruta:
Utilice nuestras credenciales de AD para RDP en THMJMP1 .
Busque un vector de escalada de privilegios en el host que nos proporcione acceso administrativo.
Utilizando el acceso administrativo, podemos utilizar técnicas y herramientas de recolección de credenciales como Mimikatz.
Dado que el administrador T1 tiene una sesión activa en THMJMP1 , nuestra recolección de credenciales nos proporcionaría el hash NTLM de la cuenta asociada.
La estructura de AD no cambia muy a menudo en las grandes organizaciones. Puede que haya un par de empleados nuevos, pero la estructura general de unidades organizativas, grupos, usuarios y permisos seguirá siendo la misma.
Sin embargo, lo único que cambia constantemente son las sesiones activas y los eventos de inicio de sesión. Dado que Sharphound crea una instantánea de un momento dado de la estructura de AD , los datos de la sesión activa no siempre son precisos, ya que es posible que algunos usuarios ya hayan cerrado sesión o que nuevos usuarios hayan establecido nuevas sesiones. Esto es algo esencial a tener en cuenta y es por eso que querríamos ejecutar Sharphound a intervalos regulares.
Un buen método es ejecutar Sharphound con el método de recopilación "Todos" al inicio de la evaluación y luego ejecutar Sharphound al menos dos veces al día utilizando el método de recopilación "Sesión". Esto le proporcionará nuevos datos de sesión y garantizará que estas ejecuciones sean más rápidas ya que no enumeran nuevamente toda la estructura de AD . El mejor momento para ejecutar estas sesiones es alrededor de las 10:00, cuando los usuarios toman su primer café y comienzan a trabajar y nuevamente alrededor de las 14:00, cuando regresan de su pausa para el almuerzo pero antes de irse a casa.
Puede borrar los datos de la sesión estancada en Bloodhound en la pestaña Información de la base de datos haciendo clic en "Borrar información de la sesión" antes de importar los datos de estas nuevas ejecuciones de Sharphound.
Proporciona una GUI para la enumeración de AD.
Tiene la capacidad de mostrar rutas de ataque para la información de AD enumerada .
Proporciona información más profunda sobre los objetos AD que normalmente requieren varias consultas manuales para recuperarse.
Requiere la ejecución de Sharphound, que es ruidoso y a menudo puede ser detectado por soluciones AV o EDR.
Enumerar AD es una tarea enorme. Se requiere una enumeración AD adecuada para comprender mejor la estructura del dominio y determinar las rutas de ataque que se pueden aprovechar para realizar una escalada de privilegios o un movimiento lateral.
Técnicas de enumeración adicionales
En esta red, cubrimos varias técnicas que se pueden utilizar para enumerar AD . Esta no es de ninguna manera una lista exhaustiva. Aquí hay una lista de técnicas de enumeración que también merecen mención:
También debemos señalar que esta sala se centró en enumerar la estructura del dominio AD en su totalidad en lugar de concentrarse únicamente en identificar configuraciones erróneas y debilidades. En futuras salas se discutirá la enumeración centrada en identificar debilidades, como acciones inseguras o rupturas en el modelo de niveles.
Mitigaciones
Es increíblemente difícil defenderse de la enumeración AD . Muchas de estas técnicas imitan el tráfico y el comportamiento de la red normal, lo que dificulta distinguir el tráfico malicioso del tráfico normal. Sin embargo, hay un par de cosas que podemos hacer para detectar comportamientos potencialmente maliciosos:
Las potentes técnicas de enumeración de AD , como Sharphound, generan una cantidad significativa de eventos de inicio de sesión al enumerar información de la sesión. Dado que se ejecuta desde una única cuenta de AD, estos eventos de inicio de sesión se asociarán con esta única cuenta. Podemos escribir reglas de detección para detectar este tipo de comportamiento si ocurre desde una cuenta de usuario.
Podemos escribir reglas de detección de firmas para las herramientas que deben instalarse para técnicas de enumeración de AD específicas , como los binarios de SharpHound y las herramientas AD-RSAT.
A menos que lo utilicen empleados de nuestra organización, podemos monitorear el uso del símbolo del sistema y Powershell en nuestra organización para detectar posibles intentos de enumeración de fuentes no autorizadas.
Como nota al margen, el propio equipo azul también puede utilizar periódicamente estas técnicas de enumeración para identificar lagunas y configuraciones erróneas en la estructura del dominio AD . Si podemos resolver estos errores de configuración, incluso si un atacante enumera nuestro AD, no podrá encontrar errores de configuración que puedan explotarse para escalar privilegios o realizar movimientos laterales.
Ahora que hemos enumerado AD , el siguiente paso es realizar una escalada de privilegios y un movimiento lateral a través del dominio para llegar a una posición adecuada para realizar ataques. Esto se tratará en la siguiente sala.
Aquí es donde se vuelve potente. ¿Alguna vez ha tenido un caso en el que una base de datos MS SQL utilizó autenticación de Windows y usted no estaba unido al dominio? Inicie MS SQL Studio desde ese símbolo del sistema; aunque muestra su nombre de usuario local, haga clic en Iniciar sesión y utilizará las credenciales de AD en segundo plano para autenticarse. Incluso podemos usar esto para .
Ya debería haber completado la se introdujeron inicialmente los diferentes objetos de AD . En esta tarea, se asumirá que comprende cuáles son estos objetos. Conéctese a THMJMP1 usando RDP y sus credenciales proporcionadas en la Tarea 1 para realizar esta tarea.
En esta tarea, exploraremos nuestro primer método de enumeración, que es el único método que utiliza una GUI hasta la última tarea. Usaremos Microsoft Management Console (MMC) con los complementos AD (RSAT) . Si utiliza la máquina virtual de Windows proporcionada (THMJMP1), ya se habrá instalado. Sin embargo, si está utilizando su propia máquina con Windows, puede realizar los siguientes pasos para instalar los complementos:
Puede encontrar la gama completa de opciones asociadas con el comando net . Juegue con estos comandos de red para recopilar información sobre usuarios y grupos específicos.
PowerShell es la actualización del símbolo del sistema. Microsoft lo lanzó por primera vez en 2006. Si bien PowerShell tiene todas las funciones estándar que proporciona el símbolo del sistema, también brinda acceso a cmdlets (pronunciado command-lets), que son clases .NET para realizar funciones específicas. Si bien podemos escribir nuestros propios cmdlets, como lo hicieron los creadores de , ya podemos llegar muy lejos utilizando los integrados.
Dado que instalamos las herramientas AD-RSAT en la Tarea 3, instaló automáticamente los cmdlets asociados. Hay más de 50 cmdlets instalados. Veremos algunos de estos, pero consulte
Por último, veremos cómo realizar la enumeración de AD utilizando . Bloodhound
es la herramienta de enumeración de AD más poderosa hasta la fecha y, cuando se lanzó en 2016, cambió el panorama de enumeración de AD para siempre.
Puede encontrar todos los parámetros de Sharphound . Es bueno repasar los demás parámetros, ya que pueden ser necesarios según las circunstancias de la evaluación del equipo rojo.
Este es un ejemplo sencillo. Las rutas de ataque pueden ser relativamente complejas en circunstancias normales y requerir varias acciones para alcanzar el objetivo final. Si está interesado en los exploits asociados con cada ventaja, la siguiente proporciona una guía excelente. Bloodhound es una herramienta de enumeración de AD increíblemente poderosa que proporciona información detallada sobre la estructura de AD de una superficie de ataque. Vale la pena el esfuerzo de jugar con él y aprender sus diversas características.
: cualquier par de credenciales AD válido debería poder vincularse a la interfaz LDAP de un controlador de dominio. Esto le permitirá escribir consultas de búsqueda LDAP para enumerar información sobre los objetos AD en el dominio.
: PowerView es un script de reconocimiento que forma parte del . Aunque este proyecto ya no recibe soporte, scripts como PowerView pueden ser increíblemente útiles para realizar una enumeración semimanual de objetos AD en caso de necesidad.
: WMI se puede utilizar para enumerar información de hosts de Windows. Tiene un proveedor llamado "raíz\directorio\ldap" que puede usarse para interactuar con AD. Podemos usar este proveedor y WMI en PowerShell para realizar la enumeración de AD.