dd-audit-security-investigation

Par datadog-labs · agent-skills

Répondez aux questions de sécurité « qui a fait quoi » à partir de la piste d'audit — suppressions, modifications de configuration, activité de connexion, changements de permissions, actions d'un utilisateur ou d'une adresse IP spécifique.

npx skills add https://github.com/datadog-labs/agent-skills --skill dd-audit-security-investigation

Piste d'audit : Investigation de sécurité

Répondez aux questions courantes d'investigation de sécurité en utilisant pup audit-logs.

Prérequis

pup auth login   # OAuth2 (recommandé)
# ou définir DD_API_KEY + DD_APP_KEY avec le scope audit_logs_read

Ordre d'exécution des commandes

  1. Clarifiez le périmètre de l'investigation : qui, quel type de ressource, quelle fenêtre temporelle.
  2. Exécutez la requête la plus spécifique en premier ; élargissez uniquement si les résultats sont vides.
  3. Si les résultats sont volumineux, envoyez-les vers jq pour regrouper ou résumer.
  4. Mettez en évidence les anomalies : opérations en masse, géographie inhabituelle, activité en dehors des heures, actions d'utilisateurs support.

Requêtes d'investigation courantes

Qui a supprimé des ressources dans une fenêtre temporelle ?

pup audit-logs search --query "@action:deleted" --from 24h -o json \
  | jq '[.data[] | {
      timestamp: .attributes.timestamp,
      user: .attributes.attributes.usr.email,
      actor_type: .attributes.attributes.evt.actor.type,
      resource_type: .attributes.attributes.asset.type,
      resource_id: .attributes.attributes.asset.id,
      country: .attributes.attributes.network.client.geoip.country.name
    }]'

Qui a modifié une ressource spécifique (par ID) ?

pup audit-logs search --query "@asset.id:RESOURCE_ID" --from 7d -o json \
  | jq '[.data[] | {
      timestamp: .attributes.timestamp,
      user: .attributes.attributes.usr.email,
      action: .attributes.attributes.action,
      event: .attributes.attributes.evt.name
    }]'

Que a fait un utilisateur spécifique ?

pup audit-logs search --query "@usr.email:user@example.com" --from 7d --limit 200 -o json \
  | jq '[.data[] | {
      timestamp: .attributes.timestamp,
      action: .attributes.attributes.action,
      event: .attributes.attributes.evt.name,
      resource_type: .attributes.attributes.asset.type,
      resource_id: .attributes.attributes.asset.id,
      ip: .attributes.attributes.network.client.ip,
      country: .attributes.attributes.network.client.geoip.country.name
    }]'

Activité de connexion — toutes les connexions avec géolocalisation

pup audit-logs search --query "@evt.name:Authentication @action:login" --from 7d --limit 200 -o json \
  | jq '[.data[] | {
      timestamp: .attributes.timestamp,
      user: .attributes.attributes.usr.email,
      status: .attributes.attributes.status,
      ip: .attributes.attributes.network.client.ip,
      city: .attributes.attributes.network.client.geoip.city.name,
      country: .attributes.attributes.network.client.geoip.country.name,
      asn: .attributes.attributes.network.client.geoip.as.name
    }]'

Connexions échouées uniquement

pup audit-logs search --query "@evt.name:Authentication @action:login @status:error" --from 7d --limit 200 -o json \
  | jq '[.data[] | {
      timestamp: .attributes.timestamp,
      user: .attributes.attributes.usr.email,
      ip: .attributes.attributes.network.client.ip,
      country: .attributes.attributes.network.client.geoip.country.name
    }]'

Qui a changé les rôles ou les permissions ?

pup audit-logs search --query "@evt.name:\"Access Management\"" --from 30d --limit 200 -o json \
  | jq '[.data[] | {
      timestamp: .attributes.timestamp,
      user: .attributes.attributes.usr.email,
      action: .attributes.attributes.action,
      resource_type: .attributes.attributes.asset.type,
      resource_id: .attributes.attributes.asset.id
    }]'

Quelles actions proviennent d'une adresse IP spécifique ?

pup audit-logs search --query "@network.client.ip:1.2.3.4" --from 30d --limit 200 -o json \
  | jq '[.data[] | {
      timestamp: .attributes.timestamp,
      user: .attributes.attributes.usr.email,
      actor_type: .attributes.attributes.evt.actor.type,
      action: .attributes.attributes.action,
      event: .attributes.attributes.evt.name,
      resource_type: .attributes.attributes.asset.type
    }]'

Qui a créé ou supprimé des clés API ?

pup audit-logs search --query "@evt.name:Authentication @asset.type:api_key" --from 90d --limit 200 -o json \
  | jq '[.data[] | {
      timestamp: .attributes.timestamp,
      user: .attributes.attributes.usr.email,
      action: .attributes.attributes.action,
      key_id: .attributes.attributes.asset.id,
      ip: .attributes.attributes.network.client.ip,
      country: .attributes.attributes.network.client.geoip.country.name
    }]'

Référence des catégories d'événements

Catégorie (@evt.name) Ce qu'elle couvre
Authentication Connexions, création/suppression/modification de clés API
Access Management Rôles, ajout/suppression d'utilisateurs, politiques de restriction
Dashboard Créer, modifier, supprimer, partager
Monitor Créer, modifier, supprimer, résoudre
Log Management Pipelines, index, archives, filtres d'exclusion
Integration Ajouter/modifier/supprimer des intégrations
Metrics Créer/modifier/supprimer des métriques personnalisées
Organization Management Création d'org enfant, paramètres d'org
Notebook Créer, modifier, supprimer
APM Filtres de rétention, configuration d'échantillonnage
Cloud Security Platform Règles CWS, changements d'état de signaux de sécurité
Bits AI SRE Appels d'outils MCP, investigations IA

Indicateurs d'anomalie à signaler

Lors de la présentation des résultats d'investigation, relevez :

  • Type d'acteur SUPPORT_USER — Le support Datadog a accédé à l'organisation
  • Suppressions en masse — même utilisateur, même action, nombreuses ressources dans une courte fenêtre
  • Géographie inattendue — pays non vu dans les connexions antérieures de cet utilisateur
  • Activité en dehors des heures — actions à des heures inhabituelles pour le fuseau horaire typique de l'utilisateur
  • Premier ASN — action provenant d'un fournisseur de cloud ou d'un VPN non vu auparavant (@network.client.geoip.as.name)

Références

Skills similaires