Recoger registros de VPN de Cisco
En este documento se explica cómo ingerir registros de VPN de Cisco ASA en Google Security Operations mediante Bindplane. El analizador extrae campos de los mensajes syslog mediante patrones grok, que gestionan tanto los formatos syslog estándar como las estructuras de mensajes alternativas. Después, asigna los campos extraídos al modelo de datos unificado (UDM), categoriza los eventos en función de los IDs y la información extraída, y enriquece los datos con metadatos como el proveedor, el producto y el tipo de evento. El analizador también gestiona IDs de evento específicos, aplica patrones y lógica de grok adicionales para extraer detalles relevantes y asignarlos a los campos de UDM correspondientes.
Antes de empezar
Asegúrate de que cumples los siguientes requisitos previos:
- Instancia de Google SecOps
- Un host Windows 2016 o posterior, o un host Linux con
systemd
- Si se ejecuta a través de un proxy, los puertos del cortafuegos están abiertos
- Acceso privilegiado a Cisco ASA
Obtener el archivo de autenticación de ingestión de Google SecOps
- Inicia sesión en la consola de Google SecOps.
- Ve a Configuración de SIEM > Agentes de recogida.
- Descarga el archivo de autenticación de ingestión. Guarda el archivo de forma segura en el sistema en el que se instalará Bindplane.
Obtener el ID de cliente de Google SecOps
- Inicia sesión en la consola de Google SecOps.
- Ve a Configuración de SIEM > Perfil.
- Copia y guarda el ID de cliente de la sección Detalles de la organización.
Instalar el agente de Bindplane
Instala el agente de Bindplane en tu sistema operativo Windows o Linux siguiendo las instrucciones que se indican a continuación.
Instalación de ventanas
- 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 de Linux
- Abre un terminal con privilegios de superusuario 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 ver más opciones de instalación, consulta la guía de instalación.
Configurar el agente de BindPlane para ingerir Syslog y enviarlo a Google SecOps
- Accede al archivo de configuración:
- Busca el archivo
config.yaml
. Normalmente, 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).
- Busca 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_file_path: '/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 log_type: 'CISCO_VPN' raw_log_field: body ingestion_labels: service: pipelines: logs/source0__chronicle_w_labels-0: receivers: - udplog exporters: - chronicle/chronicle_w_labels
- Sustituye el puerto y la dirección IP según sea necesario en tu infraestructura.
- Sustituye
<customer_id>
por el ID de cliente real. - Actualiza
/path/to/ingestion-authentication-file.json
a la ruta en la que se guardó el archivo de autenticación en la sección Obtener el archivo de autenticación de ingestión 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 Servicios o introducir el siguiente comando:
net stop BindPlaneAgent && net start BindPlaneAgent
Configurar Syslog para Cisco ASA VPN
- Abre Cisco ASDM.
- Vaya a Configuración > Funciones > Propiedades > Registro > Configuración de registro.
- Selecciona la casilla Habilitar registro para habilitar syslog.
- Selecciona Servidores Syslog en Registro y haz clic en Añadir.
- Introduce los siguientes detalles de configuración en la ventana Add Syslog Server (Añadir servidor Syslog):
- Interfaz: selecciona la interfaz para la comunicación saliente.
- Dirección IP: introduce la dirección IP del agente de Bindplane.
- Protocolo: selecciona UDP.
- Puerto: introduce el número de puerto del agente de Bindplane.
- Haz clic en Aceptar.
- Selecciona Filtros de registro en la sección Registro.
- Selecciona Servidores Syslog y haz clic en Editar.
- Selecciona Informativa en la lista como Filtrar por gravedad.
- Haz clic en Aceptar.
- Haz clic en Aplicar.
Tabla de asignación de UDM
Campo de registro | Asignación de UDM | Lógica |
---|---|---|
accesslist |
target.resource.name |
Se extrae de message_info cuando eventtype es "ASA-4-106103". Representa el nombre de la lista de acceso. |
action |
security_result.action |
Derivada por el analizador en función de las palabras clave del mensaje de registro (por ejemplo, Denegar, Rechazar, Permitir o Aceptar. Maps para PERMITIR o BLOQUEAR. |
action |
security_result.action_details |
Valor de cadena sin formato de la acción realizada (por ejemplo, "permitted" ("permitido"), "denied" ("denegado") o "disconnected" ("desconectado"). |
app_name |
principal.application |
El nombre de la aplicación utilizada por la entidad (por ejemplo, "CLI"). Extraído de message_details para los IDs de evento 111008, 111009 y 111010. |
assigned_ipv4 |
N/A | Aunque se analiza, este campo no se asigna al objeto IDM en el UDM. |
assigned_ipv6 |
N/A | Aunque se analiza, este campo no se asigna al objeto IDM en el UDM. |
bytes_rcv |
network.received_bytes |
Número de bytes recibidos en la sesión. Extraído de log_mssg para el ID de evento 113019. |
bytes_sent |
network.sent_bytes |
Número de bytes enviados en la sesión. Extraído de log_mssg para el ID de evento 113019. |
cipher |
network.tls.cipher |
El cifrado usado en la sesión SSL. Extraído de message_info para el tipo de evento 725012. |
cisco_message_number |
security_result.rule_name |
El número de mensaje de Cisco, extraído del campo eventtype . |
cisco_severity |
security_result.severity_details |
Nivel de gravedad sin procesar de Cisco, extraído del campo eventtype . |
command |
N/A | Aunque se analiza, este campo no se asigna al objeto IDM en el UDM. |
cumulative_total_count.key |
security_result.outcomes.key |
La clave "cumulative_total_count" se añade a la matriz security_result.outcomes . |
cumulative_total_count.value |
security_result.outcomes.value |
El valor del recuento total acumulado, extraído de message_info . |
current_average_rate.key |
security_result.outcomes.key |
La clave "current_average_rate" se añade a la matriz security_result.outcomes . |
current_average_rate.value |
security_result.outcomes.value |
Valor de la tarifa media actual, extraído de message_info . |
current_burst_rate.key |
security_result.outcomes.key |
La clave "current_burst_rate" se añade a la matriz security_result.outcomes . |
current_burst_rate.value |
security_result.outcomes.value |
Valor de la tasa de ráfaga actual, extraído de message_info . |
desc |
metadata.description |
Descripción del evento, extraída del mensaje de registro. Se usa cuando no hay una descripción más específica. |
description |
metadata.description |
Una descripción más detallada del evento, extraída del mensaje de registro cuando está disponible. |
destination_ip |
target.ip , target.asset.ip |
Dirección IP de destino, extraída de varios formatos de mensajes de registro. |
destination_ip_port |
target.port o network.application_protocol |
Puerto de destino, extraído de varios formatos de mensajes de registro. Si el valor extraído no es un número, se trata como el protocolo de aplicación. |
dst_email |
target.user.email_addresses o target.user.userid |
Dirección de correo electrónico o ID de usuario de destino, extraído de message_info . Si el valor coincide con un formato de correo electrónico, se añade a email_addresses . De lo contrario, se usa como userid . |
dst_host |
target.hostname |
Nombre de host de destino, extraído de message_info . |
dst_ip |
target.ip , target.asset.ip |
Dirección IP de destino, extraída del patrón grok principal u otros patrones específicos. |
dst_port |
target.port |
Puerto de destino, extraído del patrón grok principal u otros patrones específicos. |
duration |
network.session_duration |
Duración de la sesión, extraída de message_details y convertida a segundos. |
event_date |
@timestamp |
La fecha y la hora del evento, que se obtienen a partir de varios campos de marca de tiempo del registro sin procesar y se analizan mediante el filtro date . |
event_id |
metadata.product_event_type (parte de) |
Se usa en combinación con event_severity para formar el campo metadata.product_event_type . |
event_name |
metadata.product_event_type (parte de) |
Se usa en combinación con event_severity y event_type para formar el campo metadata.product_event_type cuando está disponible. |
event_severity |
metadata.product_event_type (parte de), security_result.severity , is_alert , is_significant |
Se usa en combinación con event_id o event_name y event_type para formar el campo metadata.product_event_type . También se usa para obtener los campos security_result.severity , is_alert y is_significant . |
event_type |
metadata.product_event_type (parte de) |
Se usa en combinación con event_name y event_severity para formar el campo metadata.product_event_type cuando está disponible. |
eventtype |
metadata.product_event_type , security_result.rule_name , security_result.severity_details , security_result.severity |
Cadena del tipo de evento que se usa para obtener los campos metadata.product_event_type , security_result.rule_name , security_result.severity_details y security_result.severity . |
fragment_id |
security_result.about.resource.id |
ID del fragmento de IP, extraído de message_details para el ID de evento 209005. |
group |
principal.group.group_display_name , principal.user.group_identifiers , target.user.group_identifiers |
Nombre del grupo, extraído de varios formatos de mensajes de registro. |
group_name |
principal.group.group_display_name |
Nombre del grupo extraído del campo group cuando es un nombre de host. |
has_principal_ip |
N/A | Variable interna usada para la lógica, no asignada a UDM. |
has_target_ip |
N/A | Variable interna usada para la lógica, no asignada a UDM. |
hostname |
principal.hostname , principal.asset.hostname |
Nombre de host de la entidad de seguridad, extraído de varios formatos de mensajes de registro. |
hostname2 |
principal.hostname , principal.asset.hostname |
Nombre de host de la entidad principal, extraído como alternativa cuando hostname no está disponible. |
icmp_code |
N/A | Aunque se analiza, este campo no se asigna al objeto IDM en el UDM. |
icmp_dst_ip |
target.ip , target.asset.ip |
Dirección IP de destino de un mensaje de error ICMP. |
icmp_id |
N/A | Aunque se analiza, este campo no se asigna al objeto IDM en el UDM. |
icmp_src_ip |
principal.ip , principal.asset.ip |
Dirección IP de origen de un mensaje de error ICMP. |
icmp_type |
N/A | Aunque se analiza, este campo no se asigna al objeto IDM en el UDM. |
intermediary_ip |
principal.ip , principal.asset.ip |
Dirección IP intermediaria, extraída de message_info para el ID de evento 111010. |
invalid_ip |
N/A | Variable interna usada para la lógica, no asignada a UDM. |
ip_1 |
principal.ip , principal.asset.ip |
Dirección IP de origen extraída como alternativa cuando las IPs de origen y de destino son las mismas. |
ip_2 |
target.ip , target.asset.ip |
Dirección IP de destino extraída como alternativa cuando las IPs de origen y de destino son las mismas. |
ipprotocol |
network.ip_protocol |
Protocolo IP, extraído de varios formatos de mensajes de registro y convertido a mayúsculas. |
issuer |
network.tls.client.certificate.issuer |
Emisor del certificado de peer, extraído de message_details para el ID de evento 717037. |
local_proxy_ip |
intermediary.ip |
Dirección IP del proxy local, extraída de message_details para el ID de evento 713041. |
log_mssg |
security_result.description , sr.action |
Se usa para rellenar el campo security_result.description y extraer acciones de autenticación. |
login |
security_result.summary |
Estado de inicio de sesión, extraído de message_info . |
max_configured_rate.key |
security_result.outcomes.key |
La clave "max_configured_rate" se añade a la matriz security_result.outcomes . |
max_configured_rate.value |
security_result.outcomes.value |
Valor de la tasa máxima configurada, extraído de message_info . |
message_details |
Varios campos | La parte principal del mensaje de registro, que contiene detalles sobre el evento. Se analiza con varios patrones grok en función del ID de evento. |
message_info |
metadata.description |
Se usa para rellenar el campo metadata.description cuando está disponible. |
observer |
observer.hostname o observer.ip |
Nombre de host o dirección IP del observador, extraído del mensaje de registro. |
observer_ip |
observer.ip |
Dirección IP del observador, extraída del campo observer . |
peer_type |
N/A | Aunque se analiza, este campo no se asigna al objeto IDM en el UDM. |
policy |
target.resource.name |
Nombre de la política, extraído de message_details para el ID de evento 113003. |
policy_name |
target.resource.name |
Nombre de la política, extraído de message_details para los IDs de evento 113009 y 113011. |
principal_ip |
principal.ip , principal.asset.ip |
Dirección IP principal, extraída de message_details para el ID de evento 113009. |
privilege_level_from |
N/A | Aunque se analiza, este campo no se asigna al objeto IDM en el UDM. |
privilege_level_to |
N/A | Aunque se analiza, este campo no se asigna al objeto IDM en el UDM. |
process |
principal.process.command_line |
Nombre del proceso, extraído de message_details para el ID de evento 711004. |
protocol |
network.ip_protocol o network.application_protocol |
Protocolo usado en el evento, extraído de varios formatos de mensajes de registro. Si el protocolo es un protocolo IP estándar (ICMP, TCP, UDP o ESP), se asigna a network.ip_protocol . De lo contrario, se asigna a network.application_protocol . |
reason |
security_result.description |
Motivo del evento, extraído de message_details para el ID de evento 113016. |
remote_proxy_ip |
intermediary.ip |
Dirección IP del proxy remoto, extraída de message_details para el ID de evento 713041. |
retrieved_file |
target.file.full_path |
Ruta del archivo recuperado, extraída de message_info . |
security_action |
security_result.action |
Acción de seguridad, derivada por el analizador en función del contexto del evento. |
security_category |
security_result.category |
Categoría de seguridad, derivada por el analizador en función del contexto del evento. |
security_result.description |
security_result.description |
Descripción del resultado de seguridad, extraída o derivada del mensaje de registro. |
security_result.severity |
security_result.severity |
Gravedad del resultado de seguridad, derivada del campo event_severity . |
security_result.summary |
security_result.summary |
Resumen del resultado de seguridad, extraído o derivado del mensaje de registro. |
sent_bytes |
network.sent_bytes |
Número de bytes enviados, extraído de message_info . |
ses_id |
network.session_id |
ID de sesión, extraído de message_info . |
session_id |
network.session_id |
ID de sesión, extraído de message_info . |
sess_type |
principal.hostname , principal.asset.hostname |
Tipo de sesión, extraído de log_mssg y usado como nombre de host cuando hostname no está disponible. |
source_ip |
principal.ip , principal.asset.ip |
Dirección IP de origen, extraída de varios formatos de mensajes de registro. |
source_ip_port |
principal.port |
Puerto de origen, extraído de varios formatos de mensajes de registro. |
src_email |
principal.user.email_addresses o principal.user.userid |
Dirección de correo electrónico o ID de usuario de origen, extraído de message_info . Si el valor coincide con un formato de correo electrónico, se añade a email_addresses . De lo contrario, se usa como userid . |
src_ip |
principal.ip , principal.asset.ip |
Dirección IP de origen, extraída del patrón grok principal u otros patrones específicos. |
src_port |
principal.port |
Puerto de origen, extraído del patrón grok principal u otros patrones específicos. |
src_user |
principal.user.user_display_name |
Nombre visible del usuario de origen, extraído de message_details para los IDs de evento 713049 y 713120. |
subject |
network.tls.client.certificate.subject |
Asunto del certificado de peer, extraído de message_details para el ID de evento 717037. |
summary |
security_result.summary |
Resumen del evento, extraído de message_details para el ID de evento 113016. |
target_host |
target.hostname |
Nombre de host de destino, extraído de message_details para el ID de evento 113004. |
target_ip |
target.ip , target.asset.ip |
Dirección IP de destino, extraída de message_details para el ID de evento 113004. |
target_user |
target.user.userid |
ID de usuario objetivo, extraído de message_details para el ID de evento 113003. |
task_duration |
N/A | Aunque se analiza, este campo no se asigna al objeto IDM en el UDM. |
tcp_dst_ip |
target.ip , target.asset.ip |
Dirección IP de destino de la carga útil TCP original de un mensaje de error ICMP. |
tcp_dst_port |
N/A | Aunque se analiza, este campo no se asigna al objeto IDM en el UDM. |
tcp_src_ip |
principal.ip , principal.asset.ip |
Dirección IP de origen de la carga útil TCP original de un mensaje de error ICMP. |
tcp_src_port |
N/A | Aunque se analiza, este campo no se asigna al objeto IDM en el UDM. |
threshold |
N/A | Aunque se analiza, este campo no se asigna al objeto IDM en el UDM. |
tls_version |
network.tls.version |
Versión de TLS extraída de message_details para el ID de evento 725002. |
ts |
@timestamp |
Marca de tiempo del evento, analizada mediante el filtro date . |
ts_day |
@timestamp (parte de) |
Día del mes de la marca de tiempo, que se usa para crear el campo @timestamp . |
ts_month |
@timestamp (parte de) |
Mes de la marca de tiempo, que se usa para crear el campo @timestamp . |
ts_time |
@timestamp (parte de) |
Tiempo desde la marca de tiempo, que se usa para crear el campo @timestamp . |
ts_year |
@timestamp (parte de) |
Año de la marca de tiempo, que se usa para crear el campo @timestamp . |
tunnel_type |
N/A | Aunque se analiza, este campo no se asigna al objeto IDM en el UDM. |
user |
principal.user.userid , target.user.userid |
ID de usuario, extraído de varios formatos de mensajes de registro. |
user_agent |
network.http.user_agent |
Cadena de user-agent extraída de message_details para el ID de evento 722055. |
user_attr.key |
principal.user.attribute.labels.key |
Clave de un atributo de usuario, extraída de message_details para los IDs de evento 734003 y 734001. |
user_attr.value |
principal.user.attribute.labels.value |
Valor de un atributo de usuario, extraído de message_details para los IDs de evento 734003 y 734001. |
userid |
principal.user.userid |
ID de usuario, extraído de message_details para el ID de evento 106103. |
username |
principal.user.userid |
Nombre de usuario, extraído de message_details para los IDs de evento 111008, 111009, 111010 y 113008. |
N/A | metadata.vendor_name |
Codificado como "CISCO". |
N/A | metadata.product_name |
Codificado como "ASA VPN" o "VPN". |
N/A | metadata.event_type |
Determinado por la lógica del analizador en función de la presencia de determinados campos e IDs de evento. Puede ser GENERIC_EVENT, NETWORK_CONNECTION, STATUS_UPDATE, NETWORK_FTP, USER_LOGIN, USER_LOGOUT, NETWORK_UNCATEGORIZED, USER_UNCATEGORIZED o NETWORK_FLOW. |
N/A | metadata.log_type |
Codificado como "CISCO_VPN". |
N/A | metadata.event_timestamp |
Copiado del campo @timestamp analizado. |
N/A | extensions.auth.type |
Se define como "VPN", "AUTHTYPE_UNSPECIFIED" o "MACHINE" en función del contexto del evento. |
N/A | security_result.about.resource.type |
Asigna el valor "PACKET FRAGMENT" al ID de evento 209005. |
N/A | is_alert |
Se asigna el valor true a los eventos de gravedad alta (event_severity 0 u 1). |
N/A | is_significant |
Se asigna el valor true a los eventos de gravedad alta (event_severity 0 u 1). |
¿Necesitas más ayuda? Recibe respuestas de los miembros de la comunidad y de los profesionales de Google SecOps.