
BloodHound OpenGraph collector pour GitHub qui cartographie la structure organisationnelle, les permissions et les chemins d'attaque inter-cloud dans un graphe navigable pour les audits de sécurité et la réponse aux incidents.

GitHound est un collecteur OpenGraph pour GitHub, conçu pour cartographier la structure et les permissions de votre organisation sous forme de graphe de chemins d'attaque navigable. Il permet de :
Modéliser les entités GitHub clés
Visualiser et analyser dans BloodHound
Avec GitHound, vous obtenez un graphe clair et interactif de votre paysage de permissions GitHub, idéal pour les revues de sécurité, les audits de conformité et les investigations rapides d'incidents.
Pour une documentation détaillée, consultez 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 collecte est interrompue, reprenez là où vous vous étiez arrêté :
Invoke-GitHound -Session $session -Resume
GitHound prend en charge à la fois les sessions à jeton d'accès personnel et les sessions d'installation d'application GitHub. Le flux de travail existant de l'application GitHub à portée d'organisation est inchangé :
. ./githound.ps1
$session = New-GitHubJwtSession `
-OrganizationName "YourOrgName" `
-ClientId $clientId `
-PrivateKeyPath $privateKeyPath `
-InstallationId $installationId
Invoke-GitHound -Session $session -CollectAll
La même fonction peut également créer des sessions compatibles entreprise :
. ./githound.ps1
$session = New-GitHubJwtSession `
-EnterpriseName "YourEnterpriseSlug" `
-ClientId $clientId `
-PrivateKeyPath $privateKeyPath `
-InstallationId $installationId `
-PersonalAccessToken $pat
Les sessions compatibles entreprise conservent plusieurs contextes d'authentification sur le GitHound.Session retourné :
Headers : les en-têtes de jeton d'installation de l'application GitHub utilisés pour la collecte normaleJwtHeaders : les en-têtes JWT de l'application GitHub utilisés pour les points de terminaison au niveau de l'application, comme l'énumération des installationsPatHeaders : en-têtes optionnels de jeton d'accès personnel pour les chemins de collecte nécessitant une authentification par jeton utilisateurPour énumérer les installations appartenant à l'application GitHub authentifiée :
Get-GitHubAppInstallation -Session $session |
Select-Object TargetType, InstallationId, Login, Name, SuspendedAt
L'analyse des workflows est désormais intégrée à Invoke-GitHound lorsque vous utilisez -CollectAll. Le collecteur va :
GH_Workflow et les contenus des workflowsGH_WorkflowJob et GH_WorkflowStepGH_CanPwnRequest et GH_CanDispatchTogithound_<orgId>.jsonPour les besoins de reprise/débogage, le point de contrôle intermédiaire de l'analyse des workflows est écrit sous la forme githound_WorkflowAnalysis_<orgId>.json.
GitHound inclut désormais une base minimale de collecte entreprise via Git-HoundEnterprise.
Ce collecteur crée actuellement :
GH_EnterpriseGH_Organization pour les organisations membresGH_Contains de l'entreprise vers ses organisationsLa collecte des utilisateurs d'entreprise via Git-HoundEnterpriseUser ajoute :
GH_UserGH_HasMember de l'entreprise vers ces utilisateursLa collecte SAML d'entreprise via Git-HoundEnterpriseSamlProvider ajoute :
GH_SamlIdentityProviderGH_ExternalIdentityGH_HasSamlIdentityProvider de l'entreprise vers le fournisseurCe chemin nécessite une session adossée à un PAT car GitHub expose le SAML d'entreprise via enterprise.ownerInfo.
La collecte des équipes d'entreprise via Git-HoundEnterpriseTeam ajoute :
GH_EnterpriseTeamGH_AssignedTo des équipes d'entreprise vers les organisations assignéesGH_MemberOf des équipes d'entreprise vers les nœuds GH_Team visibles par l'organisation, de type ent:, via la correspondance de propriétésmembers des équipes d'entreprise et les arêtes GH_HasRole des utilisateurs vers ces rôlesLa collecte des rôles d'entreprise via Git-HoundEnterpriseRole ajoute :
GH_EnterpriseRoleGH_Contains de l'entreprise vers ces rôlesGH_HasRole depuis les utilisateurs et équipes d'entreprise directement assignésowners par défaut, alimenté à partir de enterprise.ownerInfo.admins lorsque les données d'administration d'entreprise adossées à un PAT sont disponiblesPour l'instant, les chaînes brutes de permissions d'entreprise sont conservées sur le nœud GH_EnterpriseRole dans sa propriété permissions, plutôt que d'être développées en arêtes de permissions dédiées.
La collecte SCIM d'entreprise ajoute actuellement :
SCIM_UserSCIM_GroupSCIM_Provisioned de SCIM_User vers GH_ExternalIdentitySCIM_Provisioned de SCIM_Group vers GH_EnterpriseTeam lorsque GitHub expose le group_id de l'équipe d'entrepriseSCIM_MemberOf de SCIM_User vers SCIM_GroupCela donne à GitHound un pont agnostique au fournisseur entre le schéma SCIM partagé et le modèle natif d'identité et d'équipe de GitHub.
Lorsqu'un GH_SamlIdentityProvider collecté identifie le fournisseur d'identité en amont, GitHound peut également ajouter des arêtes de corrélation SCIM tenant compte du fournisseur dans la sortie sidecar 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 conserve la couche SCIM dans sa propre sortie sidecar afin que ces correspondances restent visibles sans mélanger les nœuds natifs SCIM dans le graphe principal natif GitHub de l'entreprise :
githound_<entId>.json contient les données natives GitHub de l'entreprisegithound_scim_<entId>.json contient les nœuds natifs SCIM et les arêtes de pont SCIMgithound_saml_<entId>.json contient les données SAML et d'identité externegithound_hybrid_<entId>.json contient les arêtes inter-modèles telles que SAML_Implements, SAML_HasAccount et GH_SyncedTogithound_saml_<entId>.json contient également la topologie SAML normalisée pour le fournisseur de services GitHub, y compris SAML_TrustsIssuer et SAML_HasAssertionConsumerService