Recopila registros de NGINX

Compatible con:

Este analizador de NGINX controla los registros con formato JSON y syslog. Extrae campos de varios formatos de registro y los normaliza en el formato UDM. El analizador enriquece el evento con metadatos para la administración del servidor y la actividad de red, incluidos los accesos de los usuarios y las solicitudes HTTP. También controla la lógica de los eventos de SSH y propaga los campos de la UDM según los datos extraídos.

Antes de comenzar

  • Asegúrate de tener una instancia de Google Security Operations.
  • Asegúrate de que NGINX se esté ejecutando y generando registros.
  • Asegúrate de tener acceso raíz a la máquina anfitrión de NGINX.

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.

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

  1. Para la instalación de Windows, ejecuta la siguiente secuencia de comandos:
    msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
  2. Para la instalación de Linux, ejecuta la siguiente secuencia de comandos:
    sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
  3. Puedes encontrar opciones de instalación adicionales en esta guía de instalación.

Configura el agente de BindPlane para transferir Syslog y enviarlo a Google SecOps

  1. Accede a la máquina en la que está instalado BindPlane.
  2. Edita el archivo config.yaml de la siguiente manera:

    receivers:
      tcplog:
        # Replace the below port <54525> and IP <0.0.0.0> with your specific values
        listen_address: "0.0.0.0:54525" 
    
    exporters:
        chronicle/chronicle_w_labels:
            compression: gzip
            # Adjust the creds location below according the placement of the credentials file you downloaded
            creds: '{ json file for creds }'
            # Replace <customer_id> below with your actual ID that you copied
            customer_id: <customer_id>
            endpoint: malachiteingestion-pa.googleapis.com
            # You can apply ingestion labels below as preferred
            ingestion_labels:
            log_type: SYSLOG
            namespace: auditd
            raw_log_field: body
    service:
        pipelines:
            logs/source0__chronicle_w_labels-0:
                receivers:
                    - tcplog
                exporters:
                    - chronicle/chronicle_w_labels
    
  3. Reinicia el agente de BindPlane para aplicar los cambios:

    sudo systemctl restart bindplane
    

Identifica la ubicación de los archivos de registro de NGINX

Los registros de NGINX se almacenan en: * Registros de acceso: /var/log/nginx/access.log * Registros de errores: /var/log/nginx/error.log 1. Accede al host de NGINX con credenciales de administrador. 1. Ejecuta el siguiente comando y busca las rutas de acceso de los archivos de registro en tu host de NGINX:

  sudo cat /etc/nginx/nginx.conf | grep log

Configura NGINX para reenviar registros a Bindplane

  1. Abre el archivo de configuración de NGINX (por ejemplo, /etc/nginx/nginx.conf):

    sudo vi /etc/nginx/nginx.conf
    
  2. Edita la configuración y reemplaza <BINDPLANE_SERVER> y <BINDPLANE_PORT> por tus valores:

    http {
        access_log syslog:server=<BINDPLANE_SERVER>:<BINDPLANE_PORT>,facility=local7,tag=nginx_access;
        error_log syslog:server=<BINDPLANE_SERVER>:<BINDPLANE_PORT>,facility=local7,tag=nginx_error;
    }
    
  3. Reinicia NGINX para aplicar los cambios:

    sudo systemctl reload nginx
    

Tabla de asignación de UDM

Campo de registro Asignación de UDM Lógica
_Internal_WorkspaceResourceId target.resource.product_object_id Asignación directa
Computer principal.asset.hostname Asignación directa
Facility additional.fields["facility"] Asignación directa
HostName principal.asset.hostname Se asigna directamente si no hay src_ip
ProcessName principal.application Asignación directa
SeverityLevel security_result.severity Se asigna a INFORMATIONAL si el valor es "info".
SourceSystem principal.asset.platform Se asigna a LINUX si el valor coincide con "Linux".
SyslogMessage Varios campos Se analiza con grok para extraer time, method, target_path, protocol, response_code, referral_url, user_agent, target_ip, target_host y cache
TenantId additional.fields["TenantId"] Asignación directa
acct principal.user.user_id Se asigna directamente si no está vacío o si es “?”.
addr principal.asset.ip Asignación directa
audit_epoch metadata.event_timestamp Se convierte en una marca de tiempo con el formato "UNIX". Los nanosegundos se extraen del mensaje de registro original.
cache additional.fields["cache"] Asignación directa
collection_time.nanos metadata.event_timestamp.nanos Se usa para los nanosegundos de la marca de tiempo del evento, si está disponible
collection_time.seconds metadata.event_timestamp.seconds Se usa para los segundos de la marca de tiempo del evento, si está disponible.
data Varios campos La fuente principal de datos, que se analiza de forma diferente según el formato de registro (Syslog, JSON o cualquier otro)
exe target.process.command_line Se asigna directamente después de quitar las barras diagonales y las comillas.
hostname principal.asset.hostname O principal.asset.ip Si es una dirección IP, se asigna a principal.asset.ip. De lo contrario, se asigna a principal.asset.hostname.
msg metadata.description Se asignan directamente como la descripción
node target.asset.hostname Asignación directa
pid target.process.pid Asignación directa
protocol network.application_protocol Se asigna a HTTP si el valor coincide con "HTTP".
referral_url network.http.referral_url Se asigna directamente si no está vacío o si es “-”.
res security_result.action_details Asignación directa
response_code network.http.response_code Se asignan directamente y se convierten en números enteros.
ses network.session_id Asignación directa
src_ip principal.asset.ip Asignación directa
target_host target.asset.hostname Asignación directa
target_ip target.asset.ip Se asignan directamente después de convertir la representación de cadena en un array JSON y, luego, extraer las IP individuales.
target_path target.url Asignación directa
time metadata.event_timestamp Se analiza para extraer la marca de tiempo con el formato “dd/MMM/yyyy:HH:mm:ss Z”.
user_agent network.http.user_agent Se asigna directamente si no está vacío o si es “-”.
metadata.event_type Se establece en "GENERIC_EVENT" inicialmente y, luego, se puede reemplazar en función de otros campos, como terminal y protocol. El valor predeterminado es "USER_UNCATEGORIZED" si el patrón de Grok principal no coincide. Se establece en "NETWORK_HTTP" si protocol es HTTP y target_ip está presente, y en "STATUS_UPDATE" si protocol es HTTP, pero target_ip no está presente.
metadata.log_type Se estableció en “NGINX”.
metadata.product_name Se estableció en “NGINX”.
metadata.vendor_name Se estableció en “NGINX”.
network.ip_protocol Establece el valor en "TCP" si terminal es "sshd" o "ssh", o si el patrón principal de Grok no coincide.
principal.asset_id Se establece en "GCP.GCE:0001" si terminal es "sshd" o "ssh". Se establece en "GCP.GCE:0002" si el patrón de Grok principal no coincide.
extensions.auth.type Se establece en "MACHINE" si terminal es "sshd" o "ssh".

Cambios

2022-09-10

  • Se creó un analizador predeterminado y se borró el analizador específico del cliente.
  • Lanzamiento inicial del analizador.