AWS - Abusing Lambda Extensions
Lambda Extensions
Le estensioni Lambda migliorano le funzioni integrandosi con vari strumenti di monitoraggio, osservabilità, sicurezza e governance. Queste estensioni, aggiunte tramite .zip archives using Lambda layers o incluse in container image deployments, operano in due modalità: interna ed esterna.
Le estensioni interne si fondono con il processo runtime, manipolando il suo avvio utilizzando variabili d'ambiente specifiche del linguaggio e script wrapper. Questa personalizzazione si applica a una gamma di runtime, inclusi Java Correto 8 e 11, Node.js 10 e 12, e .NET Core 3.1.
Le estensioni esterne funzionano come processi separati, mantenendo l'allineamento operativo con il ciclo di vita della funzione Lambda. Sono compatibili con vari runtime come Node.js 10 e 12, Python 3.7 e 3.8, Ruby 2.5 e 2.7, Java Corretto 8 e 11, .NET Core 3.1, e runtime personalizzati.
Per ulteriori informazioni su come funzionano le estensioni lambda consulta la documentazione.
Estensione Esterna per Persistenza, Furto di Richieste e Modifica di Richieste
Questo è un riassunto della tecnica proposta in questo post: https://www.clearvector.com/blog/lambda-spy/
È stato scoperto che il kernel Linux predefinito nell'ambiente runtime Lambda è compilato con le chiamate di sistema “process_vm_readv” e “process_vm_writev”. E tutti i processi vengono eseguiti con lo stesso ID utente, anche il nuovo processo creato per l'estensione esterna. Ciò significa che un'estensione esterna ha pieno accesso in lettura e scrittura alla memoria heap di Rapid, per design.
Inoltre, mentre le estensioni Lambda hanno la capacità di iscriversi agli eventi di invocazione, AWS non rivela i dati grezzi a queste estensioni. Questo garantisce che le estensioni non possano accedere a informazioni sensibili trasmesse tramite la richiesta HTTP.
Il processo Init (Rapid) monitora tutte le richieste API su http://127.0.0.1:9001 mentre le estensioni Lambda vengono inizializzate e eseguite prima dell'esecuzione di qualsiasi codice runtime, ma dopo Rapid.
La variabile AWS_LAMBDA_RUNTIME_API
indica l'indirizzo IP e il numero di porta dell'API Rapid ai processi runtime figli e alle estensioni aggiuntive.
Modificando la variabile d'ambiente AWS_LAMBDA_RUNTIME_API
su una porta
a cui abbiamo accesso, è possibile intercettare tutte le azioni all'interno del runtime Lambda (man-in-the-middle). Questo è possibile perché l'estensione viene eseguita con gli stessi privilegi di Rapid Init, e il kernel del sistema consente la modifica della memoria del processo, permettendo l'alterazione del numero di porta.
Poiché le estensioni vengono eseguite prima di qualsiasi codice runtime, la modifica della variabile d'ambiente influenzerà il processo runtime (ad esempio, Python, Java, Node, Ruby) al suo avvio. Inoltre, le estensioni caricate dopo la nostra, che si basano su questa variabile, passeranno anche attraverso la nostra estensione. Questa configurazione potrebbe consentire al malware di bypassare completamente le misure di sicurezza o le estensioni di logging direttamente all'interno dell'ambiente runtime.
Lo strumento lambda-spy è stato creato per eseguire quella scrittura in memoria e rubare informazioni sensibili dalle richieste lambda, altre richieste di estensioni e persino modificarle.
Riferimenti
Last updated