AWS - Lambda Enum
Lambda
Amazon Web Services (AWS) Lambda wird als ein Berechnungsdienst beschrieben, der die Ausführung von Code ohne die Notwendigkeit für die Bereitstellung oder Verwaltung von Servern ermöglicht. Es zeichnet sich durch seine Fähigkeit aus, automatisch die Ressourcenzuweisung für die Codeausführung zu handhaben und Funktionen wie hohe Verfügbarkeit, Skalierbarkeit und Sicherheit zu gewährleisten. Ein wesentlicher Aspekt von Lambda ist sein Preismodell, bei dem Gebühren ausschließlich auf der genutzten Rechenzeit basieren, was die Notwendigkeit für anfängliche Investitionen oder langfristige Verpflichtungen beseitigt.
Um eine Lambda aufzurufen, ist es möglich, sie so häufig wie gewünscht aufzurufen (mit Cloudwatch), einen **URL-Endpunkt freizugeben und sie aufzurufen, sie über API Gateway aufzurufen oder sogar basierend auf Ereignissen wie Änderungen an Daten in einem S3-Bucket oder Updates einer DynamoDB-Tabelle.
Der Code einer Lambda wird im /var/task
gespeichert.
Gewichtung von Lambda-Aliasen
Eine Lambda kann mehrere Versionen haben. Und es können mehr als 1 Version über Aliasen freigegeben werden. Die Gewichte jeder der in einem Alias freigegebenen Versionen entscheiden darüber, welcher Alias den Aufruf erhält (es kann zum Beispiel 90%-10% sein). Wenn der Code eines der Aliase anfällig ist, können Sie Anfragen senden, bis die anfällige Version den Exploit erhält.
Ressourcenrichtlinien
Lambda-Ressourcenrichtlinien ermöglichen es, anderen Diensten/Konten den Aufruf der Lambda zu ermöglichen. Beispielsweise ist dies die Richtlinie, um jedem den Zugriff auf eine über URL freigegebene Lambda zu ermöglichen:
Oder dies, um einem API Gateway den Aufruf zu ermöglichen:
Lambda-Datenbankproxys
Wenn es hunderte von gleichzeitigen Lambda-Anfragen gibt und jede von ihnen eine Verbindung zu einer Datenbank herstellen und schließen muss, funktioniert das einfach nicht (Lambdas sind zustandslos, können keine Verbindungen offen halten). Dann, wenn Ihre Lambda-Funktionen mit RDS Proxy interagieren anstelle Ihrer Datenbankinstanz. Es handhabt das für das Skalieren vieler gleichzeitiger Verbindungen erforderliche Verbindungspooling, die von gleichzeitigen Lambda-Funktionen erstellten. Dies ermöglicht es Ihren Lambda-Anwendungen, bestehende Verbindungen wiederzuverwenden, anstatt für jede Funktionsaufruf neue Verbindungen zu erstellen.
Lambda-EFS-Dateisysteme
Um Daten zu erhalten und sogar zu teilen, können Lambdas auf EFS zugreifen und sie einbinden, sodass Lambda daraus lesen und schreiben kann.
Lambda-Schichten
Eine Lambda Schicht ist ein .zip-Dateiarchiv, das zusätzlichen Code oder anderen Inhalt enthalten kann. Eine Schicht kann Bibliotheken, eine benutzerdefinierte Laufzeit, Daten oder Konfigurationsdateien enthalten.
Es ist möglich, bis zu fünf Schichten pro Funktion einzuschließen. Wenn Sie eine Schicht in eine Funktion einschließen, werden die Inhalte in das Verzeichnis /opt
in der Ausführungsumgebung extrahiert.
Standardmäßig sind die Schichten, die Sie erstellen, privat für Ihr AWS-Konto. Sie können wählen, eine Schicht mit anderen Konten zu teilen oder die Schicht öffentlich zu machen. Wenn Ihre Funktionen eine Schicht verbrauchen, die von einem anderen Konto veröffentlicht wurde, können Ihre Funktionen die Schichtversion weiterhin verwenden, nachdem sie gelöscht wurde, oder nachdem Ihre Berechtigung zum Zugriff auf die Schicht widerrufen wurde. Sie können jedoch keine neue Funktion erstellen oder Funktionen mit einer gelöschten Schichtversion aktualisieren.
Funktionen, die als Container-Image bereitgestellt werden, verwenden keine Schichten. Stattdessen packen Sie Ihre bevorzugte Laufzeit, Bibliotheken und andere Abhängigkeiten in das Container-Image, wenn Sie das Image erstellen.
Lambda-Erweiterungen
Lambda-Erweiterungen verbessern Funktionen, indem sie mit verschiedenen Überwachungs-, Beobachtbarkeits-, Sicherheits- und Governance-Tools integriert werden. Diese Erweiterungen, die über .zip-Archive mithilfe von Lambda-Schichten hinzugefügt werden oder in Container-Image-Bereitstellungen enthalten sind, arbeiten in zwei Modi: intern und extern.
Interne Erweiterungen verschmelzen mit dem Laufzeitprozess, indem sie seinen 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 im Einklang 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.
Auflistung
Rufen Sie eine Lambda-Funktion auf
Manuell
Über exponierte URL
Rufen Sie die Lambda-Funktion über die URL auf
Jetzt ist es an der Zeit, mögliche Lambda-Funktionen zu finden, die ausgeführt werden können:
Eine Lambda-Funktion namens "Level6" ist verfügbar. Lassen Sie uns herausfinden, wie wir sie aufrufen können:
Jetzt, da Sie den Namen und die ID kennen, können Sie den Namen abrufen:
Und rufen Sie schließlich die Funktion auf, indem Sie (beachten Sie, dass die ID, der Name und der Funktionsname in der URL erscheinen): https://s33ppypa75.execute-api.us-west-2.amazonaws.com/Prod/level6
URL:
https://<rest-api-id>.execute-api.<region>.amazonaws.com/<stageName>/<funcName>
Andere Auslöser
Es gibt viele andere Quellen, die eine Lambda auslösen können
Privilege Escalation
Auf der folgenden Seite können Sie überprüfen, wie Sie Lambda-Berechtigungen missbrauchen, um Privilegien zu eskalieren:
pageAWS - Lambda PrivescNicht authentifizierter Zugriff
pageAWS - Lambda Unauthenticated AccessPost-Exploitation
pageAWS - Lambda Post ExploitationPersistenz
pageAWS - Lambda PersistenceReferenzen
Last updated