Coletar registros do NGINX

Compatível com:

Esse analisador NGINX processa registros formatados em JSON e syslog. Ele extrai campos de vários formatos de registro e os normaliza no formato UDM. O analisador enriquece o evento com metadados para gerenciamento de servidor e atividade de rede, incluindo logins de usuários e solicitações HTTP. Ele também processa a lógica para eventos SSH e preenche os campos do UDM com base nos dados extraídos.

Antes de começar

  • Verifique se você tem uma instância do Google Security Operations.
  • Verifique se o NGINX está em execução e gerando registros.
  • Confira se você tem acesso raiz à máquina host do NGINX.

Receber o arquivo de autenticação de ingestão do Google SecOps

  1. Faça login no console do Google SecOps.
  2. Acesse Configurações do SIEM > Agentes de coleta.
  3. Faça o download do arquivo de autenticação de transferência.

Receber o ID de cliente do Google SecOps

  1. Faça login no console do Google SecOps.
  2. Acesse Configurações do SIEM > Perfil.
  3. Copie e salve o ID do cliente na seção Detalhes da organização.

Instalar o agente do BindPlane

  1. Para a instalação do Windows, execute o seguinte script:
    msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
  2. Para a instalação do Linux, execute o seguinte script:
    sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
  3. Outras opções de instalação podem ser encontradas neste guia de instalação.

Configurar o agente BindPlane para ingerir o Syslog e enviar ao Google SecOps

  1. Acesse a máquina em que o BindPlane está instalado.
  2. Edite o arquivo config.yaml da seguinte forma:

    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. Reinicie o agente do BindPlane para aplicar as mudanças:

    sudo systemctl restart bindplane
    

Identificar o local dos arquivos de registro do NGINX

Os registros do NGINX são armazenados em: * Registros de acesso: /var/log/nginx/access.log * Registros de erros: /var/log/nginx/error.log 1. Acesse o host NGINX usando credenciais administrativas. 1. Execute o comando a seguir e procure os caminhos dos arquivos de registro no host do NGINX:

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

Configurar o NGINX para encaminhar registros ao BindPlane

  1. Abra o arquivo de configuração do NGINX (por exemplo, /etc/nginx/nginx.conf):

    sudo vi /etc/nginx/nginx.conf
    
  2. Edite a configuração, substituindo <BINDPLANE_SERVER> e <BINDPLANE_PORT> pelos seus 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. Reinicie o NGINX para aplicar as mudanças:

    sudo systemctl reload nginx
    

Tabela de mapeamento do UDM

Campo de registro Mapeamento do UDM Lógica
_Internal_WorkspaceResourceId target.resource.product_object_id Mapeados diretamente
Computer principal.asset.hostname Mapeados diretamente
Facility additional.fields["facility"] Mapeados diretamente
HostName principal.asset.hostname Mapeado diretamente se src_ip não estiver presente
ProcessName principal.application Mapeados diretamente
SeverityLevel security_result.severity Mapeado para INFORMATIVO se o valor for "info"
SourceSystem principal.asset.platform Mapeado para LINUX se o valor corresponder a "Linux"
SyslogMessage Vários campos Analisado usando grok para extrair time, method, target_path, protocol, response_code, referral_url, user_agent, target_ip, target_host e cache
TenantId additional.fields["TenantId"] Mapeados diretamente
acct principal.user.user_id Mapeado diretamente se não estiver vazio ou "?"
addr principal.asset.ip Mapeados diretamente
audit_epoch metadata.event_timestamp Convertido em carimbo de data/hora usando o formato "UNIX". Os nanossegundos são extraídos da mensagem de registro original.
cache additional.fields["cache"] Mapeados diretamente
collection_time.nanos metadata.event_timestamp.nanos Usado para nanossegundos do carimbo de data/hora do evento, se disponível
collection_time.seconds metadata.event_timestamp.seconds Usado para segundos do carimbo de data/hora do evento, se disponível
data Vários campos A principal fonte de dados, analisada de maneira diferente com base no formato de registro (Syslog, JSON ou outro)
exe target.process.command_line Mapeamento direto após a remoção de barras invertidas e aspas
hostname principal.asset.hostname OU principal.asset.ip Se for um endereço IP, ele será mapeado para principal.asset.ip. Caso contrário, será mapeado para principal.asset.hostname.
msg metadata.description Mapeado diretamente como a descrição
node target.asset.hostname Mapeados diretamente
pid target.process.pid Mapeados diretamente
protocol network.application_protocol Mapeado para HTTP se o valor corresponder a "HTTP"
referral_url network.http.referral_url Mapeado diretamente se não estiver vazio ou "-"
res security_result.action_details Mapeados diretamente
response_code network.http.response_code Mapeado diretamente e convertido em número inteiro
ses network.session_id Mapeados diretamente
src_ip principal.asset.ip Mapeados diretamente
target_host target.asset.hostname Mapeados diretamente
target_ip target.asset.ip Mapeado diretamente, depois de converter a representação de string em uma matriz JSON e extrair IPs individuais
target_path target.url Mapeados diretamente
time metadata.event_timestamp Analisado para extrair o carimbo de data/hora usando o formato "dd/MMM/yyyy:HH:mm:ss Z"
user_agent network.http.user_agent Mapeado diretamente se não estiver vazio ou "-"
metadata.event_type Inicialmente definido como "GENERIC_EVENT" e, em seguida, potencialmente substituído com base em outros campos, como terminal e protocol. O padrão é "USER_UNCATEGORIZED" se o padrão principal do grok não corresponder. Defina como "NETWORK_HTTP" se protocol for HTTP e target_ip estiver presente, e como "STATUS_UPDATE" se protocol for HTTP, mas target_ip não estiver presente
metadata.log_type Definido como "NGINX"
metadata.product_name Definido como "NGINX"
metadata.vendor_name Definido como "NGINX"
network.ip_protocol Defina como "TCP" se terminal for "sshd" ou "ssh" ou se o padrão de grok principal não corresponder
principal.asset_id Defina como "GCP.GCE:0001" se terminal for "sshd" ou "ssh". Defina como "GCP.GCE:0002" se o padrão de grok principal não corresponder
extensions.auth.type Defina como "MACHINE" se terminal for "sshd" ou "ssh"

Alterações

2022-09-10

  • Criou um analisador padrão e excluiu o analisador específico do cliente.
  • Versão inicial do analisador.