AWS - Lambda Enum
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)
Amazon Web Services (AWS) Lambda word beskryf as 'n rekenaar diens wat die uitvoering van kode moontlik maak sonder die noodsaaklikheid vir bediener voorsiening of bestuur. Dit word gekenmerk deur sy vermoë om outomaties hulpbronne toe te ken wat nodig is vir kode uitvoering, wat funksies soos hoë beskikbaarheid, skaalbaarheid en sekuriteit verseker. 'n Belangrike aspek van Lambda is sy prysmodel, waar koste slegs gebaseer is op die rekenaartyd wat gebruik word, wat die noodsaaklikheid vir aanvanklike belegging of langtermyn verpligtinge uitskakel.
Om 'n lambda aan te roep, is dit moontlik om dit so gereeld as wat jy wil aan te roep (met Cloudwatch), 'n URL eindpunt bloot te stel en dit aan te roep, dit via API Gateway aan te roep of selfs gebaseer op gebeurtenisse soos veranderings aan data in 'n S3 emmer of opdaterings aan 'n DynamoDB tabel.
Die kode van 'n lambda word gestoor in /var/task
.
'n Lambda kan verskeie weergawes hê. En dit kan meer as 1 weergawe hê wat blootgestel word via aliases. Die gewigte van elke van die weergawes wat binne 'n alias blootgestel word, sal besluit watter alias die oproep ontvang (dit kan 90%-10% wees byvoorbeeld). As die kode van een van die aliases kwetsbaar is, kan jy versoeke stuur totdat die kwesbare weergawe die ontploffing ontvang.
Lambda hulpbron beleide laat toe om toegang te gee aan ander dienste/rekeninge om die lambda aan te roep. Byvoorbeeld, dit is die beleid om enigeen toe te laat om toegang tot 'n lambda wat via URL blootgestel is:
Of dit om 'n API Gateway toe te laat om dit aan te roep:
Wanneer daar honderde gelyktydige lambda versoeke is, as elkeen daarvan moet verbinding maak en 'n verbinding met 'n databasis sluit, gaan dit eenvoudig nie werk nie (lambdas is staatloos, kan nie verbindings oop hou nie). Dan, as jou Lambda funksies met RDS Proxy in plaas van jou databasis instansie interaksie het. Dit hanteer die verbinding pooling wat nodig is om baie gelyktydige verbindings wat deur gelyktydige Lambda funksies geskep word, te skaal. Dit laat jou Lambda toepassings toe om bestaande verbindings te hergebruik, eerder as om nuwe verbindings vir elke funksie oproep te skep.
Om data te bewaar en selfs te deel, kan Lambdas toegang tot EFS hê en dit monteer, sodat Lambda in staat sal wees om daarvan te lees en te skryf.
'n Lambda laag is 'n .zip lêer argief 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 herroep is. Jy kan egter nie 'n nuwe funksie skep of funksies opdateer wat 'n verwyderde laag weergawe gebruik nie.
Funksies wat as 'n houer beeld ontplooi word, gebruik nie lae nie. In plaas daarvan, pak jy jou verkiesde runtime, biblioteke, en ander afhanklikhede in die houer beeld wanneer jy die beeld bou.
Lambda uitbreidings verbeter funksies deur te integreer met verskeie monitering, waaksaamheid, sekuriteit, en bestuur gereedskap. Hierdie uitbreidings, wat bygevoeg word via .zip argiewe met behulp van Lambda lae of ingesluit in houer beeld ontplooiings, werk in twee modi: intern en ekstern.
Interne uitbreidings meng met die runtime proses, wat die opstart manipuleer met behulp van taalspesifieke omgewing veranderlikes en wrapper skripte. Hierdie aanpassing geld vir 'n reeks runtimes, insluitend Java Correto 8 en 11, Node.js 10 en 12, en .NET Core 3.1.
Eksterne uitbreidings loop as aparte prosesse, wat die werking se ooreenstemming met die Lambda funksie se lewensiklus handhaaf. Hulle is versoenbaar met verskeie runtimes soos Node.js 10 en 12, Python 3.7 en 3.8, Ruby 2.5 en 2.7, Java Corretto 8 en 11, .NET Core 3.1, en aangepaste runtimes.
Nou is dit tyd om moontlike lambda-funksies te vind om uit te voer:
'n Lambda-funksie genaamd "Level6" is beskikbaar. Kom ons vind uit hoe om dit aan te roep:
Nou, dat jy die naam en die ID ken, kan jy die Naam kry:
En uiteindelik bel die funksie wat toegang verkry (let op dat die ID, Naam en funksie-naam in die URL verskyn): https://s33ppypa75.execute-api.us-west-2.amazonaws.com/Prod/level6
URL:
https://<rest-api-id>.execute-api.<region>.amazonaws.com/<stageName>/<funcName>
Daar is baie ander bronne wat 'n lambda kan aktiveer
Op die volgende bladsy kan jy kyk hoe om Lambda-toestemmings te misbruik om voorregte te verhoog:
AWS - Lambda PrivescLeer & oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Leer & oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)