Recopila registros de Fortinet FortiClient

Se admite en los siguientes sistemas operativos:

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

  1. Accede a la consola de Google SecOps.
  2. Ve a Configuración de SIEM > Agente de recopilación.
  3. Haz clic en Descargar para descargar el archivo de autenticación de la transferencia.
  4. 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

  1. Accede a la consola de Google SecOps.
  2. Ve a Configuración de SIEM > Perfil.
  3. 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

  1. Abre el símbolo del sistema o PowerShell como administrador.
  2. Ejecuta el comando siguiente:

    msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
    
  3. Espera a que se complete la instalación.

  4. 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

  1. Abre una terminal con privilegios de administrador o sudo.
  2. Ejecuta el comando siguiente:

    sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
    
  3. Espera a que se complete la instalación.

  4. 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. Usa 0.0.0.0:514 para 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
  • customer_id: ID de cliente de la consola de Google SecOps
  • endpoint: 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.
  • log_type: FORTINET_FORTICLIENT
  • ingestion_labels: Etiquetas opcionales en formato YAML

Guarda el archivo de configuración

Después de editarlo, guarda el archivo:

  • Linux: Presiona Ctrl+O, luego Enter y, 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-collector
    
    1. Verifica que el servicio esté en ejecución:

      sudo systemctl status observiq-otel-collector
      
    2. Revisa 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-collector
      
    • Usa la consola de Services:

      1. Presiona Win+R, escribe services.msc y presiona Intro.
      2. Busca observIQ OpenTelemetry Collector.
      3. Haz clic con el botón derecho y selecciona Reiniciar.

      4. Verifica que el servicio esté en ejecución:

        sc query observiq-otel-collector
        
      5. Revisa los registros en busca de errores:

        type "C:\Program Files\observIQ OpenTelemetry Collector\log\collector.log"
        

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

  1. Accede a la consola web de FortiClient EMS.
  2. Ve a Endpoint Profiles > Manage Profiles.

Cómo editar o crear un perfil de extremo

  1. Selecciona un perfil existente para editarlo o haz clic en Agregar para crear uno nuevo.
  2. En el campo Nombre del perfil, ingresa un nombre descriptivo (por ejemplo, Chronicle-Logging-Profile).
  3. Haz clic en Configuración avanzada.
  4. Haz clic en la pestaña Configuración de XML.
  5. 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 en 1 para habilitar el registro remoto.
  • <log_protocol>: Se establece en syslog para enviar registros a un servidor syslog. En su lugar, usa faz para 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 en syslog.
  • <netlog_categories>: Ingresa la máscara de bits de las categorías de registros que se subirán:
    • 1 = Registros de tráfico
    • 2 = Registros de vulnerabilidades
    • 4 = Registros de eventos
    • 7 = Todas las categorías (1 + 2 + 4)
  • <log_upload_freq_minutes>: Ingresa la frecuencia de carga de registros en minutos (por ejemplo, 5 para cada 5 minutos).
  • <level>: Es el nivel de registro de FortiClient. Ingresa una de las siguientes opciones:
    • 0 = Emergencia
    • 1 = Alerta
    • 2 = Crítico
    • 3 = Error
    • 4 = Advertencia
    • 5 = Notificación
    • 6 = 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.

  1. Haz clic en Probar XML para validar la configuración de XML.
  2. Haz clic en Guardar para guardar el perfil.

Aplica el perfil a los endpoints

  1. Ve a Endpoint Policies > Manage Policies.
  2. Selecciona una política existente o haz clic en Agregar para crear una nueva.
  3. En el menú desplegable Perfil, selecciona el perfil que creaste o editaste.
  4. En la sección Endpoint Groups, selecciona los grupos de extremos a los que quieres aplicar la política.
  5. 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

  1. 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 -f
    

    Windows:

    type "C:\Program Files\observIQ OpenTelemetry Collector\log\collector.log"
    
  2. 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/
    
  3. 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.