Collecter les journaux ExtraHop RevealX

Compatible avec :

Ce document explique comment ingérer des journaux ExtraHop RevealX dans Google Security Operations à l'aide de Bindplane. L'analyseur extrait les champs des journaux au format JSON et Syslog. Il utilise des modèles grok et une logique conditionnelle pour gérer différents formats de journaux, en mappant les champs extraits à l'UDM et en enrichissant les données avec des informations liées à la sécurité telles que la gravité et les catégories. L'analyseur gère également des types d'événements ExtraHop spécifiques, tels que le DNS Rebinding, les erreurs d'authentification Kerberos et les connexions RDP, en appliquant une logique d'analyse spécialisée pour chacun d'eux.

Avant de commencer

Assurez-vous de remplir les conditions suivantes :

  • Instance Google SecOps
  • 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é à ExtraHop Reveal X

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

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
    

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

Pour plus d'options d'installation, consultez le guide d'installation.

Configurer l'agent Bindplane pour ingérer Syslog et l'envoyer à Google SecOps

  1. 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).
  2. 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: 'EXTRAHOP'
            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 ExtraHop Syslog

  1. Connectez-vous à l'administration ExtraHop à l'aide de https://<extrahop-hostname-or-IP-address>/admin.
  2. Accédez à État et diagnostics > Journal d'audit.
  3. Cliquez sur Configurer les paramètres Syslog.
  4. Fournissez les informations de configuration suivantes :
    • Destination : saisissez l'adresse IP de l'agent Bindplane.
    • Protocole : sélectionnez UDP ou TCP, selon votre configuration Bindplane.
    • Port : saisissez le numéro de port de l'agent Bindplane.
    • Cliquez sur Tester les paramètres.
  5. Cliquez sur Enregistrer.

Table de mappage UDM

