mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-06-12 19:11:44 -07:00
Translated ['', 'src/pentesting-cloud/azure-security/az-enumeration-tool
This commit is contained in:
@@ -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"
|
||||
```
|
||||
You’ll 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 @@ You’ll 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)
|
||||
|
||||
Reference in New Issue
Block a user