Coletar registros do Apache

Compatível com:

Este documento explica como ingerir registros do Apache no Google Security Operations usando o Bindplane. O código do analisador tenta primeiro analisar a mensagem de registro bruta como JSON. Se isso não funcionar, ele usará expressões regulares (padrões grok) para extrair campos da mensagem com base em formatos de registro comuns do Apache.

Antes de começar

  • Verifique se você tem uma instância do Google SecOps.
  • Use o Windows 2016 ou uma versão mais recente ou um host Linux com systemd.
  • Se você estiver executando por trás de um proxy, verifique se as portas do firewall estão abertas.
  • Verifique se você tem acesso privilegiado a uma instância do Apache.

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. Baixe o arquivo de autenticação de ingestão. Salve o arquivo de forma segura no sistema em que o Bindplane será instalado.

Receber o ID do 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

Instalação do Windows

  1. Abra o Prompt de Comando ou o PowerShell como administrador.
  2. Execute este comando:

    msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
    

Instalação do Linux

  1. Abra um terminal com privilégios de root ou sudo.
  2. Execute este comando:

    sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
    

Outros recursos de instalação

Configurar o agente do Bindplane para ingerir o Syslog e enviar ao Google SecOps

  1. Acesse o arquivo de configuração:

    1. Localize o arquivo config.yaml. Normalmente, ele fica no diretório /etc/bindplane-agent/ no Linux ou no diretório de instalação no Windows.
    2. Abra o arquivo usando um editor de texto (por exemplo, nano, vi ou Bloco de Notas).
  2. Edite o arquivo config.yaml da seguinte forma:

    receivers:
        udplog:
            # Replace the port and IP address as required
            listen_address: "0.0.0.0:514"
    
    exporters:
        chronicle/chronicle_w_labels:
            compression: gzip
            # Adjust the path to the credentials file you downloaded in Step 1
            creds: '/path/to/ingestion-authentication-file.json'
            # Replace with your actual customer ID from Step 2
            customer_id: <customer_id>
            endpoint: malachiteingestion-pa.googleapis.com
            # Add optional ingestion labels for better organization
            ingestion_labels:
                log_type: 'APACHE'
                raw_log_field: body
    
    service:
        pipelines:
            logs/source0__chronicle_w_labels-0:
                receivers:
                    - udplog
                exporters:
                    - chronicle/chronicle_w_labels
    
  3. Substitua a porta e o endereço IP conforme necessário na sua infraestrutura.

  4. Substitua <customer_id> pelo ID do cliente real.

  5. Atualize /path/to/ingestion-authentication-file.json para o caminho em que o arquivo de autenticação foi salvo na seção Receber arquivo de autenticação de ingestão do Google SecOps.

Reinicie o agente do Bindplane para aplicar as mudanças

  • Para reiniciar o agente do Bindplane no Linux, execute o seguinte comando:

    sudo systemctl restart bindplane-agent
    
  • Para reiniciar o agente do Bindplane no Windows, use o console Serviços ou insira o seguinte comando:

    net stop BindPlaneAgent && net start BindPlaneAgent
    

