Recopila registros de Fortinet FortiWeb

Se admite en los siguientes sistemas operativos:

En este documento, se explica cómo transferir registros de Fortinet FortiWeb a Google Security Operations con Bindplane.

El analizador extrae campos de los registros con formato KV de Fortinet FortiWeb. Utiliza grok o kv para analizar el mensaje de registro y, luego, asigna estos valores al Modelo de datos unificados (UDM). También establece valores de metadatos predeterminados para el origen y el tipo del evento.

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
  • 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 interfaz web de Fortinet FortiWeb

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 > Agentes de recopilación.
  3. 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

  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 debe 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 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/chronicle_w_labels:
            compression: gzip
            creds_file_path: '/path/to/ingestion-authentication-file.json'
            customer_id: 'YOUR_CUSTOMER_ID'
            endpoint: malachiteingestion-pa.googleapis.com
            log_type: 'FORTINET_FORTIWEB'
            raw_log_field: body
            ingestion_labels:
    
    service:
        pipelines:
            logs/source0__chronicle_w_labels-0:
                receivers:
                    - udplog
                exporters:
                    - chronicle/chronicle_w_labels
    

Parámetros de configuración

  • Reemplaza los marcadores de posición que se indican más abajo:

    • Configuración del receptor:

      • udplog: Usa udplog para el registro del sistema UDP o tcplog para el registro del sistema TCP.
      • 0.0.0.0: Dirección IP en la que se realizará la escucha (0.0.0.0 para escuchar en todas las interfaces)
      • 514: Número de puerto en el que se debe escuchar (puerto syslog estándar)
    • 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
      • YOUR_CUSTOMER_ID: ID de cliente de la sección Obtén el ID de cliente
      • 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: Tipo de registro tal como aparece en Chronicle (FORTINET_FORTIWEB)

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

  • Para reiniciar el agente de Bindplane en Linux, ejecuta el siguiente comando:

    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
      
  • Para reiniciar el agente de Bindplane en Windows, elige una de las siguientes opciones:

    • Símbolo del sistema o PowerShell como administrador:

      net stop observiq-otel-collector && net start observiq-otel-collector
      
    • 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 reenvío de Syslog de Fortinet FortiWeb

  1. Accede a la interfaz web de FortiWeb.
  2. Ve a Log & Report > Log Config > Other Log Settings.
  3. En Política de Syslog, haz clic en Crear nueva para agregar una política de Syslog nueva.
  4. Proporciona los siguientes detalles de configuración:
    • Nombre de la política: Ingresa un nombre descriptivo (por ejemplo, Google-SecOps-Bindplane).
    • Dirección IP: Ingresa la dirección IP del host del agente de Bindplane.
    • Puerto: Ingresa 514.
    • Habilitar: Selecciona Habilitar.
    • Facility: Selecciona local0 (o la instalación que prefieras).
    • Log Level: Selecciona information (o el nivel que prefieras).
  5. En la sección Log Type, habilita lo siguiente:
    • Registro de ataque
    • Registro de eventos
    • Registro de tráfico
  6. Haz clic en Aceptar para guardar los cambios.
  7. Para verificar que se envíen los mensajes de syslog, consulta los registros del agente de Bindplane.

Tabla de asignación de UDM

