Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
ImproHound — Identifica las rutas de ataque en BloodHound que rompen tu segmentación de AD. | Kitploit
Herramientas/GitHubGitHub/improsec/improhound
Escalada de PrivilegiosAnálisis de VulnerabilidadesRecopilación de InformaciónPruebas de Penetración
GitHubimprosec/improhound

ImproHound

Identifica las rutas de ataque en BloodHound que rompen tu segmentación de AD.

Ver Repositorio
328362hace 3 añosRevisado por Kitploit

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

GitHub release (latest SemVer) GitHub all releases

ImproHound

Identifica las rutas de ataque en BloodHound que rompen tu segmentación por niveles de AD

ImproHound es un ejecutable independiente de dotnet para Windows x64 con interfaz gráfica. Para usar ImproHound, debes ejecutar SharpHound para recolectar los datos necesarios del AD. Luego, subirás los datos a tu instalación de BloodHound. ImproHound se conectará a la base de datos Neo4j subyacente de BloodHound. En ImproHound, categorizarás el AD en niveles a través de la estructura de OU, e ImproHound identificará las relaciones de AD que permiten a los objetos de AD comprometer un objeto de un nivel superior (más cercano a cero) y guardará las violaciones de segmentación en un archivo csv.

Artículo del blog de ImproHound

Video de demostración de ImproHound

Presentación de ImproHound en DEF CON Adversary Village

Tabla de contenido
  • Instalación
  • Uso
  • Directrices para la segmentación por niveles de objetos de AD
  • Última versión probada de dependencias

Instalación

1. Configura tu base de datos de BloodHound

  1. Instala BloodHound

  2. Recolecta datos de BloodHound con SharpHound en tu AD

    Nota: esto generará ruido en tu antivirus, SIEM, etc.

    Ejemplo: Ejecuta SharpHound.exe desde cmd, recolecta todo (sí, GPOLocalGroup no está incluido en All):

    root@kitploit:~
    SharpHound.exe --CollectionMethods All,GPOLocalGroup
    

    Consejo 1: Usa el parámetro Domain para recolectar datos de otros dominios del bosque.

    Consejo 2: Para obtener aún más datos, usa The Session Loop Collection Method

  3. Sube tus datos de BloodHound en la interfaz gráfica de BloodHound

    Hay un error en BloodHound que a veces hace que el archivo JSON del dominio se omita al subir un zip de datos de BloodHound. Revisa las estadísticas de la base de datos en BloodHound después de la subida de datos y asegúrate de que los objetos de dominio existan.

2. Instala el plugin APOC de Neo4j (permite las increíbles operaciones de grafo que necesitamos)

  1. Descarga la versión de APOC que coincida con tu versión de Neo4j (apoc-x.x.x.x-all.jar).

    Encuentra la versión de APOC que coincida con tu versión de Neo4j en la matriz de compatibilidad de versiones.

  2. Intenta recordar dónde instalaste Neo4j y coloca el archivo jar de APOC en: $NEO4J_HOME/plugins/

    • $NEO4J_HOME en Linux: /var/lib/neo4j/
    • $NEO4J_HOME en Windows: Verifica el servicio de Neo4j. Te revelará la ubicación.
  3. Edita neo4j.conf en tu editor de texto favorito para permitir el acceso sin restricciones a APOC reemplazando la línea: #dbms.security.procedures.unrestricted=my.extensions.example,my.procedures.* con dbms.security.procedures.unrestricted=apoc.*

    • neo4j.conf en Linux: /etc/neo4j/neo4j.conf
    • neo4j.conf en Windows: $NEO4J_HOME/conf/neo4j.conf

    Si quieres ejecutar ImproHound en un equipo y BloodHound en otro, debes permitir conexiones remotas a la base de datos Neo4j en el equipo de BloodHound. Para ello, elimina el # de la línea #dbms.default_listen_address=0.0.0.0 en .