Configurar o Syslog no Apache

  1. Faça login no servidor Ubuntu usando SSH.
  2. Crie um arquivo em /etc/rsyslog.d/ chamado 02-apache2.conf:

    vim /etc/rsyslog.d/02-apache2.conf
    
  3. Adicione o seguinte código ao arquivo:

    module(load="imfile" PollingInterval="10" statefile.directory="/var/spool/rsyslog")
    input(type="imfile"
            File="/var/log/apache2/access.log"
            Tag="http_access"
            Severity="info"
            Facility="local6")
    Local6.info        @<bindplane-agnet-ip>:<vindplane-agent-port>
    module(load="imfile" PollingInterval="10" statefile.directory="/var/spool/rsyslog")
    input(type="imfile"
            File="/var/log/apache2/error.log"
            Tag="http_error"
    
    • Substitua bindplane-agent-ip> e bindplane-agent-port pelo endereço IP e pela porta configurados para o agente do Bindplane.
    • Se você estiver usando o protocolo TCP, adicione um @ à linha do host para que ela fique assim: @@<bindplane-agnet-ip>:<vindplane-agent-port>.
  4. Reinicie os serviços do RSyslog:

    sudo service rsyslog restart
    

Tabela de mapeamento do UDM

Campo de registro Mapeamento da UDM Lógica
bytes network.received_bytes Bytes recebidos do cliente.
bytes network.sent_bytes Bytes enviados ao cliente.
bytes_out network.sent_bytes Bytes enviados ao cliente.
bytes_received network.received_bytes Bytes recebidos do cliente.
Conteúdo network.http.method Método HTTP extraído do campo "Conteúdo".
Conteúdo target.url URL de destino extraído do campo "Conteúdo".
biscoito additional.fields.value.string_value Valor do campo "cookie".
dest_ip target.ip Endereço IP do destino.
dest_name target.hostname Nome do host do destino.
dest_port target.port Porta do destino.
description metadata.description Descrição do evento.
duration_microseconds additional.fields.value.string_value Valor do campo "duration_microseconds".
file_full_path target.file.full_path Caminho completo do arquivo de destino.
nome do host target.hostname Nome do host do destino.
http_content_type additional.fields.value.string_value Valor do campo "http_content_type".
http_host principal.hostname Nome do host do principal.
http_method network.http.method Método HTTP.
http_referrer network.http.referral_url URL do referenciador HTTP.
http_user_agent network.http.user_agent User agent HTTP.
ID metadata.id ID do evento.
insertId metadata.product_log_id ID do registro do produto.
ip principal.ip Endereço IP do principal.
jsonPayload.cIP target.ip Endereço IP do destino.
jsonPayload.cPort target.port Porta do destino.
jsonPayload.csBytes network.sent_bytes Bytes enviados ao cliente.
jsonPayload.csMethod network.http.method Método HTTP.
jsonPayload.csMimeType target.file.mime_type Tipo MIME do arquivo de destino.
jsonPayload.csReferer network.http.referral_url URL do referenciador HTTP.
jsonPayload.csURL target.url URL de destino.
jsonPayload.csUserAgent network.http.user_agent User agent HTTP.
jsonPayload.sHierarchy additional.fields.value.string_value Valor do campo "sHierarchy".
jsonPayload.sHostname principal.hostname Nome do host do principal.
jsonPayload.sIP principal.ip Endereço IP do principal.
jsonPayload.scBytes network.received_bytes Bytes recebidos do cliente.
jsonPayload.scHTTPStatus network.http.response_code Código de resposta HTTP.
jsonPayload.scResultCode additional.fields.value.string_value Valor do campo "scResultCode".
LastStatus network.http.response_code Código de resposta HTTP.
log_level security_result.severity Gravidade do resultado de segurança.
logName security_result.category_details Detalhes da categoria do resultado de segurança.
método network.http.method Método HTTP.
pid principal.process.pid ID do processo do principal.
Porta target.port Porta do destino.
proto network.application_protocol Protocolo de aplicativo.
referenciador network.http.referral_url URL do referenciador HTTP.
RemoteHost principal.ip Endereço IP do principal.
RemoteUser principal.user.userid ID do usuário do principal.
resource.labels.instance_id target.resource.product_object_id ID do objeto do produto do recurso de destino.
resource.labels.project_id target.resource.attribute.labels.value Valor do rótulo "project_id".
resource.labels.zone target.resource.attribute.cloud.availability_zone Zona de disponibilidade do recurso de destino.
resource.type target.resource.resource_type Tipo de recurso do destino.
resposta network.http.response_code Código de resposta HTTP.
SizeBytes network.received_bytes Bytes recebidos do cliente.
src_ip principal.ip Endereço IP do principal.
src_port principal.port Porta do principal.
ssl_cipher network.tls.cipher Criptografia TLS.
ssl_version network.tls.version_protocol Protocolo da versão TLS.
status network.http.response_code Código de resposta HTTP.
target target.url URL de destino.
target_ip target.ip Endereço IP do destino.
target_port target.port Porta do destino.
tempo metadata.event_timestamp Carimbo de data/hora do evento.
uri_path target.process.file.full_path Caminho completo do arquivo de destino.
usuário principal.user.userid ID do usuário do principal.
useragent network.http.user_agent User agent HTTP.
version_protocol network.tls.version_protocol Protocolo da versão TLS.
Workername principal.hostname Nome do host do principal.
x_forwarded_for Valor do cabeçalho "X-Forwarded-For".
metadata.log_type O valor é definido como "APACHE" no código do analisador.
metadata.product_name O valor é definido como "Apache Web Server" no código do analisador.
metadata.vendor_name O valor é definido como "Apache" no código do analisador.
metadata.event_type O valor é determinado com base na presença de informações principais e de destino. Se o principal e o destino estiverem presentes, o tipo de evento será definido como "NETWORK_HTTP". Se apenas o principal estiver presente, o tipo de evento será definido como "STATUS_UPDATE". Caso contrário, será definido como "GENERIC_EVENT".
additional.fields.key A chave é definida como "keep_alive", "duration_microseconds", "cookie", "http_content_type", "sHierarchy", "scResultCode" no código do analisador com base no campo.
target.port Se o campo "proto" for "HTTP", a porta será definida como 80. Se o campo "proto" for "HTTPS", a porta será definida como 443. Se o campo "proto" for "FTP", a porta será definida como 21.
target.resource.attribute.labels.key A chave é definida como "project_id" no código do analisador.

Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais do Google SecOps.