
Recolector de OpenGraph de BloodHound para GitHub que mapea la estructura de la organización, los permisos y las rutas de ataque entre nubes en un gráfico navegable para auditorías de seguridad y respuesta a incidentes.

GitHound es un recopilador OpenGraph de BloodHound para GitHub, diseñado para mapear la estructura y los permisos de tu organización en un grafo navegable de rutas de ataque. Permite:
Modela entidades clave de GitHub
Visualiza y analiza en BloodHound
Con GitHound, obtienes un grafo claro e interactivo del panorama de permisos de GitHub, ideal para revisiones de seguridad, auditorías de cumplimiento e investigaciones rápidas de incidentes.
Para documentación detallada, consulta BloodHound Docs - GitHound.
# 1. Load the collector
. ./githound.ps1
# 2. Create a session with your Personal Access Token
$session = New-GitHubSession -OrganizationName "YourOrgName" -Token (Get-Clipboard)
# 3. Run the collection
Invoke-GitHound -Session $session
# 4. Upload the resulting githound_<orgId>.json file to BloodHound
Si la recopilación se interrumpe, reanúdala desde donde la dejaste:
Invoke-GitHound -Session $session -Resume
GitHound admite tanto sesiones con Personal Access Token como sesiones de instalación de GitHub App. El flujo de trabajo existente de GitHub App con ámbito de organización no cambia:
. ./githound.ps1
$session = New-GitHubJwtSession `
-OrganizationName "YourOrgName" `
-ClientId $clientId `
-PrivateKeyPath $privateKeyPath `
-InstallationId $installationId
Invoke-GitHound -Session $session -CollectAll
La misma función también puede crear sesiones compatibles con enterprise:
. ./githound.ps1
$session = New-GitHubJwtSession `
-EnterpriseName "YourEnterpriseSlug" `
-ClientId $clientId `
-PrivateKeyPath $privateKeyPath `
-InstallationId $installationId `
-PersonalAccessToken $pat
Las sesiones compatibles con enterprise conservan múltiples contextos de autenticación en el GitHound.Session devuelto:
Headers: las cabeceras de token de instalación de GitHub App que se usan para la recopilación normalJwtHeaders: las cabeceras JWT de GitHub App que se usan para endpoints a nivel de aplicación, como la enumeración de instalacionesPatHeaders: cabeceras opcionales de Personal Access Token para rutas de recopilación que requieren autenticación con token de usuarioPara enumerar las instalaciones que pertenecen a la GitHub App autenticada:
Get-GitHubAppInstallation -Session $session |
Select-Object TargetType, InstallationId, Login, Name, SuspendedAt
El análisis de flujos de trabajo ahora está integrado en Invoke-GitHound cuando se usa -CollectAll. El recopilador:
GH_Workflow sin procesar y contenidos de flujos de trabajoGH_WorkflowJob y GH_WorkflowStepGH_CanPwnRequest y GH_CanDispatchTogithound_<orgId>.jsonPara fines de reanudación/depuración, el punto de control intermedio del análisis de flujos de trabajo se escribe como githound_WorkflowAnalysis_<orgId>.json.
GitHound ahora incluye una base mínima de recopilación enterprise mediante Git-HoundEnterprise.
Ese recopilador actualmente crea:
GH_EnterpriseGH_Organization stub ligeros para las organizaciones miembroGH_Contains desde la empresa hacia sus organizacionesLa recopilación de usuarios enterprise mediante Git-HoundEnterpriseUser añade:
GH_UserGH_HasMember desde la empresa hacia esos usuariosLa recopilación SAML enterprise mediante Git-HoundEnterpriseSamlProvider añade:
GH_SamlIdentityProviderGH_ExternalIdentityGH_HasSamlIdentityProvider desde la empresa hacia el proveedorEsta ruta requiere una sesión respaldada por PAT porque GitHub expone el SAML enterprise a través de enterprise.ownerInfo.
La recopilación de equipos enterprise mediante Git-HoundEnterpriseTeam añade:
GH_EnterpriseTeamGH_AssignedTo desde los equipos enterprise hacia las organizaciones asignadasGH_MemberOf desde los equipos enterprise hacia los nodos GH_Team ent: visibles en la organización mediante coincidencia de propiedadesmembers de los equipos enterprise y aristas GH_HasRole desde los usuarios hacia esos rolesLa recopilación de roles enterprise mediante Git-HoundEnterpriseRole añade:
GH_EnterpriseRoleGH_Contains desde la empresa hacia esos rolesGH_HasRole desde los usuarios asignados directamente y los equipos enterpriseowners predeterminado poblado a partir de enterprise.ownerInfo.admins cuando hay datos de administradores enterprise respaldados por PAT disponiblesPor ahora, las cadenas de permisos enterprise sin procesar se conservan en el nodo GH_EnterpriseRole dentro de su propiedad permissions, en lugar de expandirse en aristas de permisos dedicadas.
La recopilación SCIM enterprise añade actualmente:
SCIM_UserSCIM_GroupSCIM_Provisioned desde SCIM_User hacia GH_ExternalIdentitySCIM_Provisioned desde SCIM_Group hacia GH_EnterpriseTeam cuando GitHub expone el group_id del equipo enterpriseSCIM_MemberOf desde SCIM_User hacia SCIM_GroupEsto le proporciona a GitHound un puente independiente del proveedor desde el esquema SCIM compartido hacia el modelo nativo de identidad y equipos enterprise de GitHub.
Cuando un GH_SamlIdentityProvider recopilado identifica el IdP de origen, GitHound también puede añadir aristas de correlación SCIM conscientes del proveedor dentro de la salida sidecar de SCIM:
Okta_User -> SCIM_User
Okta_User.id = SCIM_User.externalIdOkta_Group -> SCIM_Group
Okta_Group.name = SCIM_Group.externalIdOkta_Group.oktaDomain = GH_SamlIdentityProvider.foreign_environmentidGitHound mantiene la capa SCIM en su propia salida sidecar para que estas asignaciones sigan siendo visibles sin mezclar nodos nativos de SCIM en el grafo enterprise principal, nativo de GitHub:
githound_<entId>.json contiene datos enterprise nativos de GitHubgithound_scim_<entId>.json contiene nodos nativos de SCIM y aristas puente de SCIMgithound_saml_<entId>.json contiene datos SAML y de identidades externasgithound_hybrid_<entId>.json contiene aristas entre modelos, como SAML_Implements, SAML_HasAccount y GH_SyncedTogithound_saml_<entId>.json también contiene la topología SAML normalizada para el proveedor de servicios de GitHub, incluyendo SAML_TrustsIssuer y SAML_HasAssertionConsumerServiceEl modelo nativo de proveedor de identidad de GitHub permanece intacto en las salidas nativas de GitHub/SAML:
GH_ExternalIdentityGH_HasExternalIdentityGH_MapsToUser