Collecter les journaux de flux CrowdStrike Falcon

Compatible avec:

Ce document explique comment collecter les journaux CrowdStrike Falcon Stream à l'aide de Bindplane. L'analyseur extrait les paires clé-valeur et les met en correspondance avec le modèle de données unifié (UDM), gère différents séparateurs et enrichit les données avec un contexte supplémentaire, comme la gravité et les types d'événements. Il effectue également des transformations spécifiques pour certains types et champs d'événements, tels que les connexions utilisateur et les résultats de sécurité.

Avant de commencer

  • Assurez-vous de disposer d'une instance Google Security Operations.
  • Assurez-vous d'utiliser Windows 2016 ou une version ultérieure, ou un hôte Linux avec systemd.
  • Si vous exécutez l'application derrière un proxy, assurez-vous que les ports du pare-feu sont ouverts.
  • Assurez-vous d'avoir un accès privilégié à la console CrowdStrike Falcon.
  • Obtenez les identifiants de l'API pour Falcon Stream (ID client et code secret client).

Obtenir le fichier d'authentification d'ingestion Google SecOps

  1. Connectez-vous à la console Google SecOps.
  2. Accédez à Paramètres du SIEM > Agents de collecte.
  3. Téléchargez le fichier d'authentification d'ingestion. Enregistrez le fichier de manière sécurisée sur le système sur lequel Bindplane sera installé.

Obtenir le numéro client Google SecOps

  1. Connectez-vous à la console Google SecOps.
  2. Accédez à Paramètres du SIEM > Profil.
  3. Copiez et sauvegardez le numéro client dans la section Détails de l'organisation.

Installer l'agent Bindplane

Installation de Windows

  1. Ouvrez l'invite de commande ou PowerShell en tant qu'administrateur.
  2. Exécutez la commande suivante :

    msiexec /i "https://github.com/observIQ/Bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
    

Installation de Linux

  1. Ouvrez un terminal avec des droits root ou sudo.
  2. Exécutez la commande suivante :

    sudo sh -c "$(curl -fsSlL https://github.com/observiq/Bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
    

Autres ressources d'installation

Configurer l'agent Bindplane pour qu'il ingère les journaux Syslog et les envoie à Google SecOps

  1. Accédez au fichier de configuration:

    • Recherchez le fichier config.yaml. En règle générale, il se trouve dans le répertoire /etc/Bindplane-agent/ sous Linux ou dans le répertoire d'installation sous Windows.
    • Ouvrez le fichier à l'aide d'un éditeur de texte (nano, vi ou Bloc-notes, par exemple).
  2. Modifiez le fichier config.yaml comme suit :

    receivers:
        tcplog:
            # Replace the port and IP address as required
            listen_address: "0.0.0.0:54525"
    
    exporters:
        chronicle/chronicle_w_labels:
            compression: gzip
            # Adjust the path to the credentials file you downloaded in Step 1
            creds: '/path/to/ingestion-authentication-file.json'
            # Replace with your actual customer ID from Step 2
            customer_id: <customer_id>
            endpoint: malachiteingestion-pa.googleapis.com
            # Add optional ingestion labels for better organization
            ingestion_labels:
                log_type: SYSLOG
                namespace: cs_stream
                raw_log_field: body
    
    service:
        pipelines:
            logs/source0__chronicle_w_labels-0:
                receivers:
                    - tcplog
                exporters:
                    - chronicle/chronicle_w_labels
    
    
  • Remplacez le port et l'adresse IP dans votre infrastructure si nécessaire.
  • Remplacez <customer_id> par le numéro client réel.
  • Remplacez /path/to/ingestion-authentication-file.json par le chemin d'accès où le fichier d'authentification a été enregistré dans la section Obtenir le fichier d'authentification d'ingestion Google SecOps.

Redémarrer l'agent Bindplane pour appliquer les modifications

  • Pour redémarrer l'agent Bindplane sous Linux, exécutez la commande suivante:

    sudo systemctl restart Bindplane-agent
    
  • Pour redémarrer l'agent Bindplane sous Windows, vous pouvez utiliser la console Services ou saisir la commande suivante:

    net stop BindplaneAgent && net start BindplaneAgent
    

