AWS - Abusing Lambda Extensions
Last updated
Last updated
Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Розширення 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.
Змінна AWS_LAMBDA_RUNTIME_API
вказує IP адресу та номер порту Rapid API для дочірніх процесів середовища виконання та додаткових розширень.
Змінивши змінну середовища AWS_LAMBDA_RUNTIME_API
на порт
, до якого ми маємо доступ, можна перехопити всі дії в середовищі виконання Lambda (людина посередині). Це можливо, оскільки розширення працює з тими ж привілеями, що й Rapid Init, а ядро системи дозволяє модифікацію пам'яті процесу, що дозволяє змінювати номер порту.
Оскільки розширення працюють перед будь-яким кодом середовища виконання, модифікація змінної середовища вплине на процес виконання (наприклад, Python, Java, Node, Ruby) під час його запуску. Більше того, розширення, завантажені після нашого, які покладаються на цю змінну, також будуть маршрутизуватися через наше розширення. Це налаштування може дозволити шкідливому програмному забезпеченню повністю обійти заходи безпеки або розширення журналювання безпосередньо в середовищі виконання.
Інструмент lambda-spy був створений для виконання запису в пам'ять та крадіжки чутливої інформації з запитів lambda, інших запитів розширень та навіть модифікації їх.
Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)