Collecter les journaux Sysdig

Compatible avec:

Cet analyseur extrait les données des événements de sécurité à partir des journaux JSON Sysdig, en transformant et en mappant les champs de journal bruts au format UDM de Google Security Operations. Il gère divers champs, y compris les métadonnées, les informations sur l'utilisateur principal/cible, les détails des résultats de sécurité et le contexte lié à Kubernetes, ce qui enrichit les données à analyser dans Google SecOps. L'analyseur effectue également des conversions de type de données, une gestion des erreurs et une logique conditionnelle en fonction des valeurs des champs pour garantir une représentation UDM précise et complète.

Avant de commencer

  • Assurez-vous de disposer d'une instance Google SecOps.
  • Assurez-vous de disposer d'un accès privilégié à Sysdig Secure.

Créer une clé API pour le flux webhook

  1. Accédez à la console Google Cloud > Identifiants.

    Accéder à "Identifiants"

  2. Cliquez sur Créer des identifiants, puis sélectionnez Clé API.

  3. Limitez l'accès de la clé API à l'API Google Security Operations.

Option 1

Configurer un flux Webhook dans Google SecOps pour ingérer les journaux Sysdig

  1. Accédez à Paramètres du SIEM > Flux.
  2. Cliquez sur Ajouter.
  3. Dans le champ Nom du flux, saisissez un nom pour le flux (par exemple, Sysdig Logs).
  4. Sélectionnez Webhook comme type de source.
  5. Sélectionnez Sysdig comme type de journal.
  6. Cliquez sur Suivant.
  7. Facultatif: spécifiez des valeurs pour les paramètres d'entrée suivants :
    • Délimiteur de fractionnement: délimiteur utilisé pour séparer les lignes de journal, par exemple \n.
    • Espace de noms des éléments: espace de noms des éléments.
    • Libellés d'ingestion: libellé appliqué aux événements de ce flux.
  8. Cliquez sur Suivant.
  9. Vérifiez la configuration du flux dans l'écran Finaliser, puis cliquez sur Envoyer.
  10. Cliquez sur Générer une clé secrète pour générer une clé secrète permettant d'authentifier ce flux.
  11. Copiez et stockez la clé secrète. Vous ne pourrez plus afficher cette clé secrète. Si nécessaire, vous pouvez générer une nouvelle clé secrète, mais cette action rend la clé secrète précédente obsolète.
  12. Dans l'onglet Détails, copiez l'URL du point de terminaison du flux dans le champ Informations sur le point de terminaison. Vous devez spécifier cette URL de point de terminaison dans votre application cliente.
  13. Cliquez sur OK.

Spécifier l'URL du point de terminaison

  1. Dans votre application cliente, spécifiez l'URL du point de terminaison HTTPS fournie dans le flux de webhook.
  2. Activez l'authentification en spécifiant la clé API et la clé secrète dans l'en-tête personnalisé au format suivant:

    X-goog-api-key = API_KEY
    X-Webhook-Access-Key = SECRET
    

    Recommandation: Spécifiez la clé API en tant qu'en-tête plutôt que dans l'URL.

  3. Si votre client webhook n'est pas compatible avec les en-têtes personnalisés, vous pouvez spécifier la clé API et la clé secrète à l'aide de paramètres de requête au format suivant:

    ENDPOINT_URL?key=API_KEY&secret=SECRET
    

    Remplacez les éléments suivants :

    • ENDPOINT_URL: URL du point de terminaison du flux.
    • API_KEY: clé API permettant de s'authentifier auprès de Google SecOps.
    • SECRET: clé secrète que vous avez générée pour authentifier le flux.

Configurer le webhook dans Sysdig

  1. Connectez-vous à Sysdig Secure avec des droits d'administrateur.
  2. Accédez à Profil > Paramètres > Transfert d'événements.
  3. Cliquez sur + Ajouter une intégration, puis sélectionnez Webhook dans le menu déroulant.
  4. Spécifiez les valeurs des paramètres d'entrée suivants:

    • Nom de l'intégration: indiquez un nom descriptif pour le webhook (par exemple, Webhook Google SecOps).
    • Point de terminaison: saisissez le webhook <ENDPOINT_URL>, suivi de <API_KEY et de <SECRET>.
    • Données à envoyer: dans le menu déroulant, sélectionnez les types de données Sysdig à transférer.

    • Testez l'intégration, puis activez-la en cliquant sur Activé.

    • Cliquez sur Enregistrer.

Option 2

Transférer les données directement vers Google SecOps

  1. Connectez-vous à Sysdig Secure à l'aide de vos identifiants administrateur.
  2. Accédez à Paramètres > Transfert d'événements.
  3. Cliquez sur + Ajouter une intégration, puis sélectionnez Google Chronicle dans le menu déroulant.
  4. Spécifiez les valeurs des paramètres d'entrée suivants :
    • Nom de l'intégration: indiquez un nom descriptif pour l'intégration (par exemple, Intégration Google SecOps).
    • Numéro client: numéro client Google associé à votre compte GCP. (dans Google SecOps, accédez à Paramètres > Profil).
    • Espace de noms : facultatif. Utilisez-le comme balise pour identifier le domaine de données approprié à l'indexation et à l'enrichissement.
    • Identifiants JSON: importez vos identifiants JSON Google SecOps.
    • Région: sélectionnez votre région, par exemple les États-Unis, l'Europe ou l'Asie.
    • Données à envoyer: sélectionnez les types de données Sysdig à transférer dans le menu déroulant.
    • Testez l'intégration, puis activez-la en cliquant sur Activé.
    • Cliquez sur Enregistrer.

