AWS - Lambda Layers Persistence
Last updated
Last updated
Learn & practice AWS Hacking: Learn & practice GCP Hacking:
Lambda sloj je .zip datoteka koja može sadržati dodatni kod ili drugi sadržaj. Sloj može sadržati biblioteke, , podatke ili konfiguracione datoteke.
Moguće je uključiti do pet slojeva po funkciji. Kada uključite sloj u funkciju, sadržaj se ekstraktuje u /opt
direktorijumu u izvršnom okruženju.
Po zadovoljstvu, slojevi koje kreirate su privatni za vaš AWS nalog. Možete odlučiti da podelite sloj sa drugim nalozima ili da napravite sloj javnim. Ako vaše funkcije koriste sloj koji je objavio drugi nalog, vaše funkcije mogu nastaviti da koriste verziju sloja nakon što je obrisana, ili nakon što je vaša dozvola za pristup sloju opozvana. Međutim, ne možete kreirati novu funkciju ili ažurirati funkcije koristeći obrisanu verziju sloja.
Funkcije koje su implementirane kao kontejnerska slika ne koriste slojeve. Umesto toga, pakujete svoje omiljeno izvršno okruženje, biblioteke i druge zavisnosti u kontejnersku sliku kada gradite sliku.
Putanja učitavanja koju će Python koristiti u lambdi je sledeća:
Proverite kako druga i treća pozicija zauzimaju direktorijumi gde lambda slojevi raspakuju svoje datoteke: /opt/python/lib/python3.9/site-packages
i /opt/python
Ako napadač uspe da ubaci zloćudni kod u korišćeni lambda sloj ili doda jedan koji će izvršavati proizvoljan kod kada se učita uobičajena biblioteka, moći će da izvrši zloćudni kod sa svakim pozivom lambda funkcije.
Stoga, zahtevi su:
Proverite biblioteke koje su učitane kod žrtve
Kreirajte proxy biblioteku sa lambda slojevima koja će izvršavati prilagođeni kod i učitati originalnu biblioteku.
Kada se zloupotrebljava ova tehnika, naišao sam na poteškoću: Neke biblioteke su već učitane u python runtime kada se vaš kod izvršava. Očekivao sam da pronađem stvari poput os
ili sys
, ali čak je i json
biblioteka bila učitana.
Da bi se zloupotrebljavala ova tehnika postojanosti, kod mora da učita novu biblioteku koja nije učitana kada se kod izvršava.
Sa python kodom poput ovog moguće je dobiti listu biblioteka koje su unapred učitane unutar python runtime-a u lambda:
I ovo je lista (proverite da li su biblioteke poput os
ili json
već prisutne)
U ovom primeru pretpostavimo da ciljani kod uvozi csv
. Mi ćemo napraviti backdoor za uvoz csv
biblioteke.
Da bismo to uradili, kreiraćemo direktorijum csv sa fajlom __init__.py
u njemu na putanji koja se učitava od strane lambda: /opt/python/lib/python3.9/site-packages
Zatim, kada se lambda izvrši i pokuša da učita csv, naš __init__.py
fajl će biti učitan i izvršen.
Ovaj fajl mora:
Izvršiti naš payload
Učitati originalnu csv biblioteku
Možemo uraditi oboje sa:
Zatim, kreirajte zip sa ovim kodom na putanji python/lib/python3.9/site-packages/__init__.py
i dodajte ga kao lambda layer.
Integrisani payload će poslati IAM kredencijale na server PRVI PUT kada se pozove ili NAKON resetovanja lambda kontejnera (promena koda ili hladna lambda), ali druge tehnike kao što su sledeće takođe mogu biti integrisane:
Napomena da je moguće koristiti lambda layer-e iz eksternih naloga. Štaviše, lambda može koristiti layer iz eksternog naloga čak i ako nema dozvole. Takođe, napomena da je maksimalan broj layer-a koji lambda može imati 5.
Stoga, kako bi poboljšao svestranost ove tehnike, napadač bi mogao:
Backdoor-ovati postojeći layer korisnika (ništa nije eksterno)
Kreirati layer u svojim nalogu, dati nalogu žrtve pristup da koristi layer, konfigurisati layer u Lambda žrtve i ukloniti dozvolu.
Lambda će i dalje moći da koristi layer i žrtva neće imati lak način da preuzme kod layer-a (osim ako ne dobije rev shell unutar lambda)
Žrtva neće videti eksterne layer-e korišćene sa aws lambda list-layers
I ovo je lista biblioteka koje lambda uključuje instalirane po defaultu:
Ovaj kod možete pronaći na
Učite i vežbajte AWS Hacking: Učite i vežbajte GCP Hacking:
Proverite !
Pridružite se 💬 ili ili pratite nas na Twitteru 🐦 .
Podelite hakerske trikove slanjem PR-ova na i github repozitorijume.