AWS - Lambda Enum

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

Andere Möglichkeiten, HackTricks zu unterstützen:

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

aws lambda get-account-settings

# List functions and get extra config info
aws lambda list-functions
aws lambda get-function --function-name <function_name>
aws lambda get-function-configuration --function-name <function_name>
aws lambda list-function-event-invoke-configs --function-name <function_name>
## Check for creds in env vars
aws lambda list-functions | jq '.Functions[].Environment'
## Download & check the source code
aws lambda get-function --function-name "<func_name>" --query 'Code.Location'
wget -O lambda-function.zip <url-from-previous-query>

# Get Lambda URL (if any)
aws lambda list-function-url-configs --function-name <function_name>
aws lambda get-function-url-config --function-name <function_name>

# Get who has permissions to invoke the Lambda
aws lambda get-policy --function-name <function_name>

# Versions and Aliases
aws lambda list-versions-by-function --function-name <func_name>
aws lambda list-aliases --function-name <func_name>

# List layers
aws lambda list-layers
aws lambda list-layer-versions --layer-name <name>
aws lambda get-layer-version --layer-name <name> --version-number <ver>
aws lambda get-layer-version-by-arn --arn <name> #Get external ARNs

# List other metadata
aws lambda list-event-source-mappings
aws lambda list-code-signing-configs
aws lambda list-functions-by-code-signing-config --code-signing-config-arn <arn>

Rufen Sie eine Lambda-Funktion auf

Manuell

# Invoke function
aws lambda invoke --function-name FUNCTION_NAME /tmp/out
## Some functions will expect parameters, they will access them with something like:
## target_policys = event['policy_names']
## user_name = event['user_name']
aws lambda invoke --function-name <name> --cli-binary-format raw-in-base64-out --payload '{"policy_names": ["AdministratorAccess], "user_name": "sdf"}' out.txt

Über exponierte URL

aws lambda list-function-url-configs --function-name <function_name> #Get lambda URL
aws lambda get-function-url-config   --function-name <function_name> #Get lambda 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:

aws --region us-west-2 --profile level6 lambda list-functions

Eine Lambda-Funktion namens "Level6" ist verfügbar. Lassen Sie uns herausfinden, wie wir sie aufrufen können:

aws --region us-west-2 --profile level6 lambda get-policy --function-name Level6

Jetzt, da Sie den Namen und die ID kennen, können Sie den Namen abrufen:

aws --profile level6 --region us-west-2 apigateway get-stages --rest-api-id "s33ppypa75"

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 Privesc

Nicht authentifizierter Zugriff

pageAWS - Lambda Unauthenticated Access

Post-Exploitation

pageAWS - Lambda Post Exploitation

Persistenz

pageAWS - Lambda Persistence

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