Coletar registros do Apache
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
- Faça login no console do Google SecOps.
- Acesse Configurações do SIEM > Agentes de coleta.
- 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
- 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
Instalação do Windows
- Abra o Prompt de Comando ou o PowerShell como administrador.
Execute este comando:
msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
Instalação do Linux
- Abra um terminal com privilégios de root ou sudo.
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
- Para mais opções de instalação, consulte este guia de instalação.
Configurar o agente do Bindplane para ingerir o Syslog e enviar ao Google SecOps
Acesse o arquivo de configuração:
- 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. - Abra o arquivo usando um editor de texto (por exemplo,
nano,viou Bloco de Notas).
- Localize o arquivo
Edite o arquivo
config.yamlda 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_labelsSubstitua a porta e o endereço IP conforme necessário na sua infraestrutura.
Substitua
<customer_id>pelo ID do cliente real.Atualize
/path/to/ingestion-authentication-file.jsonpara 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-agentPara 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
- Faça login no servidor Ubuntu usando SSH.
Crie um arquivo em
/etc/rsyslog.d/chamado02-apache2.conf:vim /etc/rsyslog.d/02-apache2.confAdicione 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>ebindplane-agent-portpelo 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>.
- Substitua
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.