
BloodHound Attack Research Kit

BARK расшифровывается как BloodHound Attack Research Kit. Это скрипт PowerShell, созданный для помощи команде BloodHound Enterprise в исследовании и непрерывной валидации примитивов атак. В настоящее время BARK ориентирован на пакет продуктов и услуг Microsoft Azure.
BARK не требует сторонних зависимостей. Функции BARK спроектированы максимально простыми и поддерживаемыми. Большинство функций — это очень простые обёртки для запросов к различным конечным точкам REST API. Базовые функции BARK даже не зависят друг от друга — вы можете извлечь почти любую функцию BARK, и она будет отлично работать как самостоятельная функция в ваших собственных скриптах.
Основной автор: Энди Роббинс @_wald0
Соавторы:
Существует множество способов импорта скрипта PowerShell. Вот один из них:
Сначала загрузите BARK.ps1, клонировав этот репозиторий или просто скопировав его содержимое с GitHub.
git clone https://github.com/BloodHoundAD/BARK
Теперь перейдите в каталог, где находится PS1:
cd BARK
Наконец, вы можете импортировать PS1 точечным методом:
. .\BARK.ps1
Нажмите Enter, и ваш экземпляр PowerShell получит доступ ко всем функциям BARK.
За очень редкими исключениями, конечные точки Azure API требуют аутентификации для взаимодействия. BARK включает несколько функций, которые помогут вам получить необходимые токены для работы с MS Graph и Azure REST API. Любая функция BARK, взаимодействующая с Azure API, требующим аутентификации, потребует от вас предоставить токен.
Предположим, вы хотите вывести список всех пользователей в арендаторе Entra ID. Сначала необходимо получить токен, предназначенный для MS Graph. Есть много способов сделать это:
Если у вас есть комбинация имени пользователя и пароля для пользователя Entra в этом арендаторе, вы можете сначала получить токен обновления для пользователя с помощью функции BARK Get-EntraRefreshTokenWithUsernamePassword:
$MyRefreshTokenRequest = Get-EntraRefreshTokenWithUsernamePassword -username "[email protected]" -password "MyVeryCoolPassword" -TenantID "contoso.onmicrosoft.com"
В созданном объекте $MyRefreshTokenRequest будет содержаться токен обновления для вашего пользователя. Теперь вы можете запросить токен для MS Graph, используя этот токен обновления:
$MyMSGraphToken = Get-MSGraphTokenWithRefreshToken -RefreshToken $MyRefreshTokenRequest.refresh_token -TenantID "contoso.onmicrosoft.com"
Теперь новый объект $MyMSGraphToken будет содержать в одном из своих свойств JWT-токен для MS Graph для вашего пользователя. Теперь вы готовы использовать этот токен для вывода списка всех пользователей в арендаторе Entra:
$MyUsers = Get-AllEntraUsers -Token $MyMSGraphToken.access_token -ShowProgress
После завершения переменная $MyEntraUsers будет заполнена объектами, представляющими всех пользователей вашего арендатора Entra.
Get-AzureKeyVaultTokenWithClientCredentials запрашивает токен у STS с указанием Azure Vault в качестве ресурса/целевой аудитории, используя идентификатор клиента и секрет.Get-AzureKeyVaultTokenWithUsernamePassword запрашивает токен у STS с указанием Azure Vault в качестве ресурса/целевой аудитории, используя имя пользователя и пароль.Get-AzurePortalTokenWithRefreshToken запрашивает токен обновления портала Azure с использованием предоставленного пользователем токена обновления.Get-AzureRMTokenWithClientCredentials запрашивает JWT-токен AzureRM с идентификатором клиента и секретом. Полезно для аутентификации в качестве субъекта-службы Entra.Get-AzureRMTokenWithPortalAuthRefreshToken запрашивает JWT-токен AzureRM с использованием предоставленного пользователем токена обновления аутентификации портала Azure.Get-AzureRMTokenWithRefreshToken запрашивает JWT-токен AzureRM с предоставленным пользователем токеном обновления.Get-AzureRMTokenWithUsernamePassword запрашивает JWT-токен AzureRM с именем пользователя и паролем.Get-EntraRefreshTokenWithUsernamePassword запрашивает набор токенов, включая токен обновления, с login.microsoftonline.com, используя имя пользователя и пароль. Эта операция завершится ошибкой, если у пользователя включена многофакторная аутентификация или действует политика условного доступа.Get-MSGraphTokenWithClientCredentials запрашивает JWT-токен MS Graph с идентификатором клиента и секретом. Полезно для аутентификации в качестве субъекта-службы Entra.Get-MSGraphTokenWithPortalAuthRefreshToken запрашивает JWT-токен MS Graph с использованием предоставленного пользователем токена обновления аутентификации портала Azure.Get-MSGraphTokenWithRefreshToken запрашивает JWT-токен MS Graph с предоставленным пользователем токеном обновления.Get-MSGraphTokenWithUsernamePassword запрашивает JWT-токен MS Graph с именем пользователя и паролем.Parse-JWTToken принимает JWT в кодировке Base64 и расшифровывает его. Полезно для проверки правильности аудитории и утверждений токена.Функции на основе токенов обновления в BARK основаны на функциях из TokenTactics от Стива Бороша.
Get-AllEntraApps собирает все объекты регистрации приложений Entra.Get-AllEntraGroups собирает все группы Entra.Get-AllEntraRoles собирает все роли администратора Entra.Get-AllEntraServicePrincipals собирает все объекты субъектов-служб Entra.Get-AllEntraUsers собирает всех пользователей Entra.Get-EntraAppOwner собирает владельцев регистрации приложения Entra.Get-EntraDeviceRegisteredUsers собирает пользователей устройства Entra.Get-EntraGroupMembers собирает участников группы Entra.Get-EntraGroupOwner собирает владельцев группы Entra.Get-EntraRoleTemplates собирает шаблоны ролей администратора Entra.Get-EntraServicePrincipal собирает субъект-службу Entra.Get-EntraServicePrincipalOwner собирает владельцев субъекта-службы Entra.Get-EntraTierZeroServicePrincipals собирает субъекты-службы Entra, которым назначена роль администратора Entra нулевого уровня или роль приложения MS Graph нулевого уровня.Get-MGAppRoles собирает роли приложений, предоставляемые субъектом-службой MS Graph.