Skip to content

Cet outil n'est ni affilié à Google LLC, ni approuvé, ni sponsorisé par Google LLC. Google Cloud et Google Cloud Platform sont des marques de Google LLC. Les autres noms sont des marques de leurs propriétaires respectifs.

cloudaudit.googleapis.com · vpc_flows

Notre projet Google Cloud a-t-il été compromis ?

Déposez vos Cloud Audit Logs et VPC Flow Logs : verdict, chronologie de l'incident et liste de remédiation. Analyse dans votre navigateur avec WebAssembly — rien n'est envoyé.

Déposez ici votre export de journaux Google Cloud

Cloud Audit Logs (Admin Activity, Data Access, System Event, Policy Denied) et VPC Flow Logs : téléchargements JSON de l'explorateur de journaux, fichiers d'un sink copiés depuis Cloud Storage (dossiers entiers ou ZIP), sortie de gcloud logging read, exports JSON BigQuery. Fichiers .json, .jsonl et .gz.

L'exemple est un incident fictif (entreprise, personnes, clés et adresses IP inventées) : clé de compte de service fuitée, rôle Owner accordé à un compte Gmail, porte dérobée par startup-script, bucket rendu public et sink de journaux supprimé.

Analyse dans votre navigateur avec WebAssembly — rien n'est envoyé.

Comment récupérer vos journaux

De rien à un fichier déposé ici en deux minutes environ. Commencez par le premier onglet ; les autres couvrent la console, les sinks existants et l'emplacement de chaque journal.

  1. Collectez les journaux
  2. Déposez ici le fichier, le dossier ou le ZIP
  3. Analysé dans votre navigateur — rien n'est envoyé

Recommandé

Prérequis: Rôle Logs Viewer (roles/logging.viewer) sur le projet, plus Private Logs Viewer (roles/logging.privateLogViewer) pour inclure les journaux Data Access. Rien à installer.

  1. Dans la console Google Cloud, sélectionnez le projet concerné et ouvrez Cloud Shell (le bouton >_ de la barre supérieure).

  2. Collez ceci pour exporter les 30 derniers jours de journaux d'audit et de VPC Flow Logs dans un seul fichier JSON compressé :

    gcloud logging read 'logName:"cloudaudit.googleapis.com" OR logName:"vpc_flows"' --freshness=30d --format=json | gzip > gcp-logs.json.gz

  3. Téléchargez-le sur votre ordinateur (ou ⋮ Plus → Télécharger dans Cloud Shell), puis déposez ici gcp-logs.json.gz :

    cloudshell download gcp-logs.json.gz

  4. Facultatif : les journaux de l'organisation (changements IAM et de règles d'administration faits sur l'organisation elle-même) sont stockés à part. Remplacez ORG_ID (voir gcloud organizations list), téléchargez aussi ce fichier et déposez les deux ensemble :

    gcloud logging read 'logName:"cloudaudit.googleapis.com" OR logName:"vpc_flows"' --organization=ORG_ID --freshness=30d --format=json | gzip > gcp-org-logs.json.gz

