- 详情
- 目录
吠
BARK 代表 BloodHound 攻击研究工具包。它是一个 PowerShell 脚本,旨在帮助 BloodHound Enterprise 团队研究和持续验证滥用原语。BARK 目前专注于 Microsoft 的 Azure 产品和服务套件。
BARK 不需要第三方依赖。BARK 的功能被设计为尽可能简单和可维护。大多数函数都是非常简单的包装器,用于向各种 REST API 端点发出请求。BARK 的基本功能甚至不需要彼此 - 您可以从 BARK 中提取几乎任何 BARK 功能,并且它将作为您自己的脚本中的独立功能完美运行。
作者和贡献者
主要作者:Andy Robbins @_wald0
贡献者:Jonas Bülow Knudsen @Jonas_B_K Fabian Bader @fabian_bader CravateRouge @CravateRouge g60ocR @g60ocR
入门
有多种方法可以导入 PowerShell 脚本。这是一种方法:
首先,通过克隆此存储库或简单地从 GitHub 复制/粘贴其原始内容来下载 BARK.ps1。
git clone https://github.com/BloodHoundAD/BARK
现在,cd 进入 PS1 所在的目录:
cd BARK
最后,您可以像这样点导入 PS1:
. .\BARK.ps1
按回车键,您的 PowerShell 实例现在可以访问 BARK 的所有功能。
运行你的第一个 BARK 命令
除了极少数例外,Azure API 端点需要身份验证才能与之交互。BARK 附带一些功能,可帮助您获取与 MS Graph 和 Azure REST API 交互所需的令牌。任何与需要身份验证的 Azure API 交互的 BARK 函数都需要你提供令牌。
假设您想要列出 Azure Active Directory 租户中的所有用户。您首先需要获得一个适用于 MS Graph 的令牌。有很多方法可以获得这个令牌:
如果您有该租户中 AzureAD 用户的用户名/密码组合,您可以首先使用 BARK 的函数为该用户获取刷新令牌 Get-AZRefreshTokenWithUsernamePassword
:
$MyRefreshTokenRequest = Get-AZRefreshTokenWithUsernamePassword -username "arobbins@contoso.onmicrosoft.com" -password "MyVeryCoolPassword" -TenantID "contoso.onmicrosoft.com"
您刚刚创建的结果对象 $MyRefreshTokenRequest
将包含一个供您的用户使用的刷新令牌。您现在可以使用此刷新令牌请求 MS Graph 范围的令牌:
$MyMSGraphToken = Get-MSGraphTokenWithRefreshToken -RefreshToken $MyRefreshTokenRequest.refresh_token -TenantID "contoso.onmicrosoft.com"
现在,这个新对象 $MyMSGraphToken
将为您的用户提供一个 MS Graph-scoped JWT 作为其属性值之一。您现在可以使用此令牌列出 AzureAD 租户中的所有用户:
$MyAADUsers = Get-AllAzureADUsers -Token $MyMSGraphToken.access_token -ShowProgress
完成后,$MyAADUsers
变量将由代表 AzureAD 租户中所有用户的对象填充。
令牌管理和操作功能
-
Parse-JWTToken
将采用 Base64 编码的 JWT 作为输入并为您解析它。用于验证正确的令牌受众和声明。 -
Get-AZRefreshTokenWithUsernamePassword
使用用户提供的用户名和密码从 login.microsoftonline.com 请求令牌集合,包括刷新令牌。如果用户有多重身份验证要求或受条件访问策略的影响,这将失败。 -
Get-MSGraphTokenWithClientCredentials
请求具有客户端 ID 和密码的 MS Graph 范围的 JWT。对于作为 AzureAD 服务主体进行身份验证很有用。 -
Get-MSGraphTokenWithRefreshToken
使用用户提供的刷新令牌请求 MS Graph 范围的 JWT。 -
Get-MSGraphTokenWithPortalAuthRefreshToken
使用用户提供的 Azure Portal Auth Refresh 令牌请求 MS Graph 范围的 JWT。 -
Get-AzureRMTokenWithClientCredentials
请求具有客户端 ID 和机密的 AzureRM 范围的 JWT。对于作为 AzureAD 服务主体进行身份验证很有用。 -
Get-ARMTokenWithPortalAuthRefreshToken
使用用户提供的 Azure Portal Auth Refresh 令牌请求 AzureRM 范围的 JWT。 -
Get-ARMTokenWithRefreshToken
使用用户提供的刷新令牌请求 AzureRM 范围的 JWT。 -
Get-AzurePortalTokenWithRefreshToken
使用用户提供的刷新令牌请求 Azure 门户身份验证刷新令牌。
BARK 中基于刷新令牌的功能基于[ https://twitter.com/424f424f](Steve Borosh)的https://github.com/rvrsh3ll/TokenTactics 中的功能[](https://twitter.com/424f424f](Steve)
滥用功能
-
Set-AZUserPassword
将尝试将另一个用户的密码设置为用户提供的新值。 -
Reset-AZUserPassword
将尝试重置另一个用户的密码。如果成功,输出将包含 Azure 生成的新用户密码 -
New-AzureRMRoleAssignment
将尝试将用户指定的 AzureRM 角色分配授予特定范围内的特定主体。 -
New-AppRegSecret
将尝试为现有的 AzureAD 应用注册创建新的机密。 -
New-ServicePrincipalSecret
将尝试为现有 AzureAD 服务主体创建新机密。 -
New-AppRoleAssignment
将尝试向服务主体授予应用程序角色。例如,您可以使用它来授予服务主体 RoleManagement.ReadWrite.Directory 应用程序角色。
枚举函数
-
Get-AzureRMRoleDefinitions
收集订阅范围内描述的所有角色定义,包括自定义角色。 -
Get-MGAppRoles
收集由 MS Graph 服务主体提供的应用程序角色。 -
Get-AllAzureADApps
收集所有 AzureAD 应用程序注册对象。 -
Get-AllAzureADServicePrincipals
收集所有 AzureAD 服务主体对象。 -
Get-AllAzureADUsers
收集所有 AzureAD 用户。 -
Get-AllAzureADGroups
收集所有 AzureAD 组。 -
Get-AllAzureRMSubscriptions
收集所有 AzureRM 订阅。
元函数
-
Test-AzureRMAddSelfToAzureRMRole
用于滥用验证测试,以确定具有特定权限的服务主体是否可以通过订阅授予自己用户访问管理员角色。 -
Test-AzureRMCreateFunction
用于滥用验证测试,以测试服务主体是否可以向现有函数应用程序添加新函数。 -
Invoke-AllAzureRMAbuseTests
执行所有 AzureRM 滥用验证测试并输出结果对象,该对象描述授予哪些 AzureRM 角色执行每个滥用的能力。 -
Remove-AbuseTestAzureRMRoles
是一个清理函数,用于删除在测试期间创建的 AzureRM 管理员角色。 -
Remove-AbuseTestServicePrincipals
通过删除在测试期间创建的服务主体来清理滥用测试。 -
New-TestAppReg
为滥用验证测试的明确目的创建一个应用程序注册对象。 -
New-TestSP
创建一个新的服务主体并将其与上述函数创建的应用相关联。 -
Test-MGAddSelfAsOwnerOfApp
用于滥用验证测试,以确定具有特定权限的服务主体是否可以授予自己现有 AzureAD 应用程序的所有权。 -
Test-MGAddSelfAsOwnerOfSP
用于滥用验证测试,以确定具有特定权限的服务主体是否可以授予自己现有 AzureAD 服务主体的所有权。 -
Test-MGAddSelfToAADRole
用于滥用验证测试,以确定具有特定权限的服务主体是否可以将自己添加到 AzureAD 管理员角色 - 例如全局管理员。 -
Test-MGAddSelfToMGAppRole
用于滥用验证测试,以确定具有特定权限的服务主体是否可以在未经管理员同意的情况下授予自己特定的 MS Graph 应用程序角色。 -
Test-MGAddOwnerToRoleEligibleGroup
用于测试服务主体是否可以授予自己对角色可分配组的明确所有权。 -
Test-MGAddMemberToRoleEligibleGroup
用于测试服务主体是否可以将自己添加到角色可分配组。 -
Test-MGAddSecretToSP
用于测试服务主体是否可以向现有服务主体添加新秘密。 -
Test-MGAddSecretToApp
用于测试服务主体是否可以向现有应用程序添加新机密。 -
Invoke-AllAzureMGAbuseTests
执行所有可以通过持有 MS Graph 应用程序角色来执行的滥用验证测试。返回一个对象,描述哪些权限成功执行了每个滥用测试。 -
Invoke-AllAzureADAbuseTests
执行可由授予 AzureAD 管理员角色的委托人执行的所有滥用验证测试。返回一个对象,描述哪些权限成功执行了每个滥用测试。 -
ConvertTo-Markdown
用于按摩 Invoke-Tests 函数的输出,以便在另一个平台中使用。
关于
BloodHound 攻击研究工具包
资源
执照
星星
守望者
叉子
发布
未发布任何版本
套餐
没有发布包