Recolha registos do Apache

Suportado em:

Este documento explica como carregar registos do Apache para o Google Security Operations através do Bindplane. O código do analisador tenta primeiro analisar a mensagem de registo não processada como JSON. Se falhar, usa expressões regulares (padrões grok) para extrair campos da mensagem com base em formatos de registo Apache comuns.

Antes de começar

  • Certifique-se de que tem uma instância do Google SecOps.
  • Certifique-se de que está a usar o Windows 2016 ou posterior, ou um anfitrião Linux com systemd.
  • Se estiver a executar o serviço através de um proxy, certifique-se de que as portas da firewall estão abertas.
  • Certifique-se de que tem acesso privilegiado a uma instância do Apache.

Obtenha o ficheiro de autenticação de carregamento do Google SecOps

  1. Inicie sessão na consola Google SecOps.
  2. Aceda a Definições do SIEM > Agentes de recolha.
  3. Transfira o ficheiro de autenticação de carregamento. Guarde o ficheiro de forma segura no sistema onde o Bindplane vai ser instalado.

Obtenha o ID de cliente do Google SecOps

  1. Inicie sessão na consola Google SecOps.
  2. Aceda a Definições do SIEM > Perfil.
  3. Copie e guarde o ID do cliente da secção Detalhes da organização.

Instale o agente do Bindplane

Instalação de janelas

  1. Abra a Linha de comandos ou o PowerShell como administrador.
  2. Execute o seguinte 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 raiz ou sudo.
  2. Execute o seguinte comando:

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

Recursos de instalação adicionais

Configure o agente Bindplane para carregar o Syslog e enviá-lo para o Google SecOps

  1. Aceda ao ficheiro de configuração:

    1. Localize o ficheiro config.yaml. Normalmente, encontra-se no diretório /etc/bindplane-agent/ no Linux ou no diretório de instalação no Windows.
    2. Abra o ficheiro com um editor de texto (por exemplo, nano, vi ou Bloco de notas).
  2. Edite o ficheiro 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 de cliente real.

  5. Atualize /path/to/ingestion-authentication-file.json para o caminho onde o ficheiro de autenticação foi guardado na secção Obtenha o ficheiro de autenticação de carregamento do Google SecOps.

Reinicie o agente do Bindplane para aplicar as alterações

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

    sudo systemctl restart bindplane-agent
    
  • Para reiniciar o agente Bindplane no Windows, pode usar a consola Serviços ou introduzir o seguinte comando:

    net stop BindPlaneAgent && net start BindPlaneAgent
    

Configure o Syslog no Apache

  1. Inicie sessão no servidor Ubuntu através de SSH.
  2. Crie um ficheiro em /etc/rsyslog.d/ com o nome 02-apache2.conf:

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

    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 estiver a usar o protocolo TCP, acrescente um @ adicional à linha do anfitrião para que fique com o seguinte aspeto: @@<bindplane-agnet-ip>:<vindplane-agent-port>.
  4. Reinicie os serviços RSyslog:

    sudo service rsyslog restart
    

Tabela de mapeamento da UDM

Campo de registo Mapeamento do UDM Lógica
bytes network.received_bytes Bytes recebidos do cliente.
bytes network.sent_bytes Bytes enviados para o cliente.
bytes_out network.sent_bytes Bytes enviados para o cliente.
bytes_received network.received_bytes Bytes recebidos do cliente.
Conteúdo network.http.method Método HTTP extraído do campo "Content".
Conteúdo target.url URL de destino extraído do campo "Conteúdo".
bolacha additional.fields.value.string_value Valor do campo "cookie".
dest_ip target.ip Endereço IP do destino.
dest_name target.hostname Nome do anfitrião do destino.
dest_port target.port Porta do destino.
descrição 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 ficheiro de destino.
hostname target.hostname Nome do anfitrião do destino.
http_content_type additional.fields.value.string_value Valor do campo "http_content_type".
http_host principal.hostname Nome do anfitrião 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 Agente do utilizador HTTP.
ID metadata.id ID do evento.
insertId metadata.product_log_id ID do registo 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 para o cliente.
jsonPayload.csMethod network.http.method Método HTTP.
jsonPayload.csMimeType target.file.mime_type Tipo MIME do ficheiro 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 Agente do utilizador HTTP.
jsonPayload.sHierarchy additional.fields.value.string_value Valor do campo "sHierarchy".
jsonPayload.sHostname principal.hostname Nome do anfitrião 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 aplicação.
referenciador network.http.referral_url URL do referenciador HTTP.
RemoteHost principal.ip Endereço IP do principal.
RemoteUser principal.user.userid ID do utilizador 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 da etiqueta "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 Porto do principal.
ssl_cipher network.tls.cipher Cifra TLS.
ssl_version network.tls.version_protocol Protocolo de versão TLS.
estado network.http.response_code Código de resposta HTTP.
alvo 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 Data/hora do evento.
uri_path target.process.file.full_path Caminho completo do ficheiro de destino.
utilizador principal.user.userid ID do utilizador do principal.
useragent network.http.user_agent Agente do utilizador HTTP.
version_protocol network.tls.version_protocol Protocolo de versão TLS.
Workername principal.hostname Nome do anfitrião 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 é definido como "NETWORK_HTTP". Se apenas o principal estiver presente, o tipo de evento é definido como "STATUS_UPDATE". Caso contrário, é 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 é definida como 80. Se o campo "proto" for "HTTPS", a porta é definida como 443. Se o campo "proto" for "FTP", a porta é 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 da Google SecOps.