AWS - Lambda Layers Persistence
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Слой Lambda - це архів .zip, який може містити додатковий код або інший вміст. Слой може містити бібліотеки, кастомний середовище виконання, дані або конфігураційні файли.
Можна включити до п'яти шарів на функцію. Коли ви включаєте шар у функцію, вміст витягується до каталогу /opt
у середовищі виконання.
За замовчуванням створені вами шари є приватними для вашого облікового запису AWS. Ви можете вибрати поділитися шаром з іншими обліковими записами або зробити шар публічним. Якщо ваші функції використовують шар, опублікований іншим обліковим записом, ваші функції можуть продовжувати використовувати версію шару після його видалення або після відкликання вашого дозволу на доступ до шару. Однак ви не можете створити нову функцію або оновити функції, використовуючи видалену версію шару.
Функції, розгорнуті як контейнерне зображення, не використовують шари. Натомість ви упаковуєте ваше улюблене середовище виконання, бібліотеки та інші залежності в контейнерне зображення під час його створення.
Шлях завантаження, який Python буде використовувати в lambda, є наступним:
Перевірте, як другу та третю позиції займають каталоги, де lambda layers розпаковують свої файли: /opt/python/lib/python3.9/site-packages
та /opt/python
Якщо зловмисник зміг внедрити використану lambda layer або додати одну, яка буде виконувати довільний код, коли завантажується загальна бібліотека, він зможе виконувати шкідливий код з кожним викликом lambda.
Отже, вимоги такі:
Перевірте бібліотеки, які завантажуються кодом жертви
Створіть проксі-бібліотеку з lambda layers, яка буде виконувати користувацький код та завантажувати оригінальну бібліотеку.
Коли я зловживав цією технікою, я зіткнувся з труднощами: деякі бібліотеки вже завантажені в середовищі виконання python, коли ваш код виконується. Я очікував знайти такі речі, як os
або sys
, але навіть бібліотека json
була завантажена.
Щоб зловживати цією технікою збереження, код повинен завантажити нову бібліотеку, яка не завантажена, коли код виконується.
З таким кодом на python можливо отримати список бібліотек, які попередньо завантажені в середовищі виконання python в lambda:
І це список (перевірте, що такі бібліотеки, як os
або json
, вже є)
І це список бібліотек, які lambda включає за замовчуванням: https://gist.github.com/gene1wood/4a052f39490fae00e0c3
У цьому прикладі припустимо, що цільовий код імпортує csv
. Ми будемо додавати задню дверку до імпорту бібліотеки csv
.
Для цього ми створимо директорію csv з файлом __init__.py
в ній у шляху, який завантажується lambda: /opt/python/lib/python3.9/site-packages
Тоді, коли lambda буде виконана і спробує завантажити csv, наш файл __init__.py
буде завантажений і виконаний.
Цей файл повинен:
Виконати наш payload
Завантажити оригінальну бібліотеку csv
Ми можемо зробити обидва з:
Тоді створіть zip з цим кодом за шляхом python/lib/python3.9/site-packages/__init__.py
і додайте його як шар lambda.
Ви можете знайти цей код за адресою https://github.com/carlospolop/LambdaLayerBackdoor
Інтегрований payload надішле IAM креденціали на сервер ПЕРШИЙ РАЗ, коли його викликають, або ПІСЛЯ скидання контейнера lambda (зміна коду або холодна lambda), але інші техніки такі як наступні також можуть бути інтегровані:
AWS - Steal Lambda RequestsЗверніть увагу, що можливо використовувати шари lambda з зовнішніх облікових записів. Більше того, lambda може використовувати шар з зовнішнього облікового запису, навіть якщо у неї немає дозволів. Також зверніть увагу, що максимальна кількість шарів, які може мати lambda, становить 5.
Отже, для покращення універсальності цієї техніки зловмисник може:
Задній доступ до існуючого шару користувача (нічого не є зовнішнім)
Створити шар у своєму обліковому записі, надати обліковому запису жертви доступ до використання шару, налаштувати шар у Lambda жертви та видалити дозвіл.
Lambda все ще зможе використовувати шар, а жертва не матиме жодного простого способу завантажити код шарів (окрім отримання rev shell всередині lambda)
Жертва не побачить зовнішні шари, використані з aws lambda list-layers
Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)