Pièges

  • Exportez maintenant : Data Access, Policy Denied et VPC Flow Logs sont conservés 30 jours (Admin Activity 400), et un attaquant avec le rôle Owner peut supprimer journaux et sinks. Augmentez --freshness (jusqu'à 400d) pour remonter plus loin.
  • Les journaux Data Access sont désactivés par défaut pour la plupart des services, et leur export exige le rôle Private Logs Viewer : sans eux, les lectures de données sont invisibles.
  • Téléchargez en JSON, jamais en CSV (non lu), et tenez compte de la limite de 10 000 entrées par téléchargement console. Tous les horodatages sont en UTC.

§ 01

Ce que fait cet outil

GCP Forensics répond à la première question d'un incident cloud : notre projet Google Cloud a-t-il été compromis, et comment ? Il lit les Cloud Audit Logs — le registre « qui a fait quoi, où » que Google Cloud tient pour chaque appel d'API — et les VPC Flow Logs, puis applique des détections écrites d'après le déroulé réel des intrusions Google Cloud.

Vous obtenez un verdict (Sain, Suspect ou Compromis) et ses raisons, les constats avec leurs techniques MITRE ATT&CK et leurs preuves, une chronologie de l'incident, un pivot sur les identités, clés de compte de service, adresses IP, projets et ressources, et une liste de remédiation par priorité.

Tout s'exécute dans votre navigateur : un analyseur Rust compilé en WebAssembly lit les fichiers en flux dans un Web Worker. Vos journaux, qui contiennent adresses e-mail, IP et noms de ressources, ne quittent jamais votre machine.

§ 02

Ce qu'il détecte

  • Identifiants volés : clés de compte de service créées ou importées, clés utilisées depuis Internet et depuis de nouvelles IP, emprunt d'identité (actAs, Token Creator), rafales d'appels refusés.
  • Prise de contrôle IAM : rôles Owner / Editor / admin IAM accordés, comptes gmail.com personnels et domaines inconnus ajoutés aux stratégies IAM, modifications de règles d'administration et de rôles personnalisés.
  • Abus de Compute : portes dérobées par startup-script, clés SSH injectées dans les métadonnées, OS Login désactivé, instances GPU, rafales de créations de VM, VM dans des régions jamais utilisées, pare-feu ouverts à 0.0.0.0/0.
  • Vol de données : buckets et autres ressources rendus publics (allUsers), storage.objects.get en masse, copies BigQuery vers d'autres projets, images et instantanés partagés, gros transferts vers Internet dans les VPC Flow Logs.
  • Effacement de traces : sinks supprimés ou modifiés, exclusions, buckets de journaux et journaux supprimés, journalisation Data Access désactivée, notifications Security Command Center supprimées, versions de clés KMS détruites.
  • Corrélation : la même IP ou identité passant d'un accès suspect à des actions de prise de contrôle est signalée comme chaîne d'attaque critique.

§ 03

Avant le prochain incident

Vous collectez les journaux de l'incident en cours ? Suivez le guide de collecte sous la zone de dépôt.

Pour que la prochaine investigation dispose des preuves nécessaires :

  • Pas encore de sink ? Créez-en un maintenant (Logging → Routeur de journaux → Créer un sink → Cloud Storage) pour préserver les prochains événements même si les journaux sont supprimés.
  • Activez les journaux d'audit Data Access (IAM et administration → Journaux d'audit) au moins pour Cloud Storage, IAM et Secret Manager : sans eux, le vol de données est invisible.
  • Envoyez les journaux d'audit de toute l'organisation vers un bucket verrouillé, dans un projet séparé que les propriétaires de projet ne peuvent pas modifier.
  • Activez les VPC Flow Logs sur les sous-réseaux sensibles.

§ 04

Limites

  • L'absence de détection n'est pas une preuve d'absence : le verdict ne couvre que les journaux déposés, et les journaux Data Access sont désactivés par défaut pour la plupart des services.
  • Les heuristiques orientent, elles ne prouvent pas : une clé utilisée depuis l'IP d'un fournisseur de CI ou un rôle Owner accordé à un consultant peuvent être légitimes. Confirmez chaque constat avec son responsable.
  • Les entrées d'audit GKE / API Kubernetes sont confiées à Kubernetes Forensics, et celles de Google Workspace à Google Workspace Forensics.
  • Jusqu'à 100 000 événements courants sont listés dans le tableau (les signalés sont toujours conservés) ; détections et entités couvrent toutes les entrées. Pour les très gros exports, la limite est la mémoire du navigateur pour le résultat, pas pour l'entrée, lue en flux.
  • Les exports BigQuery Avro / Parquet et les téléchargements CSV de l'explorateur de journaux ne sont pas lus : exportez en JSON.

§ 05

Que faire ensuite

Si le verdict est Suspect ou Compromis, confinez d'abord, enquêtez ensuite : traitez la liste de remédiation de l'outil (éléments les plus graves en premier), préservez les journaux et suivez les recommandations de Google ci-dessous.

La liste est générée à partir de vos constats, dans l'onglet Remédiation des résultats.

§ 06

Règles de détection

Les détections sont des données, pas du code : chaque règle vit dans rules/gcp.rules.json (conditions de style Sigma sur les champs LogEntry), pour être relue, ajustée et réutilisée. Les analyses à état et la corrélation de chaîne d'attaque gardent leurs seuils dans le même fichier.

