BARK significa Kit de investigación de ataque BloodHound. Es un script de PowerShell creado para ayudar al equipo de BloodHound Enterprise a investigar y validar continuamente las primitivas de abuso. BARK actualmente se centra en el conjunto de productos y servicios Azure de Microsoft.
BARK no requiere dependencias de terceros. Las funciones de BARK están diseñadas para ser lo más simples y fáciles de mantener posible. La mayoría de las funciones son contenedores muy simples para realizar solicitudes a varios puntos finales de API REST. Las funciones básicas de BARK ni siquiera se necesitan entre sí: puede extraer casi cualquier función BARK de BARK y funcionará perfectamente como una función independiente en sus propios scripts.
Autor principal: Andy Robbins @_wald0
Colaboradores:
Hay muchas formas de importar un script de PowerShell. Aquí hay una manera:
Primero, descargue BARK.ps1 clonando este repositorio o simplemente copiando y pegando su contenido sin formato desde GitHub.
git clone https://github.com/BloodHoundAD/BARK
Ahora, ingresa al directorio donde está la PS1:
cd BARK
Finalmente, puedes importar la PS1 de esta manera:
. .BARK.ps1
Presione Intro y su instancia de PowerShell ahora tendrá acceso a todas las funciones de BARK.
Con muy pocas excepciones, los puntos finales de la API de Azure requieren autenticación para interactuar. BARK viene con algunas funciones que lo ayudarán a adquirir los tokens necesarios para interactuar con las API REST de MS Graph y Azure. Cualquier función BARK que interactúe con una API de Azure que requiera autenticación requerirá que proporcione un token.
Supongamos que desea enumerar todos los usuarios en un inquilino de Entra ID. Primero debe obtener un token con alcance para MS Graph. Hay muchas formas de conseguir este token:
Si tiene una combinación de nombre de usuario y contraseña para un usuario de Entra en ese inquilino, primero puede adquirir 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 acaba de crear, $MyRefreshTokenRequest
, tendrá como parte un token de actualización para su usuario. Ahora puede solicitar un token con ámbito de MS Graph utilizando 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 ámbito de MS Graph para su usuario. Ahora está listo para usar este token para enumerar todos los usuarios en el inquilino de Entra:
$MyUsers = Get-AllEntraUsers -Token $MyMSGraphToken.access_token -ShowProgress
Una vez terminado, la variable $MyEntraUsers
se completará con objetos que representan a todos los usuarios de su inquilino de Entra.
Get-AzureKeyVaultTokenWithClientCredentials
solicita un token de STS con Azure Vault especificado como recurso o audiencia prevista mediante un identificador de cliente y un secreto.Get-AzureKeyVaultTokenWithUsernamePassword
solicita un token de STS con Azure Vault especificado como recurso o audiencia prevista mediante un nombre de usuario y una contraseña proporcionados por el usuario.Get-AzurePortalTokenWithRefreshToken
solicita un token de actualización de autenticación de Azure Portal con un token de actualización proporcionado por el usuario.Get-AzureRMTokenWithClientCredentials
solicita un JWT con ámbito de AzureRM con un identificador de cliente y un secreto. Útil para autenticarse como entidad de servicio de Entra.Get-AzureRMTokenWithPortalAuthRefreshToken
solicita un JWT con ámbito de AzureRM con un token de actualización de autenticación de Azure Portal proporcionado por el usuario.Get-AzureRMTokenWithRefreshToken
solicita un JWT con ámbito de AzureRM con un token de actualización proporcionado por el usuario.Get-AzureRMTokenWithUsernamePassword
solicita un JWT con ámbito de AzureRM con un nombre de usuario y una contraseña proporcionados por el usuario.Get-EntraRefreshTokenWithUsernamePassword
solicita una colección de tokens, incluido un token de actualización, de login.microsoftonline.com con un nombre de usuario y una contraseña proporcionados por el usuario. Esto fallará si el usuario tiene requisitos de autenticación multifactor o se ve afectado por una política de acceso condicional.Get-MSGraphTokenWithClientCredentials
solicita un JWT con ámbito de MS Graph con un ID de cliente y un secreto. Útil para autenticarse como entidad de servicio de Entra.Get-MSGraphTokenWithPortalAuthRefreshToken
solicita un JWT con ámbito de MS Graph con un token de actualización de autenticación de Azure Portal proporcionado por el usuario.Get-MSGraphTokenWithRefreshToken
solicita un JWT con ámbito de MS Graph con un token de actualización proporcionado por el usuario.Get-MSGraphTokenWithUsernamePassword
solicita un JWT con ámbito de MS Graph con un nombre de usuario y una contraseña proporcionados por el usuario.Parse-JWTToken
tomará un JWT codificado en Base64 como entrada y lo analizará por usted. Útil para verificar la audiencia de tokens y las afirmaciones correctas.Las funciones de actualización basadas en tokens en BARK se basan en funciones en TokenTactics de Steve Borosh.
Get-AllEntraApps
recopila todos los objetos de registro de la aplicación 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 principales del servicio Entra.Get-AllEntraUsers
recopila todos los usuarios de Entra.Get-EntraAppOwner
recopila propietarios de un registro de aplicación Entra.Get-EntraDeviceRegisteredUsers
recopila usuarios de un dispositivo Entra.Get-EntraGroupMembers
recopila miembros de un grupo Entra.Get-EntraGroupOwner
recopila propietarios de un grupo Entra.Get-EntraRoleTemplates
recopila plantillas de funciones 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 entidades principales de servicio de Entra que tienen una asignación de función de administrador de Entra de nivel cero o de función de aplicación MS Graph de nivel cero.Get-MGAppRoles
recopila las funciones de la aplicación que la entidad de servicio de MS Graph pone a disposición. Get-AllAzureManagedIdentityAssignments
recopila todas las asignaciones de identidades administradas.Get-AllAzureRMAKSClusters
recopila todos los clústeres de servicios de Kubernetes bajo una suscripción.Get-AllAzureRMAutomationAccounts
recopila todas las cuentas de automatización de una suscripción.Get-AllAzureRMAzureContainerRegistries
recopila todos los registros de contenedores bajo una suscripción.Get-AllAzureRMFunctionApps
recopila todas las aplicaciones de funciones bajo una suscripción.Get-AllAzureRMKeyVaults
recopila todos los almacenes de claves de una suscripción.Get-AllAzureRMLogicApps
recopila todas las aplicaciones lógicas bajo una suscripción.Get-AllAzureRMResourceGroups
recopila todos los grupos de recursos de una suscripción.Get-AllAzureRMSubscriptions
recopila todas las suscripciones de AzureRM.Get-AllAzureRMVMScaleSetsVMs
recopila todas las máquinas virtuales en un conjunto de escalado de VM.Get-AllAzureRMVMScaleSets
recopila todos los conjuntos de escalado de máquinas virtuales bajo una suscripción.Get-AllAzureRMVirtualMachines
recopila todas las máquinas virtuales bajo una suscripción.Get-AllAzureRMWebApps
recopila todas las aplicaciones web bajo una suscripción.Get-AzureAutomationAccountRunBookOutput
ejecuta un runbook de cuenta de automatización y recupera su resultado.Get-AzureFunctionAppFunctionFile
recopila el archivo sin formato (normalmente código fuente) de una función de aplicación de funciones.Get-AzureFunctionAppFunctions
recopila todas las funciones en una aplicación de funciones.Get-AzureFunctionAppMasterKeys
recopila todas las claves maestras en una aplicación de funciones.Get-AzureFunctionOutput
ejecuta una función de aplicación de funciones y recupera su resultado.Get-AzureRMKeyVaultSecretValue
recopila un valor secreto del almacén de claves.Get-AzureRMKeyVaultSecretVersions
recopila todas las versiones de un secreto del almacén de claves.Get-AzureRMKeyVaultSecrets
recopila todos los secretos en un almacén de claves.Get-AzureRMRoleAssignments
recopila todas las asignaciones de roles en un objeto.Get-AzureRMRoleDefinitions
recopila todas las definiciones de roles descritas en un ámbito de suscripción, incluidos los roles personalizados.Get-AzureRMWebApp
recopila una aplicación web. Get-IntuneManagedDevices
recopila dispositivos administrados por Intune.Get-IntuneRoleDefinitions
recopila las definiciones de roles de Intune disponibles. Add-MemberToEntraGroup
intentará agregar un director a un grupo Entra.Enable-EntraRole
intentará habilitar (o "activar") la función Entra.New-EntraAppOwner
intentará agregar un nuevo propietario a una aplicación Entra.New-EntraAppRoleAssignment
intentará otorgar una función de aplicación a una entidad de servicio. Por ejemplo, puede usar esto para otorgar a una entidad de servicio el rol de aplicación RoleManagement.ReadWrite.Directory.New-EntraAppSecret
intentará crear un nuevo secreto para un registro de aplicación Entra existente.New-EntraGroupOwner
intentará agregar un nuevo propietario a un grupo Entra.New-EntraRoleAssignment
intentará asignar una función de administrador de Entra a un director específico.New-EntraServicePrincipalOwner
intentará agregar un nuevo propietario a una entidad de servicio de Entra.New-EntraServicePrincipalSecret
intentará crear un nuevo secreto para una entidad de servicio de Entra existente.Reset-EntraUserPassword
intentará restablecer la contraseña de otro usuario. Si tiene éxito, el resultado contendrá la nueva contraseña del usuario generada por Azure.Set-EntraUserPassword
intentará establecer la contraseña de otro usuario en un nuevo valor proporcionado por el usuario. Invoke-AzureRMAKSRunCommand
indicará al clúster de AKS que ejecute un comando.Invoke-AzureRMVMRunCommand
intentará ejecutar un comando en una máquina virtual.Invoke-AzureRMWebAppShellCommand
intentará ejecutar un comando en un contenedor de aplicación web.Invoke-AzureVMScaleSetVMRunCommand
intentará ejecutar un comando en una máquina virtual de VM Scale Set.New-AzureAutomationAccountRunBook
intentará agregar un runbook a una cuenta de automatización.New-AzureKeyVaultAccessPolicy
intentará conceder a una entidad de seguridad permisos "Obtener" y "Lista" sobre los secretos, las claves y los certificados de un almacén de claves.New-AzureRMRoleAssignment
intentará otorgar una asignación de rol de AzureRM especificada por el usuario a una entidad de seguridad determinada en un ámbito determinado.New-PowerShellFunctionAppFunction
intentará crear una nueva función de PowerShell en una aplicación de funciones. ConvertTo-Markdown
se utiliza para masajear la salida de las funciones Invoke-Tests para su uso en otra plataforma.Invoke-AllAzureMGAbuseTests
realiza todas las pruebas de validación de abuso que se pueden ejecutar manteniendo una función de aplicación MS Graph. Devuelve un objeto que describe qué privilegios tuvieron éxito al realizar cada prueba de abuso.Invoke-AllAzureRMAbuseTests
realiza todas las pruebas de validación de abuso de AzureRM y genera un objeto resultante que describe qué roles de AzureRM otorgaron la capacidad de realizar cada abuso.Invoke-AllEntraAbuseTests
realiza todas las pruebas de validación de abuso que pueden ejecutar los directores a los que se les otorgan funciones de administrador de Entra. Devuelve un objeto que describe qué privilegios tuvieron éxito al realizar cada prueba de abuso.New-EntraIDAbuseTestSPs
crea una nueva entidad de servicio por función de administrador de Entra activa y otorga a cada entidad de servicio la función adecuada. Devuelve las credenciales en texto sin formato creadas para cada director de servicio.New-EntraIDAbuseTestUsers
crea un nuevo usuario por función de administrador activa de Entra y otorga a cada usuario la función adecuada. Devuelve las credenciales en texto sin formato creadas para cada usuario.New-IntuneAbuseTestUsers
crea un nuevo usuario por función de Intune y otorga a cada usuario la función adecuada. Devuelve las credenciales en texto sin formato creadas para cada usuario.New-MSGraphAppRoleTestSPs
crea una nueva entidad de servicio por función de la aplicación MS Graph y otorga a cada entidad de servicio la función adecuada. Devuelve las credenciales en texto sin formato creadas para cada director de servicio.New-TestAppReg
crea un objeto de registro de aplicación con el propósito explícito de realizar pruebas de validación de abuso.New-TestSP
crea una nueva entidad de servicio y la asocia con la aplicación creada por la función anterior.Remove-AbuseTestAzureRMRoles
es una función de limpieza para eliminar roles de administrador de AzureRM creados durante las pruebas.Remove-AbuseTestServicePrincipals
limpia las pruebas de abuso eliminando los principios de servicio que se crearon durante las pruebas.Test-AzureRMAddSelfToAzureRMRole
se usa en pruebas de validación de abuso para determinar si una entidad de servicio con ciertos derechos puede otorgarse a sí misma la función de administrador de acceso de usuario a través de una suscripción.Test-AzureRMCreateFunction
se usa en pruebas de validación de abuso para probar si una entidad de servicio puede agregar una nueva función a una aplicación de funciones existente.Test-AzureRMPublishAutomationAccountRunBook
se usa para probar si una entidad de servicio puede publicar un nuevo runbook en una cuenta de automatización existente.Test-AzureRMVMRunCommand
se usa para probar si una entidad principal puede ejecutar un comando en una máquina virtual existente.Test-MGAddMemberToNonRoleEligibleGroup
se usa para probar si la entidad de servicio puede agregarse a un grupo elegible que no sea de función.Test-MGAddMemberToRoleEligibleGroup
se usa para probar si la entidad de servicio puede agregarse a un grupo elegible para roles.Test-MGAddOwnerToNonRoleEligibleGroup
se usa para probar si una entidad de servicio puede otorgarse a sí misma propiedad explícita de un grupo elegible que no sea de rol.Test-MGAddOwnerToRoleEligibleGroup
se usa para probar si una entidad de servicio puede otorgarse a sí misma la propiedad explícita de un grupo elegible para roles.Test-MGAddRootCACert
se usa para probar si una entidad de servicio puede agregar un nuevo certificado de CA raíz al inquilino.Test-MGAddSecretToApp
se usa para probar si la entidad de servicio puede agregar un nuevo secreto a una aplicación existente.Test-MGAddSecretToSP
se usa para probar si la entidad de servicio puede agregar un nuevo secreto a una entidad de servicio existente.Test-MGAddSelfAsOwnerOfApp
se utiliza en pruebas de validación de abuso para determinar si una entidad de servicio con un privilegio particular puede otorgarse a sí misma la propiedad de una aplicación Entra existente.Test-MGAddSelfAsOwnerOfSP
se utiliza en pruebas de validación de abuso para determinar si una entidad de servicio con un privilegio particular puede otorgarse la propiedad de una entidad de servicio de Entra existente.Test-MGAddSelfToEntraRole
se utiliza en pruebas de validación de abuso para determinar si una entidad de servicio con un privilegio particular puede agregarse a una función de administrador de Entra (administrador global, por ejemplo).Test-MGAddSelfToMGAppRole
se usa en pruebas de validación de abuso para determinar si una entidad de servicio con un privilegio particular puede otorgarse a sí misma una función particular de la aplicación MS Graph sin el consentimiento del administrador.