Azure Pentesting

Support HackTricks

Я ДОСІ РОБЛЮ МЕТОДОЛОГІЮ AZURE

Основна інформація

Az - Basic Information

Методологія Azure Pentester/Red Team

Щоб провести аудит середовища AZURE, дуже важливо знати: які послуги використовуються, що виставлено на показ, хто має доступ до чого, і як внутрішні служби Azure та зовнішні служби з'єднані.

З точки зору Red Team, перший крок для компрометації середовища Azure - це отримати деякі облікові дані для Azure AD. Ось кілька ідей, як це зробити:

  • Витоки в github (або подібних) - OSINT

  • Соціальна інженерія

  • Повторне використання паролів (витоки паролів)

  • Вразливості в Azure-розміщених додатках

  • Server Side Request Forgery з доступом до метаданих

  • Читання локальних файлів

  • /home/USERNAME/.azure

  • C:\Users\USERNAME\.azure

  • Файл accessTokens.json в az cli до 2.30 - січень 2022 - зберігав токени доступу у відкритому тексті

  • Файл azureProfile.json містить інформацію про увійшовшого користувача.

  • az logout видаляє токен.

  • Старі версії Az PowerShell зберігали токени доступу у відкритому тексті в TokenCache.dat. Він також зберігає ServicePrincipalSecret у відкритому тексті в AzureRmContext.json. Команда Save-AzContext може бути використана для зберігання токенів. Використовуйте Disconnect-AzAccount, щоб видалити їх.

  • 3-ті сторони зламані

  • Внутрішній працівник

  • Звичайна фішингова атака (облікові дані або Oauth App)

Навіть якщо ви не зламали жодного користувача всередині Azure-орендаря, який ви атакуєте, ви можете зібрати деяку інформацію з нього:

Az - Unauthenticated Enum & Initial Entry

Після того, як ви змогли отримати облікові дані, вам потрібно знати, кому належать ці облікові дані, і до чого вони мають доступ, тому вам потрібно виконати деяку базову енумерацію:

Базова енумерація

Пам'ятайте, що найгучнішою частиною енумерації є вхід, а не сама енумерація.

SSRF

Якщо ви знайшли SSRF на машині всередині Azure, перевірте цю сторінку для трюків:

Обхід умов входу

У випадках, коли у вас є дійсні облікові дані, але ви не можете увійти, ось деякі загальні захисти, які можуть бути на місці:

  • IP-білий список -- Вам потрібно зламати дійсний IP

  • Гео-обмеження -- Дізнайтеся, де живе користувач або де знаходяться офіси компанії, і отримайте IP з того ж міста (або країни, принаймні)

  • Браузер -- Можливо, дозволено лише браузер з певної ОС (Windows, Linux, Mac, Android, iOS). Дізнайтеся, яку ОС використовує жертва/компанія.

  • Ви також можете спробувати зламати облікові дані Service Principal, оскільки вони зазвичай менш обмежені, і їх вхід менш перевіряється

Після обходу ви можете повернутися до вашої початкової налаштування і все ще мати доступ.

Захоплення піддомену

Whoami

Learn how to install az cli, AzureAD and Az PowerShell in the Az - AzureAD section.

Одне з перших, що вам потрібно знати, це хто ви (в якому середовищі ви знаходитесь):

az account list
az account tenant list # Current tenant info
az account subscription list # Current subscription info
az ad signed-in-user show # Current signed-in user
az ad signed-in-user list-owned-objects # Get owned objects by current user
az account management-group list #Not allowed by default

Одна з найважливіших команд для перерахунку Azure - це Get-AzResource з Az PowerShell, оскільки вона дозволяє вам дізнатися, які ресурси ваш поточний користувач має видимість.

Ви можете отримати ту ж інформацію в веб-консолі, перейшовши за посиланням https://portal.azure.com/#view/HubsExtension/BrowseAll або шукаючи "Усі ресурси"

Перерахунок AzureAD

За замовчуванням будь-який користувач повинен мати достатньо прав для перерахунку таких речей, як користувачі, групи, ролі, служби-принципали... (перевірте стандартні дозволи AzureAD). Тут ви можете знайти посібник:

Az - AzureAD (AAD)

Тепер, коли ви маєте деяку інформацію про свої облікові дані (і якщо ви червона команда, сподіваюся, ви не були виявлені). Час з'ясувати, які сервіси використовуються в середовищі. У наступному розділі ви можете перевірити деякі способи перерахунку деяких загальних сервісів.

Службовий принципал та політика доступу

Служба Azure може мати системну ідентичність (самої служби) або використовувати призначену користувачем керовану ідентичність. Ця ідентичність може мати політику доступу, наприклад, до KeyVault для читання секретів. Ці політики доступу повинні бути обмежені (принцип найменших привілеїв), але можуть мати більше прав, ніж потрібно. Зазвичай служба App Service використовує KeyVault для отримання секретів і сертифікатів.

