
Kit de Investigación de Ataques BloodHound

BARK significa BloodHound Attack Research Kit. Es un script de PowerShell diseñado para ayudar al equipo de BloodHound Enterprise a investigar y validar continuamente primitivas de abuso. BARK actualmente se enfoca en el conjunto de productos y servicios de Microsoft Azure.
BARK no requiere dependencias de terceros. Las funciones de BARK están diseñadas para ser lo más simples y mantenibles posible. La mayoría de las funciones son envoltorios muy simples para realizar solicitudes a varios endpoints de API REST. Las funciones básicas de BARK ni siquiera se necesitan entre sí: puedes extraer casi cualquier función de BARK y funcionará perfectamente como una función independiente en tus propios scripts.
Autor principal: Andy Robbins @_wald0
Contribuidores:
Hay muchas formas de importar un script de PowerShell. Aquí hay una:
Primero, descarga BARK.ps1 clonando este repositorio o simplemente copiando y pegando su contenido sin formato desde GitHub.
git clone https://github.com/BloodHoundAD/BARK
Ahora, navega al directorio donde está el PS1:
cd BARK
Finalmente, puedes importar el script con punto así:
. .\BARK.ps1
Presiona Enter, y tu instancia de PowerShell ahora tendrá acceso a todas las funciones de BARK.
Con muy pocas excepciones, los endpoints de la API de Azure requieren autenticación para interactuar. BARK incluye algunas funciones que te ayudarán a adquirir los tokens necesarios para interactuar con las API de MS Graph y Azure REST. Cualquier función de BARK que interactúe con una API de Azure que requiera autenticación te pedirá que proporciones un token.
Supongamos que quieres listar todos los usuarios en un inquilino de Entra ID. Primero necesitas obtener un token con alcance para MS Graph. Hay muchas formas de obtener este token:
Si tienes una combinación de nombre de usuario/contraseña para un usuario de Entra en ese inquilino, puedes adquirir primero un token de actualización para el usuario usando la función Get-EntraRefreshTokenWithUsernamePassword de BARK:
$MyRefreshTokenRequest = Get-EntraRefreshTokenWithUsernamePassword -username "[email protected]" -password "MyVeryCoolPassword" -TenantID "contoso.onmicrosoft.com"
El objeto resultante que acabas de crear, $MyRefreshTokenRequest, tendrá como parte de él un token de actualización para tu usuario. Ahora puedes solicitar un token con alcance para MS Graph usando este token de actualización:
$MyMSGraphToken = Get-MSGraphTokenWithRefreshToken -RefreshToken $MyRefreshTokenRequest.refresh_token -TenantID "contoso.onmicrosoft.com"
Ahora este nuevo objeto, $MyMSGraphToken, tendrá como uno de sus valores de propiedad un JWT con alcance para MS Graph para tu usuario. Ahora estás listo para usar este token para listar todos los usuarios en el inquilino de Entra:
$MyUsers = Get-AllEntraUsers -Token $MyMSGraphToken.access_token -ShowProgress
Una vez terminado, la variable $MyEntraUsers se llenará con objetos que representan a todos los usuarios en tu inquilino de Entra.
Get-AzureKeyVaultTokenWithClientCredentials solicita un token de STS con Azure Vault especificado como recurso/público objetivo usando un ID de cliente y secreto.Get-AzureKeyVaultTokenWithUsernamePassword solicita un token de STS con Azure Vault especificado como recurso/público objetivo usando un nombre de usuario y contraseña proporcionados por el usuario.Get-AzurePortalTokenWithRefreshToken solicita un token de actualización de Auth de Azure Portal con un token de actualización proporcionado por el usuario.Get-AzureRMTokenWithClientCredentials solicita un JWT con alcance de AzureRM usando un ID de cliente y secreto. Útil para autenticarse como una entidad de servicio de Entra.Get-AzureRMTokenWithPortalAuthRefreshToken solicita un JWT con alcance de AzureRM usando un token de actualización de Auth de Azure Portal proporcionado por el usuario.Get-AzureRMTokenWithRefreshToken solicita un JWT con alcance de AzureRM usando un token de actualización proporcionado por el usuario.Get-AzureRMTokenWithUsernamePassword solicita un JWT con alcance de AzureRM usando un nombre de usuario y contraseña proporcionados por el usuario.Get-EntraRefreshTokenWithUsernamePassword solicita una colección de tokens, incluyendo un token de actualización, de login.microsoftonline.com con un nombre de usuario y contraseña proporcionados por el usuario. Esto fallará si el usuario tiene requisitos de autenticación multifactor o está afectado por una política de acceso condicional.Get-MSGraphTokenWithClientCredentials solicita un JWT con alcance de MS Graph usando un ID de cliente y secreto. Útil para autenticarse como una entidad de servicio de Entra.Get-MSGraphTokenWithPortalAuthRefreshToken solicita un JWT con alcance de MS Graph usando un token de actualización de Auth de Azure Portal proporcionado por el usuario.Get-MSGraphTokenWithRefreshToken solicita un JWT con alcance de MS Graph usando un token de actualización proporcionado por el usuario.Get-MSGraphTokenWithUsernamePassword solicita un JWT con alcance de MS Graph usando un nombre de usuario y contraseña proporcionados por el usuario.Parse-JWTToken toma un JWT codificado en Base64 como entrada y lo analiza por ti. Útil para verificar la audiencia y los claims correctos del token.Las funciones basadas en tokens de actualización en BARK se basan en funciones de TokenTactics de Steve Borosh.
Get-AllEntraApps recopila todos los objetos de registro de aplicaciones de Entra.Get-AllEntraGroups recopila todos los grupos de Entra.Get-AllEntraRoles recopila todos los roles de administrador de Entra.Get-AllEntraServicePrincipals recopila todos los objetos de entidad de servicio de Entra.Get-AllEntraUsers recopila todos los usuarios de Entra.Get-EntraAppOwner recopila los propietarios de un registro de aplicación de Entra.Get-EntraDeviceRegisteredUsers recopila los usuarios de un dispositivo de Entra.Get-EntraGroupMembers recopila los miembros de un grupo de Entra.Get-EntraGroupOwner recopila los propietarios de un grupo de Entra.Get-EntraRoleTemplates recopila las plantillas de roles de administrador de Entra.Get-EntraServicePrincipal recopila una entidad de servicio de Entra.Get-EntraServicePrincipalOwner recopila los propietarios de una entidad de servicio de Entra.Get-EntraTierZeroServicePrincipals recopila las entidades de servicio de Entra que tienen una asignación de rol de administrador de Entra de nivel cero o de rol de aplicación de MS Graph de nivel cero.Get-MGAppRoles recopila los roles de aplicación puestos a disposición por la entidad de servicio de MS Graph.