Collecter les journaux de flux CrowdStrike Falcon

Compatible avec :

Ce document explique comment collecter les journaux de flux CrowdStrike Falcon à l'aide de Bindplane. L'analyseur extrait les paires clé-valeur et les mappe au modèle de données unifié (UDM), en gérant différents délimiteurs et en enrichissant les données avec un contexte supplémentaire tel que la gravité et les types d'événements. Il effectue également des transformations spécifiques pour certains types d'événements et de champs, 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 le programme derrière un proxy, assurez-vous que les ports du pare-feu sont ouverts.
  • Assurez-vous de disposer d'un accès privilégié à la console CrowdStrike Falcon.
  • Obtenez les identifiants de l'API pour Falcon Stream (ID client et code secret du 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 l'ID client Google SecOps

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

Installer l'agent BindPlane

Installation de Windows

  1. Ouvrez l'invite de commandes 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 les 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
    

Ressources d'installation supplémentaires

Configurer l'agent Bindplane pour ingérer Syslog et l'envoyer à 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 (par exemple, nano, vi ou le Bloc-notes).
  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 selon les besoins de votre infrastructure.
  • Remplacez <customer_id> par le numéro client réel.
  • Mettez à jour /path/to/ingestion-authentication-file.json en indiquant le chemin d'accès où le fichier d'authentification a été enregistré dans la section Obtenir le fichier d'authentification pour l'ingestion Google SecOps.

Redémarrez 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 API > Sélectionner les clés.
  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 Falcon SIEM – /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 sur laquelle le connecteur SIEM est installé en tant qu'utilisateur sudo.
  2. Accédez au répertoire /opt/crowdstrike/etc/.
  3. cs.falconhoseclient.leef.cfg a été renommé 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: : URL de base CrowdStrike Falcon copiée à l'étape précédente.
    • app_id: : n'importe quelle chaîne servant d'identifiant pour la connexion à l'API Falcon Streaming. Par exemple, définissez-la 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 l'envoi push au 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 SIEM Connector :

    • 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 SIEM Connector :

    • 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 SIEM Connector :

    • 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
      

Table de mappage UDM

Champ de journal Mappage UDM Logique
cat security_result.category_details La valeur du champ cat est directement mappée au champ security_result.category_details.
commandLine target.process.command_line La valeur du champ commandLine est directement mappée au champ target.process.command_line.
cs1 security_result.summary Si cs1Label est "incidentType", la valeur de cs1 est mappée à security_result.summary. Dans le cas contraire, elle est mappée 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ée 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ée comme clé dans security_result.detection_fields avec cs3.
cs4 security_result.about.url Si cs4Label est défini sur "falconHostLink", la valeur de cs4 est mappée sur security_result.about.url. Dans le cas contraire, elle est mappée 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 directement mappée au 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 au 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 au champ metadata.event_timestamp.
domain principal.administrative_domain Extrait du champ userName à l'aide d'une expression régulière et mis en correspondance avec principal.administrative_domain.
duser principal.user.userid Si elle est présente, la valeur de duser remplace le champ usrName et est ensuite utilisée pour remplir 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 directement mappée au champ metadata.product_event_type.
falconHostLink security_result.about.url La valeur du champ falconHostLink est directement mappée au champ security_result.about.url.
filePath target.process.file.full_path La valeur du champ filePath est directement mappée au 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 au champ metadata.description.
incidentType security_result.summary La valeur du champ incidentType est directement mappée au champ security_result.summary.
log_type metadata.log_type La valeur du champ log_type est directement mappée au 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é sous forme de paire clé/valeur dans security_result.detection_fields avec la clé "numbersOfAlerts".
numberOfCompromisedEntities security_result.detection_fields.value Mappé sous forme de paire clé-valeur dans security_result.detection_fields avec la clé "numberOfCompromisedEntities".
product metadata.product_name La valeur du champ product est directement mappée au champ metadata.product_name.
resource target.resource.name La valeur du champ resource est directement mappée au champ target.resource.name.
serviceName target.application La valeur du champ serviceName est directement mappée au champ target.application. Également utilisé comme solution de repli pour metadata.description.
severityName security_result.severity La valeur du champ severityName est mappée au 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 directement mappée au champ target.file.sha256.
src principal.ip La valeur du champ src est directement mappée au champ principal.ip.
srcMAC principal.mac La valeur du champ srcMAC est directement mappée au champ principal.mac après remplacement des tirets 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 remplir les champs utilisateur. Le domaine est extrait s'il est présent.
usrName principal.user.userid/target.user.userid Si elle est présente, 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 directement mappée au champ metadata.vendor_name.
version metadata.product_version La valeur du champ version est directement mappée au champ metadata.product_version.
(Logique de l'analyseur) extensions.auth.mechanism Définissez-le 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 défini sur "assert" ou "userAuthenticate".
(Logique de l'analyseur) metadata.event_timestamp Le code temporel 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éfinissez la valeur sur "GROUP" si eventType est "remove_group", "update_group" ou "delete_group".

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