AWS - Abusing Lambda Extensions

Erlernen Sie AWS-Hacking von Null auf Held mit htARTE (HackTricks AWS Red Team Expert)!

Andere Möglichkeiten, HackTricks zu unterstützen:

Lambda-Erweiterungen

Lambda-Erweiterungen verbessern Funktionen, indem sie mit verschiedenen Überwachungs-, Beobachtungs-, Sicherheits- und Governance-Tools integriert werden. Diese Erweiterungen, die über .zip-Archive mithilfe von Lambda-Layern hinzugefügt oder in Container-Image-Bereitstellungen enthalten sind, arbeiten in zwei Modi: intern und extern.

  • Interne Erweiterungen verschmelzen mit dem Laufzeitprozess, indem sie dessen Start mithilfe von sprachspezifischen Umgebungsvariablen und Wrapper-Skripten manipulieren. 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 werden als separate Prozesse ausgeführt und halten den Betrieb in Übereinstimmung mit dem Lebenszyklus der Lambda-Funktion aufrecht. Sie sind kompatibel 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.

Für weitere Informationen darüber, wie Lambda-Erweiterungen funktionieren, lesen Sie die Dokumentation.

Externe Erweiterung für Persistenz, Diebstahl von Anfragen und Änderung von Anfragen

Dies ist eine Zusammenfassung der in diesem Beitrag vorgeschlagenen Technik: 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 werden mit derselben Benutzer-ID ausgeführt, auch der neue Prozess, der für die externe Erweiterung erstellt wurde. Dies bedeutet, dass eine externe Erweiterung standardmäßig vollen Lese- und Schreibzugriff auf den Heap-Speicher von Rapid hat.

Darüber hinaus haben Lambda-Erweiterungen die Möglichkeit, sich zu Invocation-Ereignissen anzumelden, AWS gibt jedoch die Rohdaten nicht an diese Erweiterungen weiter. Dies stellt sicher, dass Erweiterungen nicht auf sensible Informationen zugreifen können, 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 ausgeführt werden, bevor die Ausführung von Laufzeitcode erfolgt, aber nach Rapid.

Die Variable AWS_LAMBDA_RUNTIME_API gibt die IP-Adresse und die Port-Nummer der Rapid-API an Kindlaufzeitprozesse und zusätzliche Erweiterungen weiter.

Durch Ändern der Umgebungsvariable AWS_LAMBDA_RUNTIME_API in einen Port, auf den zugegriffen werden kann, ist es möglich, alle Aktionen innerhalb der Lambda-Laufzeit abzufangen (Man-in-the-Middle). Dies ist möglich, da die Erweiterung mit denselben Berechtigungen wie Rapid Init ausgeführt wird und der Kernel des Systems die Änderung des Prozessspeichers ermöglicht, was die Änderung der Portnummer ermöglicht.

Da Erweiterungen vor jeglichem Laufzeitcode ausgeführt werden, beeinflusst die Änderung der Umgebungsvariable den Laufzeitprozess (z. B. Python, Java, Node, Ruby) beim Start. Darüber hinaus werden Erweiterungen, die nach unseren geladen werden und auf diese Variable angewiesen sind, ebenfalls durch unsere Erweiterung geleitet. Diese Konfiguration könnte es Malware ermöglichen, Sicherheitsmaßnahmen oder Protokollierungserweiterungen direkt innerhalb der Laufzeitumgebung vollständig zu umgehen.

Das Tool lambda-spy wurde erstellt, um diesen Speicherzugriff durchzuführen und sensible Informationen aus Lambda-Anfragen, anderen Erweiterungsanfragen zu stehlen und sie sogar zu ändern.

Referenzen

Erlernen Sie AWS-Hacking von Null auf Held mit htARTE (HackTricks AWS Red Team Expert)!

Andere Möglichkeiten, HackTricks zu unterstützen:

Last updated