Configurer et obtenir une clé API CrowdStrike

  1. Connectez-vous à CrowdStrike Falcon avec un compte privilégié.
  2. Accédez à Menu > Assistance.
  3. Cliquez sur Clients d'API > KeysSelect.
  4. Cliquez sur Ajouter un client API.
  5. Dans la section Champs d'application de l'API, sélectionnez Flux d'événements, puis activez l'option Lecture.
  6. Cliquez sur Ajouter.
  7. Copiez et enregistrez l'ID client, le code secret du client et l'URL de base.

Installer le connecteur Falcon SIEM

  1. Téléchargez le package d'installation RPM pour votre système d'exploitation.
  2. Installation du package:

    • Système d'exploitation CentOS:

      sudo rpm -Uvh <installer package>
      
    • Système d'exploitation Ubuntu:

      sudo dpkg -i <installer package>
      
  3. Répertoires d'installation par défaut:

    • Connecteur SIEM Falcon : /opt/crowdstrike/.
    • Service : /etc/init.d/cs.falconhoseclientd/.

Configurer le connecteur SIEM pour transférer les événements vers Bindplane

  1. Connectez-vous à la machine avec le connecteur SIEM installé en tant qu'utilisateur sudo.
  2. Accédez au répertoire /opt/crowdstrike/etc/.
  3. Remplacement du nom cs.falconhoseclient.leef.cfg par cs.falconhoseclient.cfg.
    • Le connecteur SIEM utilise la configuration cs.falconhoseclient.cfg par défaut.
  4. Modifiez le fichier cs.falconhoseclient.cfg et modifiez ou définissez les paramètres suivants :
    • api_url: : votre URL de base CrowdStrike Falcon copiée à l'étape précédente.
    • app_id: : toute chaîne utilisée comme identifiant pour la connexion à l'API Falcon Streaming (par exemple, définie sur app_id: SECOPS-LEEF).
    • client_id: : valeur client_id copiée à l'étape précédente.
    • client_secret: : valeur client_secret copiée à l'étape précédente.
    • send_to_syslog_server: true : activez le transfert vers le serveur Syslog.
    • host: : adresse IP ou nom d'hôte de l'agent Bindplane.
    • port: : port de l'agent Bindplane.
  5. Enregistrez le fichier cs.falconhoseclient.cfg.
  6. Démarrez le service du connecteur SIEM:

    • Système d'exploitation CentOS:

      sudo service cs.falconhoseclientd start
      
    • Système d'exploitation Ubuntu 16.04 ou version ultérieure:

      sudo systemctl start cs.falconhoseclientd.service
      
  7. Facultatif: Arrêtez le service Connecteur SIEM:

    • Système d'exploitation CentOS:

      sudo service cs.falconhoseclientd stop
      
    • Système d'exploitation Ubuntu 16.04 ou version ultérieure:

      sudo systemctl stop cs.falconhoseclientd.service
      
  8. Facultatif: redémarrez le service du connecteur SIEM:

    • Système d'exploitation CentOS:

      sudo service cs.falconhoseclientd restart
      
    • Système d'exploitation Ubuntu 16.04 ou version ultérieure:

      sudo systemctl restart cs.falconhoseclientd.service
      

Tableau de mappage UDM

