Collecter les journaux Forcepoint Proxy

Compatible avec :

Ce document explique comment ingérer des journaux de proxy Forcepoint dans Google Security Operations à l'aide de Bindplane. Le parseur nettoie d'abord le message de journal d'entrée et extrait les paires clé-valeur à l'aide de modèles Grok et d'expressions régulières. Il mappe ensuite les champs extraits au modèle de données unifié (UDM) en fonction de conditions et de valeurs de champ spécifiques, en gérant différents formats de journaux et cas extrêmes pour assurer une représentation cohérente des données.

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é à Forcepoint Proxy.

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

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

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

  1. Accédez au fichier de configuration :

    1. 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.
    2. 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: '/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: FORCEPOINT_WEBPROXY
                raw_log_field: body
    
    service:
        pipelines:
            logs/source0__chronicle_w_labels-0:
                receivers:
                    - udplog
                exporters:
                    - chronicle/chronicle_w_labels
    
  3. Remplacez le port et l'adresse IP selon les besoins de votre infrastructure.

  4. Remplacez <customer_id> par le numéro client réel.

  5. 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 Forcepoint Web Security Suite

  1. Connectez-vous à la console Forcepoint.
  2. Accédez à Web> Paramètres> Général.
  3. Cliquez sur Intégration SIEM.
  4. Cochez la case Activer l'intégration SIEM pour ce serveur de règles.
  5. Fournissez les informations de configuration suivantes :
    • Adresse IP ou nom d'hôte : saisissez l'adresse IP de l'agent Bindplane.
    • Numéro de port : saisissez le numéro de port configuré sur l'agent Bindplane (par exemple, 514).
    • Protocole de transport : sélectionnez le protocole UDP.
    • Format SIEM : sélectionnez Syslog/CEF (Arcsight).
  6. Cliquez sur OK.
  7. Cliquez sur Save and deploy (Enregistrer et déployer).

Table de mappage UDM

