AWS - Abusing Lambda Extensions
Last updated
Last updated
Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Lambda-Erweiterungen verbessern Funktionen, indem sie sich mit verschiedenen Überwachungs-, Beobachtungs-, Sicherheits- und Governance-Tools integrieren. Diese Erweiterungen, die über .zip-Archive mit Lambda-Schichten hinzugefügt oder in Container-Image-Bereitstellungen enthalten sind, arbeiten in zwei Modi: intern und extern.
Interne Erweiterungen verschmelzen mit dem Laufzeitprozess und manipulieren dessen Start mit sprachspezifischen Umgebungsvariablen und Wrapper-Skripten. Diese Anpassung gilt für eine Reihe von Laufzeiten, einschließlich Java Correto 8 und 11, Node.js 10 und 12 sowie .NET Core 3.1.
Externe Erweiterungen laufen als separate Prozesse und halten die Betriebsanpassung an den Lebenszyklus der Lambda-Funktion aufrecht. Sie sind mit verschiedenen Laufzeiten wie Node.js 10 und 12, Python 3.7 und 3.8, Ruby 2.5 und 2.7, Java Corretto 8 und 11, .NET Core 3.1 und benutzerdefinierten Laufzeiten kompatibel.
Für weitere Informationen darüber, wie Lambda-Erweiterungen funktionieren, überprüfen Sie die Dokumentation.
Dies ist eine Zusammenfassung der Technik, die in diesem Beitrag vorgeschlagen wird: https://www.clearvector.com/blog/lambda-spy/
Es wurde festgestellt, dass der Standard-Linux-Kernel in der Lambda-Laufzeitumgebung mit den Systemaufrufen “process_vm_readv” und “process_vm_writev” kompiliert ist. Und alle Prozesse laufen mit derselben Benutzer-ID, selbst der neue Prozess, der für die externe Erweiterung erstellt wurde. Das bedeutet, dass eine externe Erweiterung vollen Lese- und Schreibzugriff auf den Heap-Speicher von Rapid hat, per Design.
Darüber hinaus haben Lambda-Erweiterungen die Fähigkeit, sich für Aufrufereignisse anzumelden, jedoch gibt AWS die Rohdaten nicht an diese Erweiterungen weiter. Dies stellt sicher, dass Erweiterungen keinen Zugriff auf sensible Informationen haben, die über die HTTP-Anfrage übertragen werden.
Der Init (Rapid)-Prozess überwacht alle API-Anfragen unter http://127.0.0.1:9001, während Lambda-Erweiterungen initialisiert und vor der Ausführung von Laufzeitcode, aber nach Rapid, ausgeführt werden.
Die Variable AWS_LAMBDA_RUNTIME_API
gibt die IP-Adresse und die Portnummer der Rapid-API an Kindlaufzeitprozesse und zusätzliche Erweiterungen weiter.
Durch Ändern der AWS_LAMBDA_RUNTIME_API
-Umgebungsvariable auf einen Port
, auf den wir Zugriff haben, ist es möglich, alle Aktionen innerhalb der Lambda-Laufzeit abzufangen (Man-in-the-Middle). Dies ist möglich, weil die Erweiterung mit denselben Berechtigungen wie Rapid Init läuft und der Kernel des Systems Änderungen am Prozessspeicher zulässt, was die Änderung der Portnummer ermöglicht.
Da Erweiterungen vor jeglichem Laufzeitcode ausgeführt werden, wird die Modifikation der Umgebungsvariable den Laufzeitprozess (z. B. Python, Java, Node, Ruby) beim Start beeinflussen. Darüber hinaus werden Erweiterungen, die nach unserer geladen werden und auf dieser Variablen basieren, ebenfalls über unsere Erweiterung geleitet. Diese Konfiguration könnte Malware ermöglichen, Sicherheitsmaßnahmen oder Protokollierungserweiterungen direkt innerhalb der Laufzeitumgebung vollständig zu umgehen.
Das Tool lambda-spy wurde erstellt, um Speicher zu schreiben und sensible Informationen aus Lambda-Anfragen, anderen Erweiterungsanfragen zu stehlen und sie sogar zu modifizieren.
Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)