AWS - CloudTrail Enum
CloudTrail
AWS CloudTrail enregistre et surveille l'activité au sein de votre environnement AWS. Il capture des journaux d'événements détaillés, indiquant qui a fait quoi, quand et d'où, pour toutes les interactions avec les ressources AWS. Cela fournit une piste de vérification des modifications et des actions, aidant à l'analyse de sécurité, à l'audit de conformité et au suivi des modifications des ressources. CloudTrail est essentiel pour comprendre le comportement des utilisateurs et des ressources, renforcer les postures de sécurité et garantir la conformité réglementaire.
Chaque événement enregistré contient :
Le nom de l'API appelée :
eventName
Le service appelé :
eventSource
L'heure :
eventTime
L'adresse IP :
SourceIPAddress
La méthode de l'agent :
userAgent
. Exemples :Signing.amazonaws.com - Depuis la console de gestion AWS
console.amazonaws.com - Utilisateur root du compte
lambda.amazonaws.com - AWS Lambda
Les paramètres de la requête :
requestParameters
Les éléments de réponse :
responseElements
Les événements sont écrits dans un nouveau fichier journal environ toutes les 5 minutes dans un fichier JSON, ils sont conservés par CloudTrail et enfin, les fichiers journaux sont livrés à S3 environ 15 minutes après. Les journaux de CloudTrail peuvent être agrégés entre les comptes et les régions. CloudTrail permet d'utiliser l'intégrité des fichiers journaux afin de pouvoir vérifier que vos fichiers journaux n'ont pas été modifiés depuis que CloudTrail vous les a livrés. Il crée un hachage SHA-256 des journaux à l'intérieur d'un fichier de synthèse. Un hachage sha-256 des nouveaux journaux est créé toutes les heures. Lors de la création d'une piste, les sélecteurs d'événements vous permettront d'indiquer la piste à journaliser : événements de gestion, de données ou d'insights.
Les journaux sont enregistrés dans un compartiment S3. Par défaut, le chiffrement côté serveur est utilisé (SSE-S3) afin qu'AWS décrypte le contenu pour les personnes qui y ont accès, mais pour une sécurité supplémentaire, vous pouvez utiliser SSE avec KMS et vos propres clés.
Les journaux sont stockés dans un compartiment S3 avec ce format de nom :
BucketName/AWSLogs/AccountID/CloudTrail/RegionName/YYY/MM/DD
Étant donné que le nom du compartiment est :
aws-cloudtrail-logs-<accountid>-<random>
Exemple :
aws-cloudtrail-logs-947247140022-ffb95fe7/AWSLogs/947247140022/CloudTrail/ap-south-1/2023/02/22/
À l'intérieur de chaque dossier, chaque journal aura un nom suivant ce format : AccountID_CloudTrail_RegionName_YYYYMMDDTHHMMZ_Random.json.gz
Convention de nommage des fichiers journaux
De plus, les fichiers de synthèse (pour vérifier l'intégrité des fichiers) seront dans le même compartiment à :
Agréger les journaux de plusieurs comptes
Créez une piste dans le compte AWS où vous souhaitez que les fichiers journaux soient livrés
Appliquez des autorisations au compartiment S3 de destination permettant l'accès inter-comptes pour CloudTrail et autorisez chaque compte AWS qui a besoin d'accéder
Créez une nouvelle piste dans les autres comptes AWS et sélectionnez d'utiliser le compartiment créé à l'étape 1
Cependant, même si vous pouvez enregistrer tous les journaux dans le même compartiment S3, vous ne pouvez pas agréger les journaux CloudTrail de plusieurs comptes dans des journaux CloudWatch appartenant à un seul compte AWS.
Rappelez-vous qu'un compte peut avoir différentes pistes de CloudTrail activées stockant les mêmes (ou différents) journaux dans différents compartiments.
Cloudtrail de tous les comptes de l'organisation en un seul
Lors de la création d'un CloudTrail, il est possible d'indiquer d'activer CloudTrail pour tous les comptes de l'organisation et d'obtenir les journaux dans un seul compartiment :
De cette manière, vous pouvez facilement configurer CloudTrail dans toutes les régions de tous les comptes et centraliser les journaux dans un seul compte (que vous devriez protéger).
Vérification des fichiers journaux
Vous pouvez vérifier que les journaux n'ont pas été altérés en exécutant
Journaux vers CloudWatch
CloudTrail peut automatiquement envoyer des journaux vers CloudWatch afin que vous puissiez définir des alertes qui vous avertissent lorsque des activités suspectes sont effectuées. Notez que pour permettre à CloudTrail d'envoyer les journaux vers CloudWatch, un rôle doit être créé pour autoriser cette action. Si possible, il est recommandé d'utiliser le rôle par défaut AWS pour effectuer ces actions. Ce rôle permettra à CloudTrail de :
CreateLogStream : Cela permet de créer des flux de journaux CloudWatch
PutLogEvents : Livrer les journaux CloudTrail au flux de journaux CloudWatch
Historique des événements
L'historique des événements CloudTrail vous permet d'inspecter dans un tableau les journaux qui ont été enregistrés :
Insights
CloudTrail Insights analyse automatiquement les événements de gestion des écritures des pistes CloudTrail et vous alerte sur une activité inhabituelle. Par exemple, s'il y a une augmentation des événements TerminateInstance
qui diffère des baselines établies, vous le verrez comme un événement Insight. Ces événements facilitent plus que jamais la détection et la réponse à une activité API inhabituelle.
Les insights sont stockés dans le même compartiment que les journaux CloudTrail dans : BucketName/AWSLogs/AccountID/CloudTrail-Insight
Sécurité
Intégrité des fichiers journaux CloudTrail |
|
Arrêter l'accès non autorisé |
|
Empêcher la suppression des fichiers journaux |
|
Conseiller en accès
Le conseiller en accès AWS s'appuie sur les journaux CloudTrail des 400 derniers jours pour recueillir ses informations. CloudTrail capture un historique des appels d'API AWS et des événements associés effectués dans un compte AWS. Le conseiller en accès utilise ces données pour indiquer quand les services ont été accédés pour la dernière fois. En analysant les journaux CloudTrail, le conseiller en accès peut déterminer quels services AWS un utilisateur IAM ou un rôle a accédé et quand cet accès a eu lieu. Cela aide les administrateurs AWS à prendre des décisions éclairées sur l'affinement des autorisations, car ils peuvent identifier les services qui n'ont pas été accédés pendant des périodes prolongées et potentiellement réduire les autorisations trop larges en fonction des modèles d'utilisation réels.
Par conséquent, le conseiller en accès informe sur les autorisations inutiles accordées aux utilisateurs afin que l'administrateur puisse les supprimer
Actions
Énumération
Injection CSV
Il est possible d'effectuer une injection CSV dans CloudTrail qui exécutera un code arbitraire si les journaux sont exportés en CSV et ouverts avec Excel. Le code suivant générera une entrée de journal avec un mauvais nom de Trail contenant la charge utile :
Pour plus d'informations sur les injections CSV, consultez la page:
Pour plus d'informations sur cette technique spécifique, consultez https://rhinosecuritylabs.com/aws/cloud-security-csv-injection-aws-cloudtrail/
Contourner la détection
Contourner les HoneyTokens
Les HoneyTokens sont créés pour détecter l'exfiltration d'informations sensibles. Dans le cas d'AWS, ce sont des clés AWS dont l'utilisation est surveillée, si quelque chose déclenche une action avec cette clé, alors quelqu'un a dû voler cette clé.
Cependant, cette surveillance est effectuée via CloudTrail, et il y a certains services AWS qui n'envoient pas de journaux à CloudTrail (trouvez la liste ici). Certains de ces services répondront avec une erreur contenant l'ARN du rôle de la clé si quelqu'un non autorisé (la clé HoneyToken) essaie d'y accéder.
De cette manière, un attaquant peut obtenir l'ARN de la clé sans déclencher de journal. Dans l'ARN, l'attaquant peut voir l'ID du compte AWS et le nom, il est facile de connaître les ID et noms de compte des entreprises utilisant les HoneyTokens, de cette manière un attaquant peut identifier si le jeton est un HoneyToken.
Détection des HoneyTokens
Pacu détecte si une clé appartient à Canarytokens, SpaceCrab, SpaceSiren:
Si
canarytokens.org
apparaît dans le nom du rôle ou si l'ID de compte534261010715
apparaît dans le message d'erreur.En les testant plus récemment, ils utilisent le compte
717712589309
et ont toujours la chaînecanarytokens.com
dans le nom.Si
SpaceCrab
apparaît dans le nom du rôle dans le message d'erreurSpaceSiren utilise des uuids pour générer des noms d'utilisateur :
[a-f0-9]{8}-[a-f0-9]{4}-4[a-f0-9]{3}-[89aAbB][a-f0-9]{3}-[a-f0-9]{12}
Si le nom semble généré de manière aléatoire, il y a de fortes probabilités que ce soit un HoneyToken.
Notez que toutes les API publiques découvertes comme ne créant pas de journaux CloudTrail sont maintenant corrigées, donc peut-être que vous devez trouver les vôtres...
Ou vous pouvez obtenir l'ID de compte à partir de l'encodé à l'intérieur de la clé d'accès comme expliqué ici et vérifier l'ID de compte avec votre liste de comptes AWS Honeytokens:
Pour plus d'informations, consultez la recherche originale.
Accès à une infrastructure tierce
Certains services AWS vont créer une infrastructure telle que des bases de données ou des clusters Kubernetes (EKS). Un utilisateur communiquant directement avec ces services (comme l'API Kubernetes) n'utilisera pas l'API AWS, donc CloudTrail ne pourra pas voir cette communication.
Par conséquent, un utilisateur ayant accès à EKS et ayant découvert l'URL de l'API EKS pourrait générer un jeton localement et communiquer directement avec le service API sans être détecté par CloudTrail.
Plus d'informations dans :
pageAWS - EKS Post ExploitationModification de la configuration de CloudTrail
Supprimer des trails
Arrêter les pistes
Désactiver l'enregistrement multi-régions
Désactiver la journalisation par sélecteurs d'événements
Dans le premier exemple, un sélecteur d'événements unique est fourni sous forme de tableau JSON avec un seul objet. Le "ReadWriteType": "ReadOnly"
indique que le sélecteur d'événements ne doit capturer que les événements en lecture seule (ainsi, les insights de CloudTrail ne vérifieront pas les événements d'écriture, par exemple).
Vous pouvez personnaliser le sélecteur d'événements en fonction de vos besoins spécifiques.
Suppression des journaux via la politique de cycle de vie S3
Modification de la configuration du bucket
Supprimer le bucket S3
Modifier la stratégie du bucket pour refuser tout écrit de la part du service CloudTrail
Ajouter une politique de cycle de vie au bucket S3 pour supprimer les objets
Désactiver la clé KMS utilisée pour chiffrer les journaux CloudTrail
Rançongiciel CloudTrail
Rançongiciel S3
Vous pourriez générer une clé asymétrique et faire en sorte que CloudTrail chiffre les données avec cette clé et supprimer la clé privée afin que le contenu de CloudTrail ne puisse pas être récupéré. Il s'agit essentiellement d'un rançongiciel S3-KMS expliqué dans:
pageAWS - S3 Post ExploitationRançongiciel KMS
Il s'agit d'une manière plus simple d'effectuer l'attaque précédente avec des exigences de permissions différentes:
pageAWS - KMS Post ExploitationRéférences
Dernière mise à jour