diff --git a/src/pentesting-cloud/azure-security/az-enumeration-tools.md b/src/pentesting-cloud/azure-security/az-enumeration-tools.md index f22b0e621..5f885e89b 100644 --- a/src/pentesting-cloud/azure-security/az-enumeration-tools.md +++ b/src/pentesting-cloud/azure-security/az-enumeration-tools.md @@ -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 ` +Commands в Azure CLI мають структуру за шаблоном: `az ` -#### Налагодження | 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 \ | 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`. ### 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 мають структуру: `-Az ` +Команди в Azure PowerShell AZ Module структуровані як: `-Az ` #### 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 мають структуру: `-Mg ` +Commands у Microsoft Graph PowerShell структуровані так: `-Mg ` -#### Налагодження 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=" -e "AZURE_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 -ClientId -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 [-SubscriptionIdWhitelist ] ``` -## Автоматизовані 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 "" --password "" --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-` + +Ці значення легко змінити, тому сприймайте їх як **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 -p +- Username + password: -u -p - Refresh token: --refresh-token - JSON Web Token (access token): --jwt - Service principal secret: -a -s @@ -481,33 +522,33 @@ azurehound list storage-containers -t "" -o containers.json azurehound list web-apps -t "" -o webapps.json azurehound list function-apps -t "" -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 зазвичай виконує ці тестові виклики перед переліченням: +Поведінка preflight та endpoints +- Кожен azurehound list зазвичай виконує ці 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 -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)