AWS - Зловживання розширеннями Lambda

Reading time: 4 minutes

tip

Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Вивчайте та практикуйте Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Підтримка HackTricks

Розширення Lambda

Розширення Lambda покращують функції, інтегруючись з різними інструментами моніторингу, спостереження, безпеки та управління. Ці розширення, додані через .zip архіви за допомогою шарів Lambda або включені в деплойменти контейнерних зображень, працюють у двох режимах: внутрішньому та зовнішньому.

  • Внутрішні розширення зливаються з процесом виконання, маніпулюючи його запуском за допомогою змінних середовища, специфічних для мови та обгорткових скриптів. Це налаштування застосовується до ряду середовищ виконання, включаючи Java Correto 8 та 11, Node.js 10 та 12, і .NET Core 3.1.
  • Зовнішні розширення працюють як окремі процеси, підтримуючи узгодженість роботи з життєвим циклом функції Lambda. Вони сумісні з різними середовищами виконання, такими як Node.js 10 та 12, Python 3.7 та 3.8, Ruby 2.5 та 2.7, Java Corretto 8 та 11, .NET Core 3.1 та кастомними середовищами виконання.

Для отримання додаткової інформації про як працюють розширення lambda, перегляньте документацію.

Зовнішнє розширення для збереження, крадіжки запитів та модифікації запитів

Це резюме техніки, запропонованої в цьому пості: https://www.clearvector.com/blog/lambda-spy/

Було виявлено, що за замовчуванням ядро Linux у середовищі виконання Lambda скомпільоване з системними викликами “process_vm_readv” та “process_vm_writev”. І всі процеси працюють з однаковим ідентифікатором користувача, навіть новий процес, створений для зовнішнього розширення. Це означає, що зовнішнє розширення має повний доступ на читання та запис до пам'яті купи Rapid, за замовчуванням.

Більше того, хоча розширення Lambda мають можливість підписуватися на події виклику, AWS не розкриває сирі дані цим розширенням. Це забезпечує те, що розширення не можуть отримати доступ до чутливої інформації, переданої через HTTP запит.

Процес Init (Rapid) моніторить всі API запити на http://127.0.0.1:9001 під час ініціалізації розширень Lambda та їх виконання перед виконанням будь-якого коду середовища, але після Rapid.

https://www.clearvector.com/blog/content/images/size/w1000/2022/11/2022110801.rapid.default.png

Змінна AWS_LAMBDA_RUNTIME_API вказує IP адресу та номер порту Rapid API для дочірніх процесів середовища виконання та додаткових розширень.

warning

Змінивши змінну середовища AWS_LAMBDA_RUNTIME_API на порт, до якого ми маємо доступ, можна перехопити всі дії в середовищі виконання Lambda (людина посередині). Це можливо, оскільки розширення працює з тими ж привілеями, що й Rapid Init, а ядро системи дозволяє модифікацію пам'яті процесу, що дозволяє змінювати номер порту.

Оскільки розширення працюють перед будь-яким кодом середовища, зміна змінної середовища вплине на процес виконання (наприклад, Python, Java, Node, Ruby) під час його запуску. Крім того, розширення, завантажені після нашого, які покладаються на цю змінну, також будуть маршрутизуватися через наше розширення. Це налаштування може дозволити шкідливому ПЗ повністю обійти заходи безпеки або розширення журналювання безпосередньо в середовищі виконання.

https://www.clearvector.com/blog/content/images/size/w1000/2022/11/2022110801.rapid.mitm.png

Інструмент lambda-spy був створений для виконання запису пам'яті та крадіжки чутливої інформації з запитів lambda, інших запитів розширень та навіть модифікації їх.

Посилання

tip

Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Вивчайте та практикуйте Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Підтримка HackTricks