AWS - Lambda Enum

Leer AWS-hacking vanaf nul tot held met htARTE (HackTricks AWS Red Team Expert)!

Ander maniere om HackTricks te ondersteun:

Lambda

Amazon Web Services (AWS) Lambda word beskryf as 'n berekeningsdiens wat die uitvoering van kode moontlik maak sonder die noodsaaklikheid vir bedienervoorsiening of -bestuur. Dit word gekenmerk deur sy vermoë om hulpbrontoewysing outomaties te hanteer wat nodig is vir kode-uitvoering, wat funksies soos hoë beskikbaarheid, skaalbaarheid en sekuriteit verseker. 'n Beduidende aspek van Lambda is sy prysmodel, waar heffings uitsluitlik gebaseer is op die gebruik van berekeningstyd, wat die behoefte aan aanvanklike beleggings of langtermynverpligtinge uitskakel.

Om 'n lambda te roep, is dit moontlik om dit so gereeld as jy wil te roep (met Cloudwatch), 'n URL eindpunt bloot te stel en dit te roep, dit te roep via API Gateway of selfs gebaseer op gebeure soos veranderinge aan data in 'n S3-emmer of opdaterings aan 'n DynamoDB-tabel.

Die kode van 'n lambda word gestoor in /var/task.

Lambda Aliasse Gewigte

'n Lambda kan verskeie weergawes hê. En dit kan meer as een weergawe blootgestel via aliassse hê. Die gewigte van elke van die weergawes wat blootgestel word binne 'n alias sal besluit watter alias die aanroeping ontvang (dit kan byvoorbeeld 90%-10% wees). As die kode van een van die aliassse kwesbaar is, kan jy versoeke stuur totdat die kwesbare weergawes die aanval ontvang.

Hulpbronbeleide

Lambda-hulpbronbeleide maak dit moontlik om toegang te gee aan ander dienste/rekeninge om die lambda byvoorbeeld aan te roep. Byvoorbeeld, hierdie is die beleid om enigiemand toe te laat om 'n lambda blootgestel via 'n URL aan te roep:

Of dit om 'n API Gateway toe te laat om dit aan te roep:

Lambda Databasisproksi's

Wanneer daar honderde gelyktydige lambda-versoeke is, as elkeen van hulle 'n verbinding moet maak en 'n verbinding met 'n databasis moet sluit, gaan dit net nie werk nie (lambdas is staatloos, kan nie verbindings oop hou nie). Dan, as jou Lambda-funksies met RDS Proxy in wisselwerking tree in plaas van jou databasisinstansie. Dit hanteer die verbindingspooling wat nodig is vir die skaal van baie gelyktydige verbindings wat deur gelyktydige Lambda-funksies geskep word. Dit maak dit moontlik vir jou Lambda-toepassings om bestaande verbindings te hergebruik, eerder as om nuwe verbindings vir elke funksie-aanroeping te skep.

Lambda EFS-lêersisteme

Om data te behou en selfs te deel kan Lambdas toegang tot EFS kry en dit koppel, sodat Lambda in staat sal wees om daarvan te lees en daarnaar te skryf.

Lambda-lae

'n Lambda laag is 'n .zip-lêerargief wat addisionele kode of ander inhoud kan bevat. 'n Laag kan biblioteke, 'n aangepaste uitvoering, data, of opsetlêers bevat.

Dit is moontlik om tot vyf lêers per funksie in te sluit. Wanneer jy 'n laag in 'n funksie insluit, word die inhoud na die /opt-gids in die uitvoeringsomgewing uitgepak.

Standaard is die lêers 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 verbruik wat deur 'n ander rekening gepubliseer is, kan jou funksies voortgaan om die laagweergawe te gebruik nadat dit uitgevee is, of nadat jou toestemming om die laag te gebruik, herroep is. Jy kan egter nie 'n nuwe funksie skep of funksies bywerk met 'n uitgevee laagweergawe nie.

Funksies wat as 'n houerbeeld ontplooi is, gebruik nie lêers nie. In plaas daarvan pak jy jou verkose uitvoering, biblioteke, en ander afhanklikhede in die houerbeeld in wanneer jy die beeld bou.

Lambda-uitbreidings

