Collecter les journaux de flux CrowdStrike Falcon
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 remplir les conditions suivantes :
- Instance Google Security Operations
- Windows 2016 ou 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.
- Accès privilégié à la console CrowdStrike Falcon
- Obtenir les identifiants de l'API pour Falcon Stream (ID client et code secret client)
Obtenir le fichier d'authentification d'ingestion Google SecOps
- Connectez-vous à la console Google SecOps.
- Accédez à Paramètres du SIEM > Agents de collecte.
- 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
- Connectez-vous à la console Google SecOps.
- Accédez à Paramètres SIEM> Profil.
- Copiez et enregistrez le numéro client de la section Informations sur l'organisation.
Installer l'agent Bindplane
Installez l'agent Bindplane sur votre système d'exploitation Windows ou Linux en suivant les instructions ci-dessous.
Installation de fenêtres
- Ouvrez l'invite de commandes ou PowerShell en tant qu'administrateur.
Exécutez la commande suivante :
msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
Installation de Linux
- Ouvrez un terminal avec les droits root ou sudo.
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
Pour plus d'options d'installation, consultez le guide d'installation.
Configurer l'agent Bindplane pour ingérer Syslog et l'envoyer à Google SecOps
- Accédez au fichier de configuration :
- Trouvez le fichier
config.yaml
. Il se trouve généralement 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).
- Trouvez le fichier
Modifiez le fichier
config.yaml
comme suit :receivers: udplog: # Replace the port and IP address as required listen_address: "0.0.0.0:514" exporters: chronicle/chronicle_w_labels: compression: gzip # Adjust the path to the credentials file you downloaded in Step 1 creds_file_path: '/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 log_type: 'CS_STREAM' raw_log_field: body ingestion_labels: service: pipelines: logs/source0__chronicle_w_labels-0: receivers: - udplog 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
- Connectez-vous à CrowdStrike Falcon avec un compte privilégié.
- Accédez à Menu > Assistance.
- Cliquez sur Clients API > Sélectionner les clés.
- Cliquez sur Ajouter un client API.
- Dans la section Champs d'application de l'API, sélectionnez Flux d'événements, puis activez l'option Lecture.
- Cliquez sur Ajouter.
- Copiez et enregistrez l'ID client, le code secret du client et l'URL de base.
Installer le connecteur Falcon SIEM
- Téléchargez le package d'installation RPM pour votre système d'exploitation.
Installation du package :
- Système d'exploitation CentOS :
sudo rpm -Uvh <installer package>
- Système d'exploitation Ubuntu :
sudo dpkg -i <installer package>
Répertoires d'installation par défaut :
- Connecteur Falcon SIEM –
/opt/crowdstrike/
- Service :
/etc/init.d/cs.falconhoseclientd/
- Connecteur Falcon SIEM –
Configurer le connecteur SIEM pour transférer les événements vers Bindplane
- Connectez-vous à la machine sur laquelle le connecteur SIEM est installé en tant qu'utilisateur
sudo
. - Accédez au répertoire
/opt/crowdstrike/etc/
. cs.falconhoseclient.leef.cfg
a été renommécs.falconhoseclient.cfg
.- Le connecteur SIEM utilise la configuration
cs.falconhoseclient.cfg
par défaut.
- Le connecteur SIEM utilise la configuration
- Modifiez le fichier
cs.falconhoseclient.cfg
et modifiez ou définissez les paramètres suivants :api_url:
: URL de base Crowdstrike Falcon que vous avez copiée à l'étape précédente.app_id:
: toute chaîne servant d'identifiant pour la connexion à l'API Falcon Streaming (par exemple, définissez-la surapp_id: SECOPS-LEEF
).client_id:
: valeurclient_id
copiée à l'étape précédente.client_secret:
: valeurclient_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.
- Enregistrez le fichier
cs.falconhoseclient.cfg
. 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
(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
(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
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é en tant que 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.