Collecter les journaux du proxy Forcepoint

Compatible avec:

Ce document explique comment ingérer les journaux du proxy Forcepoint dans Google Security Operations à l'aide de Bindplane. L'analyseur 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 sur le 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 particuliers 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 l'application derrière un proxy, assurez-vous que les ports du pare-feu sont ouverts.
  • Assurez-vous de disposer d'un accès privilégié au proxy Forcepoint.

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 le numéro client Google SecOps

  1. Connectez-vous à la console Google SecOps.
  2. Accédez à Paramètres du SIEM > Profil.
  3. Copiez et sauvegardez le numéro client dans la section Détails de l'organisation.

Installer l'agent Bindplane

Installation de Windows

  1. Ouvrez l'invite de commande 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 des 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
    

Autres ressources d'installation

Configurer l'agent Bindplane pour qu'il ingère les journaux Syslog et les envoie à 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 (nano, vi ou Bloc-notes, par exemple).
  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 dans votre infrastructure si nécessaire.

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

  5. Remplacez /path/to/ingestion-authentication-file.json par le chemin d'accès où le fichier d'authentification a été enregistré dans la section Obtenir le fichier d'authentification d'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 du 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 Enregistrer et déployer.

Tableau de mappage UDM

Champ de journal Mappage UDM Logique
action security_result.summary Si action_msg n'est pas vide, il est mappé sur security_result.summary. Sinon, si "action" n'est pas vide, il est mappé sur "security_result.summary". Sinon, si act n'est pas vide, il est mappé sur security_result.summary.
action_msg security_result.summary Si action_msg n'est pas vide, il est mappé sur security_result.summary. Sinon, si "action" n'est pas vide, il est mappé sur "security_result.summary". Sinon, si act n'est pas vide, il est mappé sur security_result.summary.
application target.application Si destinationServiceName n'est pas vide, il est mappé sur app_name. Sinon, si l'app n'est pas vide et ne contient pas http ou HTTP, elle est mappée sur app_name. Enfin, app_name est mappé sur 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é sur "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 sur security_result.category_details.
cn1 security_result.detection_fields.value Si cn1 n'est pas vide, il est mappé sur security_result.detection_fields.value avec la clé Disposition Number.
ContentType target.file.mime_type Si contentType n'est pas vide, il est mappé sur ContentType. Enfin, ContentType est mappé sur target.file.mime_type.
cs1 target_role.description cs1 est mappé sur target_role.description.
cs2 security_result.category_details Si cs2 n'est pas vide et n'est pas 0, il est mappé sur 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 valeur de description n'est pas vide, elle est mappée sur metadata.description.
destinationServiceName target.application Si destinationServiceName n'est pas vide, il est mappé sur app_name. Enfin, app_name est mappé sur target.application.
deviceFacility metadata.product_event_type Si product_event et deviceFacility ne sont pas vides, ils sont concatenatés avec - et mappés sur metadata.product_event_type. Sinon, product_event est mappé sur metadata.product_event_type.
disposition security_result.detection_fields.value Si "disposition" n'est pas vide, il est mappé sur security_result.detection_fields.value avec la clé Disposition Number.
dst target.ip Si "dst" n'est pas vide et que "dvchost" est vide, 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é sur target.hostname.
dst_ip target.ip Si "dst" n'est pas vide et que "dvchost" est vide, 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é sur "dst_port". Enfin, le port de destination est mappé sur le port cible.
duration network.session_duration.seconds Si la valeur de "duration" 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é sur intermediary.ip s'il s'agit d'une adresse IP valide, sinon il est mappé sur 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é sur "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 valeur de "method" 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 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, ni 0, ni -, il est mappé sur 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é sur 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 différent de int_ip, il est mappé sur intermediary.hostname.
int_ip intermediary.ip Si dvchost n'est pas vide, il est mappé sur int_ip. Enfin, int_ip est mappé sur intermediary.ip s'il s'agit d'une adresse IP valide, sinon il est mappé sur intermediary.hostname.
level target_role.name Si le niveau n'est pas vide et que le rôle est vide, il est mappé sur le rôle. Enfin, le rôle est mappé sur target_role.name.
log_level security_result.severity Si la gravité est 1, si le niveau de journalisation contient info ou si le message contient notice, la valeur security_result.severity est définie 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'attribut "user" n'est pas vide, n'est pas - et ne contient pas LDAP, il est mappé sur principal.user.userid.
méthode network.http.method Si requestMethod n'est pas vide, il est mappé sur http_method. Sinon, si la valeur de "method" 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é sur security_result.detection_fields.value avec la clé NatRuleId.
interprétés. network.sent_bytes Si "out" n'est pas vide, il est mappé sur "bytes_out". Enfin, bytes_out est mappé sur network.sent_bytes.
pid target.process.pid Si le PID n'est pas vide, il est mappé sur target.process.pid.
stratégie target_role.description Si "Policy" n'est pas vide, il est mappé à la règle. Si la valeur de 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 "Policy" n'est pas vide, il est mappé à la règle. Si la valeur de 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 "product" n'est pas vide, il est mis en correspondance avec "product_event". Si product_event et deviceFacility ne sont pas vides, ils sont concatenatés avec - et mappés sur metadata.product_event_type. Sinon, product_event est mappé sur 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é sur 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é sur 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é sur le rôle. Enfin, le rôle est mappé sur target_role.name.
RuleID security_result.rule_id Si RuleID n'est pas vide, il est mappé sur 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é sur network.http.response_code.
de gravité, security_result.severity Si la gravité est 1, si le niveau de journalisation contient info ou si le message contient notice, la valeur security_result.severity est définie 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é sur 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 sur src. Si l'hôte n'est pas vide, il est mappé sur "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 sur src. Enfin, "src" est mappé sur "principal.ip".
src_port principal.port Si src_port n'est pas vide, il est mappé sur 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'attribut "user" n'est pas vide, n'est pas - et ne contient pas LDAP, il est mappé sur 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é sur "user". Enfin, si l'attribut "user" n'est pas vide, n'est pas - et ne contient pas LDAP, il est mappé sur 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é sur "user". Enfin, si l'attribut "user" n'est pas vide, n'est pas - et ne contient pas LDAP, il est mappé sur principal.user.userid.
date metadata.event_timestamp Si "when" n'est pas vide, il est analysé et mappé sur 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 80, network.application_protocol est défini sur HTTP. Si dst_port est 443, network.application_protocol est défini sur HTTPS.
principal.user.group_identifiers Si l'attribut "user" n'est pas vide, n'est pas - et contient LDAP, la partie "UO" de la chaîne utilisateur est extraite et mappée sur principal.user.group_identifiers.
principal.user.user_display_name Si l'attribut "user" n'est pas vide, n'est pas - et contient LDAP, la partie du nom d'utilisateur de la chaîne utilisateur est extraite et mappée sur 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é sur 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 sur security_result.category_details. Si cs2 n'est pas vide et n'est pas 0, il est mappé sur 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 la disposition 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 de la mise en correspondance de category_no.
security_result.severity Si la gravité est 1, si le niveau de journalisation contient info ou si le message contient notice, la valeur security_result.severity est définie sur INFORMATIONAL. Si la gravité est 7, security_result.severity est défini sur HIGH.
target_role.description Si "Policy" n'est pas vide, il est mappé à la règle. Si la valeur de 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é sur le rôle. Enfin, le rôle est mappé sur target_role.name.
category_no security_result.detection_fields.value Si category_no n'est pas vide, il est mappé sur security_result.detection_fields.value avec la clé Category Number.