Lambda-uitbreidings verbeter funksies deur te integreer met verskeie monitering, waarneming, sekuriteit, en bestuurstelsels. Hierdie uitbreidings, bygevoeg via .zip-argiewe deur Lambda-lêers te gebruik of ingesluit in houerbeeldontplooiings, werk in twee modusse: interne en eksterne.

  • Interne uitbreidings smelt saam met die uitvoeringsproses, manipuleer sy begin deur taalspesifieke omgewingsveranderlikes en omslaginskrywings te gebruik. Hierdie aanpassing geld vir 'n verskeidenheid van uitvoeringsomgewings, insluitend Java Correto 8 en 11, Node.js 10 en 12, en .NET Core 3.1.

  • Eksterne uitbreidings loop as afsonderlike prosesse, handhaaf bedryfsafstemming met die lewensiklus van die Lambda-funksie. Hulle is verenigbaar met verskeie uitvoeringsomgewings 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 uitvoeringsomgewings.

Opsomming

aws lambda get-account-settings

# List functions and get extra config info
aws lambda list-functions
aws lambda get-function --function-name <function_name>
aws lambda get-function-configuration --function-name <function_name>
aws lambda list-function-event-invoke-configs --function-name <function_name>
## Check for creds in env vars
aws lambda list-functions | jq '.Functions[].Environment'
## Download & check the source code
aws lambda get-function --function-name "<func_name>" --query 'Code.Location'
wget -O lambda-function.zip <url-from-previous-query>

# Get Lambda URL (if any)
aws lambda list-function-url-configs --function-name <function_name>
aws lambda get-function-url-config --function-name <function_name>

# Get who has permissions to invoke the Lambda
aws lambda get-policy --function-name <function_name>

# Versions and Aliases
aws lambda list-versions-by-function --function-name <func_name>
aws lambda list-aliases --function-name <func_name>

# List layers
aws lambda list-layers
aws lambda list-layer-versions --layer-name <name>
aws lambda get-layer-version --layer-name <name> --version-number <ver>
aws lambda get-layer-version-by-arn --arn <name> #Get external ARNs

# List other metadata
aws lambda list-event-source-mappings
aws lambda list-code-signing-configs
aws lambda list-functions-by-code-signing-config --code-signing-config-arn <arn>

Roep 'n lambda aan

Handleiding

# Invoke function
aws lambda invoke --function-name FUNCTION_NAME /tmp/out
## Some functions will expect parameters, they will access them with something like:
## target_policys = event['policy_names']
## user_name = event['user_name']
aws lambda invoke --function-name <name> --cli-binary-format raw-in-base64-out --payload '{"policy_names": ["AdministratorAccess], "user_name": "sdf"}' out.txt

Deur blootgestelde URL

aws lambda list-function-url-configs --function-name <function_name> #Get lambda URL
aws lambda get-function-url-config   --function-name <function_name> #Get lambda URL

Roep Lambda-funksie aan via URL

Nou is dit tyd om moontlike lambda-funksies te vind om uit te voer:

aws --region us-west-2 --profile level6 lambda list-functions

'n Lambda-funksie genaamd "Level6" is beskikbaar. Laat ons uitsorteer hoe om dit te roep:

aws --region us-west-2 --profile level6 lambda get-policy --function-name Level6

Nou, dat jy die naam en die ID weet, kan jy die Naam kry:

aws --profile level6 --region us-west-2 apigateway get-stages --rest-api-id "s33ppypa75"

En roep uiteindelik die funksie aan deur toegang te verkry (let daarop 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>

Ander Triggers

Daar is baie ander bronne wat 'n lambda kan trigger

Privesc

Op die volgende bladsy kan jy sien hoe om Lambda-toestemmings te misbruik om voorregte te eskaleer:

pageAWS - Lambda Privesc

Ongeagte Toegang

pageAWS - Lambda Unauthenticated Access

Post Exploitation

pageAWS - Lambda Post Exploitation

Volharding

pageAWS - Lambda Persistence

Verwysings

Leer AWS-hacking vanaf nul tot held met htARTE (HackTricks AWS Red Team Expert)!

Ander maniere om HackTricks te ondersteun:

Last updated