Recopila registros de Fortinet FortiClient
En este documento, se explica cómo transferir registros de Fortinet FortiClient a Google Security Operations con el agente de Bindplane.
FortiClient es una solución de seguridad de extremos que proporciona funciones de antivirus, filtrado web, VPN, análisis de vulnerabilidades y firewall de aplicaciones para extremos de Windows, macOS, Linux y Chromebook. FortiClient se administra de forma centralizada a través de FortiClient EMS (Endpoint Management Server), que envía políticas de seguridad y perfiles de configuración a los endpoints.
Antes de comenzar
Asegúrate de cumplir con los siguientes requisitos previos:
- Una instancia de Google SecOps
- Windows Server 2016 o versiones posteriores, o host de Linux con systemd
- Conectividad de red entre el agente de Bindplane y los extremos de FortiClient
- Si se ejecuta detrás de un proxy, asegúrate de que los puertos de firewall estén abiertos según los requisitos del agente de Bindplane.
- Acceso privilegiado a la consola de administración de FortiClient EMS
- EMS de FortiClient, versión 7.0 o posterior, con endpoints de FortiClient con licencia
Obtén el archivo de autenticación de transferencia de Google SecOps
- Accede a la consola de Google SecOps.
- Ve a Configuración de SIEM > Agente de recopilación.
- Haz clic en Descargar para descargar el archivo de autenticación de la transferencia.
Guarda el archivo de forma segura en el sistema en el que se instalará el agente de Bindplane.
Obtén el ID de cliente de Google SecOps
- Accede a 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.
Instala el agente de BindPlane
Instala el agente de Bindplane en tu sistema operativo Windows o Linux según las siguientes instrucciones.
Instalación en Windows
- Abre el símbolo del sistema o PowerShell como administrador.
Ejecuta el comando siguiente:
msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quietEspera a que se complete la instalación.
Ejecute el siguiente comando para verificar la instalación:
sc query observiq-otel-collector
El servicio debería mostrarse como RUNNING.
Instalación en Linux
- Abre una terminal con privilegios de administrador o sudo.
Ejecuta el comando siguiente:
sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.shEspera a que se complete la instalación.
Ejecute el siguiente comando para verificar la instalación:
sudo systemctl status observiq-otel-collector
El servicio debería mostrarse como activo (en ejecución).
Recursos de instalación adicionales
Para obtener más opciones de instalación y solucionar problemas, consulta la guía de instalación del agente de Bindplane.
Configura el agente de BindPlane para transferir el syslog y enviarlo a Google SecOps
Ubica el archivo de configuración
Linux:
sudo nano /etc/bindplane-agent/config.yaml
Windows:
notepad "C:\Program Files\observIQ OpenTelemetry Collector\config.yaml"
Edita el archivo de configuración
Reemplaza todo el contenido de config.yaml con la siguiente configuración:
receivers:
udplog:
listen_address: "0.0.0.0:514"
exporters:
chronicle/forticlient:
compression: gzip
creds_file_path: '/etc/bindplane-agent/ingestion-auth.json'
customer_id: 'your-customer-id-here'
endpoint: malachiteingestion-pa.googleapis.com
log_type: FORTINET_FORTICLIENT
raw_log_field: body
ingestion_labels:
env: production
source: forticlient
service:
pipelines:
logs/forticlient_to_chronicle:
receivers:
- udplog
exporters:
- chronicle/forticlient
Parámetros de configuración
Reemplaza los marcadores de posición que se indican más abajo:
Configuración del receptor:
listen_address: Es la dirección IP y el puerto que se escucharán. Usa0.0.0.0:514para escuchar en todas las interfaces del puerto 514.
Configuración del exportador:
creds_file_path: Ruta de acceso completa al archivo de autenticación de la transferencia:- Linux:
/etc/bindplane-agent/ingestion-auth.json - Windows:
C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json
- Linux:
customer_id: ID de cliente de la consola de Google SecOpsendpoint: URL del extremo regional:- EE.UU.:
malachiteingestion-pa.googleapis.com - Europa:
europe-malachiteingestion-pa.googleapis.com - Asia:
asia-southeast1-malachiteingestion-pa.googleapis.com - Consulta Extremos regionales para obtener la lista completa.
- EE.UU.:
log_type:FORTINET_FORTICLIENTingestion_labels: Etiquetas opcionales en formato YAML
Guarda el archivo de configuración
Después de editarlo, guarda el archivo:
- Linux: Presiona
Ctrl+O, luegoEntery, después,Ctrl+X. - Windows: Haz clic en Archivo > Guardar
Reinicia el agente de Bindplane para aplicar los cambios
Linux
sudo systemctl restart observiq-otel-collectorVerifica que el servicio esté en ejecución:
sudo systemctl status observiq-otel-collectorRevisa los registros en busca de errores:
sudo journalctl -u observiq-otel-collector -f
Windows
Elige una de las siguientes opciones:
Con el símbolo del sistema o PowerShell como administrador, haz lo siguiente:
net stop observiq-otel-collector && net start observiq-otel-collectorUsa la consola de Services:
- Presiona
Win+R, escribeservices.mscy presiona Intro. - Busca observIQ OpenTelemetry Collector.
Haz clic con el botón derecho y selecciona Reiniciar.
Verifica que el servicio esté en ejecución:
sc query observiq-otel-collectorRevisa los registros en busca de errores:
type "C:\Program Files\observIQ OpenTelemetry Collector\log\collector.log"
- Presiona
Configura el registro de extremos de FortiClient para enviar registros al agente de BindPlane
El registro de extremos de FortiClient se configura de forma centralizada a través de FortiClient EMS editando perfiles de extremos con la configuración XML. EMS envía la configuración de registro a los extremos de FortiClient, que luego envían los registros directamente al receptor de syslog del agente de BindPlane.
Accede a FortiClient EMS
- Accede a la consola web de FortiClient EMS.
- Ve a Endpoint Profiles > Manage Profiles.
Cómo editar o crear un perfil de extremo
- Selecciona un perfil existente para editarlo o haz clic en Agregar para crear uno nuevo.
- En el campo Nombre del perfil, ingresa un nombre descriptivo (por ejemplo,
Chronicle-Logging-Profile). - Haz clic en Configuración avanzada.
- Haz clic en la pestaña Configuración de XML.
- Haz clic en Editar.
Cómo configurar el registro remoto en XML
El EMS muestra dos paneles. Usa el panel de la derecha para editar la configuración XML.
Ubica la sección <log_settings> dentro de <system>. Si no existe, agrégalo. Dentro de <log_settings>, busca o agrega la sección <remote_logging> y configúrala de la siguiente manera:
<forticlient_configuration>
<system>
<log_settings>
<onnet_local_logging>1</onnet_local_logging>
<level>6</level>
<log_events>ipsecvpn,sslvpn,scheduler,update,firewall,av,proxy,shield,webfilter,endpoint,fssoma,configd,vuln,sandboxing,antiexploit</log_events>
<remote_logging>
<log_upload_enabled>1</log_upload_enabled>
<log_protocol>syslog</log_protocol>
<netlog_server>192.168.1.100</netlog_server>
<netlog_categories>7</netlog_categories>
<log_upload_freq_minutes>5</log_upload_freq_minutes>
</remote_logging>
</log_settings>
</system>
</forticlient_configuration>
Parámetros de configuración:
<log_upload_enabled>: Se establece en1para habilitar el registro remoto.<log_protocol>: Se establece ensyslogpara enviar registros a un servidor syslog. En su lugar, usafazpara enviar registros a FortiAnalyzer.<netlog_server>: Ingresa la dirección IP del host del agente de Bindplane (por ejemplo,192.168.1.100). Este parámetro solo se usa cuando<log_protocol>se establece ensyslog.<netlog_categories>: Ingresa la máscara de bits de las categorías de registros que se subirán:1= Registros de tráfico2= Registros de vulnerabilidades4= Registros de eventos7= Todas las categorías (1 + 2 + 4)
<log_upload_freq_minutes>: Ingresa la frecuencia de carga de registros en minutos (por ejemplo,5para cada 5 minutos).<level>: Es el nivel de registro de FortiClient. Ingresa una de las siguientes opciones:0= Emergencia1= Alerta2= Crítico3= Error4= Advertencia5= Notificación6= Información (recomendado)7= Debug
<log_events>: Lista separada por comas de eventos o procesos de FortiClient para registrar. Incluye los eventos que deseas capturar (por ejemplo,ipsecvpn,sslvpn,firewall,av,webfilter,endpoint).
Guarda el perfil.
- Haz clic en Probar XML para validar la configuración de XML.
- Haz clic en Guardar para guardar el perfil.
Aplica el perfil a los endpoints
- Ve a Endpoint Policies > Manage Policies.
- Selecciona una política existente o haz clic en Agregar para crear una nueva.
- En el menú desplegable Perfil, selecciona el perfil que creaste o editaste.
- En la sección Endpoint Groups, selecciona los grupos de extremos a los que quieres aplicar la política.
- Haz clic en Guardar.
El EMS envía la configuración del perfil a los extremos con la siguiente comunicación de telemetría. Los extremos de FortiClient comenzarán a enviar registros al receptor de syslog del agente de BindPlane.
Verifica el reenvío de registros
En el host del agente de Bindplane, revisa los registros del agente para verificar que se estén recibiendo registros:
Linux:
sudo journalctl -u observiq-otel-collector -fWindows:
type "C:\Program Files\observIQ OpenTelemetry Collector\log\collector.log"En un extremo de FortiClient, verifica que el registro remoto esté habilitado. Para ello, consulta los registros de FortiClient:
Windows:
C:\Program Files\Fortinet\FortiClient\logs\macOS:
/Library/Application Support/Fortinet/FortiClient/logs/Linux:
/var/log/forticlient/En la consola de Google SecOps, verifica que se estén transfiriendo los registros de FortiClient:
- Ve a Buscar.
- Ingresa una búsqueda para los registros de FortiClient (por ejemplo,
metadata.log_type = "FORTINET_FORTICLIENT"). - Verifica que los registros aparezcan en los resultados de la búsqueda.
Tabla de asignación de UDM
| Campo de registro | Asignación de UDM | Lógica |
|---|---|---|
| emsserial, devid, usingpolicy, itime, fctsn, logver, site, fctver, browsetime, event_id, SubjectUserName, SubjectLogonId, ThreadID | additional.fields | Etiquetas creadas con la clave y el valor de cada campo, combinadas en additional.fields |
| timestamp | metadata.collected_timestamp | Se analiza como marca de tiempo de UNIX |
| ts | metadata.event_timestamp | Se analizó con el filtro de fecha usando los formatos "MMM d HH:mm:ss", "MMM d HH:mm:ss", "aaaa-MM-dd HH:mm:ss". |
| deviceip, client_ip, devicemac, hostname, user, uid | metadata.event_type | Se establece en USER_RESOURCE_ACCESS si el usuario o el UID están presentes y el ID de la máquina está presente; USER_UNCATEGORIZED si el ID de la máquina está presente; GENERIC_EVENT en otros casos. |
| eventtype | metadata.product_event_type | Valor copiado directamente |
| id | metadata.product_log_id | Se convirtió en cadena y se copió el valor |
| servicio | network.application_protocol | Se convierte a mayúsculas y, luego, se establece en el protocolo predefinido si coincide con la lista (p.ej., "SSH" para "22", "SSH", "SSHD"; "HTTP" para "80", "8080", "HTTP"), de lo contrario, al servicio si está en la lista extendida; de lo contrario, vacío |
| direction | network.direction | Se establece en INBOUND si coincide con (?i)inbound; OUTBOUND si coincide con (?i)outbound. |
| protocolo | network.ip_protocol | Se establece en "TCP" si proto == "6". |
| rcvdbyte | network.received_bytes | Se convierte en uinteger y se copia el valor si no está vacío o es 0. |
| sentbyte | network.sent_bytes | Se convierte en uinteger y se copia el valor si no está vacío o es 0. |
| sessionid | network.session_id | Valor copiado directamente |
| pcdomain | principal.administrative_domain | Valor copiado directamente |
| srcproduct | principal.application | Valor copiado directamente |
| Nombre de host | principal.hostname | Valor copiado directamente |
| deviceip, client_ip | principal.ip | Valor de deviceip si no está vacío; de lo contrario, de client_ip si es una IP válida |
| devicemac | principal.mac | Se convirtió al formato MAC y se copió el valor si es válido. |
| os, source | principal.platform | Se establece en WINDOWS si os/source coincide con (?i)windows; MAC si coincide con (?i)mac|ios; LINUX si coincide con (?i)linux |
| source_ver | principal.platform_version | Valor copiado directamente |
| srcport | principal.port | Se convirtió a número entero y se copió el valor. |
| ProcessId | principal.process.pid | Valor copiado directamente |
| srcname, source_type, type | principal.resource.attribute.labels | Etiquetas creadas con la clave y el valor de cada campo, combinadas en attribute.labels |
| devname | principal.resource.name | Valor copiado directamente |
| ProviderGuid | principal.resource.product_object_id | Valor copiado directamente |
| subtype | principal.resource.resource_subtype | Valor copiado directamente |
| url | principal.url | Valor copiado directamente |
| uid, fctuid | principal.user.product_object_id | Valor del UID si no está vacío; de lo contrario, es fctuid. |
| usuario | principal.user.user_display_name | Valor copiado directamente |
| usuario | principal.user.userid | Valor copiado directamente |
| SubjectUserSid | principal.user.windows_sid | Se copia el valor si coincide con la regex del SID |
| utmaction | security_result.action | Se establece en ALLOW si está en [accept,allow,passthrough,pass,permit,detected]; en BLOCK si está en [deny,dropped,blocked,block]; en UNKNOWN_ACTION en cualquier otro caso. |
| utmevent | security_result.category_details | Valor copiado directamente |
| utmaction | security_result.description | Se establece en "utmaction: |
| userinitiated | security_result.detection_fields | Etiqueta creada con la clave "userinitiated" y el valor de userinitiated, combinada |
| level | security_result.severity | Se establece en INFORMATIONAL si level == "info" |
| amenaza | security_result.threat_name | Valor copiado directamente |
| emshostname, remotename | target.hostname | Valor de emshostname si no está vacío; de lo contrario, remotename |
| dstip | target.ip | Se extrajo una IP válida de dstip |
| dstport | target.port | Se convierte en un número entero y se copia el valor si no es 0. |
| metadata.product_name | Se establece en "FORTINET_FORTICLIENT". | |
| metadata.vendor_name | Se establece en "FORTINET_FORTICLIENT". |
¿Necesitas más ayuda? Obtén respuestas de miembros de la comunidad y profesionales de Google SecOps.