Coletar registros do NGINX
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
- Faça login no console do Google SecOps.
- Acesse Configurações do SIEM > Agentes de coleta.
- Faça o download do arquivo de autenticação de transferência.
Receber o ID de cliente do Google SecOps
- Faça login no console do Google SecOps.
- Acesse Configurações do SIEM > Perfil.
- Copie e salve o ID do cliente na seção Detalhes da organização.
Instalar o agente do BindPlane
- 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
- 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
- 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
- Acesse a máquina em que o BindPlane está instalado.
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
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
Abra o arquivo de configuração do NGINX (por exemplo,
/etc/nginx/nginx.conf
):sudo vi /etc/nginx/nginx.conf
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; }
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.