Recopila registros del proxy de Forcepoint

Compatible con:

En este documento, se explica cómo transferir registros de proxy de Forcepoint a Google Security Operations con Bindplane. Primero, el analizador limpia el mensaje de registro de entrada y extrae pares clave-valor con patrones de Grok y expresiones regulares. Luego, asigna los campos extraídos al modelo de datos unificado (UDM) según condiciones y valores de campo específicos, y controla varios formatos de registro y casos extremos para garantizar una representación de datos coherente.

Antes de comenzar

  • Asegúrate de tener una instancia de Google Security Operations.
  • Asegúrate de usar Windows 2016 o una versión posterior, o un host de Linux con systemd.
  • Si se ejecuta detrás de un proxy, asegúrate de que los puertos del firewall estén abiertos.
  • Asegúrate de tener acceso con privilegios al proxy de Forcepoint.

Obtén el archivo de autenticación de transferencia de Google SecOps

  1. Accede a la consola de Google SecOps.
  2. Ve a Configuración de SIEM > Agentes de recopilación.
  3. Descarga el archivo de autenticación de transferencia. Guarda el archivo de forma segura en el sistema en el que se instalará Bindplane.

Obtén el ID de cliente de Google SecOps

  1. Accede a la consola de Google SecOps.
  2. Ve a Configuración de SIEM > Perfil.
  3. Copia y guarda el ID de cliente de la sección Detalles de la organización.

Instala el agente de Bindplane

Instalación de Windows

  1. Abre el símbolo del sistema o PowerShell como administrador.
  2. Ejecuta el siguiente comando:

    msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
    

Instalación de Linux

  1. Abre una terminal con privilegios de raíz o sudo.
  2. Ejecuta el siguiente comando:

    sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
    

Recursos de instalación adicionales

Configura el agente de Bindplane para transferir Syslog y enviarlo a Google SecOps

  1. Accede al archivo de configuración:

    1. Ubica el archivo config.yaml. Por lo general, se encuentra en el directorio /etc/bindplane-agent/ en Linux o en el directorio de instalación en Windows.
    2. Abre el archivo con un editor de texto (por ejemplo, nano, vi o Bloc de notas).
  2. Edita el archivo config.yaml de la siguiente manera:

    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. Reemplaza el puerto y la dirección IP según sea necesario en tu infraestructura.

  4. Reemplaza <customer_id> por el ID de cliente real.

  5. Actualiza /path/to/ingestion-authentication-file.json a la ruta de acceso en la que se guardó el archivo de autenticación en la sección Obtén el archivo de autenticación de transferencia de Google SecOps.

Reinicia el agente de Bindplane para aplicar los cambios.

  • Para reiniciar el agente de Bindplane en Linux, ejecuta el siguiente comando:

    sudo systemctl restart bindplane-agent
    
  • Para reiniciar el agente de Bindplane en Windows, puedes usar la consola Services o ingresar el siguiente comando:

    net stop BindPlaneAgent && net start BindPlaneAgent
    

Configura Forcepoint Web Security Suite

  1. Accede a la consola de Forcepoint.
  2. Ve a Web > Configuración > General.
  3. Haz clic en Integración de SIEM.
  4. Selecciona la casilla de verificación Habilitar la integración de SIEM para este servidor de políticas.
  5. Proporciona los siguientes detalles de configuración:
    • Dirección IP o nombre de host: Ingresa la dirección IP del agente de Bindplane.
    • Número de puerto: Ingresa el número de puerto configurado en el agente de Bindplane, por ejemplo, 514.
    • Protocolo de transporte: Selecciona el protocolo UDP.
    • Formato de SIEM: Selecciona Syslog/CEF (Arcsight).
  6. Haz clic en Aceptar.
  7. Haz clic en Guardar y, luego, en Implementar.

Tabla de asignación de UDM

