Skip to content

Cet outil n’est ni affilié à Amazon Web Services, Inc. ou Amazon.com, Inc., ni approuvé ou sponsorisé par ces sociétés. AWS, Amazon Web Services, CloudTrail et GuardDuty sont des marques d’Amazon.com, Inc. ou de ses sociétés affiliées. Les autres noms sont des marques de leurs propriétaires respectifs.

Événements CloudTrail à surveiller, reliés à MITRE ATT&CK

Les événements CloudTrail que tout intervenant AWS doit connaître, de la reconnaissance à l'impact, avec les champs porteurs de preuves et les ID MITRE ATT&CK.

Publié le 5 min de lecture

En bref. Inutile de connaître des milliers de noms d'API AWS. Une cinquantaine de noms d'événements couvrent le chemin d'attaque habituel sur AWS : GetCallerIdentity et les rafales de List/Describe (reconnaissance), CreateUser / CreateAccessKey / CreateLoginProfile (persistance), AttachUserPolicy avec AdministratorAccess (élévation de privilèges), StopLogging / DeleteDetector (contournement des défenses), les rafales de GetObject / ModifySnapshotAttribute (exfiltration), RunInstances sur des GPU / ScheduleKeyDeletion (impact). Les tableaux ci-dessous donnent, pour chacun, la source de l'événement, les champs qui portent la preuve et la technique MITRE ATT&CK correspondante.

Chaque tableau correspond à une règle du jeu de règles ouvert de l'analyseur : ce que vous lisez ici est exactement ce que l'outil vérifie. Les tableaux sont organisés par tactique, dans l'ordre où se déroule généralement une intrusion.

Les champs à lire sur chaque événement

ChampCe qu'il vous apprend
eventTimeHeure UTC de la requête
eventSource / eventNameService et API, par exemple iam.amazonaws.com / CreateUser
userIdentity.typeRoot, IAMUser, AssumedRole, FederatedUser, AWSService…
userIdentity.arn, accessKeyIdQui, et avec quel identifiant (AKIA pour une clé à long terme, ASIA pour une clé temporaire)
sourceIPAddress, userAgentD'où, et avec quel client
errorCode, errorMessageAbsents lorsque l'appel a réussi
requestParameters, responseElementsCe qui a été demandé et ce qui a été créé
awsRegion, recipientAccountIdOù cela s'est produit

AWS documente le schéma complet dans la référence du contenu des enregistrements CloudTrail et dans celle de l'élément userIdentity.

Accès initial et abus d'identifiants

ÉvénementPreuve à lireATT&CK
Tout appel avec une clé AKIA depuis une nouvelle IPaccessKeyId, sourceIPAddress, userAgentT1078.004, T1552.001
Tout appel avec userIdentity.type = RootIP source ; le compte root ne devrait quasiment jamais agirT1078.004
ConsoleLogin (signin)responseElements.ConsoleLogin = Success/Failure, additionalEventData.MFAUsedT1078.004
Échecs répétés de ConsoleLogin depuis une même IPNombre par IP sur 15 minT1110

Découverte

ÉvénementPreuve à lireATT&CK
sts:GetCallerIdentity avec une clé à long termePremier appel depuis une nouvelle adresseT1087.004
Nombreux List* / Describe* / Get* différents en quelques minutesNombre d'eventName distincts par cléT1580, T1526
iam:GetAccountAuthorizationDetailsExtraction complète d'IAM en un seul appelT1087.004
Rafale d'AccessDenied / UnauthorizedOperationerrorCode par principalT1069.003

GetCallerIdentity ne nécessite aucune permission et la CLI l'appelle elle-même : pris isolément, il est de faible sévérité. Il prend tout son sens lorsqu'il s'agit du premier événement provenant d'une adresse inconnue.

Persistance

ÉvénementPreuve à lireATT&CK
iam:CreateUserrequestParameters.userNameT1136.003
iam:CreateAccessKey pour un autre utilisateurrequestParameters.userName ≠ appelant ; nouvelle clé dans responseElements.accessKey.accessKeyIdT1098.001
iam:CreateLoginProfile / UpdateLoginProfileMot de passe console attribué à un utilisateurT1098
iam:UpdateAssumeRolePolicyNouveaux principaux approuvés par un rôleT1098
iam:CreateSAMLProvider, CreateOpenIDConnectProvider, UpdateOpenIDConnectProviderThumbprintNouvelle relation de confiance de fédérationT1484.002
lambda:AddPermission avec le principal *, CreateFunctionUrlConfig avec authType: NONEFonction publique servant de porte dérobéeT1546, T1648
ec2:ModifyInstanceAttribute avec userDataScript exécuté au prochain démarrageT1059
ec2:CreateKeyPair / ImportKeyPairAccès SSH aux nouvelles instancesT1098.004