Champ de journal Mappage UDM Logique
cat security_result.category_details La valeur du champ cat est mappée directement sur le champ security_result.category_details.
commandLine target.process.command_line La valeur du champ commandLine est mappée directement sur le champ target.process.command_line.
cs1 security_result.summary Si cs1Label est "incidentType", la valeur de cs1 est mappée sur security_result.summary. Sinon, il est mappé en tant que paire clé-valeur dans security_result.detection_fields avec la clé de cs1Label et la valeur de cs1.
cs1Label security_result.detection_fields.key Utilisé comme clé dans security_result.detection_fields lorsque cs1 n'est pas un type d'incident.
cs2 security_result.detection_fields.value Mappé en tant que paire clé-valeur dans security_result.detection_fields avec la clé de cs2Label et la valeur de cs2.
cs2Label security_result.detection_fields.key Utilisé comme clé dans security_result.detection_fields avec cs2.
cs3 security_result.detection_fields.value Mappé en tant que paire clé-valeur dans security_result.detection_fields avec la clé de cs3Label et la valeur de cs3.
cs3Label security_result.detection_fields.key Utilisé comme clé dans security_result.detection_fields avec cs3.
cs4 security_result.about.url Si cs4Label est "falconHostLink", la valeur de cs4 est mappée sur security_result.about.url. Sinon, il est mappé en tant que paire clé-valeur dans security_result.detection_fields avec la clé de cs4Label et la valeur de cs4.
cs4Label security_result.detection_fields.key Utilisé comme clé dans security_result.detection_fields lorsque cs4 n'est pas un falconHostLink.
description metadata.description La valeur du champ description est mappée directement sur le champ metadata.description. Si elle est vide, incidentDescription, msg ou serviceName sont utilisés à la place.
devTime metadata.event_timestamp La valeur du champ devTime est analysée et mappée sur le champ metadata.event_timestamp.
deviceCustomDate1 metadata.event_timestamp Si devTime n'est pas présent, la valeur du champ deviceCustomDate1 est analysée et mappée sur le champ metadata.event_timestamp.
domain principal.administrative_domain Extrait du champ userName à l'aide d'une expression régulière et mappé sur principal.administrative_domain.
duser principal.user.userid Si elle est présente, la valeur de duser écrase le champ usrName, puis est utilisée pour renseigner les champs utilisateur.
endpointName security_result.detection_fields.value Mappé en tant que paire clé-valeur dans security_result.detection_fields avec la clé "endpointName".
eventType metadata.product_event_type La valeur du champ eventType est mappée directement sur le champ metadata.product_event_type.
falconHostLink security_result.about.url La valeur du champ falconHostLink est mappée directement sur le champ security_result.about.url.
filePath target.process.file.full_path La valeur du champ filePath est mappée directement sur le champ target.process.file.full_path.
identityProtectionIncidentId security_result.detection_fields.value Mappé en tant que paire clé-valeur dans security_result.detection_fields avec la clé "identityProtectionIncidentId".
incidentDescription metadata.description Si description est vide, la valeur du champ incidentDescription est mappée sur le champ metadata.description.
incidentType security_result.summary La valeur du champ incidentType est mappée directement sur le champ security_result.summary.
log_type metadata.log_type La valeur du champ log_type est mappée directement sur le champ metadata.log_type.
msg metadata.description Si description et incidentDescription sont vides, la valeur du champ msg est mappée sur le champ metadata.description.
numbersOfAlerts security_result.detection_fields.value Mappé en tant que paire clé-valeur dans security_result.detection_fields avec la clé "numbersOfAlerts".
numberOfCompromisedEntities security_result.detection_fields.value Mappé en tant que paire clé-valeur dans security_result.detection_fields avec la clé "numberOfCompromisedEntities".
product metadata.product_name La valeur du champ product est mappée directement sur le champ metadata.product_name.
resource target.resource.name La valeur du champ resource est mappée directement sur le champ target.resource.name.
serviceName target.application La valeur du champ serviceName est mappée directement sur le champ target.application. Également utilisé comme solution de remplacement pour metadata.description.
severityName security_result.severity La valeur du champ severityName est mappée sur le champ security_result.severity après avoir été mise en majuscules. La logique de mappage inclut des conversions spécifiques pour différents noms de gravité.
sha256 target.file.sha256 La valeur du champ sha256 est mappée directement sur le champ target.file.sha256.
src principal.ip La valeur du champ src est mappée directement sur le champ principal.ip.
srcMAC principal.mac La valeur du champ srcMAC est mappée directement sur le champ principal.mac après avoir remplacé les traits d'union par des deux-points.
state security_result.detection_fields.value Mappé en tant que paire clé-valeur dans security_result.detection_fields avec la clé "state".
success security_result.action Si success est défini sur "true", security_result.action est défini sur "ALLOW". Si success est défini sur "false", security_result.action est défini sur "BLOCK".
userName principal.user.userid Si usrName n'est pas présent, la valeur du champ userName est utilisée pour renseigner les champs utilisateur. Le domaine est extrait, le cas échéant.
usrName principal.user.userid/target.user.userid Si ce paramètre est présent, la valeur du champ usrName est mappée sur principal.user.userid ou target.user.userid, en fonction de eventType. S'il s'agit d'une adresse e-mail, elle est également ajoutée au champ email_addresses correspondant.
vendor metadata.vendor_name La valeur du champ vendor est mappée directement sur le champ metadata.vendor_name.
version metadata.product_version La valeur du champ version est mappée directement sur le champ metadata.product_version.
(Logique de l'analyseur) extensions.auth.mechanism Défini sur "USERNAME_PASSWORD" si eventType est "saml2Assert" ou "twoFactorAuthenticate".
(Logique de l'analyseur) extensions.auth.type Définissez-le sur "AUTHTYPE_UNSPECIFIED" si eventType est "assert" ou "userAuthenticate".
(Logique de l'analyseur) metadata.event_timestamp L'horodatage du champ collection_time ou timestamp du journal brut est utilisé comme code temporel de l'événement.
(Logique de l'analyseur) metadata.event_type Déterminé en fonction de eventType et d'autres champs. La valeur par défaut est "GENERIC_EVENT". Vous pouvez la remplacer par "USER_LOGIN", "GROUP_MODIFICATION", "GROUP_DELETION", "SERVICE_STOP", "SERVICE_START" ou "USER_UNCATEGORIZED".
(Logique de l'analyseur) target.resource.type Défini sur "GROUP" si eventType est "remove_group", "update_group" ou "delete_group".

Modifications

2025-01-10

Amélioration :

  • Lorsque "OperationBlocked" est défini sur "true", "security_result.action" est mappé sur "BLOCK".
  • Lorsque "OperationBlocked" est défini sur "false", "security_result.action" est mappé sur "ALLOW".
  • Lorsque "event_type" est "IdentityProtectionEvent", "event_data.IncidentDescription" est mappé sur "security_result.summary".
  • Lorsque "event_type" est "IdentityProtectionEvent", mappez "event_data.SeverityName" sur "security_result.severity".

2025-01-09

Amélioration :

  • "event_data.Technique" a été mappé sur "security_result.rule_name".
  • "event_data.CommandLine" a été mappé sur "target.process.command_line".
  • Si "event_data.IOCType" est "ipv4", mappez "event_data.IOCValue" sur "target.ip" et "target.asset.ip".
  • Si "event_data.IOCType" est "hash_sha256", mappez "event_data.IOCValue" sur "target.file.sha256".

2024-12-12

Amélioration :

  • Mappage de "event.SeverityName" sur "security_result.severity".
  • "event.Description" a été mappé sur "security_result.summary".
  • "security_result.action" mappé en fonction de "event.PatternDispositionFlags.OperationBlocked".

2024-10-29

Amélioration :

  • Prise en charge du format JSON pour les journaux.
  • Mappage de "request" sur "network.http.referral_url".
  • Mappage de "networkDetectionType" sur "security_result.detection_fields".

2022-07-18

Amélioration :

  • Ajout du mappage suivant pour les journaux au format LEEF:
  • Le champ "version" a été mappé à "metadata.product_version".
  • Les champs "usrName" et "userName" à "principal.user.email_addresses" s'il s'agit d'une adresse e-mail, sinon mappés sur "principal.user.userid".
  • Le champ "severityName" a été mappé à "security_result.severity".
  • Le champ "cat" a été mappé sur "security_result.category_details".
  • Le champ "incidentType" a été mappé sur "security_result.summary".
  • Le champ "falconHostLink" a été mappé sur "security_result.about.url".
  • Le champ "numberOfCompromisedEntities" a été mappé sur "security_result.detection_fields[n]".
  • Le champ "identityProtectionIncidentId" a été mappé sur "security_result.detection_fields[n]".
  • Le champ "numbersOfAlerts" a été mappé sur "security_result.detection_fields[n]".
  • Le champ "state" a été mappé sur "security_result.detection_fields[n]".
  • Ajout du mappage suivant pour les journaux au format CEF:
  • Le champ "version" a été mappé à "metadata.product_version".
  • Le champ "deviceCustomDate1" a été mappé sur "metadata.event_type".
  • Le champ "msg" a été mappé sur "metadata.description".
  • Le champ "cs1" est mappé sur "security_result.summary" si la valeur de "cs1Label" est "incidentType", sinon il est mappé sur "security_result.detection_fields[n]".
  • Le champ "cs2" a été mappé sur "security_result.detection_fields[n]".
  • Le champ "cs3" a été mappé sur "security_result.detection_fields[n]".
  • Le champ "cs1" est mappé sur "security_result.about.url" si la valeur de "cs4Label" est "falconHostLink", sinon il est mappé sur "security_result.detection_fields[n]".
  • Le champ "cn1" a été mappé sur "security_result.detection_fields[n]".
  • Le champ "cn2" a été mappé sur "security_result.detection_fields[n]".
  • Le champ "cn3" a été mappé sur "security_result.detection_fields[n]".
  • Le champ "duser" est mappé sur "principal.user.email_addresses" s'il s'agit d'une adresse e-mail, sinon sur "principal.user.userid".

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