Campo de registro Asignación de UDM Lógica
acción security_result.summary Si action_msg no está vacío, se asigna a security_result.summary. De lo contrario, si action no está vacía, se asigna a security_result.summary. De lo contrario, si act no está vacío, se asigna a security_result.summary.
action_msg security_result.summary Si action_msg no está vacío, se asigna a security_result.summary. De lo contrario, si action no está vacía, se asigna a security_result.summary. De lo contrario, si act no está vacío, se asigna a security_result.summary.
app target.application Si destinationServiceName no está vacío, se asigna a app_name. De lo contrario, si app no está vacía y no contiene http o HTTP, se asigna a app_name. Por último, app_name se asigna a target.application.
bytes_in network.received_bytes Si in no está vacío, se asigna a bytes_in. Por último, bytes_in se asigna a network.received_bytes.
bytes_out network.sent_bytes Si out no está vacío, se asigna a bytes_out. Por último, bytes_out se asigna a network.sent_bytes.
gato security_result.category_details Si cat no está vacío, se asigna a category. Por último, la categoría se asigna a security_result.category_details.
cn1 security_result.detection_fields.value Si cn1 no está vacío, se asigna a security_result.detection_fields.value con la clave Disposition Number.
ContentType target.file.mime_type Si contentType no está vacío, se asigna a ContentType. Por último, ContentType se asigna a target.file.mime_type.
cs1 target_role.description cs1 se asigna a target_role.description.
cs2 security_result.category_details Si cs2 no está vacío y no es 0, se asigna a security_result.category_details con el prefijo Dynamic Category:.
cs3 target.file.mime_type cs3 se asigna a target.file.mime_type.
descripción metadata.description Si description no está vacía, se asigna a metadata.description.
destinationServiceName target.application Si destinationServiceName no está vacío, se asigna a app_name. Por último, app_name se asigna a target.application.
deviceFacility metadata.product_event_type Si product_event y deviceFacility no están vacíos, se concatenan con - y se asignan a metadata.product_event_type. De lo contrario, product_event se asigna a metadata.product_event_type.
disposition security_result.detection_fields.value Si disposition no está vacío, se asigna a security_result.detection_fields.value con la clave Disposition Number.
DST target.ip Si dst no está vacío y dvchost está vacío, se asigna a dst_ip. Por último, dst_ip se asigna a target.ip.
dst_host target.hostname Si dst no está vacío y dvchost está vacío, se asigna a dst_host. Por último, dst_host se asigna a target.hostname.
dst_ip target.ip Si dst no está vacío y dvchost está vacío, se asigna a dst_ip. Por último, dst_ip se asigna a target.ip.
dst_port target.port Si dst no está vacío y dvchost está vacío, se asigna a dst_port. Por último, dst_port se asigna a target.port.
duración network.session_duration.seconds Si la duración no está vacía ni es 0, se asigna a network.session_duration.seconds.
dvchost intermediary.ip Si dvchost no está vacío, se asigna a int_ip. Por último, int_ip se asigna a intermediary.ip si es una dirección IP válida; de lo contrario, se asigna a intermediary.hostname.
file_path target.file.full_path Si file_path no está vacío, se asigna a target.file.full_path.
host principal.ip Si host no está vacío, se asigna a src. Por último, src se asigna a principal.ip.
http_method network.http.method Si requestMethod no está vacío, se asigna a http_method. De lo contrario, si method no está vacío, se asigna a http_method. Por último, http_method se asigna a network.http.method.
http_proxy_status_code network.http.response_code Si http_response está vacío o es 0 o -, y http_proxy_status_code no está vacío, se asigna a network.http.response_code.
http_response network.http.response_code Si http_response no está vacía, no es 0 ni -, se asigna a network.http.response_code.
http_user_agent network.http.user_agent Si http_user_agent no está vacío y no es -, se asigna a network.http.user_agent.
en network.received_bytes Si in no está vacío, se asigna a bytes_in. Por último, bytes_in se asigna a network.received_bytes.
int_host intermediary.hostname Si int_ip no está vacío y int_host no está vacío y es diferente de int_ip, se asigna a intermediary.hostname.
int_ip intermediary.ip Si dvchost no está vacío, se asigna a int_ip. Por último, int_ip se asigna a intermediary.ip si es una dirección IP válida; de lo contrario, se asigna a intermediary.hostname.
level target_role.name Si el nivel no está vacío y el rol está vacío, se asigna al rol. Por último, el rol se asigna a target_role.name.
log_level security_result.severity Si severity es 1 o log_level contiene info o message contiene notice, security_result.severity se establece en INFORMATIONAL. Si severity es 7, security_result.severity se establece en HIGH.
loginID principal.user.userid Si loginID no está vacío, se asigna al usuario. Por último, si el usuario no está vacío, no es - y no contiene LDAP, se asigna a principal.user.userid.
método network.http.method Si requestMethod no está vacío, se asigna a http_method. De lo contrario, si method no está vacío, se asigna a http_method. Por último, http_method se asigna a network.http.method.
NatRuleId security_result.detection_fields.value Si NatRuleId no está vacío, se asigna a security_result.detection_fields.value con la clave NatRuleId.
descifrar? network.sent_bytes Si out no está vacío, se asigna a bytes_out. Por último, bytes_out se asigna a network.sent_bytes.
pid target.process.pid Si pid no está vacío, se asigna a target.process.pid.
política target_role.description Si Policy no está vacío, se asigna a la política. Si la política no está vacía ni es -, se asigna a target_role.description.
Política target_role.description Si Policy no está vacío, se asigna a la política. Si la política no está vacía ni es -, se asigna a target_role.description.
product_event metadata.product_event_type Si el producto no está vacío, se asigna a product_event. Si product_event y deviceFacility no están vacíos, se concatenan con - y se asignan a metadata.product_event_type. De lo contrario, product_event se asigna a metadata.product_event_type.
proxyStatus-code network.http.response_code Si http_response está vacío o es 0 o -, y http_proxy_status_code está vacío y proxyStatus-code no está vacío, se asigna a network.http.response_code.
refererUrl network.http.referral_url Si refererUrl no está vacío y no es -, se asigna a network.http.referral_url.
requestClientApplication network.http.user_agent Si requestMethod no está vacío, se asigna a http_user_agent. Por último, http_user_agent se asigna a network.http.user_agent.
requestMethod network.http.method Si requestMethod no está vacío, se asigna a http_method. Por último, http_method se asigna a network.http.method.
rol target_role.name Si el nivel no está vacío y el rol está vacío, se asigna al rol. Por último, el rol se asigna a target_role.name.
RuleID security_result.rule_id Si RuleID no está vacío, se asigna a security_result.rule_id.
serverStatus-code network.http.response_code Si http_response está vacío o es 0 o -, y http_proxy_status_code está vacío y proxyStatus-code no está vacío, se asigna a network.http.response_code.
gravedad, security_result.severity Si severity es 1 o log_level contiene info o message contiene notice, security_result.severity se establece en INFORMATIONAL. Si severity es 7, security_result.severity se establece en HIGH.
spt principal.port Si spt no está vacío, se asigna a src_port. Por último, src_port se asigna a principal.port.
src principal.ip Si src_host no está vacío, se asigna a source_ip_temp. Si source_ip_temp es una dirección IP válida y src está vacía, se asigna a src. Si host no está vacío, se asigna a src. Por último, src se asigna a principal.ip.
src_host principal.hostname Si src_host no está vacío, se asigna a source_ip_temp. Si source_ip_temp no es una dirección IP válida, se asigna a principal.hostname. Si source_ip_temp es una dirección IP válida y src está vacía, se asigna a src. Por último, src se asigna a principal.ip.
src_port principal.port Si src_port no está vacío, se asigna a principal.port.
suser principal.user.userid Si loginID no está vacío, se asigna al usuario. Si suser no está vacío, se asigna a user. Por último, si el usuario no está vacío, no es - y no contiene LDAP, se asigna a principal.user.userid.
url target.url Si la URL no está vacía, se asigna a target.url.
usuario principal.user.userid Si loginID no está vacío, se asigna al usuario. Si suser no está vacío, se asigna a user. De lo contrario, si usrName no está vacío, se asigna a user. Por último, si el usuario no está vacío, no es - y no contiene LDAP, se asigna a principal.user.userid.
usrName principal.user.userid Si loginID no está vacío, se asigna al usuario. Si suser no está vacío, se asigna a user. De lo contrario, si usrName no está vacío, se asigna a user. Por último, si el usuario no está vacío, no es - y no contiene LDAP, se asigna a principal.user.userid.
cuando metadata.event_timestamp Si when no está vacío, se analiza y se asigna a metadata.event_timestamp.
metadata.log_type El valor FORCEPOINT_WEBPROXY está codificado en metadata.log_type.
metadata.product_name El valor Forcepoint Webproxy está codificado en metadata.product_name.
metadata.vendor_name El valor Forcepoint está codificado en metadata.vendor_name.
network.application_protocol Si dst_port es 80, network.application_protocol se establece en HTTP. Si dst_port es 443, network.application_protocol se establece en HTTPS.
principal.user.group_identifiers Si el usuario no está vacío, no es - y contiene LDAP, la parte de la UO de la cadena de usuario se extrae y se asigna a principal.user.group_identifiers.
principal.user.user_display_name Si el usuario no está vacío, no es - y contiene LDAP, la parte del nombre de usuario de la cadena de usuario se extrae y se asigna a principal.user.user_display_name.
security_result.action Si action_msg, action o act no están vacíos, sec_action se establece en ALLOW o BLOCK según sus valores. Por último, sec_action se asigna a security_result.action.
security_result.category_details Si cat no está vacío, se asigna a category. Por último, la categoría se asigna a security_result.category_details. Si cs2 no está vacío y no es 0, se asigna a security_result.category_details con el prefijo Dynamic Category:.
security_result.detection_fields.key El valor Disposition Number está codificado en security_result.detection_fields.key cuando se asigna la disposición o cn1. El valor NatRuleId está codificado en security_result.detection_fields.key cuando se asigna NatRuleId. El valor Category Number está codificado en security_result.detection_fields.key cuando se asigna category_no.
security_result.severity Si severity es 1 o log_level contiene info o message contiene notice, security_result.severity se establece en INFORMATIONAL. Si severity es 7, security_result.severity se establece en HIGH.
target_role.description Si Policy no está vacío, se asigna a la política. Si la política no está vacía ni es -, se asigna a target_role.description.
target_role.name Si el nivel no está vacío y el rol está vacío, se asigna al rol. Por último, el rol se asigna a target_role.name.
category_no security_result.detection_fields.value Si category_no no está vacío, se asigna a security_result.detection_fields.value con la clave Category Number.

