AWS - Lambda Persistenz

Reading time: 5 minutes

tip

Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Lernen & üben Sie Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Unterstützen Sie HackTricks

Lambda

Für weitere Informationen siehe:

AWS - Lambda Enum

Lambda Layer Persistenz

Es ist möglich, introduce/backdoor a layer to execute arbitrary code wenn die Lambda auf eine unauffällige Weise ausgeführt wird:

AWS - Lambda Layers Persistence

Lambda Extension Persistenz

Durch Missbrauch von Lambda Layers ist es auch möglich, Extensions zu missbrauchen und in der Lambda persistent zu bleiben, sowie Requests zu stehlen und zu modifizieren.

AWS - Abusing Lambda Extensions

Via resource policies

Es ist möglich, externen Accounts Zugriff auf verschiedene Lambda-Aktionen (wie invoke oder update code) zu gewähren:

Versionen, Aliases & Weights

Eine Lambda kann different versions (mit unterschiedlichem Code pro Version) haben.
Dann kannst du different aliases with different versions der Lambda erstellen und jedem unterschiedliche Weights zuweisen.
Auf diese Weise könnte ein Angreifer eine backdoored version 1 und eine version 2 with only the legit code erstellen und only execute the version 1 in 1% der Requests, um unauffällig zu bleiben.

Version Backdoor + API Gateway

  1. Kopiere den Originalcode der Lambda
  2. Create a new version backdooring den Originalcode (oder nur mit malicious code). Publish und deploy that version zu $LATEST
  3. Rufe das API Gateway, das mit der Lambda verknüpft ist, auf, um den Code auszuführen
  4. Create a new version with the original code, Publish und deploy that version zu $LATEST.
  5. Das wird den backdoored code in einer vorherigen Version verbergen
  6. Gehe zum API Gateway und create a new POST method (oder wähle eine andere Methode), die die backdoored version der Lambda ausführt: arn:aws:lambda:us-east-1:<acc_id>:function:<func_name>:1
  7. Beachte das abschließende :1 der arn indicating the version of the function (Version 1 wird in diesem Szenario die backdoored sein).
  8. Wähle die erstellte POST-Methode und unter Actions Deploy API
  9. Jetzt wird, wenn du die Funktion per POST aufrufst, deine Backdoor ausgelöst

Cron/Event actuator

Die Tatsache, dass man Lambda-Funktionen ausführen lassen kann, wenn etwas passiert oder nach Zeitintervallen, macht Lambda zu einem häufig genutzten Weg, um Persistenz zu erreichen und Entdeckung zu vermeiden.
Hier einige Ideen, um deine presence in AWS more stealth by creating lambdas.

  • Jedes Mal, wenn ein neuer user erstellt wird, generiert Lambda einen neuen user key und sendet ihn an den Angreifer.
  • Jedes Mal, wenn eine neue role erstellt wird, gewährt Lambda kompromittierten Benutzern die assume role Berechtigungen.
  • Jedes Mal, wenn neue CloudTrail-Logs erzeugt werden, lösche/verändere sie

RCE abusing AWS_LAMBDA_EXEC_WRAPPER + Lambda Layers

Missbrauche die Umgebungsvariable AWS_LAMBDA_EXEC_WRAPPER, um ein vom Angreifer kontrolliertes Wrapper-Skript auszuführen, bevor der runtime/handler startet. Liefere den Wrapper über ein Lambda Layer unter /opt/bin/htwrap, setze AWS_LAMBDA_EXEC_WRAPPER=/opt/bin/htwrap und rufe dann die Funktion auf. Der Wrapper läuft im Runtime-Prozess der Funktion, erbt die function execution role und exect schließlich das echte Runtime, sodass der ursprüngliche Handler normal weiterläuft.

AWS - Lambda Exec Wrapper Persistence

AWS - Lambda Function URL Public Exposure

Missbrauche Lambda asynchronous destinations zusammen mit der Recursion-Konfiguration, um eine Funktion sich kontinuierlich selbst neu aufrufen zu lassen, ohne externen Scheduler (kein EventBridge, cron, etc.). Standardmäßig beendet Lambda rekursive Schleifen, aber durch Setzen der recursion config auf Allow werden sie wieder aktiviert. Destinations liefern auf Service-Seite bei async invokes, sodass ein einzelner seed invoke ein unauffälliges, code-freies heartbeat/backdoor channel erzeugt. Optional mit reserved concurrency drosseln, um das Noise niedrig zu halten.

AWS - Lambda Async Self Loop Persistence

AWS - Lambda Alias-Scoped Resource Policy Backdoor

Erstelle eine versteckte Lambda-Version mit Angreifer-Logik und scope eine resource-based policy auf diese spezifische Version (oder alias) mittels des --qualifier Parameters in lambda add-permission. Gewähre nur lambda:InvokeFunction auf arn:aws:lambda:REGION:ACCT:function:FN:VERSION an ein Angreifer-Prinzipal. Normale Invocations über den Funktionsnamen oder den primären Alias bleiben unbeeinträchtigt, während der Angreifer die backdoored version ARN direkt aufrufen kann.

Das ist unauffälliger als das Exponieren einer Function URL und ändert den primären Traffic-Alias nicht.

AWS - Lambda Alias Version Policy Backdoor

tip

Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Lernen & üben Sie Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Unterstützen Sie HackTricks