Recopila registros del proxy de Forcepoint
En este documento, se explica cómo transferir registros de Forcepoint Proxy 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 coherente de los datos.
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 ejecutas la herramienta 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
- Accede a la consola de Google SecOps.
- Ve a SIEM Settings > Collection Agents.
- 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
- Accede a la consola de Google SecOps.
- Ve a SIEM Settings > Profile.
- Copia y guarda el ID de cliente de la sección Detalles de la organización.
Instala el agente de BindPlane
Instalación en Windows
- Abre el símbolo del sistema o PowerShell como administrador.
Ejecuta el siguiente comando:
msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
Instalación en Linux
- Abre una terminal con privilegios de raíz o sudo.
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
- Para obtener más opciones de instalación, consulta esta guía de instalación.
Configura el agente de BindPlane para transferir Syslog y enviarlo a Google SecOps
Accede al archivo de configuración:
- 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. - Abre el archivo con un editor de texto (por ejemplo,
nano
,vi
o Bloc de notas).
- Ubica el archivo
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
Reemplaza el puerto y la dirección IP según sea necesario en tu infraestructura.
Reemplaza
<customer_id>
por el ID de cliente real.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 Cómo obtener el archivo de autenticación de la transferencia de datos 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 de Servicios o ingresar el siguiente comando:
net stop BindPlaneAgent && net start BindPlaneAgent
Configura Forcepoint Web Security Suite
- Accede a la consola de Forcepoint.
- Ve a Web > Configuración > General.
- Haz clic en Integración de SIEM.
- Selecciona la casilla de verificación Habilitar la integración del SIEM para este servidor de políticas.
- 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 del SIEM: Selecciona Syslog/CEF (Arcsight).
- Haz clic en Aceptar.
- Haz clic en Guardar y volver a 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 la acción 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 la acción 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 la app no está vacía y no contiene http ni 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 la descripción 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 la disposición no está vacía, 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 y no 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 el 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 el método 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ío, 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 la gravedad es 1 o log_level contiene info o message contiene notice , security_result.severity se establece en INFORMATIONAL . Si la gravedad 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 el método 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 la política no está vacía, se asigna a policy. Si la política no está vacía y no es - , se asigna a target_role.description. |
Política | target_role.description | Si la política no está vacía, se asigna a policy. Si la política no está vacía y no 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 la gravedad es 1 o log_level contiene info o message contiene notice , security_result.severity se establece en INFORMATIONAL . Si la gravedad 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ío, se asigna a src. Si el 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ío, 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 de forma fija en metadata.log_type. |
|
metadata.product_name | El valor Forcepoint Webproxy está codificado de forma fija en metadata.product_name. |
|
metadata.vendor_name | El valor Forcepoint está codificado de forma rígida 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 , se extrae la parte de la UO de la cadena del usuario y se asigna a principal.user.group_identifiers. |
|
principal.user.user_display_name | Si el usuario no está vacío y no es - y contiene LDAP , se extrae la parte del nombre de usuario de la cadena de usuario 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 de forma rígida en security_result.detection_fields.key cuando se asigna la disposición o cn1. El valor NatRuleId está codificado de forma rígida en security_result.detection_fields.key cuando se asigna NatRuleId. El valor Category Number está codificado de forma rígida en security_result.detection_fields.key cuando se asigna category_no. |
|
security_result.severity | Si la gravedad es 1 o log_level contiene info o message contiene notice , security_result.severity se establece en INFORMATIONAL . Si la gravedad es 7 , security_result.severity se establece en HIGH . |
|
target_role.description | Si la política no está vacía, se asigna a policy. Si la política no está vacía y no 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 . |
¿Necesitas más ayuda? Obtén respuestas de miembros de la comunidad y profesionales de Google SecOps.