mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-01-14 05:46:25 -08:00
Translated ['src/pentesting-cloud/aws-security/aws-services/aws-cognito-
This commit is contained in:
Binary file not shown.
|
Before Width: | Height: | Size: 1.1 MiB After Width: | Height: | Size: 3.5 MiB |
@@ -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 <identity_pool_id> \
|
||||
--logins cognito-idp.<region>.amazonaws.com/<YOUR_USER_POOL_ID>=<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 <identity_id> \
|
||||
--logins cognito-idp.<region>.amazonaws.com/<YOUR_USER_POOL_ID>=<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 <identity_id> \
|
||||
<strong> --custom-role-arn <role_arn> \
|
||||
</strong> --logins cognito-idp.<region>.amazonaws.com/<YOUR_USER_POOL_ID>=<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}}
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user