Wichtige CloudTrail-Ereignisse, zugeordnet zu MITRE ATT&CK
Die CloudTrail-Ereignisse, die jeder AWS-Responder kennen sollte, von Erkundung bis Auswirkung, mit den Belegfeldern und ihren MITRE-ATT&CK-Technik-IDs.
Kurzfassung. Sie müssen nicht Tausende von AWS-API-Namen kennen. Etwa fünfzig Ereignisnamen decken den üblichen Angriffspfad in AWS ab: GetCallerIdentity und Salven von List-/Describe-Aufrufen (Erkundung), CreateUser / CreateAccessKey / CreateLoginProfile (Persistenz), AttachUserPolicy mit AdministratorAccess (Rechteausweitung), StopLogging / DeleteDetector (Umgehung von Abwehrmaßnahmen), Salven von GetObject / ModifySnapshotAttribute (Exfiltration), RunInstances mit GPU / ScheduleKeyDeletion (Auswirkung). Die Tabellen unten nennen für jedes Ereignis die Ereignisquelle, die Felder mit den Belegen und die zugehörige MITRE-ATT&CK-Technik.
Jede Tabelle hier entspricht einer Regel im offenen Regelwerk des Analysetools – was Sie hier lesen, ist also genau das, was das Tool prüft. Die Tabellen sind nach Taktiken geordnet, in der Reihenfolge, in der ein Einbruch üblicherweise abläuft.
Felder, die Sie bei jedem Ereignis lesen
| Feld | Was es Ihnen sagt |
|---|---|
eventTime | UTC-Zeitpunkt der Anfrage |
eventSource / eventName | Dienst und API, z. B. iam.amazonaws.com / CreateUser |
userIdentity.type | Root, IAMUser, AssumedRole, FederatedUser, AWSService… |
userIdentity.arn, accessKeyId | Wer, und mit welchen Anmeldedaten (AKIA langfristig, ASIA temporär) |
sourceIPAddress, userAgent | Von wo aus und mit welchem Client |
errorCode, errorMessage | Fehlen, wenn der Aufruf erfolgreich war |
requestParameters, responseElements | Was angefragt und was angelegt wurde |
awsRegion, recipientAccountId | Wo es passiert ist |
AWS dokumentiert das vollständige Schema in der Referenz zum Inhalt von CloudTrail-Einträgen und zum userIdentity-Element.
Initialer Zugriff und Missbrauch von Anmeldedaten
| Ereignis | Zu prüfende Belege | ATT&CK |
|---|---|---|
Beliebiger Aufruf mit einem AKIA-Schlüssel von einer neuen IP | accessKeyId, sourceIPAddress, userAgent | T1078.004, T1552.001 |
Beliebiger Aufruf mit userIdentity.type = Root | Quell-IP; das Root-Konto sollte so gut wie nie aktiv sein | T1078.004 |
ConsoleLogin (signin) | responseElements.ConsoleLogin = Success/Failure, additionalEventData.MFAUsed | T1078.004 |
Wiederholt fehlgeschlagene ConsoleLogin von einer IP | Anzahl pro IP und 15 Minuten | T1110 |
Erkundung
| Ereignis | Zu prüfende Belege | ATT&CK |
|---|---|---|
sts:GetCallerIdentity mit einem langfristigen Schlüssel | Erster Aufruf von einer neuen Adresse | T1087.004 |
Viele verschiedene List* / Describe* / Get* innerhalb von Minuten | Anzahl unterschiedlicher eventName pro Schlüssel | T1580, T1526 |
iam:GetAccountAuthorizationDetails | Vollständiger IAM-Dump mit einem einzigen Aufruf | T1087.004 |
Häufung von AccessDenied / UnauthorizedOperation | errorCode pro Principal | T1069.003 |
GetCallerIdentity benötigt keine Berechtigungen und wird von der CLI selbst aufgerufen; für sich genommen hat es daher einen niedrigen Schweregrad. Bedeutung gewinnt es als erstes Ereignis von einer unbekannten Adresse.
Persistenz
| Ereignis | Zu prüfende Belege | ATT&CK |
|---|---|---|
iam:CreateUser | requestParameters.userName | T1136.003 |
iam:CreateAccessKey für einen anderen Benutzer | requestParameters.userName ≠ Aufrufer; neuer Schlüssel in responseElements.accessKey.accessKeyId | T1098.001 |
iam:CreateLoginProfile / UpdateLoginProfile | Konsolenpasswort für einen Benutzer | T1098 |
iam:UpdateAssumeRolePolicy | Neue Principals, denen eine Rolle vertraut | T1098 |
iam:CreateSAMLProvider, CreateOpenIDConnectProvider, UpdateOpenIDConnectProviderThumbprint | Neue Vertrauensstellung für Föderation | T1484.002 |
lambda:AddPermission mit Principal *, CreateFunctionUrlConfig mit authType: NONE | Öffentliche Backdoor-Funktion | T1546, T1648 |
ec2:ModifyInstanceAttribute mit userData | Skript, das beim nächsten Start ausgeführt wird | T1059 |
ec2:CreateKeyPair / ImportKeyPair | SSH-Zugang zu neuen Instanzen | T1098.004 |
Rechteausweitung
| Ereignis | Zu prüfende Belege | ATT&CK |
|---|---|---|
AttachUserPolicy / AttachRolePolicy / AttachGroupPolicy | policyArn endet auf AdministratorAccess oder IAMFullAccess | T1098.003 |
PutUserPolicy / PutRolePolicy / CreatePolicyVersion | Richtliniendokument mit "Action": "*" auf "Resource": "*" | T1098.003 |
AddUserToGroup | Gruppenname, der auf Administratorrechte hindeutet | T1098 |
Umgehung von Abwehrmaßnahmen
| Ereignis | Zu prüfende Belege | ATT&CK |
|---|---|---|
cloudtrail:StopLogging, DeleteTrail | Name des Trails, Region | T1562.008 |
cloudtrail:UpdateTrail, PutEventSelectors | Ziel oder Selektoren geändert | T1562.008 |
guardduty:DeleteDetector, UpdateDetector (deaktiviert), CreateIPSet, Archivierungsfilter | Detektor-ID, Region | T1562.001 |
config:StopConfigurationRecorder, DeleteDeliveryChannel | Region | T1562.001 |
securityhub:DisableSecurityHub, macie2:DisableMacie, inspector2:Disable, detective:DeleteGraph | Dienst | T1562.001 |
s3:PutBucketLogging ohne Ziel | Zugriffsprotokollierung abgeschaltet | T1562.008 |
ec2:DeleteFlowLogs | Netzwerkprotokollierung entfernt | T1562.008 |
logs:DeleteLogGroup / DeleteLogStream | Beweismittel vernichtet | T1070 |
ec2:AuthorizeSecurityGroupIngress mit 0.0.0.0/0 | Firewall geöffnet | T1562.007 |
| Schreibzugriffe in einer bisher ungenutzten Region | awsRegion | T1535 |
Der Beitrag zur Umgehung von Abwehrmaßnahmen erklärt, wie Sie die Lücke lesen, die ein StopLogging hinterlässt.
Zugriff auf Anmeldedaten und Exfiltration
| Ereignis | Zu prüfende Belege | ATT&CK |
|---|---|---|
secretsmanager:GetSecretValue / BatchGetSecretValue auf viele Secrets | Anzahl unterschiedlicher secretId pro Principal | T1555.006 |
Salven von s3:GetObject (Datenereignis) | Anzahl pro Principal und Bucket; additionalEventData.bytesTransferredOut | T1530 |
s3:PutBucketPolicy mit Principal: "*", PutBucketAcl mit AllUsers | Bucket öffentlich gemacht | T1530 |
DeleteBucketPublicAccessBlock / abgeschwächtes PutPublicAccessBlock | Schutzmechanismus entfernt | T1530 |
ec2:ModifySnapshotAttribute, ModifyImageAttribute, rds:ModifyDBSnapshotAttribute | createVolumePermission / restore mit einem fremden Konto oder all geteilt | T1537 |
GetObject ist ein Datenereignis: Es taucht nur auf, wenn der Trail dafür konfiguriert war. Siehe Belege für S3-Datenexfiltration.
Auswirkung
| Ereignis | Zu prüfende Belege | ATT&CK |
|---|---|---|
ec2:RunInstances mit Instanztypen p* / g* | instanceType, awsRegion | T1496 |
servicequotas:RequestServiceQuotaIncrease | quotaCode, Region | T1496 |
Viele Delete* / Terminate* durch einen einzigen Principal | Anzahl pro 10 Minuten | T1485 |
kms:ScheduleKeyDeletion, DisableKey | Schlüssel-ID | T1485, T1486 |
Aus der Liste Alarme machen
AWS selbst empfiehlt, den Trail an CloudWatch Logs zu senden und für Ereignisse wie diese Metrikfilter und Alarme anzulegen (re:Post-Anleitung); EventBridge-Regeln funktionieren ebenfalls. Für eine nachträgliche Untersuchung genügt es, die Exporte zu filtern – oder Sie legen sie im Analysetool ab, das diese Regeln auf jeden einzelnen Eintrag anwendet und jeden Befund mit seinen ATT&CK-Techniken verknüpft. Die Schritt-für-Schritt-Anleitung zur Analyse zeigt, wie Sie die Befunde bestätigen.