Для аудиту середовища AZURE дуже важливо знати: які сервіси використовуються, що викладено, хто має доступ до чого, і як підключені внутрішні Azure сервіси та зовнішні сервіси.
З точки зору Red Team, першим кроком для компрометації середовища Azure є здійснення спроби отримати деякі підтвердження для Azure AD. Ось деякі ідеї, як це зробити:
Файл accessTokens.json в az cli до 2.30 - Jan2022 - зберігав підтвердження доступу у відкритому вигляді
Файл azureProfile.json містить інформацію про увійшовшого користувача.
az logout видаляє токен.
Старі версії Az PowerShell зберігали підтвердження доступу у відкритому вигляді в TokenCache.dat. Також зберігає ServicePrincipalSecret у відкритому вигляді в AzureRmContext.json. Командлет Save-AzContext може бути використаний для збереженнятокенів.
Використовуйте Disconnect-AzAccount для їх видалення.
Навіть якщо ви не скомпрометували жодного користувача всередині атакованого вами Azure tenant, ви можете зібрати деяку інформацію з нього:
Після того, як ви змогли отримати підтвердження, вам потрібно знати, кому належать ці підтвердження, і до чого вони мають доступ, тому вам потрібно виконати деяку базову перелік:
Базовий перелік
Пам'ятайте, що найшумнішою частиною переліку є вхід, а не сам перелік.
SSRF
Якщо ви знайшли SSRF на машині всередині Azure, перевірте цю сторінку для хитрощів:
Обхід умов входу
У випадках, коли у вас є деякі дійсні облікові дані, але ви не можете увійти, це деякі загальні заходи захисту, які можуть бути на місці:
Білістинг IP -- Вам потрібно скомпрометувати дійсну IP-адресу
Гео-обмеження -- Знайдіть, де живе користувач або де знаходяться офіси компанії та отримайте IP з того ж міста (або країни, принаймні)
Браузер -- Можливо, дозволений лише браузер певної ОС (Windows, Linux, Mac, Android, iOS). Дізнайтеся, яку ОС використовує жертва/компанія.
Ви також можете спробувати скомпрометувати облікові дані службового принципалу, оскільки вони зазвичай менше обмежені, і їх вхід рідше перевіряється
Після обходу цього, ви, можливо, зможете повернутися до вашого початкового налаштування, і ви все ще матимете доступ.
Дізнайтеся, як встановити az cli, AzureAD та Az PowerShell в розділі Az - AzureAD.
Одне з перших, що вам потрібно знати, - хто ви (в якому середовищі ви знаходитесь):
azaccountlistazaccounttenantlist# Current tenant infoazaccountsubscriptionlist# Current subscription infoazadsigned-in-usershow# Current signed-in userazadsigned-in-userlist-owned-objects# Get owned objects by current userazaccountmanagement-grouplist#Not allowed by default
AzureAD - Це служба ідентифікації та управління доступом в Azure. Це може бути одним з перших місць, де ви знайдете вразливості. Ви можете використовувати PowerShell для взаємодії з AzureAD. Нижче наведено кілька корисних команд.
#Install the moduleInstall-Module-NameAzureAD#Connect to AzureADConnect-AzureAD#Get all usersGet-AzureADUser#Get all groupsGet-AzureADGroup#Get all applicationsGet-AzureADApplication
#Get the current session stateGet-AzureADCurrentSessionInfo#Get details of the current tenantGet-AzureADTenantDetail
Захоплення токенів Azure AD
Встановіть модуль Az та підключіться до вашого облікового запису Azure:
Використовуйте отриманий токен для автентифікації та доступу до ресурсів Azure.
# Get the information about the current context (Account, Tenant, Subscription etc.)Get-AzContext# List all available contextsGet-AzContext-ListAvailable# Enumerate subscriptions accessible by the current userGet-AzSubscription#Get Resource groupGet-AzResourceGroup# Enumerate all resources visible to the current userGet-AzResource# Enumerate all Azure RBAC role assignmentsGet-AzRoleAssignment# For all usersGet-AzRoleAssignment-SignInName test@corp.onmicrosoft.com # For current user
Один з найважливіших команд для переліку Azure - Get-AzResource з Az PowerShell, оскільки вона дозволяє вам знати ресурси, які ваш поточний користувач може бачити.
За замовчуванням будь-який користувач повинен мати достатньо дозволів для переліку таких речей, як користувачі, групи, ролі, службові принципали... (перевірте стандартні дозволи AzureAD).
Тут ви можете знайти посібник:
Тепер, коли у вас є деяка інформація про ваші облікові дані (і якщо ви - червона команда, сподіваємося, що вас не виявили). Час визначити, які служби використовуються в середовищі.
У наступному розділі ви можете перевірити деякі способи переліку деяких загальних служб.
Службовий принципал та політика доступу
Azure-служба може мати системний ідентифікатор (самої служби) або використовувати призначений користувачем керований ідентифікатор. Цей ідентифікатор може мати політику доступу, наприклад, до KeyVault для читання секретів. Ці політики доступу повинні бути обмежені (принцип мінімальних привілеїв), але можуть мати більше дозволів, ніж потрібно. Зазвичай служба додатків використовуватиме KeyVault для отримання секретів та сертифікатів.
Тому корисно досліджувати ці ідентифікатори.
Служба додатків SCM
Консоль Kudu для входу в контейнер служби додатків.
Веб-оболонка
Використовуйте portal.azure.com та виберіть оболонку або використовуйте shell.azure.com для bash або powershell. 'Диск' цієї оболонки зберігаються як файл зображення в обліковому записі сховища.
Azure DevOps
Azure DevOps є окремим від Azure. В ньому є репозиторії, конвеєри (yaml або реліз), дошки, вікі та інше. Групи змінних використовуються для зберігання значень змінних та секретів.
Import-Module monkey365Get-HelpInvoke-Monkey365Get-HelpInvoke-Monkey365-DetailedInvoke-Monkey365-IncludeAzureActiveDirectory -ExportTo HTML -Verbose -Debug -InformationAction ContinueInvoke-Monkey365- Instance Azure -Analysis All -ExportTo HTML
# Start Backendcd stormspotter\backend\pipenv shellpython ssbackend.pyz# Start Front-endcd stormspotter\frontend\dist\spa\quasar.cmd serve -p 9091--history# Run Stormcollectorcd stormspotter\stormcollector\pipenv shellaz login -u test@corp.onmicrosoft.com -p Welcome2022!python stormspotter\stormcollector\sscollector.pyz cli# This will generate a .zip file to upload in the frontend (127.0.0.1:9091)
# You need to use the Az PowerShell and Azure AD modules:$passwd =ConvertTo-SecureString"Welcome2022!"-AsPlainText -Force$creds =New-Object System.Management.Automation.PSCredential ("test@corp.onmicrosoft.com", $passwd)Connect-AzAccount-Credential $credsImport-Module AzureAD\AzureAD.psd1Connect-AzureAD-Credential $creds# Launch AzureHound. AzureHound\AzureHound.ps1Invoke-AzureHound-Verbose# Simple queries## All Azure UsersMATCH (n:AZUser) return n.name## All Azure ApplicationsMATCH (n:AZApp) return n.objectid## All Azure DevicesMATCH (n:AZDevice) return n.name## All Azure GroupsMATCH (n:AZGroup) return n.name## All Azure Key VaultsMATCH (n:AZKeyVault) return n.name## All Azure Resource GroupsMATCH (n:AZResourceGroup) return n.name## All Azure Service PrincipalsMATCH (n:AZServicePrincipal) return n.objectid## All Azure Virtual MachinesMATCH (n:AZVM) return n.name## All Principals with the ‘Contributor’ roleMATCH p = (n)-[r:AZContributor]->(g) RETURN p# Advanced queries## Get Global AdminsMATCH p =(n)-[r:AZGlobalAdmin*1..]->(m) RETURN p## Owners of Azure GroupsMATCH p = (n)-[r:AZOwns]->(g:AZGroup) RETURN p## All Azure Users and their GroupsMATCH p=(m:AZUser)-[r:MemberOf]->(n) WHERE NOT m.objectid CONTAINS 'S-1-5'RETURN p## Privileged Service PrincipalsMATCH p = (g:AZServicePrincipal)-[r]->(n) RETURN p## Owners of Azure ApplicationsMATCH p = (n)-[r:AZOwns]->(g:AZApp) RETURN p## Paths to VMsMATCH p = (n)-[r]->(g: AZVM) RETURN p## Paths to KeyVaultMATCH p = (n)-[r]->(g:AZKeyVault) RETURN p## Paths to Azure Resource GroupMATCH p = (n)-[r]->(g:AZResourceGroup) RETURN p## On-Prem users with edges to AzureMATCH p=(m:User)-[r:AZResetPassword|AZOwns|AZUserAccessAdministrator|AZContributor|AZAddMembers|AZGlobalAdmin|AZVMContributor|AZOwnsAZAvereContributor]->(n) WHERE m.objectid CONTAINS 'S-1-5-21' RETURN p
## All Azure AD Groups that are synchronized with On-Premise ADMATCH (n:Group) WHERE n.objectid CONTAINS 'S-1-5' AND n.azsyncid IS NOT NULL RETURN n
# You should use an account with at least read-permission on the assets you want to accessgitclonehttps://github.com/nccgroup/azucar.gitPS>Get-ChildItem-Recursec:\Azucar_V10|Unblock-FilePS>.\Azucar.ps1-AuthModeUseCachedCredentials-Verbose-WriteLog-Debug-ExportToPRINTPS> .\Azucar.ps1 -ExportTo CSV,JSON,XML,EXCEL -AuthMode Certificate_Credentials -Certificate C:\AzucarTest\server.pfx -ApplicationId 00000000-0000-0000-0000-000000000000 -TenantID 00000000-0000-0000-0000-000000000000
PS> .\Azucar.ps1 -ExportTo CSV,JSON,XML,EXCEL -AuthMode Certificate_Credentials -Certificate C:\AzucarTest\server.pfx -CertFilePassword MySuperP@ssw0rd! -ApplicationId 00000000-0000-0000-0000-000000000000 -TenantID 00000000-0000-0000-0000-000000000000
# resolve the TenantID for an specific usernamePS>.\Azucar.ps1-ResolveTenantUserNameuser@company.com