Translated ['', 'src/pentesting-cloud/azure-security/az-enumeration-tool

This commit is contained in:
Translator
2026-05-26 19:12:20 +00:00
parent 766f48257c
commit 3e237ba9aa
@@ -1,11 +1,11 @@
# Az - Інструменти перерахування
# Az - Інструменти Enumeration
{{#include ../../banners/hacktricks-training.md}}
## Встановлення PowerShell у linux
## Встановлення PowerShell у Linux
> [!TIP]
> У linux вам потрібно встановити PowerShell Core:
> У linux вам потрібно буде встановити PowerShell Core:
```bash
sudo apt-get update
sudo apt-get install -y wget apt-transport-https software-properties-common
@@ -24,11 +24,11 @@ pwsh
# Az cli
curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash
```
## Встановлення PowerShell на MacOS
## Встановіть PowerShell у MacOS
Інструкції з [**documentation**](https://learn.microsoft.com/en-us/powershell/scripting/install/installing-powershell-on-macos?view=powershell-7.4):
1. Встановіть `brew`, якщо він ще не встановлений:
1. Встановіть `brew`, якщо ще не встановлено:
```bash
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
```
@@ -45,23 +45,23 @@ pwsh
brew update
brew upgrade powershell
```
## Основні інструменти енумерації
## Основні інструменти переліку
### az cli
[**Azure Command-Line Interface (CLI)**](https://learn.microsoft.com/en-us/cli/azure/install-azure-cli) — кросплатформний інструмент, написаний на Python, для керування та адміністрування (більшість) ресурсів Azure та Entra ID. Він підключається до Azure і виконує адміністративні команди через командний рядок або скрипти.
[**Azure Command-Line Interface (CLI)**](https://learn.microsoft.com/en-us/cli/azure/install-azure-cli) — це кросплатформний інструмент, написаний на Python, для керування та адміністрування (більшості) ресурсів Azure та Entra ID. Він підключається до Azure та виконує адміністративні команди через command line або scripts.
Перейдіть за цим посиланням для [**installation instructions¡**](https://learn.microsoft.com/en-us/cli/azure/install-azure-cli#install).
Перейдіть за цим посиланням для [**інструкцій з installation¡**](https://learn.microsoft.com/en-us/cli/azure/install-azure-cli#install).
Команди в Azure CLI структуровані за шаблоном: `az <service> <action> <parameters>`
Commands в Azure CLI мають структуру за шаблоном: `az <service> <action> <parameters>`
#### Налагодження | MitM az cli
#### Debug | MitM az cli
За допомогою параметра **`--debug`** можна побачити всі запити, які інструмент **`az`** надсилає:
Використовуючи параметр **`--debug`**, можна побачити всі requests, які інструмент **`az`** надсилає:
```bash
az account management-group list --output table --debug
```
Щоб зробити **MitM** для інструмента та вручну **check all the requests**, які він надсилає, можна зробити так:
Щоб виконати **MitM** для tool і **перевірити всі requests**, які він надсилає вручну, ви можете зробити:
{{#tabs }}
{{#tab name="Bash" }}
@@ -109,38 +109,38 @@ $env:HTTP_PROXY="http://127.0.0.1:8080"
### Чому виникає помилка
Коли Azure CLI автентифікується, він робить HTTPS-запити (через MSAL → Requests → OpenSSL). Якщо ви перехоплюєте TLS з допомогою Burp, Burp генерує «на льоту» сертифікати для сайтів типу `login.microsoftonline.com` і підписує їх своєю CA.
Коли Azure CLI автентифікується, він робить HTTPS-запити (через MSAL → Requests → OpenSSL). Якщо ви перехоплюєте TLS за допомогою Burp, Burp генерує сертифікати “на льоту” для сайтів на кшталт `login.microsoftonline.com` і підписує їх CA від Burp.
На новіших стекax (Python 3.13 + OpenSSL 3) валідація CA суворіша:
На новіших стеках (Python 3.13 + OpenSSL 3) перевірка CA суворіша:
- A CA certificate must include **Basic Constraints: `CA:TRUE`** and a **Key Usage** extension permitting certificate signing (**`keyCertSign`**, and typically **`cRLSign`**).
- CA certificate має містити **Basic Constraints: `CA:TRUE`** і розширення **Key Usage**, що дозволяє підписування сертифікатів (**`keyCertSign`**, а зазвичай і **`cRLSign`**).
За замовчуванням CA Burp (PortSwigger CA) застаріла і зазвичай не має розширення Key Usage, тому OpenSSL відхиляє її навіть якщо ви її «доверяєте».
Стандартний CA від Burp (PortSwigger CA) старий і зазвичай не має розширення Key Usage, тому OpenSSL відхиляє його, навіть якщо ви довіряєте” йому.
Це призводить до таких помилок:
Це спричиняє помилки на кшталт:
- `CA cert does not include key usage extension`
- `CERTIFICATE_VERIFY_FAILED`
- `self-signed certificate in certificate chain`
Отже, потрібно:
Тому потрібно:
1. Створити сучасну CA (з коректним Key Usage).
2. Змусити Burp використовувати її для підпису перехоплених сертифікатів.
3. Довірити цій CA в macOS.
4. Вказати Azure CLI / Requests на цей CA bundle.
1. Створити сучасний CA (з правильним Key Usage).
2. Змусити Burp використовувати його для підписання перехоплених сертифікатів.
3. Довірити цьому CA в macOS.
4. Вказати Azure CLI / Requests цей CA bundle.
### Пoетапно: робоча конфігурація
### Покроково: робоча конфігурація
#### 0) Попередні вимоги
#### 0) Передумови
- Burp запущений локально (proxy на `127.0.0.1:8080`)
- Azure CLI встановлено (Homebrew)
- Ви маєте права `sudo` (щоб довірити CA в системному keychain)
- Azure CLI встановлений (Homebrew)
- Ви можете `sudo` (щоб довірити CA в системному keychain)
#### 1) Create a standards-compliant Burp CA (PEM + KEY)
#### 1) Створіть Burp CA, сумісний зі стандартами (PEM + KEY)
Create an OpenSSL config file that explicitly sets CA extensions:
Створіть OpenSSL config file, який явно задає CA extensions:
```bash
mkdir -p ~/burp-ca && cd ~/burp-ca
@@ -164,7 +164,7 @@ subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always,issuer
EOF
```
Згенерувати CA сертифікат + приватний ключ:
Згенеруйте CA certificate + private key:
```bash
openssl req -x509 -new -nodes \
-days 3650 \
@@ -172,18 +172,18 @@ openssl req -x509 -new -nodes \
-out burp-ca.pem \
-config burp-ca.cnf
```
Швидка перевірка (ВИ ПОВИННІ побачити Key Usage):
Sanity check (you MUST see Key Usage):
```bash
openssl x509 -in burp-ca.pem -noout -text | egrep -A3 "Basic Constraints|Key Usage"
```
Очікується, що міститиме приблизно таке:
Очікується включити щось на кшталт:
- `CA:TRUE`
- `Key Usage: ... Certificate Sign, CRL Sign`
#### 2) Конвертувати в PKCS#12 (формат імпорту Burp)
#### 2) Convert to PKCS#12 (Burp import format)
Burp потребує сертифікат + приватний ключ, найпростіше — у PKCS#12:
Burp needs certificate + private key, easiest as PKCS#12:
```bash
openssl pkcs12 -export \
-out burp-ca.p12 \
@@ -191,9 +191,9 @@ openssl pkcs12 -export \
-in burp-ca.pem \
-name "Burp Custom Root CA"
```
Youll be prompted for an export password (set one; Burp will ask for it).
Вас попросять ввести пароль експорту (встановіть його; Burp попросить його).
#### 3) Імпортуйте CA в Burp і перезапустіть Burp
#### 3) Імпортуйте CA у Burp і перезапустіть Burp
У Burp:
@@ -201,15 +201,15 @@ Youll be prompted for an export password (set one; Burp will ask for it).
- Знайдіть Import / export CA certificate
- Натисніть Import CA certificate
- Виберіть PKCS#12
- Виберіть `burp-ca.p12`
- Оберіть `burp-ca.p12`
- Введіть пароль
- Повністю перезапустіть Burp (важливо)
Чому перезапуск? Burp може продовжувати використовувати старий CA до перезапуску.
Навіщо перезапускати? Burp може продовжувати використовувати старий CA до перезапуску.
#### 4) Довірте новому CA у системному keychain macOS
#### 4) Довірте новому CA в системному keychain macOS
Це дозволяє системним додаткам і багатьом TLS-стекам довіряти цьому CA.
Це дозволяє system apps і багатьом TLS stacks довіряти CA.
```bash
sudo security add-trusted-cert \
-d -r trustRoot \
@@ -218,37 +218,37 @@ sudo security add-trusted-cert \
```
(Якщо ви віддаєте перевагу GUI: Keychain Access → System → Certificates → import → set “Always Trust”.)
#### 5) Налаштуйте змінні середовища для проксі
#### 5) Configure proxy env vars
```bash
export HTTPS_PROXY="http://127.0.0.1:8080"
export HTTP_PROXY="http://127.0.0.1:8080"
```
#### 6) Налаштуйте Requests/Azure CLI, щоб довіряти вашому Burp CA
Azure CLI використовує Python Requests внутрішньо; налаштуйте обидва:
Azure CLI internally uses Python Requests; set both of these:
```bash
export REQUESTS_CA_BUNDLE="$HOME/burp-ca/burp-ca.pem"
export SSL_CERT_FILE="$HOME/burp-ca/burp-ca.pem"
```
Примітки:
Notes:
- `REQUESTS_CA_BUNDLE` використовується бібліотекою Requests.
- `SSL_CERT_FILE` допомагає іншим TLS-клієнтам та в граничних випадках.
- Зазвичай вам не потрібні старі `ADAL_PYTHON_SSL_NO_VERIFY` / `AZURE_CLI_DISABLE_CONNECTION_VERIFICATION`, коли CA налаштовано правильно.
- `REQUESTS_CA_BUNDLE` використовується Requests.
- `SSL_CERT_FILE` допомагає для інших TLS consumers і edge cases.
- Зазвичай вам не потрібні старі `ADAL_PYTHON_SSL_NO_VERIFY` / `AZURE_CLI_DISABLE_CONNECTION_VERIFICATION`, якщо CA налаштовано правильно.
#### 7) Перевірте, що Burp справді підписує сертифікати вашим новим CA (критична перевірка)
#### 7) Переконайтеся, що Burp насправді підписує вашим новим CA (critical check)
Це підтверджує, що ваш ланцюг перехоплення налаштований правильно:
Це підтверджує, що ваш interception chain налаштований правильно:
```bash
openssl s_client -connect login.microsoftonline.com:443 \
-proxy 127.0.0.1:8080 </dev/null 2>/dev/null \
| openssl x509 -noout -issuer
```
Очікуваний видавець містить ім'я вашого CA, наприклад:
Очікуваний issuer містить назву вашого CA, наприклад:
`O=Burp Custom CA, CN=Burp Custom Root CA`
Якщо ви все ще бачите PortSwigger CA, Burp не використовує імпортований вами CA → перевірте імпорт та перезапустіть.
Якщо ви все ще бачите PortSwigger CA, Burp не використовує ваш імпортований CA → перевірте імпорт ще раз і перезапустіть.
#### 8) Перевірте, що Python Requests працює через Burp
```bash
@@ -258,61 +258,61 @@ requests.get("https://login.microsoftonline.com")
print("OK")
EOF
```
Очікується: `OK`
Очікувано: `OK`
#### 9) Azure CLI тест
#### 9) Azure CLI test
```bash
az account get-access-token --resource=https://management.azure.com/
```
Якщо ви вже увійшли, має повернутися JSON з `accessToken`.
Якщо ви вже увійшли в систему, він має повернути JSON з `accessToken`.
</details>
### Az PowerShell
Azure PowerShell — модуль із cmdlets для керування ресурсами Azure безпосередньо з командного рядка PowerShell.
Azure PowerShell — це module з cmdlets для керування ресурсами Azure безпосередньо з командного рядка PowerShell.
Follow this link for the [**installation instructions**](https://learn.microsoft.com/en-us/powershell/azure/install-azure-powershell).
Перейдіть за цим посиланням для [**installation instructions**](https://learn.microsoft.com/en-us/powershell/azure/install-azure-powershell).
Команди в Azure PowerShell AZ Module мають структуру: `<Action>-Az<Service> <parameters>`
Команди в Azure PowerShell AZ Module структуровані як: `<Action>-Az<Service> <parameters>`
#### Debug | MitM Az PowerShell
Використовуючи параметр **`-Debug`**, можна побачити всі запити, які відправляє інструмент:
Використовуючи параметр **`-Debug`**, можна побачити всі requests, які tool надсилає:
```bash
Get-AzResourceGroup -Debug
```
Щоб зробити **MitM** щодо інструмента та **перевірити всі запити**, які він надсилає вручну, можна встановити змінні середовища `HTTPS_PROXY` і `HTTP_PROXY` відповідно до [**docs**](https://learn.microsoft.com/en-us/powershell/azure/az-powershell-proxy).
Щоб зробити **MitM** для tool і **перевіряти всі requests**, які він надсилає вручну, ви можете задати env variables `HTTPS_PROXY` і `HTTP_PROXY` відповідно до [**docs**](https://learn.microsoft.com/en-us/powershell/azure/az-powershell-proxy).
### Microsoft Graph PowerShell
Microsoft Graph PowerShell є кросплатформеним SDK, який дозволяє доступ до всіх Microsoft Graph API, включно зі службами такими як SharePoint, Exchange та Outlook, використовуючи єдину кінцеву точку. Підтримує PowerShell 7+, сучасну аутентифікацію через MSAL, зовнішні ідентичності та розширені запити. Орієнтований на принцип найменших привілеїв, він забезпечує безпечні операції та отримує регулярні оновлення для відповідності останнім можливостям Microsoft Graph API.
Microsoft Graph PowerShell — це cross-platform SDK, який надає доступ до всіх Microsoft Graph APIs, включно з services like SharePoint, Exchange і Outlook, використовуючи один endpoint. Він підтримує PowerShell 7+, modern authentication через MSAL, external identities і advanced queries. З фокусом на least privilege access, він забезпечує secure operations і отримує регулярні updates, щоб відповідати latest Microsoft Graph API features.
Перейдіть за цим посиланням для [**installation instructions**](https://learn.microsoft.com/en-us/powershell/microsoftgraph/installation).
Команди в Microsoft Graph PowerShell мають структуру: `<Action>-Mg<Service> <parameters>`
Commands у Microsoft Graph PowerShell структуровані так: `<Action>-Mg<Service> <parameters>`
#### Налагодження Microsoft Graph PowerShell
#### Debug Microsoft Graph PowerShell
За допомогою параметра **`-Debug`** можна побачити всі запити, які інструмент відправляє:
Використовуючи parameter **`-Debug`**, можна побачити всі requests, які tool надсилає:
```bash
Get-MgUser -Debug
```
### ~~**AzureAD Powershell**~~
Модуль Azure Active Directory (AD), який тепер є **застарілим**, входить до складу Azure PowerShell для керування ресурсами Azure AD. Він надає cmdlets для таких завдань, як керування користувачами, групами та реєстраціями застосунків в Entra ID.
Модуль Azure Active Directory (AD), тепер **deprecated**, є частиною Azure PowerShell для керування ресурсами Azure AD. Він надає cmdlets для завдань на кшталт керування користувачами, групами та реєстраціями application в Entra ID.
> [!TIP]
> Натомість використовується Microsoft Graph PowerShell
> Це замінено на Microsoft Graph PowerShell
Перейдіть за цим посиланням для [**інструкції з встановлення**](https://www.powershellgallery.com/packages/AzureAD).
Перейдіть за цим посиланням для [**installation instructions**](https://www.powershellgallery.com/packages/AzureAD).
## Автоматизований Recon та інструменти відповідності
## Automated Recon & Compliance Tools
### [turbot azure plugins](https://github.com/orgs/turbot/repositories?q=mod-azure)
Turbot разом зі steampipe та powerpipe дозволяє збирати інформацію з Azure та Entra ID, виконувати перевірки відповідності та виявляти помилки конфігурації. Наразі найбільш рекомендовані модулі Azure для запуску:
Turbot з steampipe та powerpipe дозволяє збирати інформацію з Azure та Entra ID, виконувати compliance checks і знаходити misconfigurations. Наразі найбільш рекомендовані Azure модулі для запуску:
- [https://github.com/turbot/steampipe-mod-azure-compliance](https://github.com/turbot/steampipe-mod-azure-compliance)
- [https://github.com/turbot/steampipe-mod-azure-insights](https://github.com/turbot/steampipe-mod-azure-insights)
@@ -343,9 +343,9 @@ powerpipe server
```
### [Prowler](https://github.com/prowler-cloud/prowler)
Prowler — це інструмент з відкритим кодом для виконання оцінок найкращих практик безпеки, аудитів, реагування на інциденти, безперервного моніторингу, hardening та forensics readiness для AWS, Azure, Google Cloud і Kubernetes.
Prowler is an Open Source security tool to perform AWS, Azure, Google Cloud and Kubernetes security best practices assessments, audits, incident response, continuous monitoring, hardening and forensics readiness.
Він дозволяє запускати сотні перевірок щодо середовища Azure, виявляти помилки конфігурації безпеки та збирати результати у json (та інших текстових форматах) або переглядати їх у web.
По суті, він дозволяє нам запускати сотні перевірок проти Azure environment, щоб знайти security misconfigurations і зібрати результати у json (та інших text format) або переглянути їх у web.
```bash
# Create a application with Reader role and set the tenant ID, client ID and secret in prowler so it access the app
@@ -367,9 +367,9 @@ docker run --rm -e "AZURE_CLIENT_ID=<client-id>" -e "AZURE_TENANT_ID=<tenant-id>
```
### [Monkey365](https://github.com/silverhack/monkey365)
Дозволяє автоматично виконувати перевірки конфігурації безпеки підписок Azure та Microsoft Entra ID.
Він дозволяє автоматично виконувати перевірки безпеки конфігурації Azure subscriptions і Microsoft Entra ID.
HTML-звіти зберігаються в каталозі `./monkey-reports` у папці репозиторію github.
HTML-звіти зберігаються в каталозі `./monkey-reports` всередині папки репозиторію github.
```bash
git clone https://github.com/silverhack/monkey365
Get-ChildItem -Recurse monkey365 | Unblock-File
@@ -390,7 +390,7 @@ Invoke-Monkey365 -TenantId <tenant-id> -ClientId <client-id> -ClientSecret $Secu
```
### [ScoutSuite](https://github.com/nccgroup/ScoutSuite)
ScoutSuite збирає дані конфігурації для ручної перевірки та виділяє області ризику. Це інструмент аудиту безпеки для multi-cloud середовищ, який дозволяє оцінювати безпековий стан хмарних середовищ.
Scout Suite збирає дані конфігурації для ручної перевірки та виділяє ризикові області. Це multi-cloud tool для security-auditing, який дає змогу оцінювати security posture cloud environments.
```bash
virtualenv -p python3 venv
source venv/bin/activate
@@ -406,18 +406,26 @@ python scout.py azure --cli
```
### [Azure-MG-Sub-Governance-Reporting](https://github.com/JulianHayward/Azure-MG-Sub-Governance-Reporting)
Це powershell-скрипт, який допомагає вам **візуалізувати всі ресурси та дозволи всередині Management Group та Entra ID** тенанта й виявляти проблеми в налаштуваннях безпеки.
Це powershell script, який допомагає тобі **візуалізувати всі ресурси та permissions всередині Management Group і Entra ID** tenant та знаходити security misconfigurations.
Він працює з використанням Az PowerShell module, тож будь-який спосіб автентифікації, підтримуваний цим інструментом, також підтримується.
Він працює через модуль Az PowerShell, тож будь-яка authentication, підтримувана цим tool, підтримується і tool.
```bash
import-module Az
.\AzGovVizParallel.ps1 -ManagementGroupId <management-group-id> [-SubscriptionIdWhitelist <subscription-id>]
```
## Автоматизовані Post-Exploitation інструменти
## Automated Post-Exploitation tools
### [**ROADRecon**](https://github.com/dirkjanm/ROADtools)
### [**ROADtools**](https://github.com/dirkjanm/ROADtools) / ROADrecon / ROADtx
Enumeration ROADRecon надає інформацію про конфігурацію Entra ID, таку як users, groups, roles, conditional access policies...
ROADtools — один із головних open-source framework для offensive research в Entra ID. Найрелевантніші компоненти:
- **`roadrecon`**: discovery tenant і локальна генерація dataset (users, groups, roles, devices, service principals, applications, directory settings).
- **`roadtx`**: отримання/обмін token, повторне використання refresh-token, device registration і PRT workflows.
- **`roadlib`**: низькорівнева auth/API library, яку використовують інші modules.
Зібрані дані зберігаються в локальній SQLite database і можуть бути переглянуті в ROADrecon web UI, що корисно для мапінгу privileged users, role assignments, devices, service principals і application relationships перед плануванням persistence або lateral movement.
#### ROADrecon collection
```bash
cd ROADTools
pipenv shell
@@ -428,19 +436,52 @@ roadrecon auth --as-app --client "<client-id>" --password "<secret>" --tenant "<
roadrecon gather
roadrecon gui
```
ROADrecon спочатку був націлений на Azure AD Graph. Станом на **May 22, 2026**, офіційний repository все ще зберігає підтримку Microsoft Graph у гілці **`msgraph`**, а community forks, такі як **Tom2Byrne/ROADtools**, продовжують оновлювати Graph-based collection. У Graph-capable builds, ROADrecon додає перемикач **`-mg`** для enumeration endpoints, таких як **`/users`**, **`/groups`**, **`/devices`**, **`/servicePrincipals`**, та **`/applications`**.
```bash
# Graph-capable ROADrecon builds
roadrecon auth -u test@corp.onmicrosoft.com -p "Welcome2022!"
roadrecon gather -mg
roadrecon gui
```
#### ROADtx high-value use cases
Якщо у вас уже є valid credentials, refresh token або PRT-derived session, ROADtx зазвичай використовують для:
- **Register a rogue Entra ID device** проти **`urn:ms-drs:enterpriseregistration.windows.net`** для отримання device keys/certificates і створення стійкого device-backed access.
- **Exchange/reuse refresh tokens** для отримання нових Microsoft Graph або інших resource tokens без повторного interactive sign-in.
- **Abuse PRT workflows** для тихого mint нових access tokens у background.
Корисна hunting-підказка: значення за замовчуванням **`roadtx device`** історично були такими:
- **OS**: `Windows`
- **OS version**: `10.0.19041.928`
- **Name**: `DESKTOP-<RANDOM 8 DIGITS>`
Ці значення легко змінити, тому сприймайте їх як **weak indicators**. Вони все ще корисні, якщо корелюються з незвичними device registration events, некорпоративними naming patterns, підозрілими source IPs/geos/ASNs або scripted user agents.
#### ROADtools opsec / hunting notes
Оскільки ROADtools використовує легітимні Microsoft identity APIs, defenders повинні hunt за **комбінацією** token activity, enumeration patterns і user-agent anomalies замість очікування malware-like signatures. Корисні signals включають:
- **Device registration** audit operations, такі як `Add device`, `Add registered owner to device`, `Add registered user to device`, і `Register device`
- Requests або sign-ins, пов’язані з **Device Registration Service**
- Script-like user agents, такі як **`python-requests`**, **`urllib`**, або **`curl`**
- Bursty Microsoft Graph reads проти discovery-heavy endpoints, таких як **`/users`**, **`/groups`**, **`/devices`**, **`/servicePrincipals`**, і **`/applications`**
- Потужні OAuth scopes, що з’являються в audit data, особливо **`Directory.ReadWrite.All`**, **`Device.ReadWrite.All`**, **`Application.ReadWrite.All`**, **`AuditLog.ReadWrite.All`**, і **`Policy.ReadWrite.All`**
### [**AzureHound**](https://github.com/BloodHoundAD/AzureHound)
AzureHound — колектор BloodHound для Microsoft Entra ID та Azure. Це один статичний виконуваний файл на Go для Windows/Linux/macOS, який безпосередньо звертається до:
- Microsoft Graph (Entra ID directory, M365) та
AzureHound — це BloodHound collector для Microsoft Entra ID і Azure. Це один static Go binary для Windows/Linux/macOS, який напряму працює з:
- Microsoft Graph (Entra ID directory, M365) і
- Azure Resource Manager (ARM) control plane (subscriptions, resource groups, compute, storage, key vault, app services, AKS, etc.)
Key traits
- Працює з будь-якого місця в публічному інтернеті проти tenant APIs (не потрібен доступ до внутрішньої мережі)
- Виводить JSON для BloodHound CE ingestion, щоб візуалізувати шляхи атаки між ідентичностями та cloud resources
- User-Agent за замовчуванням: azurehound/v2.x.x
- Запускається звідки завгодно з public internet проти tenant APIs (internal network access не потрібен)
- Виводить JSON для BloodHound CE ingestion, щоб візуалізувати attack paths через identities і cloud resources
- Default User-Agent, який спостерігається: azurehound/v2.x.x
Authentication options
- Ім'я користувача + пароль: -u <upn> -p <password>
- Username + password: -u <upn> -p <password>
- Refresh token: --refresh-token <rt>
- JSON Web Token (access token): --jwt <jwt>
- Service principal secret: -a <appId> -s <secret>
@@ -481,33 +522,33 @@ azurehound list storage-containers -t "<tenant-id>" -o containers.json
azurehound list web-apps -t "<tenant-id>" -o webapps.json
azurehound list function-apps -t "<tenant-id>" -o funcapps.json
```
What gets queried
Що запитується
- Graph endpoints (examples):
- /v1.0/organization, /v1.0/users, /v1.0/groups, /v1.0/roleManagement/directory/roleDefinitions, directoryRoles, owners/members
- ARM endpoints (examples):
- management.azure.com/subscriptions/.../providers/Microsoft.Storage/storageAccounts
- .../Microsoft.KeyVault/vaults, .../Microsoft.Compute/virtualMachines, .../Microsoft.Web/sites, .../Microsoft.ContainerService/managedClusters
Preflight behavior and endpoints
- Кожна команда azurehound list <object> зазвичай виконує ці тестові виклики перед переліченням:
Поведінка preflight та endpoints
- Кожен azurehound list <object> зазвичай виконує ці test calls перед enumeration:
1) Identity platform: login.microsoftonline.com
2) Graph: GET https://graph.microsoft.com/v1.0/organization
3) ARM: GET https://management.azure.com/subscriptions?api-version=...
- Базові URL-адреси хмарного середовища відрізняються для Government/China/Germany. Див. constants/environments.go у репозиторії.
- Cloud environment base URLs відрізняються для Government/China/Germany. Див. constants/environments.go у repo.
ARM-heavy objects (less visible in Activity/Resource logs)
- Наступні цілі переважно читаються через ARM control plane: automation-accounts, container-registries, function-apps, key-vaults, logic-apps, managed-clusters, management-groups, resource-groups, storage-accounts, storage-containers, virtual-machines, vm-scale-sets, web-apps.
- Ці операції GET/list, як правило, не записуються в Activity Logs; читання data-plane (наприклад, *.blob.core.windows.net, *.vault.azure.net) фіксуються через Diagnostic Settings на рівні ресурсу.
ARM-heavy objects (менш видимі в Activity/Resource logs)
- Наступний список targets переважно використовує ARM control plane reads: automation-accounts, container-registries, function-apps, key-vaults, logic-apps, managed-clusters, management-groups, resource-groups, storage-accounts, storage-containers, virtual-machines, vm-scale-sets, web-apps.
- Ці GET/list operations зазвичай не записуються в Activity Logs; data-plane reads (наприклад, *.blob.core.windows.net, *.vault.azure.net) покриваються Diagnostic Settings на рівні resource.
OPSEC and logging notes
- Microsoft Graph Activity Logs за замовчуванням не увімкнені; увімкніть і експортуйте в SIEM, щоб отримати видимість викликів Graph. Очікуйте Graph preflight GET /v1.0/organization з UA azurehound/v2.x.x.
- У логах non-interactive sign-in Entra ID фіксується автентифікація identity platform (login.microsoftonline.com), яку використовує AzureHound.
- Операції читання/list через ARM control-plane не записуються в Activity Logs; багато операцій azurehound list по ресурсу там не з’являться. Лише data-plane логування (через Diagnostic Settings) зафіксує звернення до сервісних кінцевих точок.
- Defender XDR GraphApiAuditEvents (preview) може виявляти виклики Graph і ідентифікатори токенів, але може не містити UserAgent і мати обмежений термін зберігання.
- Microsoft Graph Activity Logs не увімкнені за замовчуванням; увімкніть і експортуйте в SIEM, щоб отримати visibility Graph calls. Очікуйте Graph preflight GET /v1.0/organization з UA azurehound/v2.x.x.
- Entra ID non-interactive sign-in logs записують identity platform auth (login.microsoftonline.com), який використовується AzureHound.
- ARM control-plane read/list operations не записуються в Activity Logs; many azurehound list operations проти resources не з’являться там. Лише data-plane logging (через Diagnostic Settings) capture reads до service endpoints.
- Defender XDR GraphApiAuditEvents (preview) може expose Graph calls і token identifiers, але може не мати UserAgent і має limited retention.
Tip: When enumerating for privilege paths, dump users, groups, roles, and role assignments, then ingest in BloodHound and use prebuilt cypher queries to surface Global Administrator/Privileged Role Administrator and transitive escalation via nested groups and RBAC assignments.
Launch the BloodHound web with `curl -L https://ghst.ly/getbhce | docker compose -f - up` and import the `output.json` file. Then, in the EXPLORE tab, in the CYPHER section you can see a folder icon that contains pre-built queries.
Запустіть BloodHound web за допомогою `curl -L https://ghst.ly/getbhce | docker compose -f - up` і import файл `output.json`. Потім у вкладці EXPLORE, у секції CYPHER, ви можете побачити іконку папки, яка містить pre-built queries.
### [**MicroBurst**](https://github.com/NetSPI/MicroBurst)
@@ -519,9 +560,9 @@ Get-AzureDomainInfo -folder MicroBurst -Verbose
```
### [**PowerZure**](https://github.com/hausec/PowerZure)
PowerZure був створений через потребу в фреймворку, який може виконувати reconnaissance та exploitation для Azure, EntraID і пов'язаних ресурсів.
PowerZure було створено через потребу у framework, який може виконувати як reconnaissance, так і exploitation Azure, EntraID та повязаних ресурсів.
Він використовує модуль **Az PowerShell**, тож будь-який спосіб автентифікації, який підтримує цей модуль, також підтримується інструментом.
Він використовує модуль **Az PowerShell**, тож будь-яка authentication, яку підтримує цей tool, підтримується і цим tool.
```bash
# Login
Import-Module Az
@@ -552,7 +593,7 @@ Invoke-AzureRunCommand -Command <command> -VMName <vmname>
```
### [**GraphRunner**](https://github.com/dafthack/GraphRunner/wiki/Invoke%E2%80%90GraphRunner)
GraphRunner — набір інструментів post-exploitation для взаємодії з Microsoft Graph API. Він надає різні інструменти для проведення reconnaissance, persistence та pillaging даних із облікового запису Microsoft Entra ID (Azure AD).
GraphRunner — це post-exploitation toolset для взаємодії з Microsoft Graph API. Він надає різні інструменти для виконання reconnaissance, persistence та pillaging даних з облікового запису Microsoft Entra ID (Azure AD).
```bash
#A good place to start is to authenticate with the Get-GraphTokens module. This module will launch a device-code login, allowing you to authenticate the session from a browser session. Access and refresh tokens will be written to the global $tokens variable. To use them with other GraphRunner modules use the Tokens flag (Example. Invoke-DumpApps -Tokens $tokens)
Import-Module .\GraphRunner.ps1
@@ -596,9 +637,9 @@ Invoke-GraphRunner -Tokens $tokens
```
### [Stormspotter](https://github.com/Azure/Stormspotter)
Stormspotter створює «attack graph» ресурсів у підписці Azure. Він дозволяє red teams і pentesters візуалізувати attack surface і pivot opportunities у межах tenant, та підсилює ваших defenders, щоб вони могли швидко зорієнтуватися й визначити пріоритети в incident response.
Stormspotter створює attack graph ресурсів в Azure subscription. Це дає змогу red teams і pentesters візуалізувати attack surface та pivot opportunities в межах tenant, а також значно підсилює можливості захисників швидко зорієнтуватися та пріоритизувати роботи з incident response.
**На жаль, схоже, що він не підтримується**
**На жаль, схоже, що проєкт не підтримується**.
```bash
# Start Backend
cd stormspotter\backend\
@@ -616,8 +657,12 @@ 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)
```
## Посилання
## References
- [Cloud Discovery With AzureHound (Unit 42)](https://unit42.paloaltonetworks.com/threat-actor-misuse-of-azurehound/)
- [Paved With Intent: ROADtools and Nation-State Tactics in the Cloud](https://unit42.paloaltonetworks.com/roadtools-cloud-attacks/)
- [ROADtools repository](https://github.com/dirkjanm/ROADtools)
- [ROADtools msgraph branch](https://github.com/dirkjanm/ROADtools/tree/msgraph)
- [Tom2Byrne/ROADtools](https://github.com/Tom2Byrne/ROADtools)
- [AzureHound repository](https://github.com/SpecterOps/AzureHound)
- [BloodHound repository](https://github.com/SpecterOps/BloodHound)
- [AzureHound Community Edition Flags](https://bloodhound.specterops.io/collect-data/ce-collection/azurehound-flags)