Campo de registro Asignación de UDM Lógica
acción additional.fields[].value.string_value El valor se asigna directamente.
acción security_result.action_details Si la acción es "Permitir" o "Aceptar", security_result.action_details se establece en "ALLOW". Si la acción es "Denied", "deny", "block" o "Block", security_result.action_details se establece en "BLOCK".
app network.application_protocol El valor se asigna directamente después de convertirse a mayúsculas. Solo si el valor es uno de HTTPS, HTTP, DNS, DHCP o SMB.
app_name additional.fields[].key La clave se establece en "appName".
app_name additional.fields[].value.string_value El valor se asigna directamente.
backend_service additional.fields[].key La clave se establece en "backend_service".
backend_service additional.fields[].value.string_value El valor se asigna directamente.
cat security_result.category_details El valor se asigna directamente.
client_level security_result.category Si client_level es "Malicious", security_result.category se establece en "NETWORK_MALICIOUS".
cn1 additional.fields[].value.string_value Se asigna al campo threatWeight.
cn1Label additional.fields[].key La clave se establece en el valor de cn1Label.
cn2 additional.fields[].value.string_value Se asigna al campo de longitud.
cn2Label additional.fields[].key La clave se establece en el valor de cn2Label.
cn3 additional.fields[].value.string_value Se asigna al campo signatureID.
cn3Label additional.fields[].key La clave se establece en el valor de cn3Label.
cs1 additional.fields[].value.string_value El valor se asigna directamente.
cs1Label additional.fields[].key La clave se establece en el valor de cs1Label.
cs1 principal.user.product_object_id El valor se asigna directamente cuando cs1Label coincide con "userID" (sin distinción entre mayúsculas y minúsculas).
cs2 additional.fields[].value.string_value El valor se asigna directamente.
cs2Label additional.fields[].key La clave se establece en el valor de cs2Label.
cs2 principal.user.userid El valor se asigna directamente cuando cs2Label coincide con "userName" (sin distinguir mayúsculas de minúsculas) y suid está vacío.
cs3 additional.fields[].value.string_value El valor se asigna directamente.
cs3Label additional.fields[].key La clave se establece en el valor de cs3Label.
cs3 metadata.severity El valor se asigna directamente cuando cs3Label es "level" y cs3 no está vacío.
cs4 additional.fields[].value.string_value Se asigna al campo subType.
cs4Label additional.fields[].key La clave se establece en el valor de cs4Label.
cs5 additional.fields[].value.string_value Se asigna al campo threatLevel.
cs5Label additional.fields[].key La clave se establece en el valor de cs5Label.
cs6 additional.fields[].value.string_value Se asigna al campo owaspTop10.
cs6Label additional.fields[].key La clave se establece en el valor de cs6Label.
fecha metadata.event_timestamp.seconds Se combina con la fecha y hora, y se analiza para generar segundos de época.
dev_id principal.resource.id El valor se asigna directamente.
devname principal.resource.name El valor se asigna directamente.
device_event_class_id metadata.product_event_type Se usa en el análisis de CEF.
device_product metadata.product_name Se usa en el análisis de CEF.
device_vendor metadata.vendor_name Se usa en el análisis de CEF.
device_version metadata.product_version Se usa en el análisis de CEF.
dhost target.hostname El valor se asigna directamente.
dpt target.port El valor se asigna y convierte directamente en un número entero.
DST target.ip El valor se asigna directamente.
dst_port target.port El valor se asigna y convierte directamente en un número entero.
dstepid target.process.pid El valor se asigna directamente.
dsteuid target.user.userid El valor se asigna directamente.
event_name metadata.product_event_type Se usa en el análisis de CEF.
http_agent network.http.parsed_user_agent El valor se analiza como una cadena de usuario-agente.
http_method network.http.method El valor se asigna directamente.
http_refer network.http.referral_url El valor se asigna directamente.
http_session_id network.session_id El valor se asigna directamente.
http_url target.url El valor se asigna directamente.
http_version metadata.product_version El valor se asigna directamente.
longitud additional.fields[].key La clave se establece en "length".
longitud additional.fields[].value.string_value El valor se asigna directamente.
log_type metadata.log_type Se codifica como "FORTINET_FORTIWEB".
main_type additional.fields[].key La clave se establece en "mainType".
main_type additional.fields[].value.string_value El valor se asigna directamente.
mensaje Varios campos Se analizó con los filtros grok y kv para extraer diferentes campos.
ml_allow_method additional.fields[].key La clave se establece en "ml_allow_method".
ml_allow_method additional.fields[].value.string_value El valor se asigna directamente.
ml_arg_dbid additional.fields[].key La clave se establece en "ml_arg_dbid".
ml_arg_dbid additional.fields[].value.string_value El valor se asigna directamente.
ml_domain_index additional.fields[].key La clave se establece en "ml_domain_index".
ml_domain_index additional.fields[].value.string_value El valor se asigna directamente.
ml_log_arglen additional.fields[].key La clave se establece en "ml_log_arglen".
ml_log_arglen additional.fields[].value.string_value El valor se asigna directamente.
ml_log_hmm_probability additional.fields[].key La clave se establece en "ml_log_hmm_probability".
ml_log_hmm_probability additional.fields[].value.string_value El valor se asigna directamente.
ml_log_sample_arglen_mean additional.fields[].key La clave se establece en "ml_log_sample_arglen_mean".
ml_log_sample_arglen_mean additional.fields[].value.string_value El valor se asigna directamente.
ml_log_sample_prob_mean additional.fields[].key La clave se establece en "ml_log_sample_prob_mean".
ml_log_sample_prob_mean additional.fields[].value.string_value El valor se asigna directamente.
ml_svm_accuracy additional.fields[].key La clave se establece en "ml_svm_accuracy".
ml_svm_accuracy additional.fields[].value.string_value El valor se asigna directamente.
ml_svm_log_main_types additional.fields[].key La clave se establece en "ml_svm_log_main_types".
ml_svm_log_main_types additional.fields[].value.string_value El valor se asigna directamente.
ml_svm_log_match_types additional.fields[].key La clave se establece en "ml_svm_log_match_types".
ml_svm_log_match_types additional.fields[].value.string_value El valor se asigna directamente.
ml_url_dbid additional.fields[].key La clave se establece en "ml_url_dbid".
ml_url_dbid additional.fields[].value.string_value El valor se asigna directamente.
monitor_status additional.fields[].key La clave se establece en "monitor_status".
monitor_status additional.fields[].value.string_value El valor se asigna directamente.
msg metadata.description El valor se asigna directamente.
owasp_top10 additional.fields[].key La clave se establece en "owaspTop10".
owasp_top10 additional.fields[].value.string_value El valor se asigna directamente.
principal_app principal.application El valor se asigna directamente.
principal_host principal.hostname El valor se asigna directamente.
protocolo network.ip_protocol El valor se asigna directamente después de convertirse a mayúsculas.
solicitud target.url El valor se asigna directamente.
requestMethod network.http.method El valor se asigna directamente.
rt metadata.event_timestamp.seconds Se analiza como milisegundos desde el ciclo y se convierte en segundos.
security_result.severity security_result.severity Se deriva de severity_level. Se asigna a diferentes valores de gravedad del UDM según el valor del registro sin procesar. El valor predeterminado es UNKNOWN_SEVERITY si no se encuentra ninguna coincidencia.
server_pool_name additional.fields[].key La clave se establece en "server_pool_name".
server_pool_name additional.fields[].value.string_value El valor se asigna directamente.
servicio network.application_protocol El valor se asigna directamente después de convertirse a mayúsculas.
servicio target.application El valor se asigna directamente después de convertirse a mayúsculas si no es uno de los siguientes: HTTPS, HTTP, DNS, DHCP o SMB.
gravedad, security_result.severity Si la gravedad está vacía y cs3Label es "level", se usa el valor de cs3. Luego, se asigna a un valor de gravedad del UDM (BAJA, ALTA, etcétera).
signature_id security_result.rule_id El valor se asigna directamente.
signature_subclass security_result.detection_fields[].key La clave se establece en "signature_subclass".
signature_subclass security_result.detection_fields[].value El valor se asigna directamente.
src principal.ip El valor se asigna directamente.
src_country principal.location.country_or_region El valor se asigna directamente.
src_ip principal.ip El valor se asigna directamente.
src_port principal.port El valor se asigna y convierte directamente en un número entero.
srccountry principal.location.country_or_region El valor se asigna directamente.
sub_type additional.fields[].key La clave se establece en "subType".
sub_type additional.fields[].value.string_value El valor se asigna directamente.
subtype target.resource.resource_subtype El valor se asigna directamente.
suid principal.user.userid El valor se asigna directamente.
threat_level additional.fields[].key La clave se establece en "threatLevel".
threat_level additional.fields[].value.string_value El valor se asigna directamente.
threat_weight security_result.detection_fields[].key La clave se establece en "threat_weight".
threat_weight security_result.detection_fields[].value El valor se asigna directamente.
hora metadata.event_timestamp.seconds Se combina con la fecha y se analiza para generar segundos de época.
user_id principal.user.product_object_id El valor se asigna directamente.
user_name additional.fields[].key La clave se establece en "userName".
user_name additional.fields[].value.string_value El valor se asigna directamente.
user_name principal.user.userid El valor se asigna directamente.
N/A metadata.event_type Se establece en "NETWORK_CONNECTION" si están presentes principal.ip y target.ip. Se establece en "USER_UNCATEGORIZED" si están presentes principal.ip y principal.user. Se establece en "STATUS_UPDATE" si solo está presente principal.ip. De lo contrario, se establece en "GENERIC_EVENT".
N/A metadata.log_type Se codifica como "FORTINET_FORTIWEB".
N/A metadata.product_name Está codificado como "FORTINET FORTIWEB" o "FortiWEB Cloud" según el formato de registro.
N/A metadata.vendor_name Está codificado como "FORTINET" o "Fortinet" según el formato de registro.
N/A principal.resource.resource_type Está codificado como "DEVICE" si dev_id está presente.

¿Necesitas más ayuda? Obtén respuestas de miembros de la comunidad y profesionales de Google SecOps.