Modifications

2025-01-16

Amélioration :

  • Mappage de security_result.action sur BLOCK lorsque s-action est TCP_DENIED.

2024-10-18

Amélioration :

  • Ajout de la possibilité d'analyser les journaux CSV non analysés.
  • Ajout de la possibilité de supprimer les journaux CSV non valides.
  • Mappage de host-url sur principal.url.

2024-07-10

Amélioration :

  • Ajout des modèles Grok pour les nouveaux journaux au format KV.
  • Mappage de username sur principal.user.userid.
  • Mappage de cs-uri sur target.url.
  • cs-uri-query , time-taken , filter-category , cs-uri-path , cs-uri-extension et rs_content_type ont été mappés sur additional.fields.
  • Si sc-filter-result est OBSERVED, définissez security_result.action sur ALLOW. Sinon, si sc-filter-result est DENIED, définissez security_result.action sur BLOCK. Sinon, définissez security_result.action sur ALLOW.
  • Mappage de cs-auth-group sur principal.user_group_identifiers.
  • Mappage de cs-method sur network.http.method.
  • Mappage de sc-status sur response_code.
  • Mappage de s-action sur security_result.detection_fields.
  • Mappage de srcport sur principal.port.
  • Mappage de dstport sur target.port.
  • Mappage de sc-bytes sur network.received_bytes.
  • Mappage de cs-bytes sur network.sent_bytes.
  • Mappage de cs sur security_result.summary.
  • Mappage de cs_referer sur network.http.referral_url.
  • Mappage de cs-host sur target.hostname.

2024-06-10

Amélioration :

  • Prise en charge des journaux au format CSV.

2023-06-12

Amélioration :

  • Modèle Grok modifié pour analyser les journaux d'erreur dans lesquels certaines valeurs sont présentes sous la forme "-".
  • Ajout d'une vérification de condition pour le champ "http_response" avant le mappage.

2022-08-11

Amélioration :

  • Modification de grok pour analyser les journaux de type CEF sans en-tête syslog.

2022-05-16

Amélioration :

  • Numéro de catégorie mappé sur security_result.detection_fields.

2022-05-05

Amélioration :

  • Ajout de mappage pour les champs: requestClientApplication à http.user_agent, proxyStatus-code à http.response_code, disposition et cn1 à security_result.detection_fields.
  • Champ "cs2" mappé sur "security_result.category_details" si la valeur de "cs2Label" est "DynCat".
  • Champ "cs2" mappé sur "security_result.detection_fields" si la valeur de "cs2Label" est "NatRuleId".

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