3. Descarga y ejecuta la última versión de ImproHound.exe en Windows (x64)

    Confirma que puedes iniciar sesión en la base de datos de BloodHound con las mismas credenciales que usas en la interfaz gráfica de BloodHound.

Uso

Conectar a la base de datos

alt text

Ingresa las credenciales de la base de datos y establece una conexión. Son las mismas credenciales que usas en la interfaz gráfica de BloodHound.

Continuar o empezar de nuevo

alt text

ImproHound crea una etiqueta 'TierX' en los nodos de la base de datos de BloodHound. Si has usado ImproHound anteriormente con esta base de datos de BloodHound, se te preguntará si deseas continuar con la segmentación por niveles que ya has creado o si deseas empezar de nuevo.

Segmentación por niveles predeterminada o todo en Nivel 2

alt text

ImproHound te da la opción de establecer 'Segmentación por niveles predeterminada', que colocará a los Administradores de Dominio en el Nivel 0, a los Usuarios de Dominio en el Nivel 2, etc., o establecer todos los objetos en el Nivel 2.

Estructura de OU

alt text

Esta es la página donde categorizarás los objetos de AD en niveles. La ventana muestra la estructura de OU. Cada objeto de AD tiene un valor de nivel que se puede aumentar y disminuir con las flechas.

Establecer nivel para los hijos

Si seleccionas un dominio o un contenedor de AD, puedes hacer clic en 'Establecer nivel para los hijos' para establecer todos los hijos (de forma recursiva) al nivel del dominio/contenedor dado.

Establecer nivel para los miembros

Si seleccionas un grupo, puedes hacer clic en 'Establecer nivel para los hijos' para establecer todos los miembros (de forma recursiva) al nivel del grupo dado.

Establecer nivel para GPOs

Si haces clic en 'Establecer nivel para GPOs', cada GPO tendrá su nivel establecido al nivel de la OU con el nivel más alto (más cercano a cero) a la que está vinculada la GPO. Las GPO no vinculadas a una OU no verán cambiado su nivel.

Obtener violaciones de segmentación

Encuentra todas las relaciones en la base de datos de BloodHound donde un objeto de AD tiene control sobre un objeto de AD de un nivel superior (más cercano a cero).

Se generan dos archivos CSV como salida:

  • adobjects-[marca de tiempo].csv: Todos los objetos de AD y en qué nivel se encuentran.

  • tiering-violations-[marca de tiempo].csv: Las violaciones de segmentación.

Ejemplo de registros en el CSV de violaciones:

El primer registro es una cuenta de servicio de Nivel 1 con permiso para cambiar la contraseña de una cuenta de usuario de Nivel 0. La relación es heredada. Desafortunadamente, no siempre es posible ver de dónde se hereda la relación en los datos de BloodHound, pero puedes verificarlo manualmente inspeccionando los permisos en el objeto de AD de destino en Usuarios y Equipos. El segundo registro es un grupo con permiso para editar una GPO, que probablemente está vinculada a una OU que contiene servidores de Nivel 0, ya que es una GPO de Nivel 0.

Puedes consultar todos los tipos de relaciones y cómo se explotan aquí.

Si descubres que un objeto está en un nivel demasiado alto (más cercano a cero), debes corregirlo en ImproHound y luego buscar violaciones con este objeto como FUENTE. Si un objeto está en un nivel demasiado bajo (más cercano a infinito), debes corregirlo en ImproHound y buscar violaciones con el objeto como DESTINO.

Eliminar segmentación por niveles

Se eliminarán todas las etiquetas de nivel y los nodos creados por ImproHound en la base de datos de BloodHound.

Directrices para la segmentación por niveles de objetos de AD

Es importante segmentar correctamente los objetos de AD por niveles. Si estableces un DC y un usuario regular con pocos privilegios como objetos de Nivel 0, ImproHound no encontrará que el acceso de administrador del usuario al DC sea una violación de segmentación. Lo mismo ocurre si agregas a ambos al Nivel 2.

