AWS - Lambda Enum
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Amazon Web Services (AWS) Lambda se opisuje kao računarska usluga koja omogućava izvršavanje koda bez potrebe za obezbeđivanjem ili upravljanjem serverima. Karakteriše se sposobnošću da automatski upravlja alokacijom resursa potrebnih za izvršavanje koda, obezbeđujući funkcije kao što su visoka dostupnost, skalabilnost i sigurnost. Značajan aspekt Lambda je njen model naplate, gde se naplaćuje isključivo na osnovu vremena korišćenja računara, eliminišući potrebu za inicijalnim ulaganjima ili dugoročnim obavezama.
Da biste pozvali lambda, moguće je pozvati je onoliko često koliko želite (sa Cloudwatch), izložiti URL krajnju tačku i pozvati je, pozvati je putem API Gateway ili čak na osnovu događaja kao što su promene podataka u S3 kanti ili ažuriranja u DynamoDB tabeli.
Kod lambda se čuva u /var/task
.
Lambda može imati several versions. I može imati više od 1 verzije izložene putem aliases. Težine svake od verzija izloženih unutar aliasa će odlučiti koji alias prima poziv (može biti 90%-10% na primer). Ako je kod jednog od aliasa ranjiv, možete slati zahteve dok ranjiva verzija ne primi eksploataciju.
Lambda politike resursa omogućavaju da daju pristup drugim uslugama/računima da pozivaju lambda na primer. Na primer, ovo je politika koja omogućava bilo kome da pristupi lambda izloženoj putem URL:
Ili ovo da dozvoli API Gateway da je pozove:
Kada postoji stotine paralelnih lambda zahteva, ako svaki od njih treba da poveže i zatvori vezu sa bazom podataka, jednostavno neće funkcionisati (lambdas su bezdržavne, ne mogu održavati otvorene veze). Tada, ako vaše Lambda funkcije komuniciraju sa RDS Proxy umesto vaše instance baze podataka. Ona upravlja povezivanjem potrebnim za skaliranje mnogih simultanih veza koje kreiraju paralelne Lambda funkcije. Ovo omogućava vašim Lambda aplikacijama da ponovo koriste postojeće veze, umesto da kreiraju nove veze za svako pozivanje funkcije.
Da bi sačuvali i čak delili podatke, Lambdas mogu pristupiti EFS i montirati ih, tako da Lambda može čitati i pisati iz njih.
Lambda layer je .zip datoteka koja može sadržati dodatni kod ili drugi sadržaj. Layer može sadržati biblioteke, prilagođeno okruženje, podatke ili konfiguracione datoteke.
Moguće je uključiti do pet slojeva po funkciji. Kada uključite sloj u funkciju, sadržaji se ekstrahuju u /opt
direktorijum u okruženju izvršavanja.
Po defaultu, slojevi koje kreirate su privatni za vaš AWS račun. Možete odlučiti da podelite sloj sa drugim računima ili da napravite sloj javnim. Ako vaše funkcije koriste sloj koji je objavio drugi račun, 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 raspoređene kao slika kontejnera ne koriste slojeve. Umesto toga, pakujete svoje omiljeno okruženje, biblioteke i druge zavisnosti u sliku kontejnera kada gradite sliku.
Lambda ekstenzije poboljšavaju funkcije integracijom sa raznim alatima za praćenje, posmatranje, sigurnost i upravljanje. Ove ekstenzije, dodate putem .zip arhiva koristeći Lambda slojeve ili uključene u raspoređivanje slika kontejnera, rade u dva režima: interni i spoljni.
Interni ekstenzije se spajaju sa procesom izvršavanja, manipulišući njegovim pokretanjem koristeći specifične varijable okruženja za jezik i wrapper skripte. Ova prilagodba se primenjuje na niz okruženja, uključujući Java Correto 8 i 11, Node.js 10 i 12, i .NET Core 3.1.
Spoljni ekstenzije rade kao odvojeni procesi, održavajući usklađenost sa životnim ciklusom Lambda funkcije. Kompatibilni su sa raznim okruženjima kao što su Node.js 10 i 12, Python 3.7 i 3.8, Ruby 2.5 i 2.7, Java Corretto 8 i 11, .NET Core 3.1, i prilagođena okruženja.
Sada je vreme da otkrijemo moguće lambda funkcije za izvršavanje:
Lambda funkcija pod nazivom "Level6" je dostupna. Hajde da saznamo kako je pozvati:
Sada, kada znate ime i ID, možete dobiti Ime:
I konačno pozovite funkciju pristupajući (primetite da se ID, Ime i naziv funkcije pojavljuju u URL-u): https://s33ppypa75.execute-api.us-west-2.amazonaws.com/Prod/level6
URL:
https://<rest-api-id>.execute-api.<region>.amazonaws.com/<stageName>/<funcName>
Postoji mnogo drugih izvora koji mogu pokrenuti lambda
Na sledećoj stranici možete proveriti kako da zloupotrebite Lambda dozvole za eskalaciju privilegija:
AWS - Lambda PrivescUčite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)