Recopila registros de Symantec CloudSOC CASB
En este documento, se explica cómo transferir registros de Symantec CloudSOC a Google Security Operations con Bindplane. El analizador extrae registros de mensajes con formato syslog o JSON. Realiza varias operaciones clave: analiza el campo de mensaje, convierte el mensaje a JSON si es necesario, extrae campos, los asigna al Modelo de datos unificado (UDM) y enriquece el evento con contexto adicional, como marcas de tiempo y detalles de los resultados de seguridad. El analizador también controla varios formatos de registro y realiza acciones específicas según el campo activity_type
para categorizar el evento correctamente.
Antes de comenzar
Asegúrate de cumplir con los siguientes requisitos previos:
- Instancia de Google SecOps
- Windows 2016 o versiones posteriores, o un host de Linux con
systemd
- Si se ejecuta detrás de un proxy, los puertos de firewall están abiertos.
- Acceso privilegiado a Symantec CloudSOC
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 la 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: 'SYMANTEC_CASB' 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 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 Syslog en Symantec CASB
- Accede a tu host de Symantec CloudSOC.
Ejecuta el siguiente comando para identificar qué registrador usa el sistema:
ls –d /etc/*syslog*
Ve a la sección correspondiente, según la respuesta del comando anterior:
- syslog.conf: Syslog heredado.
- syslog-ng.conf: Syslog-ng.
Configuración heredada de Syslog
Abre el archivo
syslogd
, que suele estar ubicado en el directorio/etc/default
, con el editorvi
.vi /etc/default/syslogd
Asegúrate de que el valor de
SYSLOGD
contenga la marca-r
.SYSLOGD="-r"
Guarda el archivo y sal del editor:
- Presiona la tecla Esc para cambiar al modo de comando.
- Presiona
:
(dos puntos) para abrir la barra de mensajes. - Escribe
wq
después de los dos puntos y presiona Intro.
Abre el archivo
services
, que suele estar ubicado en el directorio/etc
, con el editorvi
.vi /etc/services
Edita el valor del puerto para el servicio syslog:
syslog 514/udp
Guarda el archivo y sal del editor:
- Presiona la tecla Esc para cambiar al modo de comando.
- Presiona
:
(dos puntos) para abrir la barra de mensajes. - Escribe
wq
después de los dos puntos y presiona Intro.
Abre el archivo
syslog.conf
, que suele encontrarse en el directorio/etc
, con el editorvi
.vi /etc/syslog.conf
Actualiza la configuración para reenviar todos los registros a Google SecOps.
*.* @bindplane_agent_host
Guarda el archivo y sal del editor:
- Presiona la tecla Esc para cambiar al modo de comando.
- Presiona
:
(dos puntos) para abrir la barra de mensajes. - Escribe
wq
después de los dos puntos y presiona Intro.
Abre el archivo
hosts
, que suele encontrarse en el directorio/etc
, con el editorvi
.vi /etc/hosts
Crea una entrada de DNS local para
bindplane_agent_host
.0.0.0.0 bindplane_agent_host
Guarda el archivo y sal del editor:
- Presiona la tecla Esc para cambiar al modo de comando.
- Presiona
:
(dos puntos) para abrir la barra de mensajes. - Escribe
wq
después de los dos puntos y presiona Intro.
Reinicia el servicio del daemon syslog.
Configuración de syslog-ng
Abre el archivo
syslog-ng.conf
, que suele encontrarse en el directorio/etc
, con el editorvi
.vi /etc/syslog-ng.conf
Agrega el siguiente código al final del archivo:
destination d____ { udp("bindplane_agent_host" port(514));}; log {source(s_src); destination(d____);};
Abre el archivo
hosts
, que suele encontrarse en el directorio/etc
, con el editorvi
.vi /etc/hosts
Crea una entrada de DNS local para
bindplane_agent_host
.0.0.0.0 bindplane_agent_host
Guarda el archivo y sal del editor:
- Presiona la tecla Esc para cambiar al modo de comando.
- Presiona
:
(dos puntos) para abrir la barra de mensajes. - Escribe
wq
después de los dos puntos y presiona Intro.
Reinicia el servicio del daemon syslog-ng.
Tabla de asignación de UDM
Campo de registro | Asignación de UDM | Lógica |
---|---|---|
_domain |
target.hostname |
El valor del campo _domain |
_domain |
target.asset.hostname |
El valor del campo _domain |
_id |
metadata.product_log_id |
El valor del campo _id |
actions_taken |
security_result.detection_fields[].value |
Es el valor del campo actions_taken . La clave se genera de forma dinámica como Action_ + índice. |
activity_type |
metadata.product_event_type |
El valor del campo activity_type si product_data.activity_type está vacío o el valor de product_data.activity_type si no está vacío. |
collector_device_ip |
principal.ip |
Valor del campo collector_device_ip , si no es Unknown IP . |
collector_device_ip |
principal.asset.ip |
Valor del campo collector_device_ip , si no es Unknown IP . |
collector_device_name |
principal.hostname |
Es el valor del campo collector_device_name . |
collector_device_name |
principal.asset.hostname |
Es el valor del campo collector_device_name . |
content_checks.dlp.raw_response.contentdetails[].contentBlockId |
security_result.detection_fields[].value |
Es el valor de content_checks.dlp.raw_response.contentdetails[].contentBlockId . La clave se genera de forma dinámica como contentBlockId_ + índice. |
content_checks.dlp.raw_response.contentdetails[].topLevelFileType |
security_result.detection_fields[].value |
Es el valor de content_checks.dlp.raw_response.contentdetails[].topLevelFileType . La clave se genera de forma dinámica como topLevelFileType_ + índice. |
content_checks.dlp.raw_response.requestid |
security_result.detection_fields[].value |
Es el valor de content_checks.dlp.raw_response.requestid . La clave es Request ID . |
content_checks.dlp.raw_response.responseaction |
security_result.detection_fields[].value |
Es el valor de content_checks.dlp.raw_response.responseaction . La clave es Response Action . |
content_checks.dlp.raw_response.violation[].name |
security_result.detection_fields[].value |
Es el valor de content_checks.dlp.raw_response.violation[].name . La clave se genera de forma dinámica como Violation_Policy_Name_ + índice. |
content_checks.dlp.raw_response.violation[].policyId |
security_result.detection_fields[].value |
Es el valor de content_checks.dlp.raw_response.violation[].policyId . La clave se genera de forma dinámica como Violation_Policy_ID_ + índice. |
content_checks.dlp.updated_timestamp |
additional.fields[].value.string_value |
Es el valor de content_checks.dlp.updated_timestamp . La clave es Updated TimeStamp . |
content_checks.filename |
target.file.full_path |
Es el valor de content_checks.filename . |
content_checks.mimetype |
target.file.mime_type |
Es el valor de content_checks.mimetype . |
content_checks.risktype_list[] |
security_result.detection_fields[].value |
Es el valor de content_checks.risktype_list[] . La clave se genera de forma dinámica como RiskType_ + índice. |
content_checks.vba_macros.expressions[].values[].key |
security_result.detection_fields[].key |
Es el valor de content_checks.vba_macros.expressions[].values[].key concatenado con los índices. |
content_checks.vba_macros.expressions[].values[].value |
security_result.detection_fields[].value |
Es el valor de content_checks.vba_macros.expressions[].values[].value . |
content_checks.vk_content_iq_violations[] |
security_result.detection_fields[].value |
Es el valor de content_checks.vk_content_iq_violations[] . La clave se genera de forma dinámica como content_violation_ + índice. |
content_checks.vk_dlp_policy_violations[] |
security_result.detection_fields[].value |
Es el valor de content_checks.vk_dlp_policy_violations[] . La clave se genera de forma dinámica como dlp_policy_violation_ + índice. |
content_checks.vk_encryption |
security_result.detection_fields[].value |
Es el valor de content_checks.vk_encryption . La clave es vk_encryption . |
content_checks.vk_glba |
security_result.detection_fields[].value |
Es el valor de content_checks.vk_glba . La clave es vk_glba . |
content_checks.vk_hipaa |
security_result.detection_fields[].value |
Es el valor de content_checks.vk_hipaa . La clave es vk_hipaa . |
content_checks.vk_pci |
security_result.detection_fields[].value |
Es el valor de content_checks.vk_pci . La clave es vk_pci . |
content_checks.vk_pii |
security_result.detection_fields[].value |
Es el valor de content_checks.vk_pii . La clave es vk_pii . |
content_checks.vk_source_code |
security_result.detection_fields[].value |
Es el valor de content_checks.vk_source_code . La clave es vk_source_code . |
content_checks.vk_vba_macros |
security_result.detection_fields[].value |
Es el valor de content_checks.vk_vba_macros . La clave es vk_vba_macros . |
content_checks.vk_virus |
security_result.detection_fields[].value |
Es el valor de content_checks.vk_virus . La clave es vk_virus . |
content_checks.violations |
security_result.detection_fields[].value |
Es el valor de content_checks.violations . La clave es violations . |
created_timestamp |
additional.fields[].value.string_value |
Es el valor de created_timestamp . La clave es Created TimeStamp . |
date |
metadata.event_timestamp.seconds |
Son los segundos de época extraídos del campo date . |
device_ip |
target.ip |
Valor del campo device_ip , si no es Unknown IP . |
device_ip |
target.asset.ip |
Valor del campo device_ip , si no es Unknown IP . |
file_size |
target.file.size |
El valor de file_size o product_data.file_size si el primero está vacío. Se convirtió en un número entero sin signo. |
file_url |
target.file.full_path |
Es el valor de product_data.file_url . |
group_name |
target.group.group_display_name |
Es el nombre visible extraído del campo group_name . |
hosts[] |
principal.ip |
Valores del campo hosts , separados por comas. |
inserted_timestamp |
additional.fields[].value.string_value |
Es el valor de inserted_timestamp . La clave es Inserted TimeStamp . |
instance |
principal.hostname |
El primer valor del campo instance si es un array, o el valor del campo instance si es una cadena. |
instance |
principal.asset.hostname |
El primer valor del campo instance si es un array, o el valor del campo instance si es una cadena. |
ioi_code |
security_result.summary |
Es el valor del campo ioi_code . |
_latency |
security_result.detection_fields[].value |
Es el valor del campo _latency . La clave es Latency . |
locations |
security_result.detection_fields[].value |
Es el valor del campo locations . La clave es Locations . |
log_name |
intermediary.asset.asset_id |
Es el ID de registro extraído del campo log_name , con el prefijo logid: . |
mailbox_owner |
target.user.userid |
Es el valor de product_data.mailbox owner . |
metadata.log_type |
metadata.log_type |
Se codificó como SYMANTEC_CASB . |
metadata.product_name |
metadata.product_name |
Se codificó como SYMANTEC_CASB . |
metadata.vendor_name |
metadata.vendor_name |
Se codificó como SYMANTEC . |
msg |
metadata.description |
Es el valor del campo msg o del campo message si msg no está presente. |
name |
security_result.detection_fields[].value |
Es el valor del campo name . La clave es Name . |
object_name |
security_result.detection_fields[].value |
Es el valor del campo object_name . La clave es Object Name . |
object_type |
target.resource.name |
Es el valor del campo object_type . |
org_unit |
security_result.detection_fields[].value |
Es el valor del campo org_unit . La clave es org_unit ID . |
policy_action |
security_result.action_details |
Es el valor del campo policy_action . |
policy_type |
security_result.detection_fields[].value |
Es el valor del campo policy_type . La clave es policy_type . |
policy_violated |
security_result.detection_fields[].value |
Es el valor del campo policy_violated . La clave es policy_violated . |
product_data._domain |
target.hostname |
Es el valor de product_data._domain . |
product_data._domain |
target.asset.hostname |
Es el valor de product_data._domain . |
product_data.activity_type |
metadata.product_event_type |
Es el valor de product_data.activity_type . |
product_data.file url |
target.file.full_path |
Es el valor de product_data.file url . |
product_data.file_size |
target.file.size |
Es el valor de product_data.file_size . |
product_data.group |
target.group.group_display_name |
Es el valor de product_data.group . |
product_data.location |
principal.location.country_or_region |
Es el valor de product_data.location . |
product_data.logon error |
security_result.summary |
Es el valor de product_data.logon error . |
product_data.mailbox owner |
target.user.userid |
Es el valor de product_data.mailbox owner . |
product_data.name |
target.file.full_path |
Es el valor de product_data.name . |
product_data.object_name |
target.file.full_path |
Es el valor de product_data.object_name . |
product_data.originatingserver product_data.service |
target.application |
Es el valor de product_data.service . |
product_data.site url |
target.url |
Es el valor de product_data.site url . |
product_data.target |
target.user.userid |
Es el valor de product_data.target . |
product_data.useragent |
network.http.user_agent |
Es el valor de product_data.useragent . |
product_name |
intermediary.application |
Es el valor del campo product_name . |
product_uid |
metadata.product_name |
Es el valor del campo product_uid . |
responsible_logs |
additional.fields[].value.string_value |
Es el valor del campo responsible_logs . La clave es responsible_logs . |
resource_id |
target.resource.product_object_id |
Es el valor del campo resource_id . |
risks |
security_result.detection_fields[].value |
Es el valor del campo risks . La clave es Risks . |
security_result.action |
security_result.action |
Derivado de product_data.logon error . Se establece en BLOCK si product_data.logon error es BlockedByConditionalAccess . |
security_result.severity |
security_result.severity |
El valor en mayúsculas del campo severity , si es uno de los niveles de gravedad admitidos. |
security_result.severity_details |
security_result.severity_details |
Es el valor del campo severity , si no es uno de los niveles de gravedad admitidos. |
security_result.summary |
security_result.summary |
El valor del campo ioi_code o product_data.logon error si ioi_code no está presente. |
service |
target.application |
Es el valor del campo service si product_data.service está vacío. |
site_url |
target.url |
Es el valor de product_data.site url . |
source |
principal.resource.attribute.labels[].value |
Es el valor del campo source . La clave es Source . |
sub_feature |
additional.fields[].value.string_value |
Es el valor del campo sub_feature . La clave es Sub Feature . |
target.application |
target.application |
Se deriva en función de product_data.activity_type y la presencia de la principal y el objetivo. |
target.resource.name |
target.resource.name |
Se deriva en función de product_data.activity_type y la presencia de la principal y el objetivo. |
threat_score |
security_result.detection_fields[].value |
Es el valor del campo threat_score . La clave es Threat Score . |
transaction_id |
security_result.detection_fields[].value |
Es el valor del campo transaction_id . La clave es Transaction ID . |
updated_timestamp |
additional.fields[].value.string_value |
El valor de updated_timestamp o content_checks.dlp.updated_timestamp si el primero está vacío. La clave es Updated TimeStamp . |
user |
principal.user.userid |
Es el valor del campo user . |
user_email |
target.user.userid |
Es el valor del campo user_email . |
user_mail |
target.user.userid |
Es el valor del campo user_mail extraído del campo msg . |
user_name |
principal.user.user_display_name |
Es el valor del campo user_name . |
user_uid |
principal.user.userid o target.user.userid |
Es el valor del campo user_uid . Se asigna a principal.user.userid si product_data.activity_type no es InvalidLogin ni Login ; de lo contrario, se asigna a target.user.userid . |
uuid |
intermediary.asset.product_object_id |
Es el valor del campo uuid . |
version |
metadata.product_version |
Es el valor del campo version . |
¿Necesitas más ayuda? Obtén respuestas de miembros de la comunidad y profesionales de Google SecOps.