Equipo

Los equipos se segmentan según lo crítico que sería si el equipo se viera comprometido.

  • Nivel 0 – Controladores de dominio y otros sistemas categorizados como críticos. Sistemas como SCCM, ADFS, PKI y servidores de virtualización (VMware, Hyper V, etc.)
  • Nivel 1 – El resto de la infraestructura de servidores
  • Nivel 2 – Estaciones de trabajo regulares

Usuario

Los usuarios se segmentan según los equipos a los que pueden iniciar sesión y según los objetos de AD sobre los que tienen control. Un ejemplo de permiso de control podría ser un usuario con derechos para editar GPO vinculadas a servidores de Nivel 1, lo que convertiría al usuario en un objeto de Nivel 1.

Grupo

Un grupo pertenece al nivel más bajo (más cercano a infinito) de sus miembros, a menos que el grupo tenga miembros malos, por ejemplo, un usuario regular como miembro de Administradores de Dominio.

Ejemplos: Usuarios de Dominio es un grupo de Nivel 2 aunque tus usuarios de Nivel 0 sean miembros del grupo, porque no es la membresía de Usuarios de Dominio la que otorga privilegios a los usuarios. Por otro lado, el grupo Administradores de Dominio es un grupo de Nivel 0 porque la membresía de este grupo hace que los usuarios sean muy privilegiados. Controladores de dominio clonables no tiene ningún privilegio de AD que yo sepa, pero solo debe contener objetos de Nivel 0, es decir, DC, por lo que es un grupo de Nivel 0.

Contenedor (incluye OU y Dominio)

Un contenedor pertenece al nivel más alto (más cercano a cero) de sus objetos secundarios, o superior.

Ejemplo: Tienes todos los usuarios de Nivel 0, Nivel 1 y Nivel 2 en el contenedor Usuarios. Un usuario con permiso de Control Total sobre el contenedor Usuarios podría comprometer a todos los usuarios, incluidos los de Nivel 0 (excepto algunos que están protegidos, pero eso no es importante para el ejemplo), por lo que el contenedor Usuarios debe ser un objeto de Nivel 0.

GPO

El nivel de una GPO está determinado por el nivel de las OU a las que está vinculada. La GPO pertenece al nivel más alto (más cercano a cero) de las OU a las que está vinculada. Usa el botón 'Establecer nivel para GPOs' para asegurarte de que todas las GPO sigan este principio.

Ejemplo: Un usuario con permiso para editar una GPO vinculada a una OU de Nivel 1 podría controlar la membresía de Administradores en todos los servidores bajo la OU de Nivel 1 modificando la GPO.

Última versión probada de dependencias

  • BloodHound 4.2.0
  • Neo4j 4.4.10
  • APOC 4.4.0.8
  • Java/OpenJDK 11.0.16.1 LTS

TODO

  • Filtrar GetChanges / GetChangesAll donde solo exista uno de ellos.
  • Más objetos de Nivel 0 por defecto: RODC (incl. krbtgt_xxxxxx), MSOL_, AdminSDHolder, etc.
Descargar herramienta
neo4j.conf
  • Reinicia Neo4j

    • Linux: systemctl restart neo4j
    • Windows (cmd): net stop neo4j && net start neo4j (PowerShell: net stop neo4j; net start neo4j)
  • SourceTierSourceTypeSourceNameSourceDistinguishednameRelationIsInheritedTargetTierTargetTypeTargetNameTargetDistinguishedname
    Tier1User[email protected]CN=svc-monitor,CN=Users,DC=hot,DC=localForceChangePasswordTrueTier0User[email protected]CN=T0_JBK,CN=Users,DC=hot,DC=local
    Tier2Group[email protected]CN=Wrk-Admins,CN=Groups,DC=hot,DC=localGenericWriteTier0GPO[email protected]CN={6AC1786C-016F-11D2-945F-00C04fB984F9},CN=Policies,CN=System,DC=hot,DC=local