AWS - Abusing Lambda Extensions
Last updated
Last updated
Lambda ekstenzije poboljšavaju funkcije integrišući se sa različitim alatima za praćenje, posmatranje, bezbednost i upravljanje. Ove ekstenzije, dodate putem .zip arhiva korišćenjem Lambda slojeva ili uključene u implementacije kontejnerskih slika, funkcionišu u dva moda: interni i eksterni.
Interni ekstenzije se spajaju sa procesom izvršavanja, manipulišući njegovim pokretanjem korišćenjem specifičnih okružnih promenljivih za jezik i omotačkih skripti. Ova prilagođavanja se primenjuju na različite runtime-ove, uključujući Java Correto 8 i 11, Node.js 10 i 12, i .NET Core 3.1.
Eksterni ekstenzije se izvršavaju kao odvojeni procesi, održavajući usklađenost operacija sa životnim ciklusom Lambda funkcije. Kompatibilne su sa različitim runtime-ovima poput 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đenim runtime-ovima.
Za više informacija o radu lambda ekstenzija proverite dokumentaciju.
Ovo je sažetak tehnike predložene u ovom postu: https://www.clearvector.com/blog/lambda-spy/
Otkriveno je da je podrazumevano Linux jezgro u Lambda okruženju za izvršavanje kompajlirano sa "process_vm_readv" i "process_vm_writev" sistemskim pozivima. I svi procesi se izvršavaju sa istim korisničkim ID-om, čak i novi proces kreiran za eksternu ekstenziju. To znači da eksterna ekstenzija ima pun pristup čitanju i pisanju u memoriju heap-a Rapid-a, po dizajnu.
Osim toga, iako Lambda ekstenzije imaju mogućnost da pretplaćuju na događaje poziva, AWS ne otkriva sirove podatke ovim ekstenzijama. Ovo osigurava da ekstenzije ne mogu pristupiti osetljivim informacijama prenetim putem HTTP zahteva.
Proces Init (Rapid) nadgleda sve API zahteve na http://127.0.0.1:9001 dok se Lambda ekstenzije inicijalizuju i pokreću pre izvršavanja bilo kog runtime koda, ali posle Rapid-a.
Promenljiva AWS_LAMBDA_RUNTIME_API
pokazuje IP adresu i broj porta Rapid API-ja dete runtime procesima i dodatnim ekstenzijama.
Menjanjem AWS_LAMBDA_RUNTIME_API
okružne promenljive u port
kojem imamo pristup, moguće je presresti sve akcije unutar Lambda runtime-a (čovek-u-sredini). Ovo je moguće jer ekstenzija radi sa istim privilegijama kao Rapid Init, a jezgro sistema omogućava modifikaciju memorije procesa, omogućavajući promenu broja porta.
Zato što ekstenzije rade pre bilo kog runtime koda, modifikacija okružne promenljive će uticati na proces runtime-a (npr. Python, Java, Node, Ruby) pri pokretanju. Nadalje, ekstenzije učitane nakon naše, koje se oslanjaju na ovu promenljivu, takođe će prolaziti kroz našu ekstenziju. Ova postavka bi mogla omogućiti malveru da potpuno zaobiđe sigurnosne mere ili ekstenzije za beleženje direktno unutar okruženja za izvršavanje.
Alat lambda-spy je kreiran da izvrši tu modifikaciju memorije i ukrade osetljive informacije iz lambda zahteva, drugih ekstenzija zahteve i čak ih modifikuje.