AWS - CloudTrail Enum
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
AWS CloudTrail आपके AWS वातावरण में गतिविधियों को रिकॉर्ड और मॉनिटर करता है। यह विस्तृत इवेंट लॉग कैप्चर करता है, जिसमें यह शामिल है कि किसने क्या किया, कब, और कहाँ, सभी AWS संसाधनों के साथ इंटरैक्शन के लिए। यह परिवर्तनों और क्रियाओं का एक ऑडिट ट्रेल प्रदान करता है, जो सुरक्षा विश्लेषण, अनुपालन ऑडिटिंग, और संसाधन परिवर्तन ट्रैकिंग में मदद करता है। CloudTrail उपयोगकर्ता और संसाधन व्यवहार को समझने, सुरक्षा स्थिति को बढ़ाने, और नियामक अनुपालन सुनिश्चित करने के लिए आवश्यक है।
प्रत्येक लॉग की गई घटना में शामिल है:
कॉल की गई API का नाम: eventName
कॉल की गई सेवा: eventSource
समय: eventTime
IP पता: 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 लॉग को एकत्रित नहीं कर सकते।
याद रखें कि एक खाते में विभिन्न ट्रेल्स हो सकते हैं जो CloudTrail सक्षम हैं जो विभिन्न बकेट में समान (या विभिन्न) लॉग को संग्रहीत करते हैं।
जब एक CloudTrail बनाया जाता है, तो यह संभव है कि सभी खातों के लिए cloudtrail को सक्रिय करने के लिए संकेत दिया जाए और लॉग को केवल 1 बकेट में प्राप्त किया जाए:
इस तरह आप सभी खातों के सभी क्षेत्रों में CloudTrail को आसानी से कॉन्फ़िगर कर सकते हैं और 1 खाते में लॉग को केंद्रीकृत कर सकते हैं (जिसे आपको सुरक्षित करना चाहिए)।
आप यह जांच सकते हैं कि लॉग में कोई परिवर्तन नहीं हुआ है, चलाकर
CloudTrail स्वचालित रूप से CloudWatch को लॉग भेज सकता है ताकि आप संदिग्ध गतिविधियों के प्रदर्शन पर चेतावनी देने वाले अलर्ट सेट कर सकें। ध्यान दें कि CloudTrail को CloudWatch को लॉग भेजने की अनुमति देने के लिए एक भूमिका बनाई जानी चाहिए जो उस क्रिया की अनुमति देती है। यदि संभव हो, तो इन क्रियाओं को करने के लिए AWS डिफ़ॉल्ट भूमिका का उपयोग करने की सिफारिश की जाती है। यह भूमिका CloudTrail को अनुमति देगी:
CreateLogStream: यह CloudWatch लॉग स्ट्रीम बनाने की अनुमति देता है
PutLogEvents: CloudTrail लॉग को CloudWatch लॉग स्ट्रीम में वितरित करें
CloudTrail Event History आपको एक तालिका में रिकॉर्ड किए गए लॉग की जांच करने की अनुमति देता है:
CloudTrail Insights स्वचालित रूप से लिखित प्रबंधन घटनाओं का विश्लेषण करता है और आपको असामान्य गतिविधि के बारे में चेतावनी देता है। उदाहरण के लिए, यदि TerminateInstance
घटनाओं में वृद्धि होती है जो स्थापित बुनियादी रेखाओं से भिन्न होती है, तो आप इसे एक Insight घटना के रूप में देखेंगे। ये घटनाएँ असामान्य API गतिविधि को ढूंढना और प्रतिक्रिया देना पहले से कहीं अधिक आसान बनाती हैं।
Insights उसी बकेट में CloudTrail लॉग के रूप में संग्रहीत होते हैं: BucketName/AWSLogs/AccountID/CloudTrail-Insight
CloudTrail Log File Integrity |
|
Stop unauthorized access |
|
Prevent log files from being deleted |
|
AWS Access Advisor अपने अंतर्दृष्टि को इकट्ठा करने के लिए पिछले 400 दिनों के AWS CloudTrail लॉग पर निर्भर करता है। CloudTrail AWS खाते में किए गए AWS API कॉल और संबंधित घटनाओं का इतिहास कैप्चर करता है। Access Advisor इस डेटा का उपयोग यह दिखाने के लिए करता है कि सेवाओं को अंतिम बार कब एक्सेस किया गया था। CloudTrail लॉग का विश्लेषण करके, Access Advisor यह निर्धारित कर सकता है कि किसी IAM उपयोगकर्ता या भूमिका ने कौन सी AWS सेवाओं का उपयोग किया है और वह एक्सेस कब हुआ। यह AWS प्रशासकों को अनुमतियों को परिष्कृत करने के बारे में सूचित निर्णय लेने में मदद करता है, क्योंकि वे उन सेवाओं की पहचान कर सकते हैं जिन्हें लंबे समय तक एक्सेस नहीं किया गया है और संभावित रूप से वास्तविक उपयोग पैटर्न के आधार पर अत्यधिक व्यापक अनुमतियों को कम कर सकते हैं।
इसलिए, Access Advisor उपयोगकर्ताओं को दी जा रही अनावश्यक अनुमतियों के बारे में सूचित करता है ताकि व्यवस्थापक उन्हें हटा सके
CloudTrail के अंदर CVS इंजेक्शन करना संभव है जो मनमाना कोड चलाएगा यदि लॉग को CSV में निर्यात किया गया और Excel के साथ खोला गया। निम्नलिखित कोड एक खराब ट्रेल नाम के साथ लॉग प्रविष्टि उत्पन्न करेगा जिसमें पेलोड शामिल है:
For more information about CSV Injections check the page:
For more information about this specific technique check https://rhinosecuritylabs.com/aws/cloud-security-csv-injection-aws-cloudtrail/
Honeytokens को संवेदनशील जानकारी के एक्सफिल्ट्रेशन का पता लगाने के लिए बनाया गया है। AWS के मामले में, ये AWS कुंजी हैं जिनका उपयोग मॉनिटर किया जाता है, यदि उस कुंजी के साथ कोई कार्रवाई होती है, तो इसका मतलब है कि किसी ने वह कुंजी चुरा ली है।
हालांकि, Canarytokens, SpaceCrab, SpaceSiren द्वारा बनाए गए Honeytokens या तो पहचानने योग्य खाता नाम का उपयोग कर रहे हैं या सभी ग्राहकों के लिए एक ही AWS खाता ID का उपयोग कर रहे हैं। इसलिए, यदि आप खाता नाम और/या खाता ID को बिना Cloudtrail के कोई लॉग बनाए प्राप्त कर सकते हैं, तो आप जान सकते हैं कि कुंजी एक Honeytoken है या नहीं।
Pacu के पास कुछ नियम हैं यह पता लगाने के लिए कि क्या एक कुंजी Canarytokens, SpaceCrab, SpaceSiren** से संबंधित है:**
यदि canarytokens.org
भूमिका नाम में दिखाई देता है या खाता ID 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}
यदि नाम यादृच्छिक रूप से उत्पन्न होता है, तो यह एक HoneyToken होने की उच्च संभावनाएँ हैं।
आप एक्सेस कुंजी के अंदर कोडित से खाता ID प्राप्त कर सकते हैं जैसे कि यहां समझाया गया है और अपने Honeytokens AWS खातों की सूची के साथ खाता ID की जांच करें:
Check more information in the orginal research.
इसके लिए सबसे प्रभावी तकनीक वास्तव में एक सरल है। बस उस कुंजी का उपयोग करें जिसे आपने अभी पाया है ताकि अपने हमलावर खाते के अंदर किसी सेवा तक पहुंच सकें। इससे CloudTrail आपके अपने AWS खाते के अंदर एक लॉग उत्पन्न करेगा और पीड़ित के अंदर नहीं।
बात यह है कि आउटपुट आपको एक त्रुटि दिखाएगा जो खाता आईडी और खाता नाम को इंगित करता है, इसलिए आप देख सकेंगे कि क्या यह एक Honeytoken है।
अतीत में कुछ AWS सेवाएँ थीं जो CloudTrail को लॉग नहीं भेजती थीं (यहाँ सूची खोजें)। उन सेवाओं में से कुछ त्रुटि के साथ कुंजी भूमिका का ARN प्रदान करेंगी यदि कोई अनधिकृत (हनीटोकन कुंजी) इसे एक्सेस करने की कोशिश करता है।
इस तरह, एक हमलावर बिना किसी लॉग को सक्रिय किए कुंजी का ARN प्राप्त कर सकता है। ARN में हमलावर AWS खाता आईडी और नाम देख सकता है, हनीटोकन की कंपनियों के खाते की आईडी और नाम जानना आसान है, इसलिए इस तरह एक हमलावर पहचान सकता है कि क्या टोकन एक HoneyToken है।
ध्यान दें कि सभी सार्वजनिक APIs जो CloudTrail लॉग उत्पन्न नहीं कर रही थीं, अब ठीक कर दी गई हैं, इसलिए शायद आपको अपनी खुद की खोज करनी होगी...
अधिक जानकारी के लिए मूल शोध देखें।
कुछ AWS सेवाएँ कुछ अवसंरचना उत्पन्न करेंगी जैसे डेटाबेस या कुबेरनेट्स क्लस्टर (EKS)। एक उपयोगकर्ता सीधे उन सेवाओं से बात कर रहा है (जैसे कुबेरनेट्स API) AWS API का उपयोग नहीं करेगा, इसलिए CloudTrail इस संचार को नहीं देख पाएगा।
इसलिए, EKS तक पहुँच रखने वाला एक उपयोगकर्ता जिसने EKS API का URL खोजा है, वह स्थानीय रूप से एक टोकन उत्पन्न कर सकता है और API सेवा से सीधे बात कर सकता है बिना Cloudtrail द्वारा पता लगाए।
अधिक जानकारी के लिए:
AWS - EKS Post Exploitationपहले उदाहरण में, एकल इवेंट चयनकर्ता को एक JSON एरे के रूप में एकल ऑब्जेक्ट के साथ प्रदान किया गया है। "ReadWriteType": "ReadOnly"
यह संकेत करता है कि इवेंट चयनकर्ता को केवल पढ़ने के लिए इवेंट कैप्चर करना चाहिए (इसलिए CloudTrail अंतर्दृष्टियाँ लिखने के इवेंट की जांच नहीं करेंगी, उदाहरण के लिए)।
आप अपनी विशिष्ट आवश्यकताओं के आधार पर इवेंट चयनकर्ता को अनुकूलित कर सकते हैं।
S3 बकेट को हटाएँ
बकेट नीति को बदलें ताकि CloudTrail सेवा से किसी भी लेखन को अस्वीकार किया जा सके
S3 बकेट में जीवनचक्र नीति जोड़ें ताकि वस्तुओं को हटाया जा सके
CloudTrail लॉग को एन्क्रिप्ट करने के लिए उपयोग किए गए kms कुंजी को निष्क्रिय करें
आप एक विषम कुंजी उत्पन्न कर सकते हैं और CloudTrail को उस कुंजी के साथ डेटा एन्क्रिप्ट करने के लिए कह सकते हैं और निजी कुंजी को हटा सकते हैं ताकि CloudTrail सामग्री को पुनर्प्राप्त नहीं किया जा सके। यह मूल रूप से एक S3-KMS रैनसमवेयर है जो इस में समझाया गया है:
AWS - S3 Post ExploitationKMS रैनसमवेयर
यह विभिन्न अनुमतियों की आवश्यकताओं के साथ पिछले हमले को करने का सबसे आसान तरीका है:
AWS - KMS Post ExploitationAWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE) GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE)