
AD Miner es una herramienta de auditoría de Active Directory que utiliza consultas Cypher para procesar datos de la base de datos de gráficos #Bloodhound y descubrir debilidades de seguridad.
Características de los informes basados en web:
Una calificación basada en riesgo de las debilidades de Active Directory, junto con rutas de mitigación integrales.
Barra de búsqueda y controles cuidadosamente diseñados para identificar las configuraciones incorrectas más riesgosas.
También puede observar indicadores a lo largo del tiempo para ayudar a medir la eficiencia de la mitigación.
AD Miner fue creado inicialmente por Forvis Mazars y es mantenido por el Equipo de Auditoría y Asesoría de Ciberseguridad de Grant Thornton.
Para ejecutar AD Miner, primero necesita una base de datos neo4j que contenga los objetos de Active Directory:
[!CAUTION] Recomendamos encarecidamente usar BloodHound Automation, ya que instala el complemento Neo4j Graph Data Science, el cual :
- mejora significativamente el tiempo de cómputo y el rendimiento general.
- permite usar Smartest Path en lugar del shortestPath() integrado de Neo4j (es decir, Rutas más fáciles de explotar en lugar de la menor cantidad de saltos).
Para configurar su entorno BloodHound (incluyendo la GUI y la base de datos Neo4j), se recomienda encarecidamente BloodHound Automation debido a su integración perfecta con el complemento Graph Data Science. Sin embargo, es perfectamente válido usar la instalación predeterminada de BloodHound CE, pero tenga en cuenta que perderá los beneficios de GDS (por ejemplo, pathfinding más inteligente, mejora en la velocidad de ejecución, etc.).
Por defecto, BloodHound crea una base neo4j accesible en el puerto 7687.
La forma más sencilla es ejecutar el siguiente comando usando pipx:
pipx install 'git+https://github.com/AD-Security/AD_Miner.git'
ADMiner también está disponible en algunas distribuciones de Linux:
pacman -S ad-minernix-env -iA nixos.ad-minerHay una imagen Docker disponible para construir. Construya la imagen con el siguiente comando:
docker build -t ad-miner .
Para ejecutar esto en Windows con los datos de BloodHound Community Edition, use los siguientes comandos:
docker run -v ${PWD}:/tmp ad-miner AD-miner -b bolt://host.docker.internal:7687 -u neo4j -p mypassword -cf YOUR_PREFIX
Para ejecutar esto en Linux con los datos de BloodHound Community Edition, use los siguientes comandos:
docker run -v ${PWD}:/tmp --network host ad-miner AD-miner -b bolt://localhost:7687 -u neo4j -p mypassword -cf YOUR_PREFIX
Tenga en cuenta que montar el volumen con -v es fundamental para obtener la salida de los datos. Esto asume que el servidor BHCE se está ejecutando en el host Docker con la configuración predeterminada.
Ejecute la herramienta:
AD-miner [-h] [-b BOLT] [-u USERNAME] [-p PASSWORD] [-e EXTRACT_DATE] [-r RENEWAL_PASSWORD] [-a] [-c] [-l LEVEL] -cf CACHE_PREFIX [-ch NB_CHUNKS] [-co NB_CORES] [--rdp] [--evolution EVOLUTION] [--cluster CLUSTER]
Ejemplo:
AD-miner -cf My_Report -u neo4j -p mypassword
Los archivos de caché se generan al completar cada solicitud de Neo4j. Esta característica le permite pausar o detener AD Miner en cualquier punto del proceso sin perder los resultados previamente calculados. Para aprovechar el caché, use el parámetro -c. Los archivos de caché se almacenan en la carpeta cache_neo4j en su repositorio actual. Para que se use el caché, el nombre del informe debe coincidir con el prefijo del nombre del archivo de caché:
AD-miner -c -cf My_Report -u neo4j -p mypassword
Para manejar mejor conjuntos de datos grandes, es posible habilitar el multi-threading y también usar un clúster de bases de datos neo4j, como se muestra en el siguiente ejemplo (donde server1 maneja 32 hilos y server2 maneja 16):
AD-miner -c -cf My_Report -b bolt://server1:7687 -u neo4j -p mypassword --cluster server1:7687:32,server2:7687:16
Si se conoce la política de renovación de contraseñas, puede especificarla usando el parámetro -r para asegurarse de que los controles de renovación de contraseñas se alineen con la configuración de su entorno (el valor predeterminado es 90 días). Por ejemplo, si la política de contraseñas está configurada a 180 días, puede usar lo siguiente:
AD-miner -c -cf My_Report -b bolt://server:7687 -u neo4j -p mypassword -r 180
[!TIP] La contraseña predeterminada de la base de datos neo4j de Bloodhound CE es
bloodhoundcommunityeditiononeo5jsi usa BloodHound Automation
Opciones:
-h, --help muestra este mensaje de ayuda y sale
-b BOLT, --bolt BOLT Conexión bolt de Neo4j (por defecto: bolt://127.0.0.1:7687)
-u USERNAME, --username USERNAME
Nombre de usuario de Neo4j (por defecto: neo4j)
-p PASSWORD, --password PASSWORD
Contraseña de Neo4j (por defecto: bloodhoundcommunityedition)
-e EXTRACT_DATE, --extract_date EXTRACT_DATE
Fecha de extracción (ej., 20220131). Por defecto: última fecha de inicio de sesión
-r RENEWAL_PASSWORD, --renewal_password RENEWAL_PASSWORD
Política de renovación de contraseñas en días. Por defecto: 90
-c, --cache Usar archivo local para datos de neo4j
-l LEVEL, --level LEVEL
Nivel recursivo para consultas de rutas
-cf CACHE_PREFIX, --cache_prefix CACHE_PREFIX
Archivo de caché a utilizar (en caso de múltiples archivos de caché de compañías)
--gpo_low Realizar una consulta más rápida pero incompleta para GPO (más rápida que la consulta regular)
-ch NB_CHUNKS, --nb_chunks NB_CHUNKS
Número de fragmentos para solicitudes paralelas a neo4j. Por defecto: 20 * número de CPU
-co NB_CORES, --nb_cores NB_CORES
Número de núcleos para solicitudes paralelas a neo4j. Por defecto: número de CPU
--rdp Incluir el borde CanRDP en los gráficos
--evolution EVOLUTION
Evolución a lo largo del tiempo: ubicación de los archivos de datos JSON. ej.: '../../tests/'
--cluster CLUSTER Nodos del clúster para ejecutar consultas neo4j en paralelo. ej.: host1:port1:nCore1,host2:port2:nCore2,...
En las páginas de gráficos, puede hacer clic derecho en los nodos del gráfico para agruparlos o abrir el clúster.
Si tiene múltiples informes de AD-Miner a lo largo del tiempo, puede rastrear fácilmente la evolución con el argumento --evolution: cada informe de AD-Miner genera un archivo de datos JSON junto con el archivo index.html. Solo necesita reunir estos diferentes archivos JSON en una sola carpeta y especificar la ruta a esa carpeta después del argumento --evolution.
AD-miner -c -cf My_Report -b bolt://server:7687 -u neo4j -p mypassword -r 180 --evolution evolution_folder/
Aparece una pestaña 'Evolución a lo largo del tiempo' en la página principal, que proporciona gráficos de evolución para cada categoría (Permisos, Contraseñas, Kerberos y Miscelánea).
La evolución detallada para cada control también está disponible y se puede acceder mediante el botón 'Mostrar evolución' de cada categoría. Hay una escala logarítmica disponible para resaltar mejor las variaciones sutiles a lo largo del tiempo.
AD Miner puede calcular rutas basadas en su explotabilidad real. De hecho, a veces la ruta más corta es difícil de explotar (aquí debido a ExecuteDCOM antes de HasSession).
Mientras que existe una ruta más larga pero más simple (aquí con MemberOf y AdminTo en lugar de ExecuteDCOM).
AD Miner cambia automáticamente al modo de ruta más inteligente cuando su base de datos neo4j tiene instalado el complemento Graph Data Science (https://neo4j.com/docs/graph-data-science/current/).
La forma más fácil de instalar este complemento es definir una variable de entorno en su docker neo4j: NEO4J_PLUGINS=["graph-data-science"] (está instalado por defecto con BloodHound Automation).
Actualmente, 10 controles utilizan la cobertura completa del grafo y optimizan las rutas más inteligentes para el análisis.
A continuación se proporciona una lista de controles que ya se han implementado en AD Miner:
Vea cómo contribuir aquí.
| Categoría | Descripción | Categoría | Descripción |
|---|
| Kerberos | Cuentas AS-REP Roastable | Miscelánea | Equipos con SO obsoleto | |
| Kerberos | Cuentas kerberoastables | Miscelánea | Cuentas inactivas | |
| Kerberos | Delegación restringida de Kerberos | Miscelánea | Nivel funcional del dominio | |
| Kerberos | RBCD de Kerberos contra equipos | Miscelánea | Equipos fantasma | |
| Kerberos | Delegaciones no restringidas de Kerberos | Miscelánea | Grupos sin miembros | |
| Kerberos | Contraseña antigua de KRBTGT | Miscelánea | UO sin miembros | |
| Kerberos | Shadow Credentials en cuentas privilegiadas | Miscelánea | Shadow Credentials en controladores de dominio | |
| Kerberos | Shadow Credentials en cuentas regulares | Miscelánea | PrimaryGroupID inesperado | |
| Contraseñas | Acceso a contraseñas LAPS | Miscelánea | FGPP de usuarios | |
| Contraseñas | Equipos sin LAPS | Permisos | Anomalías en ACL | |
| Contraseñas | Objetos que pueden leer contraseñas GMSA de administradores | Permisos | Puntos de estrangulamiento en rutas de ataque | |
| Contraseñas | Bypass de requisito de contraseña | Permisos | Equipos administradores de otros equipos | |
| Contraseñas | Usuarios con contraseñas en texto claro | Permisos | Rutas entre dominios a Admin de Dominio | |
| Contraseñas | Usuarios con contraseñas antiguas | Permisos | Cuentas de invitado | |
| Contraseñas | Usuarios sin caducidad de contraseña | Permisos | Acceso inadecuado a privilegios DCSync | |
| Permisos | Configuración inadecuada de AdminCount | Permisos | Privilegios inadecuados de modificación de GPO | |
| Permisos | Número inadecuado de administradores de dominio | Permisos | Cuentas de equipo con privilegios inadecuados | |
| Permisos | Cuentas de equipo con privilegios inadecuados | Permisos | Privilegios de admin local no Tier 0 en ADCS | |
| Permisos | Objetos con historial de SID | Permisos | Rutas a Administradores de DNS | |
| Permisos | Rutas a Administradores de Dominio | Permisos | Rutas a Grupos de Operadores | |
| Permisos | Rutas a Unidades Organizativas (OU) | Permisos | Rutas a servidores | |
| Permisos | Rutas al contenedor AdminSDHolder | Permisos | Grupo "Acceso compatible con Pre-Windows 2000" | |
| Permisos | Cuenta privilegiada fuera del grupo de usuarios protegidos | Permisos | Acceso RDP (equipos) | |
| Permisos | Acceso RDP (usuarios) | Permisos | Violación de Tier 0 (sesiones) | |
| Permisos | Usuarios con privilegios cruzados de dominio poderosos | Permisos | Usuarios con privilegios de administrador local |
| Categoría | Descripción | Categoría | Descripción |
|---|
| Entra ID Miscelánea | Cuentas inactivas de Azure | Entra ID MS Graph | Controladores directos de MS Graph | |
| Entra ID Contraseñas | Privilegios de restablecimiento de contraseña de Entra ID | Entra ID MS Graph | Cuentas de Entra ID no sincronizadas en on-prem | |
| Entra ID Contraseñas | Cambio de contraseña anterior incoherente | Entra ID MS Graph | Cuentas sincronizadas con cuenta gemela deshabilitada | |
| Entra ID Permisos | Acceso a roles privilegiados de Entra ID | Entra ID Permisos | Cuentas privilegiadas tanto en on-prem como en Azure | |
| Entra ID Permisos | Ruta cruzada on-prem/Entra ID a tier 0 | Entra ID Permisos | Usuarios posiblemente relacionados con AADConnect | |
| Entra ID Permisos | Usuarios de Entra ID con ruta a objetivos de alto valor |