Recoger registros de Forescout NAC
En este documento se explica cómo ingerir registros de control de acceso a la red (NAC) de Forescout en Google Security Operations mediante Bindplane. El analizador gestiona los registros con formato syslog y CEF de Forescout NAC. Extrae campos mediante patrones grok, los asigna al modelo de datos unificado (UDM) y categoriza los eventos en función de las palabras clave y los campos extraídos. Además, gestiona los inicios y cierres de sesión, las conexiones de red, los eventos de correo y las actualizaciones del estado del sistema. Se ha implementado una lógica específica para gestionar los eventos "CounterACT" y "Virtual Firewall", incluida la asignación de gravedad y el enriquecimiento del contexto del usuario.
Antes de empezar
Asegúrate de que cumples los siguientes requisitos previos:
- Instancia de Google SecOps
- Windows 2016 o versiones posteriores, o un host Linux con
systemd
- Si se ejecuta a través de un proxy, los puertos del cortafuegos están abiertos
- Debe instalarse ForeScout CounterAct v8.0 o la versión más reciente.
- Debe instalarse el complemento Syslog v3.5 del módulo de extensión principal de ForeScout CounterAct.
- Acceso privilegiado a Forescout Appliance y al complemento CounterACT
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 ingestion_labels: log_type: 'FORESCOUT_NAC' raw_log_field: body 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
Instalar el complemento Syslog de CounterACT
- Ve a la página Forescount Base Plugins (Complementos básicos de Forescount) y descarga el archivo del complemento .fpi.
- Guarda el archivo en el equipo en el que esté instalada la consola CounterACT.
- Inicia sesión en la consola CounterACT.
- Selecciona Opciones > Complementos > Instalar.
- Busca y selecciona el archivo FPI del complemento guardado.
- Haz clic en Instalar.
- Acepta el contrato de licencia para continuar.
- Una vez que se haya completado la instalación, haz clic en Cerrar.
- Selecciona el complemento en el panel Complemento y haz clic en Iniciar.
- Selecciona los dispositivos CounterACT en los que quieras iniciar el complemento (se recomienda ejecutar el complemento en todos los dispositivos del entorno).
- Haz clic en Aceptar.
- Haz clic en Cerrar.
Configurar Syslog en el complemento Syslog de Forescout CounterACT
- En el panel Plugins (Complementos), haz clic en Syslog > Configure (Configurar).
- Seleccione cualquier dispositivo o Enterprise Manager en el cuadro de diálogo y haga clic en Aceptar.
- En Enviar eventos a, haz clic en Añadir.
- Proporcione los siguientes detalles de configuración:
- Dirección del servidor: introduce la dirección IP del agente de Bindplane.
- Puerto del servidor: introduce el número de puerto del agente de Bindplane (por ejemplo,
514
para UDP). - Protocolo de servidor: selecciona UDP.
- Identidad: campo de texto libre para identificar el mensaje syslog.
- Opcional: Instalación: instalación del mensaje syslog que se transmite como parte del campo Prioridad del mensaje. Si no se menciona el valor de la instalación, se asigna el valor
local5
. - Gravedad: selecciona Información.
- Ve a la pestaña Activador de Syslog.
- No selecciones la casilla Solo enviar mensajes generados por la acción "Enviar mensaje a Syslog".
- Selecciona solo la casilla Incluir la marca de tiempo y el identificador del dispositivo CounterACT en todos los mensajes.
- Haga clic en Opciones para definir qué tipos de eventos activan los mensajes syslog:
- Incluye los registros de políticas de NAC.
- Incluye eventos de coincidencia y no coincidencia de la política de NAC.
- Selecciona otros eventos si están disponibles.
- Ve a la pestaña Configuración de acciones predeterminadas.
- Proporcione los siguientes detalles de configuración:
- Dirección del servidor: introduce la dirección IP del agente de Bindplane.
- Puerto del servidor: introduce el número de puerto del agente de Bindplane (por ejemplo,
514
para UDP). - Protocolo de servidor: selecciona UDP.
- Identidad del mensaje: campo de texto libre para identificar el mensaje Syslog.
- Opcional: Facility (Instalación): instalación de mensajes de syslog que se transmite como parte del campo Prioridad del mensaje. Si no se menciona el valor de la instalación, se asigna
local5
. - Gravedad: selecciona Información.
- Haz clic en Aceptar.
Tabla de asignación de UDM
Campo de registro | Asignación de UDM | Lógica |
---|---|---|
act |
security_result.action_details |
Se asigna directamente desde el campo act de los registros CEF. |
app |
network.application_protocol |
Se asigna directamente desde el campo app de los registros CEF. |
Available_memory |
additional.fields |
Se extrae de kv_data cuando event_type es "Estadísticas del sistema". La clave es "Memoria disponible" y el valor es la cadena extraída. |
Available_swap |
additional.fields |
Se extrae de kv_data cuando event_type es "Estadísticas del sistema". La clave es "Available swap" y el valor es la cadena extraída. |
application_status |
additional.fields |
Se extrae de kv_data cuando event_type es "Estado de la aplicación". La clave es "Estado de la solicitud" y el valor es la cadena extraída. |
Assigned_hosts |
additional.fields |
Se extrae de kv_log_data cuando event_type es "Estado de la aplicación". La clave es "Hosts asignados" y el valor es la cadena extraída. |
Category |
security_result.description |
Parte de security_result.description cuando et_lower es "nac policy log". Concatenado con otros detalles. |
command |
principal.process.command_line |
Se extrae del campo rnmsg de los registros CEF cuando empieza por "command:". |
Connected_clients |
additional.fields |
Se extrae de kv_log_data cuando event_type es "Estado de la aplicación". La clave es "Connected clients" (Clientes conectados) y el valor es la cadena extraída. |
CPU_usage |
additional.fields |
Se extrae de kv_data cuando event_type es "Estadísticas del sistema". La clave es "Uso de CPU" y el valor es la cadena extraída. |
cs1 |
additional.fields |
Se asigna directamente desde el campo cs1 de los registros CEF. La clave es "Compliancy Policy Name". |
cs2 |
additional.fields |
Se asigna directamente desde el campo cs2 de los registros CEF. La clave es "Compliancy Policy Subrule Name". |
cs3 |
additional.fields |
Se asigna directamente desde el campo cs3 de los registros CEF. La clave es "Host Compliancy Status". |
cs4 |
additional.fields |
Se asigna directamente desde el campo cs4 de los registros CEF. La clave es "Compliancy Event Trigger". |
data |
security_result.description |
Se usa en varias partes del analizador para extraer información y contribuir a los campos de UDM finales. No se asigna directamente a un solo campo de UDM. |
details |
security_result.description |
Se usa para rellenar security_result.description en varios casos, como al analizar eventos "Log" y cambios en la sesión del usuario. Se puede analizar más a fondo para obtener información específica. |
Destination |
target.ip , target.hostname |
Analizado a partir de kv_data o data . Si se puede convertir en una dirección IP, se asigna a target.ip . De lo contrario, se asigna a target.hostname . |
deviceExternalId |
about.asset.asset_id |
Se asigna directamente desde el campo deviceExternalId de los registros CEF, con el prefijo "Forescout.CommandCenter:". |
dhost |
target.hostname |
Se asigna directamente desde el campo dhost de los registros CEF. |
dmac |
target.mac |
Se asigna directamente desde el campo dmac de los registros CEF. |
dntdom |
target.administrative_domain |
Se asigna directamente desde el campo dntdom de los registros CEF. |
dst |
target.ip |
Se asigna directamente desde el campo dst de los registros CEF. |
dpt |
target.port |
Se asigna directamente desde el campo dpt de los registros CEF. |
duser |
target.user.user_display_name |
Se asigna directamente desde el campo duser de los registros CEF. |
dvc |
about.ip |
Se asigna directamente desde el campo dvc de los registros CEF. |
dvchost |
about.hostname |
Se asigna directamente desde el campo dvchost de los registros CEF. |
EM_connection_status |
additional.fields |
Se extrae de kv_log_data cuando event_type es "Estado de la aplicación". La clave es "Estado de la conexión de EM" y el valor es la cadena extraída. |
Engine_status |
additional.fields |
Se extrae de kv_log_data cuando event_type es "Estado de la aplicación". La clave es "Estado del motor" y el valor es la cadena extraída. |
event_type |
metadata.description , security_result.summary |
Analizado a partir del mensaje de registro. Se usa para determinar el tipo de evento de UDM y otros campos. Si el evento es "GENERIC_EVENT", también se usa para la descripción. |
eventtype |
additional.fields |
Se asigna directamente desde el campo eventtype de los registros CEF. La clave es "eventtype". |
externalId |
metadata.product_log_id |
Se asigna directamente desde el campo externalId de los registros CEF. |
from\[...\] to\[...\] |
principal.ip , target.ip |
Extrae las IPs de origen y destino del patrón "from[...] to[...]". |
Host |
principal.ip , principal.hostname |
Analizado a partir de kv_data cuando et_lower es "block event". Si se puede convertir en una IP, se asigna a principal.ip ; de lo contrario, a principal.hostname . |
Hostname |
principal.hostname , principal.asset.hostname |
Se asigna a principal.hostname y principal.asset.hostname cuando está presente en los eventos de cambio de propiedad detectados. |
Installed_Plugins |
additional.fields |
Se extrae de kv_log_data cuando event_type es "Estado de la aplicación". La clave es "Installed Plugins" (Complementos instalados) y el valor es la cadena extraída. |
iporhost |
intermediary.ip , intermediary.hostname |
Analizado a partir de header_data . Si se puede convertir en una IP, se asigna a intermediary.ip ; de lo contrario, a intermediary.hostname . |
Is Virtual Firewall blocking rule |
security_result.action , security_result.rule_name |
Si es "true", asigna el valor "BLOCK" a security_result.action y "Virtual Firewall blocking" a security_result.rule_name . |
log_description |
security_result.summary |
Se asigna directamente a security_result.summary cuando está presente. |
log_type |
metadata.log_type |
Se asigna el valor constante "FORESCOUT_NAC". |
MAC |
principal.mac |
Se analiza a partir de kv_data en los eventos de cambio de propiedad detectados y se da formato como dirección MAC. |
mail_from |
network.email.from |
Se asigna directamente desde el campo mail_from extraído de mail_details . |
mail_subject |
network.email.subject |
Se asigna directamente desde el campo mail_subject extraído de mail_details . |
mail_to |
network.email.to |
Se asigna directamente desde el campo mail_to extraído de mail_details . |
Match |
security_result.rule_name |
Se asigna directamente desde el campo Match cuando et_lower es "nac policy log". |
metadata.event_type |
metadata.event_type |
Se determina en función de varias condiciones del analizador, como la presencia de campos y palabras clave específicos en el mensaje de registro. El valor predeterminado es GENERIC_EVENT y se actualiza en función de los datos analizados. Por ejemplo, USER_LOGIN , USER_LOGOUT , NETWORK_CONNECTION , SCAN_NETWORK , STATUS_UPDATE , EMAIL_TRANSACTION y USER_UNCATEGORIZED . |
metadata.product_name |
metadata.product_name |
Se asigna el valor "FORESCOUT NAC" a la mayoría de los eventos o el valor del campo product , si existe. En el caso de los eventos CEF, se define como "CounterAct". |
metadata.vendor_name |
metadata.vendor_name |
Se asigna el valor "FORESCOUT" a la mayoría de los eventos. En el caso de los eventos CEF, se toma del campo cs1Label si existe o se asigna el valor "ForeScout Technologies". |
msg |
metadata.description |
Se asigna directamente desde el campo msg de los registros CEF. |
pid |
intermediary.process.pid |
Se asigna directamente desde el campo pid extraído de header_data . |
policy_details |
security_result.description |
Parte de security_result.description cuando et_lower es "nac policy log". Concatenado con otros detalles. |
product |
metadata.product_name |
Se asigna directamente a metadata.product_name cuando está presente. |
proto |
network.ip_protocol |
Se asigna directamente desde el campo proto de los registros CEF. |
Reason |
security_result.description |
Se asigna directamente desde el campo Reason cuando et_lower es "block event". |
resource |
principal.resource.name |
Se asigna directamente desde el campo resource de los registros CEF. |
rnmsg |
security_result.description , principal.process.command_line |
Si empieza por "command:", la parte que aparece después de "command:" se asigna a principal.process.command_line . De lo contrario, se asigna a security_result.description . |
rt |
metadata.event_timestamp |
Se asigna directamente desde el campo rt de los registros CEF y se convierte en una marca de tiempo. |
Rule |
security_result.rule_id |
Se asigna directamente desde el campo Rule cuando et_lower es "nac policy log". |
security_result.severity |
security_result.severity |
Derivado del campo severity_level . De 0 a 3 corresponde a BAJO, de 4 a 6 a MEDIO, de 7 a 8 a ALTO y de 9 a 10 a CRÍTICO. |
security_result.severity_details |
security_result.severity_details |
Se asigna directamente desde el campo severity de los registros CEF. |
Service |
target.port , network.ip_protocol |
Se analiza para extraer el puerto y el protocolo. El puerto se asigna a target.port y el protocolo a network.ip_protocol . |
session_id |
network.session_id |
Se asigna directamente desde el campo session_id . |
severity |
security_result.severity_details |
Se asigna directamente desde el campo severity de los registros CEF. |
severity_level |
security_result.severity |
Se usa para determinar el security_result.severity . |
¿Necesitas más ayuda? Recibe respuestas de los miembros de la comunidad y de los profesionales de Google SecOps.