Отже, корисно досліджувати ці ідентичності.

SCM служби App

Консоль Kudu для входу в 'контейнер' служби App.

Веб-оболонка

Використовуйте portal.azure.com і виберіть оболонку, або використовуйте shell.azure.com для bash або powershell. 'Диск' цієї оболонки зберігається як файл зображення в обліковому записі зберігання.

Azure DevOps

Azure DevOps відокремлений від Azure. Він має репозиторії, конвеєри (yaml або реліз), дошки, вікі та інше. Групи змінних використовуються для зберігання значень змінних і секретів.

Інструменти автоматизованого розвідки

cd ROADTools
pipenv shell
roadrecon auth -u test@corp.onmicrosoft.com -p "Welcome2022!"
roadrecon gather
roadrecon gui

Import-Module monkey365
Get-Help Invoke-Monkey365
Get-Help Invoke-Monkey365 -Detailed
Invoke-Monkey365 -IncludeAzureActiveDirectory -ExportTo HTML -Verbose -Debug -InformationAction Continue
Invoke-Monkey365 - Instance Azure -Analysis All -ExportTo HTML

# Start Backend
cd stormspotter\backend\
pipenv shell
python ssbackend.pyz

# Start Front-end
cd stormspotter\frontend\dist\spa\
quasar.cmd serve -p 9091 --history

# Run Stormcollector
cd stormspotter\stormcollector\
pipenv shell
az 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 $creds

Import-Module AzureAD\AzureAD.psd1
Connect-AzureAD -Credential $creds

# Launch AzureHound
. AzureHound\AzureHound.ps1
Invoke-AzureHound -Verbose

# Simple queries
## All Azure Users
MATCH (n:AZUser) return n.name
## All Azure Applications
MATCH (n:AZApp) return n.objectid
## All Azure Devices
MATCH (n:AZDevice) return n.name
## All Azure Groups
MATCH (n:AZGroup) return n.name
## All Azure Key Vaults
MATCH (n:AZKeyVault) return n.name
## All Azure Resource Groups
MATCH (n:AZResourceGroup) return n.name
## All Azure Service Principals
MATCH (n:AZServicePrincipal) return n.objectid
## All Azure Virtual Machines
MATCH (n:AZVM) return n.name
## All Principals with the ‘Contributor’ role
MATCH p = (n)-[r:AZContributor]->(g) RETURN p

# Advanced queries
## Get Global Admins
MATCH p =(n)-[r:AZGlobalAdmin*1..]->(m) RETURN p
## Owners of Azure Groups
MATCH p = (n)-[r:AZOwns]->(g:AZGroup) RETURN p
## All Azure Users and their Groups
MATCH p=(m:AZUser)-[r:MemberOf]->(n) WHERE NOT m.objectid CONTAINS 'S-1-5' RETURN p
## Privileged Service Principals
MATCH p = (g:AZServicePrincipal)-[r]->(n) RETURN p
## Owners of Azure Applications
MATCH p = (n)-[r:AZOwns]->(g:AZApp) RETURN p
## Paths to VMs
MATCH p = (n)-[r]->(g: AZVM) RETURN p
## Paths to KeyVault
MATCH p = (n)-[r]->(g:AZKeyVault) RETURN p
## Paths to Azure Resource Group
MATCH p = (n)-[r]->(g:AZResourceGroup) RETURN p
## On-Prem users with edges to Azure
MATCH  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 AD
MATCH (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 access
git clone https://github.com/nccgroup/azucar.git
PS> Get-ChildItem -Recurse c:\Azucar_V10 | Unblock-File

PS> .\Azucar.ps1 -AuthMode UseCachedCredentials -Verbose -WriteLog -Debug -ExportTo PRINT
PS> .\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 username
PS> .\Azucar.ps1 -ResolveTenantUserName user@company.com

Import-Module .\MicroBurst.psm1
Import-Module .\Get-AzureDomainInfo.ps1
Get-AzureDomainInfo -folder MicroBurst -Verbose

Connect-AzAccount
ipmo C:\Path\To\Powerzure.psd1
Get-AzureTarget

# Reader
$ Get-Runbook, Get-AllUsers, Get-Apps, Get-Resources, Get-WebApps, Get-WebAppDetails

# Contributor
$ Execute-Command -OS Windows -VM Win10Test -ResourceGroup Test-RG -Command "whoami"
$ Execute-MSBuild -VM Win10Test  -ResourceGroup Test-RG -File "build.xml"
$ Get-AllSecrets # AllAppSecrets, AllKeyVaultContents
$ Get-AvailableVMDisks, Get-VMDisk # Download a virtual machine's disk

# Owner
$ Set-Role -Role Contributor -User test@contoso.com -Resource Win10VMTest

# Administrator
$ Create-Backdoor, Execute-Backdoor
Підтримайте HackTricks

Last updated