Cambios

2025-01-16

Mejora:

  • Se asignó security_result.action a BLOCK cuando s-action es TCP_DENIED.

2024-10-18

Mejora:

  • Se agregó compatibilidad para analizar los registros CSV sin analizar.
  • Se agregó compatibilidad para descartar registros CSV no válidos.
  • Se asignó host-url a principal.url.

2024-07-10

Mejora:

  • Se agregaron los patrones de Grok para los nuevos registros de formato KV.
  • Se asignó username a principal.user.userid.
  • Se asignó cs-uri a target.url.
  • Se asignaron cs-uri-query , time-taken , filter-category , cs-uri-path , cs-uri-extension y rs_content_type a additional.fields.
  • Si sc-filter-result es OBSERVED, establece security_result.action como ALLOW. De lo contrario, si sc-filter-result es DENIED, establece security_result.action como BLOCK. De lo contrario, establece security_result.action como ALLOW.
  • Se asignó cs-auth-group a principal.user_group_identifiers.
  • Se asignó cs-method a network.http.method.
  • Se asignó sc-status a response_code.
  • Se asignó s-action a security_result.detection_fields.
  • Se asignó srcport a principal.port.
  • Se asignó dstport a target.port.
  • Se asignó sc-bytes a network.received_bytes.
  • Se asignó cs-bytes a network.sent_bytes.
  • Se asignó cs a security_result.summary.
  • Se asignó cs_referer a network.http.referral_url.
  • Se asignó cs-host a target.hostname.

2024-06-10

Mejora:

  • Se agregó compatibilidad con los registros en formato CSV.

12-06-2023

Mejora:

  • Se modificó el patrón Grok para analizar registros con errores en los que algunos de los valores están presentes como "-".
  • Se agregó la verificación de condiciones para el campo "http_response" antes de la asignación.

2022-08-11

Mejora:

  • Se modificó grok para analizar registros de tipo CEF sin encabezado de syslog.

2022-05-16

Mejora:

  • Número de categoría asignado a security_result.detection_fields

2022-05-05

Mejora:

  • Se agregó el mapeo de campos: requestClientApplication a http.user_agent, proxyStatus-code a http.response_code, disposition y cn1 a security_result.detection_fields.
  • Se asignó el campo "cs2" a "security_result.category_details" si el valor de "cs2Label" es "DynCat".
  • Se asignó el campo "cs2" a "security_result.detection_fields" si el valor de "cs2Label" es "NatRuleId".

¿Necesitas más ayuda? Obtén respuestas de miembros de la comunidad y profesionales de Google SecOps.