AWS - Lambda Enum

Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!

Drugi načini podrške HackTricks-u:

Lambda

Amazon Web Services (AWS) Lambda je opisana kao usluga računanja koja omogućava izvršavanje koda bez potrebe za obezbeđivanjem ili upravljanjem serverom. Karakteriše je sposobnost da automatski upravlja dodelom resursa potrebnih za izvršavanje koda, obezbeđujući funkcionalnosti poput visoke dostupnosti, skalabilnosti i bezbednosti. Značajan aspekt Lambda-e je njen model cenjkanja, gde se naplaćuje samo vreme računanja koje se koristi, eliminišući potrebu za početnim investicijama ili dugoročnim obavezama.

Da biste pozvali lambdu, moguće je pozvati je koliko god puta želite (pomoću Cloudwatch-a), izložiti je kao URL endpoint i pozvati je, pozvati je putem API Gateway-a ili čak na osnovu događaja poput promena podataka u S3 bucket-u ili ažuriranja tabele DynamoDB.

Kod lambde se čuva u /var/task.

Težine Lambda Alias-a

Lambda može imati više verzija. I može imati više od 1 verzije izložene putem alias-a. Težine svake od verzija izložene unutar alias-a će odlučiti koji alias prima poziv (može biti 90%-10% na primer). Ako je kod jednog od alias-a ranjiv, možete slati zahteve dok ranjiva verzija ne primi eksploataciju.

Politike Resursa Lambde

Politike resursa lambde omogućavaju da se dodeli pristup drugim uslugama/računima za pozivanje lambde na primer. Na primer, ovo je politika koja omogućava bilo kome da pristupi lambdi izloženoj putem URL-a:

Ili ovo da omogući API Gateway-u da je pozove:

Lambda Database Proksi

Kada postoji stotine istovremenih zahteva lambdi, ako svaki od njih treba da se poveže i zatvori vezu sa bazom podataka, to jednostavno neće funkcionisati (lambde su bez stanja, ne mogu održavati otvorene veze). Zatim, ako vaše **Lambda funkcije komuniciraju sa RDS Proksijem umesto sa vašom instancom baze podataka. On rukuje bazom za povezivanje neophodnom za skaliranje mnogih istovremenih veza kreiranih od strane istovremenih Lambda funkcija. Ovo omogućava vašim Lambda aplikacijama da ponovo koriste postojeće veze, umesto da kreiraju nove veze za svaki poziv funkcije.

Lambda EFS Fajl Sistemi

Da bi sačuvale i čak delile podatke Lambde mogu pristupiti EFS-u i montirati ih, tako da će Lambda moći da čita i piše iz njega.

Lambda Slojevi

Lambda sloj je .zip arhiva koja može sadržati dodatni kod ili drugi sadržaj. Sloj može sadržati biblioteke, prilagođeno izvršno okruženje, podatke ili konfiguracione fajlove.

Moguće je uključiti do pet slojeva po funkciji. Kada uključite sloj u funkciju, sadržaj se izvlači u direktorijum /opt u okruženju izvršavanja.

Po podrazumevanim postavkama, slojevi koje kreirate su privatni za vaš AWS nalog. Možete odabrati da podelite sloj sa drugim nalozima ili da ga učinite javnim. Ako vaše funkcije koriste sloj koji je objavio drugi nalog, vaše funkcije mogu nastaviti da koriste verziju sloja nakon što je izbrisan, ili nakon što vam je dozvola za pristup sloju opozvana. Međutim, ne možete kreirati novu funkciju ili ažurirati funkcije koristeći izbrisanu verziju sloja.

Funkcije implementirane kao kontejnerska slika ne koriste slojeve. Umesto toga, pakujete svoje preferirano izvršno okruženje, biblioteke i druge zavisnosti u kontejnersku sliku prilikom izgradnje slike.

Lambda Ekstenzije

Lambda ekstenzije poboljšavaju funkcije integrišući se sa različitim alatima za nadgledanje, opservabilnost, bezbednost i upravljanje. Ove ekstenzije, dodate putem .zip arhiva koristeći Lambda slojeve 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 koristeći jezički specifične promenljive okruženja i omotačke skripte. Ova prilagođavanja se primenjuju na različite izvršne okoline, 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 izvršnim okolinama 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 izvršnim okolinama.

Enumeracija

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>

Pozovi lambda funkciju

Ručno

# 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

Putem izloženog URL-a

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

Poziv Lambda funkcije putem URL-a

Sada je vreme da otkrijemo moguće Lambda funkcije za izvršavanje:

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

Dostupna je Lambda funkcija nazvana "Level6". Hajde da saznamo kako je pozvati:

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

Sada kada znate ime i ID, možete dobiti Ime:

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

I na kraju pozovite funkciju pristupajući (primetite da se ID, Ime i ime funkcije pojavljuju u URL-u): https://s33ppypa75.execute-api.us-west-2.amazonaws.com/Prod/level6

URL:https://<rest-api-id>.execute-api.<region>.amazonaws.com/<stageName>/<funcName>

Ostali okidači

Postoji mnogo drugih izvora koji mogu pokrenuti lambdu

Privesc

Na sledećoj stranici možete proveriti kako zloupotrebiti dozvole Lambele za eskalaciju privilegija:

pageAWS - Lambda Privesc

Neautentifikovan pristup

pageAWS - Lambda Unauthenticated Access

Post eksploatacija

pageAWS - Lambda Post Exploitation

Upornost

pageAWS - Lambda Persistence

Reference

Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!

Drugi načini podrške HackTricks-u:

Last updated