Champ de journal Mappage UDM Logique
alert_name security_result.summary La valeur de alert_name du journal brut est mappée sur security_result.summary.
answers[].data network.dns.answers[].data La valeur de data pour chaque élément du tableau answers du journal brut est mappée au champ data de l'élément correspondant dans le tableau network.dns.answers.
answers[].name network.dns.answers[].name La valeur de name pour chaque élément du tableau answers du journal brut est mappée au champ name de l'élément correspondant dans le tableau network.dns.answers.
answers[].ttl network.dns.answers[].ttl La valeur de ttl pour chaque élément du tableau answers du journal brut est mappée au champ ttl de l'élément correspondant dans le tableau network.dns.answers.
answers[].typeNum network.dns.answers[].type La valeur de typeNum pour chaque élément du tableau answers du journal brut est mappée au champ type de l'élément correspondant dans le tableau network.dns.answers.
client_ip principal.ip La valeur de client_ip du journal brut est mappée sur principal.ip.
cn1 security_result.rule_labels[].value La valeur de cn1 du journal brut est utilisée comme valeur pour un élément security_result.rule_labels avec la clé "Detection ID" (ID de détection).
cn2 security_result.detection_fields[].value La valeur de cn2 du journal brut est utilisée comme valeur pour un élément security_result.detection_fields avec la clé "riskscore".
cs1 security_result.rule_name La valeur de cs1 du journal brut est mappée sur security_result.rule_name.
cs2 security_result.category_details[] La valeur de cs2 du journal brut est ajoutée en tant qu'élément au tableau security_result.category_details.
description metadata.description La valeur de description du journal brut, après traitement (suppression des caractères de nouvelle ligne et des barres obliques inverses), est mappée sur metadata.description. Dans certains cas, d'autres champs du journal brut peuvent contribuer à ce champ ou le remplacer.
details principal.resource.resource_subtype, security_result.summary, principal.ip Le champ details est analysé. La valeur associée à la clé "facility" est mappée sur principal.resource.resource_subtype. La valeur associée à la clé "details" est mappée sur security_result.summary. La valeur associée à la clé "src_ip" est mappée sur principal.ip.
dst target.ip ou target.mac La valeur de dst du journal brut est mappée sur target.ip s'il s'agit d'une adresse IP ou sur target.mac s'il s'agit d'une adresse MAC.
dst_ip target.ip La valeur de dst_ip du journal brut est mappée sur target.ip.
eh_event metadata.event_type, network.application_protocol Si eh_event est défini sur "dns", metadata.event_type est défini sur NETWORK_DNS et network.application_protocol est défini sur DNS. Si eh_event est défini sur "RDP", metadata.event_type est défini sur NETWORK_CONNECTION et network.application_protocol est défini sur RDP.
event_id metadata.product_event_type La valeur de event_id du journal brut est mappée sur metadata.product_event_type.
facility principal.resource.resource_subtype La valeur de facility du journal brut est mappée sur principal.resource.resource_subtype.
ipaddr principal.ip La valeur de ipaddr du journal brut est mappée sur principal.ip.
jsonPayload.description metadata.product_event_type, principal.hostname, principal.asset.hostname, security_result.summary Le champ jsonPayload.description est analysé au format JSON. Le champ "operation" est mappé sur metadata.product_event_type. Le champ "event" (après suppression de " Audit Log") est mappé sur principal.hostname et principal.asset.hostname. Le champ "details" est mappé sur security_result.summary.
jsonPayload.event metadata.product_event_type, principal.hostname, principal.asset.hostname La valeur de jsonPayload.event du journal brut (après suppression de " Audit Log") est mappée sur metadata.product_event_type, principal.hostname et principal.asset.hostname.
jsonPayload.id metadata.product_log_id La valeur de jsonPayload.id du journal brut est mappée sur metadata.product_log_id.
macaddr principal.mac La valeur de macaddr du journal brut est mappée sur principal.mac.
name metadata.description La valeur de name du journal brut est mappée sur metadata.description.
object_id target.resource.product_object_id La valeur de object_id du journal brut est mappée sur target.resource.product_object_id.
object_name target.resource.name La valeur de object_name du journal brut est mappée sur target.resource.name.
object_type target.resource.resource_type La valeur de object_type du journal brut (convertie en majuscules) est mappée sur target.resource.resource_type.
operation metadata.product_event_type La valeur de operation du journal brut est mappée sur metadata.product_event_type.
priority security_result.severity, security_result.severity_details Si priority est défini sur "notice", security_result.severity est défini sur MEDIUM et security_result.severity_details est défini sur la valeur de priority.
product_event_type metadata.product_event_type La valeur de product_event_type du journal brut est mappée sur metadata.product_event_type. Elle est également utilisée pour déterminer le metadata.event_type et d'autres champs en fonction de sa valeur.
qname network.dns.questions[].name La valeur de qname du journal brut est mappée au champ name d'un élément network.dns.questions.
qname_or_host intermediary.hostname La valeur de qname_or_host du journal brut est mappée sur intermediary.hostname.
qtype network.dns.questions[].type La valeur de qtype du journal brut est mappée au champ type d'un élément network.dns.questions, ce qui convertit la représentation de chaîne en son équivalent numérique en fonction des types d'enregistrements DNS.
resource.labels.project_id target.resource.attribute.labels[].value La valeur de resource.labels.project_id du journal brut est utilisée comme valeur pour un élément target.resource.attribute.labels avec la clé "ID du projet".
resource.type target.resource.resource_subtype La valeur de resource.type du journal brut est mappée sur target.resource.resource_subtype.
rdp_record.clientBuild metadata.product_version La valeur de rdp_record.clientBuild du journal brut est mappée sur metadata.product_version.
rdp_record.clientBytes network.sent_bytes La valeur de rdp_record.clientBytes du journal brut est mappée sur network.sent_bytes.
rdp_record.clientName principal.hostname La valeur de rdp_record.clientName du journal brut est mappée sur principal.hostname.
rdp_record.clientPort principal.port La valeur de rdp_record.clientPort du journal brut est mappée sur principal.port.
rdp_record.cookie principal.user.userid La valeur de rdp_record.cookie (après suppression de "mstshash=") du journal brut est mappée sur principal.user.userid.
rdp_record.proto network.ip_protocol La valeur de rdp_record.proto du journal brut est mappée sur network.ip_protocol, ce qui convertit "TCP" en "TCP" et "UDP" en "UDP".
rdp_record.selectedProtocol security_result.description La valeur de rdp_record.selectedProtocol du journal brut est mappée sur security_result.description.
rdp_record.serverBytes network.received_bytes La valeur de rdp_record.serverBytes du journal brut est mappée sur network.received_bytes.
rdp_record.serverPort target.port La valeur de rdp_record.serverPort du journal brut est mappée sur target.port.
rt metadata.event_timestamp La valeur de rt du journal brut est analysée en tant qu'horodatage et mappée sur metadata.event_timestamp.
severity security_result.severity, security_result.severity_details, event.idm.is_alert, event.idm.is_significant La valeur de severity est mappée sur security_result.severity_details. Il est également utilisé pour déterminer la valeur de security_result.severity, event.idm.is_alert et event.idm.is_significant.
src principal.ip ou principal.mac La valeur de src du journal brut est mappée sur principal.ip s'il s'agit d'une adresse IP ou sur principal.mac s'il s'agit d'une adresse MAC.
src_ip principal.ip ou principal.mac La valeur de src_ip du journal brut est mappée sur principal.ip s'il s'agit d'une adresse IP ou sur principal.mac s'il s'agit d'une adresse MAC.
summary security_result.summary La valeur de summary du journal brut est mappée sur security_result.summary.
ts metadata.event_timestamp La valeur de ts du journal brut est analysée en tant qu'horodatage et mappée sur metadata.event_timestamp.
user principal.user.userid La valeur de user du journal brut est mappée sur principal.user.userid.
(N/A) metadata.log_type Toujours défini sur "EXTRAHOP".
(N/A) metadata.vendor_name Toujours défini sur "EXTRAHOP".
(N/A) metadata.product_name Toujours défini sur "EXTRAHOP".
(N/A) security_result.severity Définissez la valeur sur CRITICAL par défaut, ou en fonction de la valeur de severity ou priority.
(N/A) event.idm.is_alert Définie sur true si security_result.severity est "HIGH" ou "CRITICAL".
(N/A) event.idm.is_significant Définie sur true si security_result.severity est "HIGH" ou "CRITICAL".
(N/A) metadata.event_type Déterminé en fonction des valeurs d'autres champs, tels que eh_event, product_event_type, has_principal et dst. La valeur par défaut est GENERIC_EVENT.
(N/A) network.application_protocol Définissez sur DNS si eh_event est "dns" ou si message contient "DNS Rebinding". Définie sur RDP si eh_event est "RDP".
(N/A) security_result.rule_labels[].key Définissez le libellé de la règle sur "ID de détection" pour qu'il soit dérivé de cn1.
(N/A) security_result.detection_fields[].key Définissez sur "riskscore" pour le champ de détection dérivé de cn2.
(N/A) principal.user.attribute.roles[].type Définie sur SERVICE_ACCOUNT si user_name est présent.
(N/A) extensions.auth.type Définissez sur SSO si product_event_type est défini sur "Erreurs d'authentification du client Kerberos".
(N/A) extensions.auth.mechanism Défini sur USERNAME_PASSWORD si product_event_type est "Unsafe LDAP Authentication" (Authentification LDAP non sécurisée) ou "Kerberos Client Auth Errors" (Erreurs d'authentification du client Kerberos).
(N/A) security_result.category Définissez sur NETWORK_SUSPICIOUS si product_event_type est "DNS Internal Reverse Lookup Scan" ou contient "Inbound Suspicious Connections". Définissez sur NETWORK_MALICIOUS si product_event_type est défini sur "Demande au serveur de base de données externe".
(N/A) network.http.response_code Défini en fonction de status_code extrait de product_event_type s'il correspond au modèle "HTTP Server %{INT:status_code} %{GREEDYDATA}".
jsonPayload.cs1 security_result.detection_fields[].value La valeur de jsonPayload.cs1 du journal brut est utilisée comme valeur pour un élément security_result.detection_fields.
jsonPayload.cn1 security_result.detection_fields[].value La valeur de jsonPayload.cn1 du journal brut est utilisée comme valeur pour un élément security_result.detection_fields.
jsonPayload.cn2 security_result.detection_fields[].value La valeur de jsonPayload.cn2 du journal brut est utilisée comme valeur pour un élément security_result.detection_fields.
jsonPayload.cs1Label, jsonPayload.cn1Label, jsonPayload.cn2Label security_result.detection_fields[].key Ces champs du journal brut sont utilisés comme clés pour les éléments correspondants dans security_result.detection_fields.
jsonPayload.src principal.ip La valeur de jsonPayload.src du journal brut est mappée sur principal.ip.
jsonPayload.dst target.ip La valeur de jsonPayload.dst du journal brut est mappée sur target.ip.

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