BARK означает «Набор для исследования атак BloodHound». Это сценарий PowerShell, созданный для помощи команде BloodHound Enterprise в исследовании и постоянной проверке примитивов злоупотреблений. В настоящее время BARK специализируется на наборе продуктов и услуг Microsoft Azure.
BARK не требует сторонних зависимостей. Функции BARK спроектированы так, чтобы быть максимально простыми и удобными в сопровождении. Большинство функций представляют собой очень простые оболочки для выполнения запросов к различным конечным точкам REST API. Базовые функции BARK даже не требуют друг друга — вы можете вытащить из BARK практически любую функцию BARK, и она будет прекрасно работать как отдельная функция в ваших собственных скриптах.
Основной автор: Энди Роббинс @_wald0
Авторы:
Существует множество способов импортировать сценарий PowerShell. Вот один из способов:
Сначала загрузите BARK.ps1, клонировав этот репозиторий или просто скопировав его необработанное содержимое с GitHub.
git clone https://github.com/BloodHoundAD/BARK
Теперь перейдите в каталог, где находится PS1:
cd BARK
Наконец, вы можете импортировать PS1 следующим образом:
. .BARK.ps1
Нажмите Enter, и ваш экземпляр PowerShell теперь получит доступ ко всем функциям BARK.
За очень немногими исключениями, конечные точки API Azure требуют аутентификации для взаимодействия. BARK поставляется с несколькими функциями, которые помогут вам получить необходимые токены для взаимодействия с API MS Graph и Azure REST. Любая функция BARK, которая взаимодействует с API Azure, требующим аутентификации, потребует от вас предоставления токена.
Допустим, вы хотите составить список всех пользователей в арендаторе 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 Portal с помощью предоставленного пользователем токена обновления.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. Get-AllAzureManagedIdentityAssignments собирает все назначения управляемых удостоверений.Get-AllAzureRMAKSClusters собирает все кластеры служб Kubernetes по подписке.Get-AllAzureRMAutomationAccounts собирает все учетные записи автоматизации по подписке.Get-AllAzureRMAzureContainerRegistries собирает все реестры контейнеров в рамках подписки.Get-AllAzureRMFunctionApps собирает все приложения-функции по подписке.Get-AllAzureRMKeyVaults собирает все хранилища ключей по подписке.Get-AllAzureRMLogicApps собирает все приложения логики по подписке.Get-AllAzureRMResourceGroups собирает все группы ресурсов по подписке.Get-AllAzureRMSubscriptions собирает все подписки AzureRM.Get-AllAzureRMVMScaleSetsVMs собирает все виртуальные машины в масштабируемом наборе виртуальных машин.Get-AllAzureRMVMScaleSets собирает все масштабируемые наборы виртуальных машин по подписке.Get-AllAzureRMVirtualMachines собирает все виртуальные машины по подписке.Get-AllAzureRMWebApps собирает все веб-приложения по подписке.Get-AzureAutomationAccountRunBookOutput запускает Runbook учетной записи автоматизации и получает его выходные данные.Get-AzureFunctionAppFunctionFile собирает необработанный файл (обычно исходный код) функции приложения-функции.Get-AzureFunctionAppFunctions собирает все функции приложения-функции.Get-AzureFunctionAppMasterKeys собирает все главные ключи приложения-функции.Get-AzureFunctionOutput запускает функцию приложения-функции и получает ее выходные данные.Get-AzureRMKeyVaultSecretValue собирает секретное значение хранилища ключей.Get-AzureRMKeyVaultSecretVersions собирает все версии секрета хранилища ключей.Get-AzureRMKeyVaultSecrets собирает все секреты в хранилище ключей.Get-AzureRMRoleAssignments собирает все назначения ролей для объекта.Get-AzureRMRoleDefinitions собирает все определения ролей, описанные в области подписки, включая настраиваемые роли.Get-AzureRMWebApp собирает веб-приложение. Get-IntuneManagedDevices собирает устройства, управляемые Intune.Get-IntuneRoleDefinitions собирает доступные определения ролей Intune. Add-MemberToEntraGroup попытается добавить участника в группу Entra.Enable-EntraRole попытается включить (или «активировать») роль Entra.New-EntraAppOwner попытается добавить нового владельца к приложению Entra.New-EntraAppRoleAssignment попытается предоставить роль приложения субъекту-службе. Например, вы можете использовать это, чтобы предоставить субъекту-службе роль приложения RoleManagement.ReadWrite.Directory.New-EntraAppSecret попытается создать новый секрет для существующей регистрации приложения Entra.New-EntraGroupOwner попытается добавить нового владельца в группу Entra.New-EntraRoleAssignment попытается назначить роль администратора Entra указанному субъекту.New-EntraServicePrincipalOwner попытается добавить нового владельца к субъекту службы Entra.New-EntraServicePrincipalSecret попытается создать новый секрет для существующего субъекта-службы Entra.Reset-EntraUserPassword попытается сбросить пароль другого пользователя. В случае успеха выходные данные будут содержать новый пароль пользователя, созданный Azure.Set-EntraUserPassword попытается установить для пароля другого пользователя новое значение, предоставленное пользователем. Invoke-AzureRMAKSRunCommand даст указание кластеру AKS выполнить команду.Invoke-AzureRMVMRunCommand попытается выполнить команду на виртуальной машине.Invoke-AzureRMWebAppShellCommand попытается выполнить команду в контейнере веб-приложения.Invoke-AzureVMScaleSetVMRunCommand попытается выполнить команду на виртуальной машине масштабируемого набора виртуальных машин.New-AzureAutomationAccountRunBook попытается добавить модуль Runbook в учетную запись автоматизации.New-AzureKeyVaultAccessPolicy попытается предоставить участнику разрешения «Get» и «List» для секретов, ключей и сертификатов хранилища ключей.New-AzureRMRoleAssignment попытается предоставить указанное пользователем назначение роли AzureRM определенному субъекту в определенной области.New-PowerShellFunctionAppFunction попытается создать новую функцию PowerShell в приложении-функции. ConvertTo-Markdown используется для обработки результатов функций Invoke-Tests для использования на другой платформе.Invoke-AllAzureMGAbuseTests выполняет все тесты проверки злоупотреблений, которые можно выполнить, удерживая роль приложения MS Graph. Возвращает объект, описывающий, какие привилегии были успешными при выполнении каждого теста на злоупотребление.Invoke-AllAzureRMAbuseTests выполняет все тесты проверки злоупотреблений AzureRM и выводит результирующий объект, описывающий, какие роли AzureRM предоставили возможность совершать каждое злоупотребление.Invoke-AllEntraAbuseTests выполняет все тесты проверки злоупотреблений, которые могут выполняться участниками, которым предоставлены роли администратора Entra. Возвращает объект, описывающий, какие привилегии были успешными при выполнении каждого теста на злоупотребление.New-EntraIDAbuseTestSPs создает нового субъекта-службы для каждой активной роли администратора Entra и предоставляет каждому субъекту-службе соответствующую роль. Возвращает учетные данные в виде обычного текста, созданные для каждого участника службы.New-EntraIDAbuseTestUsers создает нового пользователя для каждой активной роли администратора Entra и предоставляет каждому пользователю соответствующую роль. Возвращает учетные данные в виде обычного текста, созданные для каждого пользователя.New-IntuneAbuseTestUsers создает нового пользователя для каждой роли Intune и предоставляет каждому пользователю соответствующую роль. Возвращает учетные данные в виде обычного текста, созданные для каждого пользователя.New-MSGraphAppRoleTestSPs создает новый субъект-службу для каждой роли приложения MS Graph и предоставляет каждому субъекту-службе соответствующую роль. Возвращает учетные данные в виде обычного текста, созданные для каждого участника службы.New-TestAppReg создает объект регистрации приложения явно с целью проверки правильности злоупотреблений.New-TestSP создает новый субъект-службу и связывает его с приложением, созданным вышеуказанной функцией.Remove-AbuseTestAzureRMRoles — это функция очистки для удаления ролей администратора AzureRM, созданных во время тестирования.Remove-AbuseTestServicePrincipals очищает тесты злоупотреблений, удаляя субъекты службы, созданные во время тестирования.Test-AzureRMAddSelfToAzureRMRole используется при тестировании проверки злоупотреблений, чтобы определить, может ли субъект-служба с определенными правами предоставить себе роль администратора доступа пользователей по подписке.Test-AzureRMCreateFunction используется при тестировании проверки злоупотреблений, чтобы проверить, может ли субъект-служба добавить новую функцию в существующее приложение-функцию.Test-AzureRMPublishAutomationAccountRunBook используется для проверки того, может ли субъект-служба публиковать новый модуль Runbook в существующей учетной записи автоматизации.Test-AzureRMVMRunCommand используется для проверки того, может ли участник выполнить команду на существующей виртуальной машине.Test-MGAddMemberToNonRoleEligibleGroup используется для проверки того, может ли субъект-служба добавить себя в группу, не имеющую права на роль.Test-MGAddMemberToRoleEligibleGroup используется для проверки того, может ли субъект-служба добавить себя в группу, подходящую для роли.Test-MGAddOwnerToNonRoleEligibleGroup используется для проверки того, может ли субъект-служба предоставить себе явное владение группой, не соответствующей роли.Test-MGAddOwnerToRoleEligibleGroup используется для проверки того, может ли субъект-служба предоставить себе явное право владения группой лиц, имеющих право на роль.Test-MGAddRootCACert используется для проверки того, может ли субъект-служба добавить новый сертификат корневого центра сертификации арендатору.Test-MGAddSecretToApp используется для проверки того, может ли субъект-служба добавить новый секрет в существующее приложение.Test-MGAddSecretToSP используется для проверки того, может ли субъект-служба добавить новый секрет к существующему субъекту-службе.Test-MGAddSelfAsOwnerOfApp используется при тестировании проверки злоупотреблений, чтобы определить, может ли субъект-служба с определенной привилегией предоставить себе право владения существующим приложением Entra.Test-MGAddSelfAsOwnerOfSP используется при тестировании проверки злоупотреблений, чтобы определить, может ли субъект-служба с определенной привилегией предоставить себе право владения существующим субъектом-службой Entra.Test-MGAddSelfToEntraRole используется при тестировании проверки злоупотреблений, чтобы определить, может ли субъект-служба с определенной привилегией добавить себя к роли администратора Entra — например, глобальному администратору.Test-MGAddSelfToMGAppRole используется при тестировании проверки злоупотреблений, чтобы определить, может ли субъект-служба с определенной привилегией предоставить себе определенную роль приложения MS Graph без согласия администратора.