Translated ['src/pentesting-cloud/aws-security/aws-services/aws-cognito-

This commit is contained in:
Translator
2025-01-26 14:51:47 +00:00
parent b94a614d66
commit 4b53fcadf6
3 changed files with 35 additions and 35 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 MiB

After

Width:  |  Height:  |  Size: 3.5 MiB

View File

@@ -2,9 +2,9 @@
{{#include ../../../../banners/hacktricks-training.md}}
## Основна інформація
## Basic Information
Identity pools відіграють важливу роль, дозволяючи вашим користувачам **отримувати тимчасові облікові дані**. Ці облікові дані є необхідними для доступу до різних AWS сервісів, включаючи, але не обмежуючись, Amazon S3 та DynamoDB. Помітною особливістю identity pools є їх підтримка як анонімних гостьових користувачів, так і різноманітних постачальників ідентичності для аутентифікації користувачів. Підтримувані постачальники ідентичності включають:
Identity pools виконують важливу роль, дозволяючи вашим користувачам **отримувати тимчасові облікові дані**. Ці облікові дані є необхідними для доступу до різних AWS сервісів, включаючи, але не обмежуючись, Amazon S3 та DynamoDB. Помітною особливістю identity pools є їх підтримка як анонімних гостьових користувачів, так і різноманітних постачальників ідентичності для аутентифікації користувачів. Підтримувані постачальники ідентичності включають:
- Amazon Cognito user pools
- Соціальні варіанти входу, такі як Facebook, Google, Login with Amazon та Sign in with Apple
@@ -35,7 +35,7 @@ print(response)
```
### Cognito Sync
Щоб згенерувати сесії Identity Pool, спочатку потрібно **згенерувати ідентифікатор Identity ID**. Цей ідентифікатор Identity ID є **ідентифікацією сесії цього користувача**. Ці ідентифікації можуть мати до 20 наборів даних, які можуть зберігати до 1MB пар ключ-значення.
Щоб згенерувати сесії Identity Pool, спочатку потрібно **згенерувати ідентифікатор Identity ID**. Цей ідентифікатор є **ідентифікацією сесії цього користувача**. Ці ідентифікації можуть мати до 20 наборів даних, які можуть зберігати до 1 МБ пар ключ-значення.
Це **корисно для збереження інформації про користувача** (який завжди буде використовувати один і той же ідентифікатор Identity ID).
@@ -43,7 +43,7 @@ print(response)
### Tools for pentesting
- [Pacu](https://github.com/RhinoSecurityLabs/pacu), фреймворк експлуатації AWS, тепер включає модулі "cognito\_\_enum" та "cognito\_\_attack", які автоматизують перерахування всіх активів Cognito в обліковому записі та позначають слабкі конфігурації, атрибути користувачів, що використовуються для контролю доступу тощо, а також автоматизують створення користувачів (включаючи підтримку MFA) та ескалацію привілеїв на основі змінних користувацьких атрибутів, використовуваних облікових даних пулу ідентичностей, ролей, які можна прийняти в токенах ідентифікації тощо.
- [Pacu](https://github.com/RhinoSecurityLabs/pacu), фреймворк експлуатації AWS, тепер включає модулі "cognito\_\_enum" та "cognito\_\_attack", які автоматизують перерахування всіх активів Cognito в обліковому записі та позначають слабкі конфігурації, атрибути користувачів, що використовуються для контролю доступу тощо, а також автоматизують створення користувачів (включаючи підтримку MFA) та ескалацію привілеїв на основі змінних атрибутів, що підлягають модифікації, використовуваних облікових даних пулу ідентичностей, ролей, які можна прийняти в токенах ідентифікації тощо.
Для опису функцій модулів дивіться частину 2 [блог-посту](https://rhinosecuritylabs.com/aws/attacking-aws-cognito-with-pacu-p2). Для інструкцій з установки дивіться основну сторінку [Pacu](https://github.com/RhinoSecurityLabs/pacu).
@@ -73,14 +73,14 @@ $ cognito-scanner --help
## Доступ до IAM ролей
### Неавтентифікований
### Неавтентифіковані
Єдине, що потрібно зловмиснику, щоб **отримати AWS облікові дані** в додатку Cognito як неавтентифікованому користувачу, це **ID пулу ідентичності**, і цей **ID повинен бути закодований** в веб/мобільному **додатку** для його використання. ID виглядає так: `eu-west-1:098e5341-8364-038d-16de-1865e435da3b` (його не можна зламати методом перебору).
Єдине, що атакуючий повинен знати, щоб **отримати AWS облікові дані** в додатку Cognito як неавтентифікований користувач, це **ID пулу ідентичності**, і цей **ID повинен бути закодований** в веб/мобільному **додатку** для його використання. ID виглядає так: `eu-west-1:098e5341-8364-038d-16de-1865e435da3b` (його не можна зламати методом перебору).
> [!TIP]
> **IAM роль Cognito для неавтентифікованих користувачів, створена через**, за замовчуванням називається `Cognito_<Назва пулу ідентичності>Unauth_Role`
Якщо ви знайдете ID пулу ідентичності, закодований в додатку, і він дозволяє неавтентифікованим користувачам, ви можете отримати AWS облікові дані за допомогою:
Якщо ви знайдете ID пулу ідентичності, закодований у коді, і він дозволяє неавтентифікованим користувачам, ви можете отримати AWS облікові дані за допомогою:
```python
import requests
@@ -114,9 +114,9 @@ aws cognito-identity get-credentials-for-identity --identity-id <identity_id> --
> [!WARNING]
> Зверніть увагу, що за замовчуванням неавтентифікований cognito **користувач НЕ МОЖЕ мати жодних дозволів, навіть якщо вони були призначені через політику**. Перевірте наступний розділ.
### Покращений vs Базовий потік автентифікації
### Розширений vs Базовий потік автентифікації
Попередній розділ слідував **за замовчуванням покращеному потоку автентифікації**. Цей потік встановлює **обмежувальну** [**політику сесії**](../../aws-basic-information/#session-policies) для сесії ролі IAM, що генерується. Ця політика дозволить сесії [**використовувати послуги з цього списку**](https://docs.aws.amazon.com/cognito/latest/developerguide/iam-roles.html#access-policies-scope-down-services) (навіть якщо роль мала доступ до інших послуг).
Попередній розділ слідував **за замовчуванням розширеному потоку автентифікації**. Цей потік встановлює **обмежувальну** [**політику сесії**](../../aws-basic-information/index.html#session-policies) для сесії ролі IAM, що генерується. Ця політика дозволить сесії лише [**використовувати послуги з цього списку**](https://docs.aws.amazon.com/cognito/latest/developerguide/iam-roles.html#access-policies-scope-down-services) (навіть якщо роль мала доступ до інших послуг).
Однак є спосіб обійти це, якщо **Ідентифікаційний пул має увімкнений "Базовий (Класичний) Потік"**, користувач зможе отримати сесію, використовуючи цей потік, який **не матиме цієї обмежувальної політики сесії**.
```bash
@@ -135,7 +135,7 @@ aws sts assume-role-with-web-identity --role-arn "arn:aws:iam::<acc_id>:role/<ro
> `An error occurred (InvalidParameterException) when calling the GetOpenIdToken operation: Basic (classic) flow is not enabled, please use enhanced flow.`
Маючи набір облікових даних IAM, вам слід перевірити [які права ви маєте](../../#whoami) і спробувати [підвищити привілеї](../../aws-privilege-escalation/).
Маючи набір облікових даних IAM, вам слід перевірити [які права ви маєте](../../index.html#whoami) і спробувати [підвищити привілеї](../../aws-privilege-escalation/index.html).
### Аутентифіковані
@@ -147,29 +147,29 @@ aws sts assume-role-with-web-identity --role-arn "arn:aws:iam::<acc_id>:role/<ro
Для цього вам може знадобитися доступ до **постачальника ідентичності**. Якщо це **Cognito User Pool**, можливо, ви зможете зловживати стандартною поведінкою і **створити нового користувача самостійно**.
> [!TIP]
> **IAM роль Cognito, створена через**, за замовчуванням називається `Cognito_<Identity Pool name>Auth_Role`
> **IAM роль Cognito, створена через**, за замовчуванням називається `Cognito_<Ім'я Identity Pool>Auth_Role`
У будь-якому випадку, **наступний приклад** передбачає, що ви вже увійшли в **Cognito User Pool**, який використовується для доступу до Identity Pool (не забувайте, що також можуть бути налаштовані інші типи постачальників ідентичності).
<pre class="language-bash"><code class="lang-bash">aws cognito-identity get-id \
--identity-pool-id &#x3C;identity_pool_id> \
--logins cognito-idp.&#x3C;region>.amazonaws.com/&#x3C;YOUR_USER_POOL_ID>=&#x3C;ID_TOKEN>
--identity-pool-id <identity_pool_id> \
--logins cognito-idp.<region>.amazonaws.com/<YOUR_USER_POOL_ID>=<ID_TOKEN>
# Отримайте identity_id з відповіді попередньої команди
aws cognito-identity get-credentials-for-identity \
--identity-id &#x3C;identity_id> \
--logins cognito-idp.&#x3C;region>.amazonaws.com/&#x3C;YOUR_USER_POOL_ID>=&#x3C;ID_TOKEN>
--identity-id <identity_id> \
--logins cognito-idp.<region>.amazonaws.com/<YOUR_USER_POOL_ID>=<ID_TOKEN>
# У IdToken ви можете знайти ролі, до яких має доступ користувач через групи User Pool
# Використовуйте --custom-role-arn, щоб отримати облікові дані для конкретної ролі
aws cognito-identity get-credentials-for-identity \
--identity-id &#x3C;identity_id> \
<strong> --custom-role-arn &#x3C;role_arn> \
</strong> --logins cognito-idp.&#x3C;region>.amazonaws.com/&#x3C;YOUR_USER_POOL_ID>=&#x3C;ID_TOKEN>
--identity-id <identity_id> \
<strong> --custom-role-arn <role_arn> \
</strong> --logins cognito-idp.<region>.amazonaws.com/<YOUR_USER_POOL_ID>=<ID_TOKEN>
</code></pre>
> [!WARNING]
> Можливо **налаштувати різні ролі IAM в залежності від постачальника ідентичності**, під яким користувач увійшов, або навіть просто в залежності **від користувача** (використовуючи претензії). Тому, якщо у вас є доступ до різних користувачів через одного або різних постачальників, можливо, **варто увійти та отримати доступ до ролей IAM всіх з них**.
> Можливо **налаштувати різні IAM ролі в залежності від постачальника ідентичності**, під яким користувач увійшов, або навіть просто в залежності **від користувача** (використовуючи заяви). Тому, якщо у вас є доступ до різних користувачів через одного або різних постачальників, можливо, **варто увійти і отримати доступ до IAM ролей усіх з них**.
{{#include ../../../../banners/hacktricks-training.md}}

View File

@@ -12,14 +12,14 @@ az-azure-network.md
## Основна інформація про ВМ
Віртуальні машини Azure (ВМ) є гнучкими, на вимогу **хмарними серверами, які дозволяють запускати операційні системи Windows або Linux**. Вони дозволяють розгортати програми та навантаження без управління фізичним обладнанням. Віртуальні машини Azure можуть бути налаштовані з різними параметрами ЦП, пам'яті та зберігання для задоволення специфічних потреб і інтеграції з сервісами Azure, такими як віртуальні мережі, зберігання та інструменти безпеки.
Віртуальні машини Azure (ВМ) є гнучкими, на вимогу **хмарними серверами, які дозволяють запускати операційні системи Windows або Linux**. Вони дозволяють розгортати програми та навантаження без управління фізичним обладнанням. Віртуальні машини Azure можуть бути налаштовані з різними параметрами ЦП, пам'яті та зберігання для задоволення конкретних потреб і інтеграції з сервісами Azure, такими як віртуальні мережі, зберігання та інструменти безпеки.
### Налаштування безпеки
- **Зони доступності**: Зони доступності - це окремі групи дата-центрів у конкретному регіоні Azure, які фізично відокремлені, щоб мінімізувати ризик впливу кількох зон через локальні відключення або катастрофи.
- **Тип безпеки**:
- **Стандартна безпека**: Це тип безпеки за замовчуванням, який не вимагає жодного специфічного налаштування.
- **Довірене завантаження**: Цей тип безпеки підвищує захист від завантажувальних комплектів і шкідливого ПЗ на рівні ядра, використовуючи Secure Boot і Віртуальний модуль довіреної платформи (vTPM).
- **Довірене завантаження**: Цей тип безпеки підвищує захист від завантажувальних комплектів і шкідливого ПЗ на рівні ядра, використовуючи Secure Boot і Virtual Trusted Platform Module (vTPM).
- **Конфіденційні ВМ**: На додаток до довіреного завантаження, він пропонує апаратну ізоляцію між ВМ, гіпервізором і управлінням хостом, покращує шифрування диска та [**більше**](https://learn.microsoft.com/en-us/azure/confidential-computing/confidential-vm-overview)**.**
- **Аутентифікація**: За замовчуванням генерується новий **SSH ключ**, хоча можливо використовувати публічний ключ або попередній ключ, а ім'я користувача за замовчуванням - **azureuser**. Також можливо налаштувати використання **пароля.**
- **Шифрування диска ВМ:** Диск за замовчуванням шифрується в спокої, використовуючи ключ, керований платформою.
@@ -36,21 +36,21 @@ az-azure-network.md
- Відсоток споживаних IOPS дисків даних перевищує 95%
- Відсоток споживаних IOPS ОС перевищує 95%
- Загальна мережа перевищує 500 ГБ
- Загальний вихід з мережі перевищує 200 ГБ
- Загальний вихід мережі перевищує 200 ГБ
- Показник доступності ВМ менше 1
- **Монітор здоров'я**: За замовчуванням перевіряє протокол HTTP на порту 80
- **Замки**: Дозволяє заблокувати ВМ, щоб її можна було лише читати (**ReadOnly** замок) або її можна було читати та оновлювати, але не видаляти (**CanNotDelete** замок).
- **Замки**: Дозволяє заблокувати ВМ, щоб її можна було лише читати (**ReadOnly** lock) або щоб її можна було читати та оновлювати, але не видаляти (**CanNotDelete** lock).
- Більшість ресурсів, пов'язаних з ВМ, **також підтримують замки**, такі як диски, знімки...
- Замки також можуть бути застосовані на **рівнях групи ресурсів і підписки**
## Диски та знімки
- Можливо **увімкнути приєднання диска до 2 або більше ВМ**
- Можливо **увімкнути підключення диска до 2 або більше ВМ**
- За замовчуванням кожен диск **шифрується** за допомогою ключа платформи.
- Те ж саме стосується знімків
- За замовчуванням можливо **поділитися диском з усіх мереж**, але його також можна **обмежити** лише певним **приватним доступом** або **повністю відключити** публічний і приватний доступ.
- За замовчуванням можливо **поділитися диском з усіма мережами**, але його також можна **обмежити** лише певними **приватними доступами** або **повністю відключити** публічний і приватний доступ.
- Те ж саме стосується знімків
- Можливо **згенерувати SAS URI** (максимум на 60 днів) для **експорту диска**, який може бути налаштований на вимогу аутентифікації або ні
- Можливо **згенерувати SAS URI** (максимум на 60 днів) для **експорту диска**, який можна налаштувати на вимогу аутентифікації або ні
- Те ж саме стосується знімків
{{#tabs}}
@@ -150,7 +150,7 @@ Get-AzRestorePointCollection -Name <CollectionName> -ResourceGroupName <Resource
Azure Bastion забезпечує безпечний та безперешкодний **Remote Desktop Protocol (RDP)** та **Secure Shell (SSH)** доступ до ваших віртуальних машин (VM) безпосередньо через Azure Portal або через jump box. Завдяки **усуненню необхідності в публічних IP-адресах** на ваших VM.
Bastion розгортає підмережу під назвою **`AzureBastionSubnet`** з маскою підмережі `/26` у VNet, в якому потрібно працювати. Потім він дозволяє **підключатися до внутрішніх VM через браузер** за допомогою `RDP` та `SSH`, уникаючи відкриття портів VM в Інтернет. Він також може працювати як **jump host**.
Bastion розгортає підмережу під назвою **`AzureBastionSubnet`** з маскою підмережі `/26` у VNet, в якому потрібно працювати. Потім він дозволяє **підключатися до внутрішніх VM через браузер** за допомогою `RDP` та `SSH`, уникаючи відкриття портів VM в Інтернеті. Він також може працювати як **jump host**.
Щоб перерахувати всі Azure Bastion Hosts у вашій підписці та підключитися до VM через них, ви можете використовувати наступні команди:
@@ -551,7 +551,7 @@ Set-AzVMAccessExtension -ResourceGroupName "<rsc-group>" -VMName "<vm-name>" -Na
<summary>DesiredStateConfiguration (DSC)</summary>
Це **розширення ВМ**, яке належить Microsoft і використовує PowerShell DSC для управління конфігурацією Azure Windows ВMs. Тому його можна використовувати для **виконання довільних команд** у Windows ВMs через це розширення:
Це **розширення ВМ**, яке належить Microsoft і використовує PowerShell DSC для управління конфігурацією Azure Windows ВМ. Тому його можна використовувати для **виконання довільних команд** у Windows ВМ через це розширення:
```bash
# Content of revShell.ps1
Configuration RevShellConfig {
@@ -625,9 +625,9 @@ az sig gallery-application list --gallery-name <gallery-name> --resource-group <
Перевірте, як встановити нові програми в [https://learn.microsoft.com/en-us/azure/virtual-machines/vm-applications-how-to?tabs=cli](https://learn.microsoft.com/en-us/azure/virtual-machines/vm-applications-how-to?tabs=cli)
> [!CAUTION]
> Можливо **ділитися окремими додатками та галереями з іншими підписками або орендарями**. Що дуже цікаво, оскільки це може дозволити зловмиснику створити бекдор для програми та перейти до інших підписок і орендарів.
> Можливо **ділитися окремими додатками та галереями з іншими підписками або орендарями**. Що є дуже цікавим, оскільки це може дозволити зловмиснику створити бекдор для програми та перейти до інших підписок і орендарів.
Але **немає "ринку" для vm додатків**, як це є для розширень.
Але **немає "маркетплейсу" для vm додатків**, як це є для розширень.
Необхідні дозволи:
@@ -727,9 +727,9 @@ az vm application set \
Можливо передати деякі дані до VM, які будуть зберігатися в очікуваних шляхах:
- У **Windows** користувацькі дані розміщуються в `%SYSTEMDRIVE%\AzureData\CustomData.bin` як бінарний файл, і вони не обробляються.
- У **Windows** користувацькі дані розміщуються в `%SYSTEMDRIVE%\AzureData\CustomData.bin` як бінарний файл і не обробляються.
- У **Linux** вони зберігалися в `/var/lib/waagent/ovf-env.xml`, а тепер зберігаються в `/var/lib/waagent/CustomData/ovf-env.xml`
- **Linux агент**: За замовчуванням не обробляє користувацькі дані, потрібен користувацький образ з увімкненими даними
- **Агент Linux**: За замовчуванням не обробляє користувацькі дані, потрібен користувацький образ з увімкненими даними
- **cloud-init:** За замовчуванням обробляє користувацькі дані, і ці дані можуть бути в [**декількох форматах**](https://cloudinit.readthedocs.io/en/latest/explanation/format.html). Він може легко виконати скрипт, просто надіславши його в користувацьких даних.
- Я спробував, щоб і Ubuntu, і Debian виконували скрипт, який ви помістили сюди.
- Також не потрібно активувати дані користувача для виконання цього.
@@ -793,16 +793,16 @@ Invoke-AzureRmVMBulkCMD -Script Mimikatz.ps1 -Verbose -output Output.txt
## Неавтентифікований Доступ
{{#ref}}
../../az-unauthenticated-enum-and-initial-entry/az-vms-unath.md
../../az-unauthenticated-enum-and-initial-entry/az-vms-unauth.md
{{#endref}}
## Постексплуатація
## Після Експлуатації
{{#ref}}
../../az-post-exploitation/az-vms-and-network-post-exploitation.md
{{#endref}}
## Персистентність
## Постійність
{{#ref}}
../../az-persistence/az-vms-persistence.md