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 без согласия администратора.