Élévation de privilèges

ÉvénementPreuve à lireATT&CK
AttachUserPolicy / AttachRolePolicy / AttachGroupPolicypolicyArn se terminant par AdministratorAccess ou IAMFullAccessT1098.003
PutUserPolicy / PutRolePolicy / CreatePolicyVersionDocument de politique avec "Action": "*" sur "Resource": "*"T1098.003
AddUserToGroupNom de groupe évoquant des droits administrateurT1098

Contournement des défenses

ÉvénementPreuve à lireATT&CK
cloudtrail:StopLogging, DeleteTrailNom du trail, régionT1562.008
cloudtrail:UpdateTrail, PutEventSelectorsDestination ou sélecteurs modifiésT1562.008
guardduty:DeleteDetector, UpdateDetector (désactivation), CreateIPSet, filtres d'archivageID du détecteur, régionT1562.001
config:StopConfigurationRecorder, DeleteDeliveryChannelRégionT1562.001
securityhub:DisableSecurityHub, macie2:DisableMacie, inspector2:Disable, detective:DeleteGraphServiceT1562.001
s3:PutBucketLogging sans cibleJournalisation des accès désactivéeT1562.008
ec2:DeleteFlowLogsJournalisation réseau suppriméeT1562.008
logs:DeleteLogGroup / DeleteLogStreamPreuves détruitesT1070
ec2:AuthorizeSecurityGroupIngress avec 0.0.0.0/0Pare-feu ouvertT1562.007
Écritures dans une région jusque-là inutiliséeawsRegionT1535

L'article sur le contournement des défenses explique comment interpréter le trou que laisse un StopLogging.

Accès aux identifiants et exfiltration

ÉvénementPreuve à lireATT&CK
secretsmanager:GetSecretValue / BatchGetSecretValue sur de nombreux secretsNombre de secretId distincts par principalT1555.006
Rafales de s3:GetObject (événement de données)Nombre par principal et par bucket ; additionalEventData.bytesTransferredOutT1530
s3:PutBucketPolicy avec Principal: "*", PutBucketAcl avec AllUsersBucket rendu publicT1530
DeleteBucketPublicAccessBlock / PutPublicAccessBlock affaibliGarde-fou retiréT1530
ec2:ModifySnapshotAttribute, ModifyImageAttribute, rds:ModifyDBSnapshotAttributecreateVolumePermission / restore partagé avec un compte tiers ou avec allT1537

GetObject est un événement de données : il n'apparaît que si le trail a été configuré pour l'enregistrer. Voir les preuves d'exfiltration de données S3.

Impact

ÉvénementPreuve à lireATT&CK
ec2:RunInstances avec des types d'instance p* / g*instanceType, awsRegionT1496
servicequotas:RequestServiceQuotaIncreasequotaCode, régionT1496
Nombreux Delete* / Terminate* par un même principalNombre sur 10 minT1485
kms:ScheduleKeyDeletion, DisableKeyID de la cléT1485, T1486

Transformer la liste en alertes

La recommandation d'AWS elle-même consiste à envoyer le trail vers CloudWatch Logs et à créer des filtres de métriques et des alarmes sur des événements comme ceux-ci (guide re:Post) ; des règles EventBridge font aussi l'affaire. Pour une investigation après coup, filtrer les exports suffit, ou bien déposez-les dans l'analyseur, qui évalue ces règles sur chaque enregistrement et relie chaque détection à ses techniques ATT&CK. Le guide d'analyse pas à pas montre comment les confirmer.

À lire aussi

Articles liés

Contournement des défenses sur AWS : StopLogging, DeleteTrail, sélecteurs d'événements, détecteurs GuardDuty, Config et Flow Logs supprimés dans CloudTrail.
Comment un attaquant reste dans AWS via IAM (utilisateurs cachés, clés en plus, politiques admin, rôles, fournisseurs d'identité) ce que CloudTrail en montre.
Prouver ou écarter un vol de données S3 : événements de données CloudTrail, journaux d'accès S3, buckets publics, snapshots partagés, et ce qui reste invisible.

Cet outil n’est ni affilié à Amazon Web Services, Inc. ou Amazon.com, Inc., ni approuvé ou sponsorisé par ces sociétés. AWS, Amazon Web Services, CloudTrail et GuardDuty sont des marques d’Amazon.com, Inc. ou de ses sociétés affiliées. Les autres noms sont des marques de leurs propriétaires respectifs.