AWS - Lambda Layers Persistence
Last updated
Last updated
Leer & oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Leer & oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
'n Lambda-laag is 'n .zip-lêerargief wat addisionele kode of ander inhoud kan bevat. 'n Laag kan biblioteke, 'n aangepaste runtime, data of konfigurasielêers bevat.
Dit is moontlik om tot vyf lae per funksie in te sluit. Wanneer jy 'n laag in 'n funksie insluit, word die inhoud na die /opt
gids in die uitvoeringsomgewing onttrek.
Deur standaard is die lae wat jy skep privaat vir jou AWS-rekening. Jy kan kies om 'n laag met ander rekeninge te deel of om die laag publiek te maak. As jou funksies 'n laag gebruik wat 'n ander rekening gepubliseer het, kan jou funksies voortgaan om die laag weergawe te gebruik nadat dit verwyder is, of nadat jou toestemming om toegang tot die laag te verkry, ingetrek is. Jy kan egter nie 'n nuwe funksie skep of funksies opdateer wat 'n verwyderde laag weergawe gebruik nie.
Funksies wat as 'n houerbeeld ontplooi word, gebruik nie lae nie. In plaas daarvan, pak jy jou verkiesde runtime, biblioteke en ander afhanklikhede in die houerbeeld wanneer jy die beeld bou.
Die laai pad wat Python in lambda sal gebruik, is die volgende:
Kontroleer hoe die tweede en derde posisies beset word deur gidse waar lambda layers hul lêers ontsyfer: /opt/python/lib/python3.9/site-packages
en /opt/python
As 'n aanvaller daarin slaag om 'n gebruikte lambda layer te backdoor of een toe te voeg wat arbitraire kode sal uitvoer wanneer 'n algemene biblioteek gelaai word, sal hy in staat wees om kwaadwillige kode met elke lambda-aanroep uit te voer.
Daarom is die vereistes:
Kontroleer biblioteke wat deur die slagofferskode gelaai word
Skep 'n proxy-biblioteek met lambda layers wat aangepaste kode sal uitvoer en die oorspronklike biblioteek sal laai.
Wanneer ek hierdie tegniek misbruik, het ek 'n moeilikheid gevind: Sommige biblioteke is reeds gelaai in die python runtime wanneer jou kode uitgevoer word. Ek het verwag om dinge soos os
of sys
te vind, maar selfs die json
biblioteek was gelaai.
Om hierdie volhardingstegniek te misbruik, moet die kode 'n nuwe biblioteek laai wat nie gelaai is wanneer die kode uitgevoer word.
Met 'n python kode soos hierdie is dit moontlik om die lys van biblioteke wat vooraf gelaai is binne python runtime in lambda te verkry:
En dit is die lys (kontroleer dat biblioteke soos os
of json
reeds daar is)
En dit is die lys van biblioteke wat lambda standaard geïnstalleer het: https://gist.github.com/gene1wood/4a052f39490fae00e0c3
In hierdie voorbeeld kom ons veronderstel dat die geteikende kode csv
invoer. Ons gaan die invoer van die csv
biblioteek backdoor.
Om dit te doen, gaan ons die gids csv skep met die lêer __init__.py
daarin in 'n pad wat deur lambda gelaai word: /opt/python/lib/python3.9/site-packages
Dan, wanneer die lambda uitgevoer word en probeer om csv te laai, sal ons __init__.py
lêer gelaai en uitgevoer word.
Hierdie lêer moet:
Ons payload uitvoer
Die oorspronklike csv biblioteek laai
Ons kan albei doen met:
Dan, skep 'n zip met hierdie kode in die pad python/lib/python3.9/site-packages/__init__.py
en voeg dit as 'n lambda-laag by.
Jy kan hierdie kode vind in https://github.com/carlospolop/LambdaLayerBackdoor
Die geïntegreerde payload sal die IAM kredensiale na 'n bediener stuur DIE EERSTE KEER wat dit aangeroep word of NA 'n reset van die lambda houer (verandering van kode of koue lambda), maar ander tegnieke soos die volgende kan ook geïntegreer word:
AWS - Steal Lambda RequestsLet daarop dat dit moontlik is om lambda-lae van eksterne rekeninge te gebruik. Boonop kan 'n lambda 'n laag van 'n eksterne rekening gebruik selfs al het dit nie toestemmings nie. Let ook daarop dat die maksimum aantal lae wat 'n lambda kan hê 5 is.
Daarom, om die veelsydigheid van hierdie tegniek te verbeter, kan 'n aanvaller:
'n Buitelug in 'n bestaande laag van die gebruiker (niks is ekstern)
Skep 'n laag in sy rekening, gee die slagoffer rekening toegang om die laag te gebruik, konfigureer die laag in die slagoffer se Lambda en verwyder die toestemming.
Die Lambda sal steeds in staat wees om die laag te gebruik en die slagoffer sal nie enige maklike manier hê om die laag se kode af te laai (behalwe om 'n rev shell binne die lambda te kry)
Die slagoffer sal nie eksterne lae sien wat gebruik word met aws lambda list-layers
Leer & oefen AWS Hacking:HackTricks Opleiding AWS Red Team Expert (ARTE) Leer & oefen GCP Hacking: HackTricks Opleiding GCP Red Team Expert (GRTE)