
BloodHound Attack Research Kit

BARK steht für BloodHound Attack Research Kit. Es ist ein PowerShell-Skript, das entwickelt wurde, um das BloodHound Enterprise Team bei der Erforschung und kontinuierlichen Validierung von Missbrauchsprimitiven zu unterstützen. BARK konzentriert sich derzeit auf Microsofts Azure-Produktpalette und -Dienste.
BARK benötigt keine Abhängigkeiten von Drittanbietern. Die Funktionen von BARK sind so einfach und wartbar wie möglich gestaltet. Die meisten Funktionen sind sehr einfache Wrapper für Anfragen an verschiedene REST-API-Endpunkte. Die grundlegenden Funktionen von BARK benötigen nicht einmal einander - Sie können fast jede BARK-Funktion aus BARK herausnehmen und sie wird perfekt als eigenständige Funktion in Ihren eigenen Skripten funktionieren.
Hauptautor: Andy Robbins @_wald0
Mitwirkende:
Es gibt viele Möglichkeiten, ein PowerShell-Skript zu importieren. Hier ist eine Möglichkeit:
Laden Sie zuerst BARK.ps1 herunter, indem Sie dieses Repository klonen oder einfach die Rohinhalte von GitHub kopieren und einfügen.
git clone https://github.com/BloodHoundAD/BARK
Wechseln Sie nun mit cd in das Verzeichnis, in dem sich die PS1-Datei befindet:
cd BARK
Schließlich können Sie die PS1-Datei wie folgt dot-importieren:
. .\BARK.ps1
Drücken Sie die Eingabetaste, und Ihre PowerShell-Instanz hat nun Zugriff auf alle Funktionen von BARK.
Mit wenigen Ausnahmen erfordern Azure-API-Endpunkte eine Authentifizierung für die Interaktion. BARK enthält einige Funktionen, die Ihnen helfen, die erforderlichen Token für die Interaktion mit den MS Graph- und Azure-REST-APIs zu erhalten. Jede BARK-Funktion, die mit einer Azure-API interagiert, die eine Authentifizierung erfordert, benötigt die Angabe eines Tokens.
Angenommen, Sie möchten alle Benutzer in einem Entra-ID-Mandanten auflisten. Zuerst müssen Sie ein Token mit MS Graph-Bereich erhalten. Es gibt viele Möglichkeiten, dieses Token zu erhalten:
Wenn Sie eine Benutzername/Kennwort-Kombination für einen Entra-Benutzer in diesem Mandanten haben, können Sie zunächst ein Aktualisierungstoken für den Benutzer mit der Funktion Get-EntraRefreshTokenWithUsernamePassword von BARK abrufen:
$MyRefreshTokenRequest = Get-EntraRefreshTokenWithUsernamePassword -username "[email protected]" -password "MyVeryCoolPassword" -TenantID "contoso.onmicrosoft.com"
Das resultierende Objekt, das Sie gerade erstellt haben, $MyRefreshTokenRequest, wird als Teil davon ein Aktualisierungstoken für Ihren Benutzer enthalten. Sie können nun ein MS Graph-bezogenes Token mit diesem Aktualisierungstoken anfordern:
$MyMSGraphToken = Get-MSGraphTokenWithRefreshToken -RefreshToken $MyRefreshTokenRequest.refresh_token -TenantID "contoso.onmicrosoft.com"
Dieses neue Objekt, $MyMSGraphToken, wird als einen seiner Eigenschaftswerte ein MS Graph-bezogenes JWT für Ihren Benutzer enthalten. Sie sind nun bereit, dieses Token zu verwenden, um alle Benutzer im Entra-Mandanten aufzulisten:
$MyUsers = Get-AllEntraUsers -Token $MyMSGraphToken.access_token -ShowProgress
Nach Abschluss wird die Variable $MyEntraUsers mit Objekten gefüllt, die alle Benutzer in Ihrem Entra-Mandanten repräsentieren.
Get-AzureKeyVaultTokenWithClientCredentials fordert ein Token von STS an, wobei Azure Vault als Ressource/Zielgruppe angegeben wird, unter Verwendung einer Client-ID und eines Geheimnisses.Get-AzureKeyVaultTokenWithUsernamePassword fordert ein Token von STS an, wobei Azure Vault als Ressource/Zielgruppe angegeben wird, unter Verwendung eines benutzerbereitgestellten Benutzernamens und Kennworts.Get-AzurePortalTokenWithRefreshToken fordert ein Azure-Portal-Authentifizierungs-Aktualisierungstoken mit einem benutzerbereitgestellten Aktualisierungstoken an.Get-AzureRMTokenWithClientCredentials fordert ein AzureRM-bezogenes JWT mit einer Client-ID und einem Geheimnis an. Nützlich zur Authentifizierung als Entra-Dienstprinzipal.Get-AzureRMTokenWithPortalAuthRefreshToken fordert ein AzureRM-bezogenes JWT mit einem benutzerbereitgestellten Azure-Portal-Authentifizierungs-Aktualisierungstoken an.Get-AzureRMTokenWithRefreshToken fordert ein AzureRM-bezogenes JWT mit einem benutzerbereitgestellten Aktualisierungstoken an.Get-AzureRMTokenWithUsernamePassword fordert ein AzureRM-bezogenes JWT mit einem benutzerbereitgestellten Benutzernamen und Kennwort an.Get-EntraRefreshTokenWithUsernamePassword fordert eine Sammlung von Token, einschließlich eines Aktualisierungstokens, von login.microsoftonline.com mit einem benutzerbereitgestellten Benutzernamen und Kennwort an. Dies schlägt fehl, wenn der Benutzer Multi-Faktor-Authentifizierungsanforderungen hat oder von einer Richtlinie für bedingten Zugriff betroffen ist.Get-MSGraphTokenWithClientCredentials fordert ein MS Graph-bezogenes JWT mit einer Client-ID und einem Geheimnis an. Nützlich zur Authentifizierung als Entra-Dienstprinzipal.Get-MSGraphTokenWithPortalAuthRefreshToken fordert ein MS Graph-bezogenes JWT mit einem benutzerbereitgestellten Azure-Portal-Authentifizierungs-Aktualisierungstoken an.Get-MSGraphTokenWithRefreshToken fordert ein MS Graph-bezogenes JWT mit einem benutzerbereitgestellten Aktualisierungstoken an.Get-MSGraphTokenWithUsernamePassword fordert ein MS Graph-bezogenes JWT mit einem benutzerbereitgestellten Benutzernamen und Kennwort an.Parse-JWTToken nimmt ein Base64-kodiertes JWT als Eingabe und parst es für Sie. Nützlich zur Überprüfung der korrekten Token-Zielgruppe und -Ansprüche.Die auf Aktualisierungstoken basierenden Funktionen in BARK basieren auf Funktionen in TokenTactics von Steve Borosh.
Get-AllEntraApps sammelt alle Entra-Anwendungsregistrierungsobjekte.Get-AllEntraGroups sammelt alle Entra-Gruppen.Get-AllEntraRoles sammelt alle Entra-Administratorrollen.Get-AllEntraServicePrincipals sammelt alle Entra-Dienstprinzipalobjekte.Get-AllEntraUsers sammelt alle Entra-Benutzer.Get-EntraAppOwner sammelt Besitzer einer Entra-App-Registrierung.Get-EntraDeviceRegisteredUsers sammelt Benutzer eines Entra-Geräts.Get-EntraGroupMembers sammelt Mitglieder einer Entra-Gruppe.Get-EntraGroupOwner sammelt Besitzer einer Entra-Gruppe.Get-EntraRoleTemplates sammelt Entra-Administratorrollenvorlagen.Get-EntraServicePrincipal sammelt einen Entra-Dienstprinzipal.Get-EntraServicePrincipalOwner sammelt Besitzer eines Entra-Dienstprinzipals.Get-EntraTierZeroServicePrincipals sammelt Entra-Dienstprinzipale, die eine Tier-Zero-Entra-Administratorrolle oder eine Tier-Zero-MS-Graph-App-Rollenzuweisung haben.Get-MGAppRoles sammelt die von der MS Graph-Dienstprinzipal verfügbar gemachten App-Rollen.