Collecter les journaux Cybereason EDR

Compatible avec :

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

  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 l'agent 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

Installez l'agent Bindplane sur votre système d'exploitation Windows ou Linux en suivant les instructions ci-dessous.

Installation de fenêtres

  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
    
  3. Attendez la fin de l'installation.

  4. Vérifiez l'installation en exécutant la commande suivante :

    sc query observiq-otel-collector
    

    L'état du service doit être RUNNING (EN COURS D'EXÉCUTION).

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
    
  3. Attendez la fin de l'installation.

  4. Vérifiez l'installation en exécutant la commande suivante :

    sudo systemctl status observiq-otel-collector
    

    L'é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.yaml
    
  • Windows :

    notepad "C:\Program Files\observIQ OpenTelemetry Collector\config.yaml"
    

Modifiez le fichier de configuration

  1. Remplacez l'intégralité du contenu de config.yaml par 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/cybereason
    
  2. Remplacez les espaces réservés suivants :

    • Configuration du récepteur :

      • listen_address : adresse IP et port à écouter :

        • 0.0.0.0:514 pour écouter sur toutes les interfaces sur le port 514 (nécessite l'accès root sur Linux)
        • 0.0.0.0:1514 pour écouter sur un port non privilégié (recommandé pour Linux non root)
      • Options de type de récepteur :

        • tcplog pour 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
      • customer_id : ID client Google SecOps

      • endpoint : 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.

Enregistrez le fichier de configuration.

Après avoir modifié le fichier, enregistrez-le :

  • Linux : appuyez sur Ctrl+O, puis sur Enter, puis sur Ctrl+X.
  • Windows : cliquez sur Fichier > Enregistrer.

Redémarrez l'agent Bindplane pour appliquer les modifications.

  • Pour redémarrer l'agent Bindplane sous Linux :

    1. Exécutez la commande suivante :

      sudo systemctl restart observiq-otel-collector
      
    2. Vérifiez que le service est en cours d'exécution :

      sudo systemctl status observiq-otel-collector
      
    3. Recherchez les erreurs dans les journaux :

      sudo journalctl -u observiq-otel-collector -f
      
  • Pour redémarrer l'agent Bindplane sous Windows :

    1. Choisissez l'une des options suivantes :

      • Invite de commandes ou PowerShell en tant qu'administrateur :

        net stop observiq-otel-collector && net start observiq-otel-collector
        
      • Console Services :

        1. Appuyez sur Win+R, saisissez services.msc, puis appuyez sur Entrée.
        2. Localisez observIQ OpenTelemetry Collector.
        3. Effectuez un clic droit, puis sélectionnez Redémarrer.
    2. Vérifiez que le service est en cours d'exécution :

      sc query observiq-otel-collector
      
    3. Recherchez 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

  1. Connectez-vous à la console de gestion Cybereason.
  2. Contactez l'assistance technique Cybereason via le portail d'assistance Cybereason.
  3. 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
  4. 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 :

  1. Téléchargez l'image Docker de l'outil de transfert CEF Cybereason auprès de l'assistance technique Cybereason.
  2. Créez ou modifiez le fichier de configuration dans cybereason-forwarders/config/config.json.
  3. Configurez les paramètres suivants :

    {
      "host": "<BINDPLANE_AGENT_IP>",
      "port": 514
    }
    
  4. Remplacez <BINDPLANE_AGENT_IP> par l'adresse IP de l'hôte de l'agent Bindplane.

  5. 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

  1. 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).
  2. 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"
  3. 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.