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 utilizador a um principal específico num determinado âmbito.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ções.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.