Collecter les journaux Cybereason EDR
Ce document explique comment ingérer des journaux Cybereason EDR dans Google Security Operations à l'aide de l'agent Bindplane.
Cybereason EDR (Endpoint Detection and Response) est une plate-forme de cybersécurité qui détecte les menaces avancées sur les points de terminaison et y répond. Il identifie les opérations malveillantes (Malops), c'est-à-dire les chaînes d'attaque corrélées qui relient les activités suspectes en récits d'attaque complets. Il permet aux analystes de sécurité de visualiser la progression des menaces, les machines affectées, les utilisateurs compromis et les connexions réseau.
Avant de commencer
Assurez-vous de remplir les conditions suivantes :
- Une instance Google SecOps
- Windows Server 2016 ou version ultérieure, ou hôte Linux avec
systemd - Connectivité réseau entre l'agent Bindplane et le serveur de détection Cybereason
- Si vous exécutez l'agent derrière un proxy, assurez-vous que les ports de pare-feu sont ouverts conformément aux exigences de l'agent Bindplane.
- Accès à la console de gestion Cybereason avec le rôle d'administrateur système
- Plate-forme Cybereason version 20.1 ou ultérieure
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 l'agent 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" /quietAttendez la fin de l'installation.
Vérifiez l'installation en exécutant la commande suivante :
sc query observiq-otel-collectorL'état du service doit être RUNNING (EN COURS D'EXÉCUTION).
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.shAttendez la fin de l'installation.
Vérifiez l'installation en exécutant la commande suivante :
sudo systemctl status observiq-otel-collectorL'état du service doit être active (running).
Ressources d'installation supplémentaires
Pour obtenir d'autres options d'installation et de dépannage, consultez le guide d'installation de l'agent Bindplane.
Configurer l'agent Bindplane pour ingérer syslog et l'envoyer à Google SecOps
Localiser le fichier de configuration
Linux :
sudo nano /etc/bindplane-agent/config.yamlWindows :
notepad "C:\Program Files\observIQ OpenTelemetry Collector\config.yaml"
Modifiez le fichier de configuration
Remplacez l'intégralité du contenu de
config.yamlpar la configuration suivante :receivers: tcplog: listen_address: "0.0.0.0:514" exporters: chronicle/cybereason: compression: gzip creds_file_path: '/etc/bindplane-agent/ingestion-auth.json' customer_id: 'your-customer-id' endpoint: malachiteingestion-pa.googleapis.com log_type: CYBEREASON_EDR raw_log_field: body service: pipelines: logs/cybereason_to_chronicle: receivers: - tcplog exporters: - chronicle/cybereasonRemplacez les espaces réservés suivants :
Configuration du récepteur :
listen_address: adresse IP et port à écouter :0.0.0.0:514pour écouter sur toutes les interfaces sur le port 514 (nécessite l'accès root sur Linux)0.0.0.0:1514pour écouter sur un port non privilégié (recommandé pour Linux non root)
Options de type de récepteur :
tcplogpour syslog TCP (requis pour le transfert syslog Cybereason)
Configuration de l'exportateur :
creds_file_path: chemin d'accès complet au fichier d'authentification de l'ingestion Google SecOps :- Linux :
/etc/bindplane-agent/ingestion-auth.json - Windows :
C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json
- Linux :
customer_id: ID client Google SecOpsendpoint: URL du point de terminaison régional :- États-Unis :
malachiteingestion-pa.googleapis.com - Europe :
europe-malachiteingestion-pa.googleapis.com - Asie :
asia-southeast1-malachiteingestion-pa.googleapis.com - Pour obtenir la liste complète, consultez Points de terminaison régionaux.
- États-Unis :
Enregistrez le fichier de configuration.
Après avoir modifié le fichier, enregistrez-le :
- Linux : appuyez sur
Ctrl+O, puis surEnter, puis surCtrl+X. - Windows : cliquez sur Fichier > Enregistrer.
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 observiq-otel-collectorVérifiez que le service est en cours d'exécution :
sudo systemctl status observiq-otel-collectorRecherchez les erreurs dans les journaux :
sudo journalctl -u observiq-otel-collector -f
Pour redémarrer l'agent Bindplane sous Windows :
Choisissez l'une des options suivantes :
Invite de commandes ou PowerShell en tant qu'administrateur :
net stop observiq-otel-collector && net start observiq-otel-collectorConsole Services :
- Appuyez sur
Win+R, saisissezservices.msc, puis appuyez sur Entrée. - Localisez observIQ OpenTelemetry Collector.
- Effectuez un clic droit, puis sélectionnez Redémarrer.
- Appuyez sur
Vérifiez que le service est en cours d'exécution :
sc query observiq-otel-collectorRecherchez les erreurs dans les journaux :
type "C:\Program Files\observIQ OpenTelemetry Collector\log\collector.log"
Configurer le transfert syslog Cybereason EDR
Cybereason envoie les événements MalOp et d'audit utilisateur au format CEF (Common Event Format) via syslog. La configuration du transfert syslog nécessite une demande au service d'assistance technique Cybereason.
Demander à l'assistance technique Cybereason de transférer les journaux système
- Connectez-vous à la console de gestion Cybereason.
- Contactez l'assistance technique Cybereason via le portail d'assistance Cybereason.
- Envoyez une demande de configuration de transfert Syslog en fournissant les informations suivantes :
- Adresse IP du serveur Syslog : adresse IP de l'hôte de l'agent Bindplane (par exemple,
192.168.1.100). - Port du serveur Syslog : port correspondant à l'agent Bindplane
listen_address(par exemple,514). - Protocole : TCP (syslog TCP non chiffré).
- Types de journaux : demandez le transfert des types de journaux suivants :
- Syslog MalOp : alertes de sécurité et événements d'opérations malveillantes
- Syslog d'audit des utilisateurs : activité des utilisateurs et actions administratives
- Adresse IP du serveur Syslog : adresse IP de l'hôte de l'agent Bindplane (par exemple,
Attendez que l'assistance technique Cybereason confirme la configuration du transfert Syslog.
Configurer des règles de pare-feu
Assurez-vous que les règles de pare-feu suivantes sont en place :
Direction Protocole Port Source Destination Sortant TCP 514 Serveur de détection Cybereason Hôte de l'agent Bindplane
Alternative : Cybereason CEF Forwarder
Si l'assistance technique Cybereason ne parvient pas à configurer le transfert syslog direct, vous pouvez utiliser l'outil Cybereason CEF Forwarder :
- Téléchargez l'image Docker de l'outil de transfert CEF Cybereason auprès de l'assistance technique Cybereason.
- Créez ou modifiez le fichier de configuration dans
cybereason-forwarders/config/config.json. Configurez les paramètres suivants :
{ "host": "<BINDPLANE_AGENT_IP>", "port": 514 }Remplacez
<BINDPLANE_AGENT_IP>par l'adresse IP de l'hôte de l'agent Bindplane.Créez et exécutez le conteneur Docker :
docker build -t cybereason-cef-forwarder . docker run -d --name cybereason-forwarder cybereason-cef-forwarder
Types d'événements Syslog
Cybereason génère des messages syslog CEF pour les catégories d'événements suivantes :
| Catégorie d'événement | Description |
|---|---|
| MalOp created (Opération malveillante créée) | Nouvelle opération malveillante détectée |
| MalOp mis à jour | L'état ou les détails d'une opération malveillante existante ont changé |
| Opération malveillante clôturée | Opération malveillante résolue ou clôturée par un analyste |
| Logiciel malveillant détecté | Logiciel malveillant identifié sur un point de terminaison |
| Processus suspect | Activité de processus suspecte détectée |
| Connexion réseau | Connexion réseau suspecte identifiée |
| Connexion de l'utilisateur | Événements d'authentification des utilisateurs |
| Isolation des machines | Point de terminaison isolé du réseau ou reconnecté à celui-ci |
| Modifications des règles | Modifications des règles de sécurité |
Vérifier le transfert Syslog
- Une fois que l'assistance technique Cybereason a confirmé la configuration syslog, effectuez une action de test dans la console Cybereason (par exemple, affichez une MalOp ou isolez une machine de test).
- Consultez les journaux de l'agent Bindplane pour les messages syslog entrants :
- Linux :
sudo journalctl -u observiq-otel-collector -f - Windows :
type "C:\Program Files\observIQ OpenTelemetry Collector\log\collector.log"
- Linux :
Vérifiez que les messages au format CEF s'affichent dans les journaux, par exemple :
CEF:0|Cybereason|Cybereason|2.0|MalOp|MalOp Created|8|cs1=MALOP_ID_HERE dvchost=server01.company.com suser=admin@company.com
Table de mappage UDM
| Champ de journal | Mappage UDM | Logique |
|---|---|---|
| detectionName_label | additional.fields | Mappé en tant que paire clé/valeur |
| sensorId_label | additional.fields | Mappé en tant que paire clé/valeur |
| état | metadata.description | Si la valeur n'est pas vide |
| log_description | metadata.description | Solution de repli si l'état est vide |
| (format CEF) | metadata.event_type | Défini sur GENERIC_EVENT pour les journaux CEF |
| event_type | metadata.event_type | Définissez sur PROCESS_OPEN si la valeur est "PROCESS_OPEN", sur NETWORK_CONNECTION si la valeur est "NETWORK_CONNECTION" ou sur SCAN_HOST si la valeur est "MALWARE". |
| has_principal, has_target | metadata.event_type | Définissez sur SCAN_FILE si has_principal et has_target sont tous les deux définis sur "true". |
| has_principal | metadata.event_type | Définissez sur STATUS_UPDATE si has_principal est défini sur "true" uniquement. |
| has_user | metadata.event_type | Définissez sur USER_UNCATEGORIZED si has_user est défini sur "true" dans le contexte Malop. |
| (par défaut) | metadata.event_type | Définissez-le sur GENERIC_EVENT dans le cas contraire. |
| LogType | metadata.product_event_type | Si la valeur n'est pas vide |
| malop_data.simpleValues.elementDisplayName.values.0 | metadata.product_event_type | Solution de repli si LogType est vide |
| type | metadata.product_event_type | Action de remplacement |
| prod_event, prod_event2 | metadata.product_event_type | Concaténé sous la forme prod_event - prod_event2 |
| malop_process.guidString | metadata.product_log_id | Pour le type d'événement PROCESS_OPEN |
| malop_connection.guidString | metadata.product_log_id | Pour le type d'événement NETWORK_CONNECTION |
| guid | metadata.product_log_id | Pour les types d'événements MALWARE ou Malop |
| (statique) | metadata.product_version | Définissez-le sur "2.0" au départ. |
| Sensor.version | metadata.product_version | Remplace "2.0" si présent |
| malop_url | metadata.url_back_to_product | Mappé directement |
| (statique) | metadata.vendor_name | Défini sur "Cybereason" |
| direction | network.direction | Mappé directement |
| malop_connection.simpleValues.transportProtocol.values.0 | network.ip_protocol | Mappé directement |
| malop_connection.simpleValues.receivedBytesCount.values.0 | network.received_bytes | Converti en entier non signé |
| malop_connection.simpleValues.transmittedBytesCount.values.0 | network.sent_bytes | Converti en entier non signé |
| Sensor.fqdn | principal.administrative_domain | Mappé directement |
| malop_process.elementValues.ownerMachine.elementValues.0.guid | principal.asset.asset_id | Préfixe "Cybereason :" |
| malop_data.elementValues.affectedMachines.elementValues.0.guid | principal.asset.asset_id | Préfixe "Cybereason:", fallback |
| malop_process.elementValues.ownerMachine.elementValues.0.name | principal.asset.hostname | Mappé directement |
| malop_data.elementValues.affectedMachines.elementValues.0.name | principal.asset.hostname | Action de remplacement |
| machineName | principal.asset.hostname | Action de remplacement |
| hôte | principal.asset.hostname | Action de remplacement |
| dvchost | principal.asset.hostname | Action de remplacement |
| Sensor.fqdn | principal.asset.hostname | Action de remplacement |
| client.ip | principal.asset.ip | Mappé directement |
| Sensor.externalIpAddress | principal.asset.ip | Action de remplacement |
| malop_process.elementValues.ownerMachine.elementValues.0.name | principal.hostname | Mappé directement |
| malop_data.elementValues.affectedMachines.elementValues.0.name | principal.hostname | Action de remplacement |
| machineName | principal.hostname | Action de remplacement |
| hôte | principal.hostname | Action de remplacement |
| dvchost | principal.hostname | Action de remplacement |
| Sensor.fqdn | principal.hostname | Action de remplacement |
| client.ip | principal.ip | Mappé directement |
| Sensor.externalIpAddress | principal.ip | Action de remplacement |
| Sensor.internalIpAddress | principal.nat_ip | Mappé directement |
| Sensor.privateServerIp | principal.nat_ip | Action de remplacement |
| Sensor.osType | principal.platform | Définissez sur WINDOWS si la valeur est "WINDOWS", LINUX si "LINUX", MAC si "MAC". |
| Sensor.osVersionType | principal.platform_version | Mappé directement |
| malop_connection.simpleValues.localPort.values.0 | principal.port | Converti en entier |
| malop_process.simpleValues.commandLine.values.0 | principal.process.command_line | Mappé directement |
| malwareDataModel.filePath | principal.process.command_line | Action de remplacement |
| malop_process.simpleValues.calculatedName.values.0 | principal.process.file.full_path | Mappé directement |
| nom | principal.process.file.full_path | Action de remplacement |
| malop_process.elementValues.parentProcess.elementValues.0.guid | principal.process.parent_process.product_specific_process_id | Préfixe "Cybereason :" |
| malop_process.elementValues.self.elementValues.0.guid | principal.process.pid | Mappé directement |
| malop_process.elementValues.self.elementValues.0.guid | principal.process.product_specific_process_id | Préfixe "Cybereason :" |
| malop_connection.elementValues.ownerProcess.elementValues.0.guid | principal.process.product_specific_process_id | Préfixe "Cybereason:", fallback |
| companyName | principal.user.company_name | Mappé directement |
| malop_process.elementValues.calculatedUser.elementValues.0.name | principal.user.user_display_name | Mappé directement |
| malop_data.elementValues.affectedUsers.elementValues.0.name | principal.user.user_display_name | Action de remplacement |
| malop_connection.elementValues.ownerProcess.user.elementValues.0.name | principal.user.user_display_name | Action de remplacement |
| malop_process.elementValues.calculatedUser.elementValues.0.guid | principal.user.userid | Mappé directement |
| malop_data.elementValues.affectedUsers.elementValues.0.guid | principal.user.userid | Action de remplacement |
| malop_connection.elementValues.ownerProcess.user.elementValues.0.guid | principal.user.userid | Action de remplacement |
| security_result_action | security_result.action | Définissez sur ALLOW, BLOCK ou QUARANTINE en fonction de l'état. |
| is_alert | security_result.alert_state | Définissez sur ALERTING si la valeur est "True". |
| sr_category | security_result.category | Définissez-le sur SOFTWARE_MALICIOUS ou NETWORK_MALICIOUS. |
| query_details | security_result.detection_fields | Mappé en tant que paire clé/valeur |
| affected_machine_count | security_result.detection_fields | Mappé en tant que paire clé/valeur |
| link_to_malop | security_result.detection_fields | Mappé en tant que paire clé/valeur |
| context_label | security_result.detection_fields | Mappé en tant que paire clé/valeur |
| old_state_label | security_result.detection_fields | Mappé en tant que paire clé/valeur |
| new_state_label | security_result.detection_fields | Mappé en tant que paire clé/valeur |
| investigation_label | security_result.detection_fields | Mappé en tant que paire clé/valeur |
| event_id_label | security_result.detection_fields | Mappé en tant que paire clé/valeur |
| malop_activity_type_label | security_result.detection_fields | Mappé en tant que paire clé/valeur |
| malop_suspect_label | security_result.detection_fields | Mappé en tant que paire clé/valeur |
| malop_key_suspicion_label | security_result.detection_fields | Mappé en tant que paire clé/valeur |
| device_custom_date_label | security_result.detection_fields | Mappé en tant que paire clé/valeur |
| device_custom_date2_label | security_result.detection_fields | Mappé en tant que paire clé/valeur |
| device_custom_date3_label | security_result.detection_fields | Mappé en tant que paire clé/valeur |
| guid_label | security_result.detection_fields | Mappé en tant que paire clé/valeur |
| displayName_label | security_result.detection_fields | Mappé en tant que paire clé/valeur |
| pylumId_label | security_result.detection_fields | Mappé en tant que paire clé/valeur |
| connected_label | security_result.detection_fields | Mappé en tant que paire clé/valeur |
| isolated_label | security_result.detection_fields | Mappé en tant que paire clé/valeur |
| osType_label | security_result.detection_fields | Mappé en tant que paire clé/valeur |
| admin_label | security_result.detection_fields | Mappé en tant que paire clé/valeur |
| domainUser_label | security_result.detection_fields | Mappé en tant que paire clé/valeur |
| localSystem_label | security_result.detection_fields | Mappé en tant que paire clé/valeur |
| description | security_result.description | Concaténé avec decision_feature, malop_status, privileges, passwordAgeDays, elementType, status, score, detectionValue, detectionValueType, detectionEngine |
| decision_feature | security_result.description | Concaténé dans la description |
| malop_status | security_result.description | Concaténé dans la description |
| privilèges | security_result.description | Concaténé dans la description |
| passwordAgeDays | security_result.description | Concaténé dans la description |
| elementType | security_result.description | Concaténé dans la description |
| état | security_result.description | Concaténé dans la description |
| score | security_result.description | Concaténé dans la description |
| detectionValue | security_result.description | Concaténé dans la description |
| detectionValueType | security_result.description | Concaténé dans la description |
| detectionEngine | security_result.description | Concaténé dans la description |
| malop_data.malopPriority | security_result.priority | Mappé directement |
| malop_severity | security_result.severity | Mappé directement |
| security_severity | security_result.severity | Définissez la valeur sur CRITICAL si elle est supérieure à 8, sur HIGH si elle est supérieure à 6, sur MEDIUM si elle est supérieure à 4 et sur LOW si elle est supérieure à 1. |
| de gravité, | security_result.severity | Définissez sur INFORMATIONAL si "Info", ERROR si "Error" ou "High", MEDIUM si "Warning" ou "Medium", CRITICAL si "Critical", LOW si "Low", UNKNOWN sinon. |
| description | security_result.summary | Mappé directement |
| type | security_result.summary | Action de remplacement |
| malopId | security_result.threat_id | Mappé directement |
| malop_data.simpleValues.detectionType.values.0 | security_result.threat_name | Mappé directement |
| virusName | security_result.threat_name | Action de remplacement |
| état | security_result.threat_status | Définissez sur ACTIVE si la valeur est "Active", sinon sur FALSE_POSITIVE. |
| malop_url | security_result.url_back_to_product | Mappé directement |
| machineName | target.asset.hostname | Mappé directement |
| affectedMachine | target.asset.hostname | Action de remplacement |
| dvchost | target.asset.hostname | Action de remplacement |
| Sensor.serverName | target.asset.hostname | Action de remplacement |
| server.ip | target.asset.ip | Mappé directement |
| Sensor.serverIp | target.asset.ip | Action de remplacement |
| malop_process.simpleValues.calculatedName.values.0 | target.file.full_path | Mappé directement |
| malop_connection.elementValues.ownerProcess.elementValues.0.name | target.file.full_path | Action de remplacement |
| nom | target.file.full_path | Action de remplacement |
| malwareDataModel_filePath | target.file.full_path | Action de remplacement |
| malop_process.simpleValues.imageFile.md5String.values.0 | target.file.md5 | Mappé directement |
| nom | target.file.names | Mappé directement |
| machineName | target.hostname | Mappé directement |
| affectedMachine | target.hostname | Action de remplacement |
| dvchost | target.hostname | Action de remplacement |
| Sensor.serverName | target.hostname | Action de remplacement |
| server.ip | target.ip | Mappé directement |
| Sensor.serverIp | target.ip | Action de remplacement |
| malop_connection.simpleValues.remoteAddressCountryName.values.0 | target.location.country_or_region | Mappé directement |
| Sensor.privateServerIp | target.nat_ip | Mappé directement |
| malop_connection.simpleValues.remotePort.values.0 | target.port | Converti en entier |
| malop_process.simpleValues.calculatedName.values.0 | target.process.file.full_path | Mappé directement |
| malop_process.elementValues.self.elementValues.0.guid | target.process.pid | Mappé directement |
| malop_url | target.url | Mappé directement |
| (statique) | metadata.product_name | Défini sur "Cybereason" |
Vous avez encore besoin d'aide ? Obtenez des réponses de membres de la communauté et de professionnels Google SecOps.