BARK significa Kit de pesquisa de ataque BloodHound. É um script do PowerShell criado para ajudar a equipe do BloodHound Enterprise a pesquisar e validar continuamente os primitivos de abuso. A BARK atualmente se concentra no conjunto de produtos e serviços Azure da Microsoft.
BARK não requer dependências de terceiros. As funções do BARK são projetadas para serem tão simples e fáceis de manter quanto possível. A maioria das funções são wrappers muito simples para fazer solicitações a vários endpoints da API REST. As funções básicas do BARK nem sequer exigem umas das outras - você pode extrair quase qualquer função BARK do BARK e ela funcionará perfeitamente como uma função independente em seus próprios scripts.
Autor principal: Andy Robbins @_wald0
Colaboradores:
Há muitas maneiras de importar um script do PowerShell. Aqui está uma maneira:
Primeiro, baixe BARK.ps1 clonando este repositório ou simplesmente copiando/colando seu conteúdo bruto do GitHub.
git clone https://github.com/BloodHoundAD/BARK
Agora, entre no diretório onde está o PS1:
cd BARK
Finalmente, você pode importar o PS1 assim:
. .BARK.ps1
Pressione Enter e sua instância do PowerShell agora terá acesso a todas as funções do BARK.
Com muito poucas exceções, os pontos finais da API do Azure requerem autenticação para interagir. BARK vem com algumas funções que ajudarão você a adquirir os tokens necessários para interagir com as APIs MS Graph e Azure REST. Qualquer função BARK que interaja com uma API do Azure que exija autenticação exigirá que você forneça um token.
Digamos que você queira listar todos os usuários em um locatário do Entra ID. Primeiro você precisa obter um token com escopo para MS Graph. Há muitas maneiras de obter esse token:
Se você tiver uma combinação de nome de usuário/senha para um usuário Entra nesse locatário, primeiro poderá adquirir um token de atualização para o usuário usando a função Get-EntraRefreshTokenWithUsernamePassword
do BARK:
$MyRefreshTokenRequest = Get-EntraRefreshTokenWithUsernamePassword -username "[email protected]" -password "MyVeryCoolPassword" -TenantID "contoso.onmicrosoft.com"
O objeto resultante que você acabou de criar, $MyRefreshTokenRequest
, terá como parte um token de atualização para seu usuário. Agora você pode solicitar um token com escopo MS Graph usando este token de atualização:
$MyMSGraphToken = Get-MSGraphTokenWithRefreshToken -RefreshToken $MyRefreshTokenRequest.refresh_token -TenantID "contoso.onmicrosoft.com"
Agora este novo objeto, $MyMSGraphToken
, terá como um de seus valores de propriedade um JWT com escopo MS Graph para seu usuário. Agora você está pronto para usar esse token para listar todos os usuários no locatário do Entra:
$MyUsers = Get-AllEntraUsers -Token $MyMSGraphToken.access_token -ShowProgress
Quando terminar, a variável $MyEntraUsers
será preenchida por objetos que representam todos os usuários no seu locatário Entra.
Get-AzureKeyVaultTokenWithClientCredentials
solicita um token do STS com o Azure Vault especificado como o recurso/público-alvo usando uma ID de cliente e um segredo.Get-AzureKeyVaultTokenWithUsernamePassword
solicita um token do STS com o Azure Vault especificado como o recurso/público-alvo usando um nome de usuário e uma senha fornecidos pelo usuário.Get-AzurePortalTokenWithRefreshToken
solicita um token de atualização de autenticação do Portal do Azure com um token de atualização fornecido pelo usuário.Get-AzureRMTokenWithClientCredentials
solicita um JWT com escopo do AzureRM com uma ID de cliente e um segredo. Útil para autenticação como entidade de serviço Entra.Get-AzureRMTokenWithPortalAuthRefreshToken
solicita um JWT com escopo AzureRM com um token de atualização de autenticação do Portal do Azure fornecido pelo usuário.Get-AzureRMTokenWithRefreshToken
solicita um JWT com escopo AzureRM com um token de atualização fornecido pelo usuário.Get-AzureRMTokenWithUsernamePassword
solicita um JWT com escopo AzureRM com um nome de usuário e uma senha fornecidos pelo usuário.Get-EntraRefreshTokenWithUsernamePassword
solicita uma coleção de tokens, incluindo um token de atualização, de login.microsoftonline.com com um nome de usuário e uma senha fornecidos pelo usuário. Isso falhará se o usuário tiver requisitos de autenticação multifator ou for afetado por uma política de acesso condicional.Get-MSGraphTokenWithClientCredentials
solicita um JWT com escopo MS Graph com um ID de cliente e segredo. Útil para autenticação como entidade de serviço Entra.Get-MSGraphTokenWithPortalAuthRefreshToken
solicita um JWT com escopo MS Graph com um token de atualização de autenticação do Portal do Azure fornecido pelo usuário.Get-MSGraphTokenWithRefreshToken
solicita um JWT com escopo MS Graph com um token de atualização fornecido pelo usuário.Get-MSGraphTokenWithUsernamePassword
solicita um JWT com escopo MS Graph com um nome de usuário e senha fornecidos pelo usuário.Parse-JWTToken
pegará um JWT codificado em Base64 como entrada e o analisará para você. Útil para verificar o público e as reivindicações corretas do token.As funções baseadas em token de atualização no BARK são baseadas nas funções do TokenTactics de Steve Borosh.
Get-AllEntraApps
coleta todos os objetos de registro do aplicativo Entra.Get-AllEntraGroups
coleta todos os grupos Entra.Get-AllEntraRoles
coleta todas as funções administrativas do Entra.Get-AllEntraServicePrincipals
coleta todos os objetos principais do serviço Entra.Get-AllEntraUsers
coleta todos os usuários do Entra.Get-EntraAppOwner
coleta proprietários de um registro de aplicativo Entra.Get-EntraDeviceRegisteredUsers
coleta usuários de um dispositivo Entra.Get-EntraGroupMembers
coleta membros de um grupo Entra.Get-EntraGroupOwner
coleta proprietários de um grupo Entra.Get-EntraRoleTemplates
coleta modelos de função de administrador Entra.Get-EntraServicePrincipal
coleta uma entidade de serviço Entra.Get-EntraServicePrincipalOwner
coleta proprietários de uma entidade de serviço Entra.Get-EntraTierZeroServicePrincipals
coleta entidades de serviço Entra que têm uma função de administrador Entra de nível zero ou uma atribuição de função de aplicativo MS Graph de nível zero.Get-MGAppRoles
coleta as funções de aplicativo disponibilizadas pela entidade de serviço MS Graph. Get-AllAzureManagedIdentityAssignments
coleta todas as atribuições de identidade gerenciadas.Get-AllAzureRMAKSClusters
coleta todos os clusters de serviço kubernetes sob uma assinatura.Get-AllAzureRMAutomationAccounts
coleta todas as contas de automação sob uma assinatura.Get-AllAzureRMAzureContainerRegistries
coleta todos os registros de contêiner sob uma assinatura.Get-AllAzureRMFunctionApps
coleta todos os aplicativos de funções sob uma assinatura.Get-AllAzureRMKeyVaults
coleta todos os cofres de chaves sob uma assinatura.Get-AllAzureRMLogicApps
coleta todos os aplicativos lógicos sob uma assinatura.Get-AllAzureRMResourceGroups
coleta todos os grupos de recursos sob uma assinatura.Get-AllAzureRMSubscriptions
coleta todas as assinaturas do AzureRM.Get-AllAzureRMVMScaleSetsVMs
recolhe todas as máquinas virtuais num conjunto de escala VM.Get-AllAzureRMVMScaleSets
coleta todos os conjuntos de dimensionamento de máquinas virtuais sob uma assinatura.Get-AllAzureRMVirtualMachines
coleta todas as máquinas virtuais sob uma assinatura.Get-AllAzureRMWebApps
coleta todos os aplicativos Web sob uma assinatura.Get-AzureAutomationAccountRunBookOutput
executa um runbook de conta de automação e recupera sua saída.Get-AzureFunctionAppFunctionFile
coleta o arquivo bruto (geralmente código-fonte) de uma função de aplicativo de função.Get-AzureFunctionAppFunctions
coleta todas as funções em um aplicativo de funções.Get-AzureFunctionAppMasterKeys
coleta todas as chaves mestras em um aplicativo de funções.Get-AzureFunctionOutput
executa uma função de aplicativo de funções e recupera sua saída.Get-AzureRMKeyVaultSecretValue
coleta um valor secreto do cofre de chaves.Get-AzureRMKeyVaultSecretVersions
coleta todas as versões de um segredo do cofre de chaves.Get-AzureRMKeyVaultSecrets
coleta todos os segredos em um cofre de chaves.Get-AzureRMRoleAssignments
coleta todas as atribuições de função em um objeto.Get-AzureRMRoleDefinitions
recolhe todas as definições de funções descritas num âmbito de subscrição, incluindo funções personalizadas.Get-AzureRMWebApp
coleta um aplicativo Web. Get-IntuneManagedDevices
coleta dispositivos gerenciados pelo Intune.Get-IntuneRoleDefinitions
coleta definições de função disponíveis do Intune. Add-MemberToEntraGroup
tentará adicionar um principal a um grupo Entra.Enable-EntraRole
tentará habilitar (ou "ativar") a função Entra.New-EntraAppOwner
tentará adicionar um novo proprietário a um aplicativo Entra.New-EntraAppRoleAssignment
tentará conceder uma função de aplicativo a uma entidade de serviço. Por exemplo, você pode usar isso para conceder a uma entidade de serviço a função de aplicativo RoleManagement.ReadWrite.Directory.New-EntraAppSecret
tentará criar um novo segredo para um registro de aplicativo Entra existente.New-EntraGroupOwner
tentará adicionar um novo proprietário a um grupo Entra.New-EntraRoleAssignment
tentará atribuir uma função de administrador do Entra a um principal especificado.New-EntraServicePrincipalOwner
tentará adicionar um novo proprietário a uma entidade de serviço Entra.New-EntraServicePrincipalSecret
tentará criar um novo segredo para uma entidade de serviço Entra existente.Reset-EntraUserPassword
tentará redefinir a senha de outro usuário. Se for bem-sucedido, a saída conterá a nova senha do usuário gerada pelo Azure.Set-EntraUserPassword
tentará definir a senha de outro usuário para um novo valor fornecido pelo usuário. Invoke-AzureRMAKSRunCommand
instruirá o cluster AKS a executar um comando.Invoke-AzureRMVMRunCommand
tentará executar um comando em uma VM.Invoke-AzureRMWebAppShellCommand
tentará executar um comando em um contêiner de aplicativo Web.Invoke-AzureVMScaleSetVMRunCommand
tentará executar um comando em uma VM de conjunto de dimensionamento de VM.New-AzureAutomationAccountRunBook
tentará adicionar um runbook a uma conta de automação.New-AzureKeyVaultAccessPolicy
tentará conceder permissões "Get" e "List" a um principal nos segredos, chaves e certificados de um cofre de chaves.New-AzureRMRoleAssignment
tentará conceder uma atribuição de função AzureRM especificada pelo usuário a uma entidade específica em um determinado escopo.New-PowerShellFunctionAppFunction
tentará criar uma nova função do PowerShell em um aplicativo de funções. ConvertTo-Markdown
é usado para massagear a saída das funções Invoke-Tests para uso em outra plataforma.Invoke-AllAzureMGAbuseTests
executa todos os testes de validação de abuso que podem ser executados mantendo uma função de aplicativo MS Graph. Retorna um objeto que descreve quais privilégios foram bem-sucedidos na execução de cada teste de abuso.Invoke-AllAzureRMAbuseTests
realiza todos os testes de validação de abuso do AzureRM e gera um objeto resultante que descreve quais funções do AzureRM concederam a capacidade de executar cada abuso.Invoke-AllEntraAbuseTests
executa todos os testes de validação de abuso que podem ser executados por principais com funções de administrador do Entra. Retorna um objeto que descreve quais privilégios foram bem-sucedidos na execução de cada teste de abuso.New-EntraIDAbuseTestSPs
cria uma nova entidade de serviço por função de administrador Entra ativa e concede a cada entidade de serviço a função apropriada. Retorna credenciais de texto simples criadas para cada serviço principal.New-EntraIDAbuseTestUsers
cria um novo usuário por função de administrador Entra ativa e concede a cada usuário a função apropriada. Retorna credenciais de texto simples criadas para cada usuário.New-IntuneAbuseTestUsers
cria um novo usuário por função do Intune e concede a cada usuário a função apropriada. Retorna credenciais de texto simples criadas para cada usuário.New-MSGraphAppRoleTestSPs
cria uma nova entidade de serviço por função de aplicativo MS Graph e concede a cada entidade de serviço a função apropriada. Retorna credenciais de texto simples criadas para cada serviço principal.New-TestAppReg
cria um objeto de registro de aplicativo para fins explícitos de teste de validação de abuso.New-TestSP
cria uma nova entidade de serviço e a associa ao aplicativo criado pela função acima.Remove-AbuseTestAzureRMRoles
é uma função de limpeza para remover funções de administração do AzureRM criadas durante o teste.Remove-AbuseTestServicePrincipals
limpa testes de abuso removendo as entidades de serviço que foram criadas durante o teste.Test-AzureRMAddSelfToAzureRMRole
usado em testes de validação de abuso para determinar se uma entidade de serviço com determinados direitos pode conceder a si mesma a função de Administrador de Acesso do Usuário por meio de uma assinatura.Test-AzureRMCreateFunction
usado em testes de validação de abuso para testar se uma entidade de serviço pode adicionar uma nova função a um aplicativo de funções existente.Test-AzureRMPublishAutomationAccountRunBook
é usado para testar se uma entidade de serviço pode publicar um novo runbook em uma conta de automação existente.Test-AzureRMVMRunCommand
é usado para testar se uma entidade principal pode executar um comando em uma VM existente.Test-MGAddMemberToNonRoleEligibleGroup
é usado para testar se a entidade de serviço pode adicionar-se a um grupo não elegível para funções.Test-MGAddMemberToRoleEligibleGroup
é usado para testar se a entidade de serviço pode adicionar-se a um grupo qualificado para função.Test-MGAddOwnerToNonRoleEligibleGroup
é usado para testar se uma entidade de serviço pode conceder a si mesma a propriedade explícita de um grupo não elegível para função.Test-MGAddOwnerToRoleEligibleGroup
é usado para testar se uma entidade de serviço pode conceder a si mesma a propriedade explícita de um grupo elegível de função.Test-MGAddRootCACert
é usado para testar se uma entidade de serviço pode adicionar um novo certificado de CA raiz ao locatário.Test-MGAddSecretToApp
é usado para testar se a entidade de serviço pode adicionar um novo segredo a um aplicativo existente.Test-MGAddSecretToSP
é usado para testar se a entidade de serviço pode adicionar um novo segredo a uma entidade de serviço existente.Test-MGAddSelfAsOwnerOfApp
é usado em testes de validação de abuso para determinar se uma entidade de serviço com um privilégio específico pode conceder a si mesma a propriedade de um aplicativo Entra existente.Test-MGAddSelfAsOwnerOfSP
é usado em testes de validação de abuso para determinar se uma entidade de serviço com um privilégio específico pode conceder a si mesma a propriedade de uma entidade de serviço Entra existente.Test-MGAddSelfToEntraRole
é usado em testes de validação de abuso para determinar se uma entidade de serviço com um privilégio específico pode adicionar-se a uma função de administrador Entra - Administrador Global, por exemplo.Test-MGAddSelfToMGAppRole
é usado em testes de validação de abuso para determinar se uma entidade de serviço com um privilégio específico pode conceder a si mesma uma função específica de aplicativo MS Graph sem o consentimento do administrador.