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 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
- 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
Installation de Windows
- 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 ce guide d'installation.
Configurer l'agent Bindplane pour ingérer Syslog et l'envoyer à Google SecOps
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).
- Recherchez le fichier
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
- 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 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 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 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.