Tableau de mappage UDM

Champ de journal Mappage UDM Logique
agentId read_only_udm.metadata.product_deployment_id La valeur de agentId du journal brut est mappée directement sur ce champ UDM.
category read_only_udm.security_result.category_details La valeur de category du journal brut est mappée directement sur ce champ UDM.
content.fields.container.id read_only_udm.target.asset.asset_id La valeur de content.fields.container.id du journal brut est précédée de "container_id:" et mappée sur ce champ UDM. Utilisé si containerId est vide.
content.fields.container.image.repository read_only_udm.target.file.full_path La valeur de content.fields.container.image.repository du journal brut est mappée directement sur ce champ UDM.
content.fields.container.image.tag read_only_udm.metadata.ingestion_labels.value où la clé est tag La valeur de content.fields.container.image.tag du journal brut est mappée directement sur ce champ UDM.
content.fields.evt.res read_only_udm.metadata.ingestion_labels.value où la clé est evt_res La valeur de content.fields.evt.res du journal brut est mappée directement sur ce champ UDM.
content.fields.evt.type read_only_udm.metadata.event_type La valeur de content.fields.evt.type du journal brut est mappée directement sur ce champ UDM.
content.fields.falco.rule read_only_udm.security_result.rule_name La valeur de content.fields.falco.rule du journal brut est mappée directement sur ce champ UDM. Utilisé si content.ruleName est vide.
content.fields.group.gid read_only_udm.target.group.product_object_id La valeur de content.fields.group.gid du journal brut est mappée directement sur ce champ UDM.
content.fields.group.name read_only_udm.target.group.group_display_name La valeur de content.fields.group.name du journal brut est mappée directement sur ce champ UDM.
content.fields.proc.cmdline read_only_udm.target.process.command_line La valeur de content.fields.proc.cmdline du journal brut est mappée directement sur ce champ UDM.
content.fields.proc.pcmdline read_only_udm.target.process.parent_process.command_line La valeur de content.fields.proc.pcmdline du journal brut est mappée directement sur ce champ UDM.
content.fields.proc.pid read_only_udm.target.process.pid La valeur de content.fields.proc.pid du journal brut est mappée directement sur ce champ UDM.
content.fields.proc.ppid read_only_udm.target.process.parent_process.pid La valeur de content.fields.proc.ppid du journal brut est mappée directement sur ce champ UDM.
content.fields.proc.sid read_only_udm.metadata.ingestion_labels.value où la clé est sid La valeur de content.fields.proc.sid du journal brut est mappée directement sur ce champ UDM.
content.fields.user.loginname read_only_udm.principal.user.user_display_name La valeur de content.fields.user.loginname du journal brut est mappée directement sur ce champ UDM.
content.fields.user.uid read_only_udm.principal.user.userid La valeur de content.fields.user.uid du journal brut est mappée directement sur ce champ UDM.
content.output read_only_udm.additional.fields.value.string_value où la clé est content_output La valeur de content.output du journal brut est mappée directement sur ce champ UDM.
content.policyId read_only_udm.security_result.rule_id La valeur de content.policyId du journal brut est mappée directement sur ce champ UDM.
content.policyOrigin read_only_udm.additional.fields.value.string_value où la clé est content_policyOrigin La valeur de content.policyOrigin du journal brut est mappée directement sur ce champ UDM.
content.policyVersion read_only_udm.additional.fields.value.string_value où la clé est content_policyVersion La valeur de content.policyVersion du journal brut est mappée directement sur ce champ UDM.
content.ruleName read_only_udm.security_result.rule_name La valeur de content.ruleName du journal brut est mappée directement sur ce champ UDM.
content.ruleTags read_only_udm.security_result.rule_labels Les valeurs du tableau content.ruleTags du journal brut sont mappées sur ce champ UDM, avec des clés générées de manière dynamique sous la forme "ruletag_index".
content.ruleType read_only_udm.additional.fields.value.string_value où la clé est content_ruleType La valeur de content.ruleType du journal brut est mappée directement sur ce champ UDM.
containerId read_only_udm.target.asset.asset_id La valeur de containerId du journal brut est précédée de "container_id:" et mappée sur ce champ UDM.
description read_only_udm.metadata.description La valeur de description du journal brut est mappée directement sur ce champ UDM.
id read_only_udm.metadata.product_log_id La valeur de id du journal brut est mappée directement sur ce champ UDM.
labels.container.label.io.kubernetes.container.name read_only_udm.additional.fields.value.string_value où la clé est container_name La valeur de labels.container.label.io.kubernetes.container.name du journal brut est mappée directement sur ce champ UDM.
labels.container.label.io.kubernetes.pod.name read_only_udm.additional.fields.value.string_value où la clé est pod_name La valeur de labels.container.label.io.kubernetes.pod.name du journal brut est mappée directement sur ce champ UDM. Utilisé si labels.kubernetes.pod.name est vide.
labels.container.label.io.kubernetes.pod.namespace read_only_udm.principal.namespace La valeur de labels.container.label.io.kubernetes.pod.namespace du journal brut est mappée directement sur ce champ UDM. Utilisé si labels.kubernetes.namespace.name est vide.
labels.aws.instanceId read_only_udm.target.resource.product_object_id La valeur de labels.aws.instanceId du journal brut est mappée directement sur ce champ UDM.
labels.aws.region read_only_udm.target.resource.attribute.cloud.availability_zone La valeur de labels.aws.region du journal brut est mappée directement sur ce champ UDM.
labels.host.hostName read_only_udm.principal.ip OU read_only_udm.principal.hostname Si la valeur contient "ip", elle est analysée en tant qu'adresse IP et mappée sur principal.ip. Sinon, il est mappé sur principal.hostname.
labels.host.mac read_only_udm.principal.mac La valeur de labels.host.mac du journal brut est mappée directement sur ce champ UDM. Utilisé si machineId est vide.
labels.kubernetes.cluster.name read_only_udm.additional.fields.value.string_value où la clé est kubernetes_cluster_name La valeur de labels.kubernetes.cluster.name du journal brut est mappée directement sur ce champ UDM.
labels.kubernetes.deployment.name read_only_udm.additional.fields.value.string_value où la clé est kubernetes_deployment_name La valeur de labels.kubernetes.deployment.name du journal brut est mappée directement sur ce champ UDM.
labels.kubernetes.namespace.name read_only_udm.principal.namespace La valeur de labels.kubernetes.namespace.name du journal brut est mappée directement sur ce champ UDM.
labels.kubernetes.node.name read_only_udm.additional.fields.value.string_value où la clé est kubernetes_node_name La valeur de labels.kubernetes.node.name du journal brut est mappée directement sur ce champ UDM.
labels.kubernetes.pod.name read_only_udm.additional.fields.value.string_value où la clé est pod_name La valeur de labels.kubernetes.pod.name du journal brut est mappée directement sur ce champ UDM.
labels.kubernetes.service.name read_only_udm.additional.fields.value.string_value où la clé est kubernetes_service_name La valeur de labels.kubernetes.service.name du journal brut est mappée directement sur ce champ UDM.
machineId read_only_udm.principal.mac La valeur de machineId du journal brut est mappée directement sur ce champ UDM.
name read_only_udm.security_result.summary La valeur de name du journal brut est mappée directement sur ce champ UDM.
severity read_only_udm.security_result.severity La valeur de severity du journal brut est mappée sur une valeur de chaîne basée sur ces plages: <4 = ÉLEVÉ, >3 et <6 = MOYEN, 6 = BAS, 7 = INFORMATIONNEL.
source read_only_udm.security_result.description La valeur de source du journal brut est mappée directement sur ce champ UDM.
timestampRFC3339Nano read_only_udm.metadata.event_timestamp La valeur de timestampRFC3339Nano du journal brut est analysée en tant qu'horodatage et mappée sur ce champ UDM.
type read_only_udm.metadata.product_event_type La valeur de type du journal brut est mappée directement sur ce champ UDM.
(Logique de l'analyseur) read_only_udm.metadata.product_name Code codé en dur sur "SYSDIG".
(Logique de l'analyseur) read_only_udm.metadata.vendor_name Code codé en dur sur "SYSDIG".
(Logique de l'analyseur) read_only_udm.metadata.event_type Défini sur "PROCESS_UNCATEGORIZED" par défaut, ou sur "GENERIC_EVENT" si labels.host.hostName est vide.
(Logique de l'analyseur) read_only_udm.metadata.log_type Code codé en dur sur "SYSDIG".
(Logique de l'analyseur) read_only_udm.target.resource.resource_type Défini sur "CLOUD_PROJECT" si labels.aws.instanceId existe.

Modifications

2024-01-05

  • Lorsque "severity" est égal à 0, 1, 2 ou 3, le mappage de "security_result.severity" est modifié de "LOW" à "HIGH".
  • Lorsque "severity" est défini sur 6, la valeur "HIGH" a été remplacée par "LOW" pour la mise en correspondance de "security_result.severity".
  • Lorsque la valeur de "severity" est 7, la valeur de "security_result.severity" est modifiée de "HIGH" (ÉLEVÉ) à "INFORMATIONAL".
  • Ajout de "drop" pour les journaux qui ne sont pas au format JSON.
  • Ajout de "on_error" à la mise en correspondance de date "timestampRFC3339Nano".

2022-10-07

  • Analyseur nouvellement créé.

Vous avez encore besoin d'aide ? Obtenez des réponses de membres de la communauté et de professionnels Google SecOps.