Champ de journal Mappage UDM Logique
action security_result.summary Si action_msg n'est pas vide, il est mappé à security_result.summary. Sinon, si l'action n'est pas vide, elle est mappée à security_result.summary. Sinon, si "act" n'est pas vide, il est mappé à security_result.summary.
action_msg security_result.summary Si action_msg n'est pas vide, il est mappé à security_result.summary. Sinon, si l'action n'est pas vide, elle est mappée à security_result.summary. Sinon, si "act" n'est pas vide, il est mappé à security_result.summary.
application target.application Si destinationServiceName n'est pas vide, il est mappé à app_name. Sinon, si l'application n'est pas vide et ne contient pas http ni HTTP, elle est mappée à app_name. Enfin, app_name est mappé à target.application.
bytes_in network.received_bytes Si "in" n'est pas vide, il est mappé sur "bytes_in". Enfin, bytes_in est mappé sur network.received_bytes.
bytes_out network.sent_bytes Si "out" n'est pas vide, il est mappé à "bytes_out". Enfin, bytes_out est mappé sur network.sent_bytes.
cat security_result.category_details Si cat n'est pas vide, il est mappé à la catégorie. Enfin, la catégorie est mappée à security_result.category_details.
cn1 security_result.detection_fields.value Si cn1 n'est pas vide, il est mappé à security_result.detection_fields.value avec la clé Disposition Number.
ContentType target.file.mime_type Si contentType n'est pas vide, il est mappé à ContentType. Enfin, ContentType est mappé sur target.file.mime_type.
cs1 target_role.description cs1 est mappé à target_role.description.
cs2 security_result.category_details Si cs2 n'est pas vide et n'est pas 0, il est mappé à security_result.category_details avec le préfixe Dynamic Category:.
cs3 target.file.mime_type cs3 est mappé sur target.file.mime_type.
description metadata.description Si la description n'est pas vide, elle est mappée sur metadata.description.
destinationServiceName target.application Si destinationServiceName n'est pas vide, il est mappé à app_name. Enfin, app_name est mappé à target.application.
deviceFacility metadata.product_event_type Si product_event et deviceFacility ne sont pas vides, ils sont concaténés avec - et mappés à metadata.product_event_type. Sinon, product_event est mappé à metadata.product_event_type.
disposition security_result.detection_fields.value Si la disposition n'est pas vide, elle est mappée à security_result.detection_fields.value avec la clé Disposition Number.
dst target.ip Si "dst" n'est pas vide et que "dvchost" l'est, il est mappé sur "dst_ip". Enfin, dst_ip est mappé sur target.ip.
dst_host target.hostname Si "dst" n'est pas vide et que "dvchost" est vide, il est mappé sur "dst_host". Enfin, dst_host est mappé à target.hostname.
dst_ip target.ip Si "dst" n'est pas vide et que "dvchost" l'est, il est mappé sur "dst_ip". Enfin, dst_ip est mappé sur target.ip.
dst_port target.port Si "dst" n'est pas vide et que "dvchost" est vide, il est mappé à "dst_port". Enfin, dst_port est mappé sur target.port.
duration network.session_duration.seconds Si la durée n'est pas vide et n'est pas 0, elle est mappée sur network.session_duration.seconds.
dvchost intermediary.ip Si dvchost n'est pas vide, il est mappé sur int_ip. Enfin, int_ip est mappé à intermediary.ip s'il s'agit d'une adresse IP valide, sinon il est mappé à intermediary.hostname.
file_path target.file.full_path Si file_path n'est pas vide, il est mappé sur target.file.full_path.
hôte principal.ip Si l'hôte n'est pas vide, il est mappé à src. Enfin, "src" est mappé sur "principal.ip".
http_method network.http.method Si requestMethod n'est pas vide, il est mappé sur http_method. Sinon, si la méthode n'est pas vide, elle est mappée sur http_method. Enfin, http_method est mappé sur network.http.method.
http_proxy_status_code network.http.response_code Si http_response est vide, ou si sa valeur est 0 ou -, et que http_proxy_status_code n'est pas vide, il est mappé sur network.http.response_code.
http_response network.http.response_code Si http_response n'est pas vide, n'est pas 0 et n'est pas -, il est mappé à network.http.response_code.
http_user_agent network.http.user_agent Si http_user_agent n'est pas vide et n'est pas -, il est mappé à network.http.user_agent.
dans network.received_bytes Si "in" n'est pas vide, il est mappé sur "bytes_in". Enfin, bytes_in est mappé sur network.received_bytes.
int_host intermediary.hostname Si int_ip n'est pas vide et que int_host n'est pas vide et est différent de int_ip, il est mappé à intermediary.hostname.
int_ip intermediary.ip Si dvchost n'est pas vide, il est mappé sur int_ip. Enfin, int_ip est mappé à intermediary.ip s'il s'agit d'une adresse IP valide, sinon il est mappé à intermediary.hostname.
level target_role.name Si le niveau n'est pas vide et que le rôle est vide, il est mappé au rôle. Enfin, le rôle est mappé à target_role.name.
log_level security_result.severity Si la gravité est définie sur 1, si log_level contient info ou si message contient notice, security_result.severity est défini sur INFORMATIONAL. Si la gravité est 7, security_result.severity est défini sur HIGH.
loginID principal.user.userid Si loginID n'est pas vide, il est mappé à l'utilisateur. Enfin, si l'utilisateur n'est pas vide, n'est pas - et ne contient pas LDAP, il est mappé à principal.user.userid.
méthode network.http.method Si requestMethod n'est pas vide, il est mappé sur http_method. Sinon, si la méthode n'est pas vide, elle est mappée sur http_method. Enfin, http_method est mappé sur network.http.method.
NatRuleId security_result.detection_fields.value Si NatRuleId n'est pas vide, il est mappé à security_result.detection_fields.value avec la clé NatRuleId.
interprétés. network.sent_bytes Si "out" n'est pas vide, il est mappé à "bytes_out". Enfin, bytes_out est mappé sur network.sent_bytes.
pid target.process.pid Si pid n'est pas vide, il est mappé à target.process.pid.
stratégie target_role.description Si la règle n'est pas vide, elle est mappée à la règle. Si la règle n'est pas vide et n'est pas -, elle est mappée sur target_role.description.
Règle target_role.description Si la règle n'est pas vide, elle est mappée à la règle. Si la règle n'est pas vide et n'est pas -, elle est mappée sur target_role.description.
product_event metadata.product_event_type Si le produit n'est pas vide, il est mappé à product_event. Si product_event et deviceFacility ne sont pas vides, ils sont concaténés avec - et mappés à metadata.product_event_type. Sinon, product_event est mappé à metadata.product_event_type.
proxyStatus-code network.http.response_code Si http_response est vide ou 0 ou -, et que http_proxy_status_code est vide et que proxyStatus-code n'est pas vide, il est mappé à network.http.response_code.
refererUrl network.http.referral_url Si refererUrl n'est pas vide et n'est pas -, il est mappé sur network.http.referral_url.
requestClientApplication network.http.user_agent Si requestMethod n'est pas vide, il est mappé à http_user_agent. Enfin, http_user_agent est mappé sur network.http.user_agent.
requestMethod network.http.method Si requestMethod n'est pas vide, il est mappé sur http_method. Enfin, http_method est mappé sur network.http.method.
rôle target_role.name Si le niveau n'est pas vide et que le rôle est vide, il est mappé au rôle. Enfin, le rôle est mappé à target_role.name.
RuleID security_result.rule_id Si RuleID n'est pas vide, il est mappé à security_result.rule_id.
serverStatus-code network.http.response_code Si http_response est vide ou 0 ou -, et que http_proxy_status_code est vide et que proxyStatus-code n'est pas vide, il est mappé à network.http.response_code.
de gravité, security_result.severity Si la gravité est définie sur 1, si log_level contient info ou si message contient notice, security_result.severity est défini sur INFORMATIONAL. Si la gravité est 7, security_result.severity est défini sur HIGH.
spt principal.port Si spt n'est pas vide, il est mappé à src_port. Enfin, src_port est mappé sur principal.port.
src principal.ip Si src_host n'est pas vide, il est mappé sur source_ip_temp. Si source_ip_temp est une adresse IP valide et que src est vide, elle est mappée à src. Si l'hôte n'est pas vide, il est mappé à src. Enfin, "src" est mappé sur "principal.ip".
src_host principal.hostname Si src_host n'est pas vide, il est mappé sur source_ip_temp. Si source_ip_temp n'est pas une adresse IP valide, elle est mappée sur principal.hostname. Si source_ip_temp est une adresse IP valide et que src est vide, elle est mappée à src. Enfin, "src" est mappé sur "principal.ip".
src_port principal.port Si src_port n'est pas vide, il est mappé à principal.port.
suser principal.user.userid Si loginID n'est pas vide, il est mappé à l'utilisateur. Si suser n'est pas vide, il est mappé à user. Enfin, si l'utilisateur n'est pas vide, n'est pas - et ne contient pas LDAP, il est mappé à principal.user.userid.
url target.url Si l'URL n'est pas vide, elle est mappée sur target.url.
utilisateur principal.user.userid Si loginID n'est pas vide, il est mappé à l'utilisateur. Si suser n'est pas vide, il est mappé à user. Sinon, si usrName n'est pas vide, il est mappé à l'utilisateur. Enfin, si l'utilisateur n'est pas vide, n'est pas - et ne contient pas LDAP, il est mappé à principal.user.userid.
usrName principal.user.userid Si loginID n'est pas vide, il est mappé à l'utilisateur. Si suser n'est pas vide, il est mappé à user. Sinon, si usrName n'est pas vide, il est mappé à l'utilisateur. Enfin, si l'utilisateur n'est pas vide, n'est pas - et ne contient pas LDAP, il est mappé à principal.user.userid.
date metadata.event_timestamp Si "when" n'est pas vide, il est analysé et mis en correspondance avec metadata.event_timestamp.
metadata.log_type La valeur FORCEPOINT_WEBPROXY est codée en dur dans metadata.log_type.
metadata.product_name La valeur Forcepoint Webproxy est codée en dur dans metadata.product_name.
metadata.vendor_name La valeur Forcepoint est codée en dur dans metadata.vendor_name.
network.application_protocol Si dst_port est défini sur 80, network.application_protocol est défini sur HTTP. Si dst_port est défini sur 443, network.application_protocol est défini sur HTTPS.
principal.user.group_identifiers Si l'utilisateur n'est pas vide, n'est pas - et contient LDAP, la partie UO de la chaîne utilisateur est extraite et mappée à principal.user.group_identifiers.
principal.user.user_display_name Si l'utilisateur n'est pas vide, n'est pas - et contient LDAP, la partie nom d'utilisateur de la chaîne utilisateur est extraite et mappée à principal.user.user_display_name.
security_result.action Si action_msg, action ou act ne sont pas vides, sec_action est défini sur ALLOW ou BLOCK en fonction de leurs valeurs. Enfin, sec_action est mappé à security_result.action.
security_result.category_details Si cat n'est pas vide, il est mappé à la catégorie. Enfin, la catégorie est mappée à security_result.category_details. Si cs2 n'est pas vide et n'est pas 0, il est mappé à security_result.category_details avec le préfixe Dynamic Category:.
security_result.detection_fields.key La valeur Disposition Number est codée en dur dans security_result.detection_fields.key lors du mappage de l'état ou de cn1. La valeur NatRuleId est codée en dur dans security_result.detection_fields.key lors du mappage de NatRuleId. La valeur Category Number est codée en dur dans security_result.detection_fields.key lors du mappage de category_no.
security_result.severity Si la gravité est définie sur 1, si log_level contient info ou si message contient notice, security_result.severity est défini sur INFORMATIONAL. Si la gravité est 7, security_result.severity est défini sur HIGH.
target_role.description Si la règle n'est pas vide, elle est mappée à la règle. Si la règle n'est pas vide et n'est pas -, elle est mappée sur target_role.description.
target_role.name Si le niveau n'est pas vide et que le rôle est vide, il est mappé au rôle. Enfin, le rôle est mappé à target_role.name.
category_no security_result.detection_fields.value Si category_no n'est pas vide, il est mappé à security_result.detection_fields.value avec la clé Category Number.

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