RègleSévéritéTactiqueMITRE ATT&CK
Clé de compte de service créée sa_key_createdMoyennePersistanceT1098.001
Clé publique importée sur un compte de service sa_key_uploadedÉlevéePersistanceT1098.001
Clé de compte de service utilisée depuis une IP publique sa_key_used_externalMoyenneAccès initialT1078.004
Compte de service créé sa_createdFaiblePersistanceT1136.003
Emprunt d'identité d'un compte de service sa_impersonationMoyenneÉlévation de privilègesT1550.001
Rôle d'emprunt d'identité accordé token_creator_grantedÉlevéeÉlévation de privilègesT1098.003
Rôle Owner, Editor ou admin IAM accordé owner_editor_grantedÉlevéeÉlévation de privilègesT1098.003
Accès accordé à un compte Gmail personnel consumer_account_grantedÉlevéePersistanceT1098.003
Owner accordé à un compte Gmail personnel owner_to_consumerCritiqueÉlévation de privilègesT1098.003
Ressource rendue publique (allUsers) public_access_grantedCritiqueExfiltrationT1530T1537
Règle d'administration modifiée org_policy_changedMoyenneContournement des défensesT1484
Rôle personnalisé créé ou modifié custom_role_changedFaibleÉlévation de privilègesT1098.003
Clé HMAC Cloud Storage créée hmac_key_createdMoyennePersistanceT1098.001
Script de démarrage ajouté ou modifié startup_script_changedÉlevéePersistanceT1037T1651
Clé SSH ajoutée aux métadonnées ssh_key_addedMoyennePersistanceT1098.004
OS Login désactivé ou blocage des clés SSH modifié oslogin_changedÉlevéeContournement des défensesT1098.004T1556
Instance GPU créée gpu_instance_createdMoyenneImpactT1496
Rafale de créations de VM instance_burstÉlevéeImpactT1496
Pare-feu ouvert à Internet firewall_openedMoyenneContournement des défensesT1562.007
Téléchargements massifs Cloud Storage bulk_object_readsÉlevéeExfiltrationT1530
Données BigQuery copiées vers un autre projet bq_foreign_exportÉlevéeExfiltrationT1537
Image, instantané ou disque partagé image_sharedMoyenneExfiltrationT1537
Sink de journaux supprimé sink_deletedÉlevéeContournement des défensesT1562.008
Sink de journaux modifié sink_modifiedMoyenneContournement des défensesT1562.008
Exclusion de journaux créée ou modifiée log_exclusion_createdMoyenneContournement des défensesT1562.008
Bucket de journaux supprimé ou modifié log_bucket_changedMoyenneContournement des défensesT1562.008
Journaux supprimés log_deletedÉlevéeContournement des défensesT1070
Journalisation Data Access désactivée audit_logging_disabledÉlevéeContournement des défensesT1562.008
Alertes Security Command Center supprimées scc_notification_removedÉlevéeContournement des défensesT1562
Version de clé KMS détruite kms_key_destroyedÉlevéeImpactT1485T1486
Projet supprimé project_deletedÉlevéeImpactT1485
Rafale d'appels refusés permission_denied_burstMoyenneDécouverteT1580T1526
Clé de compte de service utilisée depuis une nouvelle IP sa_key_new_ipÉlevéeAccès initialT1078.004
Accès accordé à un domaine inconnu new_external_domainMoyennePersistanceT1098.003
VM créée dans une région jamais utilisée new_zone_instanceMoyenneContournement des défensesT1535
Transfert volumineux vers une IP Internet flow_large_egressMoyenneExfiltrationT1048
IP suspecte en échange avec vos VM flow_ioc_matchÉlevéeCommande et contrôleT1071
Chaîne d'attaque : accès volé puis prise de contrôle attack_chainCritiqueImpact

§ 07

FAQ

Mes journaux sont-ils envoyés quelque part ?

Non. Les fichiers sont lus par votre navigateur et analysés par un module WebAssembly dans un Web Worker. Il n'y a aucun traitement côté serveur : vous pouvez vous déconnecter du réseau une fois la page chargée.

Comment savoir si une clé de compte de service a fuité ?

Cherchez l'utilisation de la clé depuis des adresses IP hors de Google Cloud, surtout des adresses jamais utilisées auparavant, suivie de changements IAM ou d'énumération (rafales d'appels refusés). L'outil signale ces trois indices et les relie en chaîne d'attaque. Désactivez d'abord la clé, enquêtez ensuite.

De quels journaux Google Cloud ai-je besoin ?

Les journaux d'audit Admin Activity sont toujours actifs et gratuits ; ils montrent les changements IAM, Compute, journalisation et configuration. Les journaux Data Access montrent les lectures de données (buckets, secrets) mais doivent être activés. Les VPC Flow Logs montrent le trafic réseau des VM. Exportez les trois sur la période suspecte.

Peut-il lire tout un bucket de sink ?

Oui. Copiez le bucket avec gsutil ou gcloud storage et déposez le dossier (ou un ZIP). Les fichiers sont lus en flux et le gzip est décompressé dans le navigateur : les exports de plusieurs gigaoctets passent.

Et les journaux GKE et Google Workspace ?

Les entrées d'audit de l'API Kubernetes (serviceName k8s.io) sont comptées et confiées à Kubernetes Forensics ; celles de Google Workspace à Google Workspace Forensics. Ce sont des outils jumeaux construits de la même façon.

Est-ce un outil officiel de Google ?

Non. GCP Forensics est un outil indépendant, sans lien avec Google, ni approuvé ni sponsorisé par Google. Google Cloud est une marque de Google LLC.

Cet outil n'est ni affilié à Google LLC, ni approuvé, ni sponsorisé par Google LLC. Google Cloud et Google Cloud Platform sont des marques de Google LLC. Les autres noms sont des marques de leurs propriétaires respectifs.