AWS - Abusing Lambda Extensions
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)
Lambda extensions huongeza kazi kwa kuunganishwa na zana mbalimbali za monitoring, observability, security, na governance. Extensions hizi, zinazoongezwa kupitia .zip archives kwa kutumia Lambda layers au kujumuishwa katika mifano ya picha za kontena, zinafanya kazi katika hali mbili: internal na external.
Internal extensions huungana na mchakato wa runtime, zikibadilisha uzinduzi wake kwa kutumia language-specific environment variables na wrapper scripts. Uboreshaji huu unatumika kwa aina mbalimbali za runtimes, ikiwa ni pamoja na Java Correto 8 na 11, Node.js 10 na 12, na .NET Core 3.1.
External extensions zinafanya kazi kama michakato tofauti, zikihifadhi uendeshaji unaolingana na mzunguko wa maisha wa kazi ya Lambda. Zinapatikana kwa runtimes mbalimbali kama Node.js 10 na 12, Python 3.7 na 3.8, Ruby 2.5 na 2.7, Java Corretto 8 na 11, .NET Core 3.1, na custom runtimes.
Kwa maelezo zaidi kuhusu jinsi lambda extensions zinavyofanya kazi angalia docs.
Hii ni muhtasari wa mbinu iliyopendekezwa katika chapisho hili: https://www.clearvector.com/blog/lambda-spy/
Ilipatikana kwamba kernel ya Linux ya default katika mazingira ya runtime ya Lambda imeandaliwa na “process_vm_readv” na “process_vm_writev” system calls. Na michakato yote inafanya kazi na ID ya mtumiaji sawa, hata mchakato mpya ulioanzishwa kwa ajili ya external extension. Hii inamaanisha kwamba external extension ina ufikiaji kamili wa kusoma na kuandika kwenye kumbukumbu ya Rapid, kwa muundo.
Zaidi ya hayo, ingawa Lambda extensions zina uwezo wa kujiandikisha kwa matukio ya mwito, AWS haifunui data halisi kwa extensions hizi. Hii inahakikisha kwamba extensions haziwezi kufikia taarifa nyeti zinazotumwa kupitia ombi la HTTP.
Mchakato wa Init (Rapid) unafuatilia maombi yote ya API katika http://127.0.0.1:9001 wakati Lambda extensions zinaanzishwa na kuendesha kabla ya utekelezaji wa msimbo wowote wa runtime, lakini baada ya Rapid.
Kigezo AWS_LAMBDA_RUNTIME_API
kinaonyesha IP anwani na nambari ya bandari ya Rapid API kwa michakato ya runtime ya watoto na extensions za ziada.
Kwa kubadilisha kigezo cha mazingira AWS_LAMBDA_RUNTIME_API
kuwa port
tunayo, inawezekana kukamata vitendo vyote ndani ya runtime ya Lambda (man-in-the-middle). Hii inawezekana kwa sababu extension inafanya kazi na ruhusa sawa na Rapid Init, na kernel ya mfumo inaruhusu kubadilisha kumbukumbu ya mchakato, ikiruhusu kubadilisha nambari ya bandari.
Kwa sababu extensions zinafanya kazi kabla ya msimbo wowote wa runtime, kubadilisha kigezo cha mazingira kutakuwa na athari kwenye mchakato wa runtime (mfano, Python, Java, Node, Ruby) wakati inapoanza. Zaidi ya hayo, extensions zilizopakiwa baada yetu, ambazo zinategemea kigezo hiki, pia zitaelekeza kupitia extension yetu. Mpangilio huu unaweza kuwezesha malware kupita kabisa hatua za usalama au logging extensions moja kwa moja ndani ya mazingira ya runtime.
Chombo lambda-spy kilitengenezwa ili kutekeleza hiyo memory write na kuchukua taarifa nyeti kutoka kwa maombi ya lambda, maombi ya extensions nyingine na hata kuyabadilisha.
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)