Coletar registros do Forcepoint Web Security
Este documento explica como ingerir registros do Forcepoint Web Security no Google Security Operations usando o agente do Bindplane.
O Forcepoint Web Security é um proxy da Web e um gateway de segurança que gera mensagens syslog em CEF (Common Event Format) para acesso à Web, eventos de segurança, autenticação e aplicação de políticas. O analisador extrai campos de registros formatados em CEF e syslog e os mapeia para o modelo de dados unificado (UDM).
Antes de começar
Verifique se você tem os pré-requisitos a seguir:
- Uma instância do Google SecOps
- Windows Server 2016 ou mais recente ou host Linux com
systemd - Conectividade de rede entre o agente do Bindplane e o Forcepoint Web Security
- Se você estiver executando por trás de um proxy, verifique se as portas do firewall estão abertas de acordo com os requisitos do agente Bindplane.
- Acesso administrativo ao Forcepoint Security Manager ou à interface de gerenciamento de dispositivos
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 com segurança no sistema em que o agente do Bindplane será instalado.
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
Instale o agente do Bindplane no seu sistema operacional Windows ou Linux de acordo com as instruções a seguir.
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" /quietAguarde a conclusão da instalação.
Execute o seguinte comando para confirmar a instalação:
sc query observiq-otel-collectorO serviço vai aparecer como EM EXECUÇÃO.
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.shAguarde a conclusão da instalação.
Execute o seguinte comando para confirmar a instalação:
sudo systemctl status observiq-otel-collectorO serviço vai aparecer como ativo (em execução).
Outros recursos de instalação
Para mais opções de instalação e solução de problemas, consulte o guia de instalação do agente do Bindplane.
Configurar o agente do Bindplane para ingerir syslog e enviar ao Google SecOps
É possível configurar o agente do Bindplane para receber mensagens syslog por TCP (recomendado) ou UDP.
Localizar o arquivo de configuração
Linux:
sudo nano /etc/bindplane-agent/config.yamlWindows:
notepad "C:\Program Files\observIQ OpenTelemetry Collector\config.yaml"
Editar o arquivo de configuração
Substitua todo o conteúdo de config.yaml pela configuração do protocolo escolhido:
Opção A: configuração de TCP (recomendada)
receivers: tcplog: listen_address: "0.0.0.0:514" exporters: chronicle/forcepoint_webproxy: compression: gzip creds_file_path: '/etc/bindplane-agent/ingestion-auth.json' customer_id: '<customer_id>' endpoint: malachiteingestion-pa.googleapis.com log_type: FORCEPOINT_WEBPROXY raw_log_field: body service: pipelines: logs/forcepoint_tcp_to_chronicle: receivers: - tcplog exporters: - chronicle/forcepoint_webproxyOpção B: configuração de UDP
receivers: udplog: listen_address: "0.0.0.0:514" exporters: chronicle/forcepoint_webproxy: compression: gzip creds_file_path: '/etc/bindplane-agent/ingestion-auth.json' customer_id: '<customer_id>' endpoint: malachiteingestion-pa.googleapis.com log_type: FORCEPOINT_WEBPROXY raw_log_field: body service: pipelines: logs/forcepoint_udp_to_chronicle: receivers: - udplog exporters: - chronicle/forcepoint_webproxy
Parâmetros de configuração
Substitua os seguintes marcadores de posição:
Configuração do receptor:
listen_address: endereço IP e porta a serem detectados:0.0.0.0para detectar em todas as interfaces (recomendado)- A porta
514é a porta padrão do syslog (requer raiz no Linux; use1514para não raiz)
Configuração do exportador:
creds_file_path: caminho completo para o arquivo de autenticação de ingestão:- Linux:
/etc/bindplane-agent/ingestion-auth.json - Windows:
C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json
- Linux:
customer_id: ID do cliente copiado do console do Google SecOpsendpoint: URL do endpoint regional:- EUA:
malachiteingestion-pa.googleapis.com - Europa:
europe-malachiteingestion-pa.googleapis.com - Ásia:
asia-southeast1-malachiteingestion-pa.googleapis.com - Consulte a lista completa em Endpoints regionais.
- EUA:
Salve o arquivo de configuração.
- Depois de editar, salve o arquivo:
- Linux: pressione
Ctrl+O,EntereCtrl+X. - Windows: clique em Arquivo > Salvar.
- Linux: pressione
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 observiq-otel-collectorVerifique se o serviço está em execução:
sudo systemctl status observiq-otel-collectorVerifique se há erros nos registros:
sudo journalctl -u observiq-otel-collector -f
Para reiniciar o agente do Bindplane em Windows, escolha uma das seguintes opções:
Prompt de comando ou PowerShell como administrador:
net stop observiq-otel-collector && net start observiq-otel-collectorConsole de serviços:
- Pressione
Win+R, digiteservices.msce pressione Enter. - Localize o Coletor do OpenTelemetry da observIQ.
- Clique com o botão direito do mouse e selecione Reiniciar.
Verifique se o serviço está em execução:
sc query observiq-otel-collectorVerifique se há erros nos registros:
type "C:\Program Files\observIQ OpenTelemetry Collector\log\collector.log"
- Pressione
Configurar o encaminhamento de syslog no Forcepoint Web Security
Configure o Forcepoint Web Security para encaminhar registros ao agente do Bindplane no formato CEF (Common Event Format).
Como usar o Forcepoint Security Manager
- Faça login no Forcepoint Security Manager com credenciais de administrador.
- Acesse Configurações > Registro.
- Na navegação à esquerda, selecione Servidores de registros.
- Clique em Adicionar para criar uma configuração de servidor de registros.
- Informe os seguintes detalhes de configuração:
- Tipo de servidor: selecione Servidor Syslog ou Servidor CEF.
- Nome: insira um nome descritivo, por exemplo,
Google Security Operations Bindplane CEF. - Host: insira o endereço IP ou o nome do host do agente do Bindplane.
- Porta: insira o número da porta do agente Bindplane (por exemplo,
514). - Protocolo: selecione o protocolo que corresponde à sua configuração do Bindplane:
- Selecione TCP se você configurou o receptor
tcplogno Bindplane (recomendado). - Selecione UDP se você configurou o receptor
udplogno Bindplane.
- Selecione TCP se você configurou o receptor
- Formato: selecione CEF (Common Event Format).
- Instalação: selecione Local0 (ou outra instalação disponível).
- Gravidade: selecione Informativo para capturar todos os níveis de registro.
- Em Categorias de registros ou Tipos de eventos, selecione os eventos a serem encaminhados:
- Registros de acesso à Web (registros de transações)
- Eventos de segurança (detecções de ameaças)
- Eventos de autenticação (login/logout do usuário)
- Eventos do sistema (alterações no sistema e na configuração)
- Ou selecione Todos os eventos para encaminhar todos os tipos de registros disponíveis.
- Opcional: configure outras opções:
- Tamanho do lote: defina como
1para encaminhamento em tempo real ou um valor maior para processamento em lote. - Formato da mensagem: verifique se o formato CEF está selecionado.
- Incluir informações do usuário: ative para incluir a identidade do usuário nos registros.
- Tamanho do lote: defina como
- Clique em Testar conexão para verificar a conectividade com o agente do Bindplane.
- Clique em Salvar para aplicar a configuração.
- Clique em Implantar para enviar a configuração a todos os gateways do Forcepoint Web Security.
Usar o appliance de segurança da Web da Forcepoint (configuração direta)
Se você estiver configurando diretamente no dispositivo:
- Faça login na interface de gerenciamento do Forcepoint Web Security Appliance.
- Acesse Sistema > Servidor de registros.
- Clique em Adicionar ou Editar para criar ou modificar um servidor de registros.
- Informe os seguintes detalhes de configuração:
- Endereço do servidor: insira o endereço IP do agente do Bindplane.
- Porta: digite
514(ou sua porta personalizada). - Protocolo: selecione TCP ou UDP para corresponder à sua configuração do Bindplane.
- Formato: selecione CEF ou Formato de evento comum.
- Instalação: selecione Local0.
- Em Tipos de registro, selecione os registros a serem encaminhados:
- Registros de acesso (em inglês)
- Registros de segurança
- Registros do administrador
- Clique em Aplicar ou Salvar.
- Se você estiver usando vários aparelhos, repita essa configuração em cada um deles.
Tabela de mapeamento do UDM
| Campo de registro | Mapeamento do UDM | Lógica |
|---|---|---|
action |
security_result.summary |
Se action_msg não estiver vazio, ele será mapeado para security_result.summary. Caso contrário, se action não estiver vazio, ele será mapeado para security_result.summary. Caso contrário, se act não estiver vazio, ele será mapeado para security_result.summary. |
action_msg |
security_result.summary |
Se action_msg não estiver vazio, ele será mapeado para security_result.summary. Caso contrário, se action não estiver vazio, ele será mapeado para security_result.summary. Caso contrário, se act não estiver vazio, ele será mapeado para security_result.summary. |
app |
target.application |
Se destinationServiceName não estiver vazio, ele será mapeado para app_name. Caso contrário, se app não estiver vazio e não contiver http ou HTTP, ele será mapeado para app_name. Por fim, app_name é mapeado para target.application. |
bytes_in |
network.received_bytes |
Se in não estiver vazio, ele será mapeado para bytes_in. Por fim, bytes_in é mapeado para network.received_bytes. |
bytes_out |
network.sent_bytes |
Se out não estiver vazio, ele será mapeado para bytes_out. Por fim, bytes_out é mapeado para network.sent_bytes. |
cat |
security_result.category_details |
Se cat não estiver vazio, ele será mapeado para category. Por fim, category é mapeado para security_result.category_details. |
category_no |
security_result.detection_fields.value |
Se category_no não estiver vazio, ele será mapeado para security_result.detection_fields.value com a chave Category Number. |
cn1 |
security_result.detection_fields.value |
Se cn1 não estiver vazio, ele será mapeado para security_result.detection_fields.value com a chave Disposition Number. |
ContentType |
target.file.mime_type |
Se contentType não estiver vazio, ele será mapeado para ContentType. Por fim, ContentType é mapeado para target.file.mime_type. |
cs1 |
target_role.description |
cs1 está mapeado para target_role.description. |
cs2 |
security_result.category_details |
Se cs2 não estiver vazio e não for 0, ele será mapeado para security_result.category_details com o prefixo Dynamic Category:. |
cs3 |
target.file.mime_type |
cs3 está mapeado para target.file.mime_type. |
description |
metadata.description |
Se description não estiver vazio, ele será mapeado para metadata.description. |
destinationServiceName |
target.application |
Se destinationServiceName não estiver vazio, ele será mapeado para app_name. Por fim, app_name é mapeado para target.application. |
deviceFacility |
metadata.product_event_type |
Se product_event e deviceFacility não estiverem vazios, eles serão concatenados com - e mapeados para metadata.product_event_type. Caso contrário, product_event será mapeado para metadata.product_event_type. |
disposition |
security_result.detection_fields.value |
Se disposition não estiver vazio, ele será mapeado para security_result.detection_fields.value com a chave Disposition Number. |
dst |
target.ip |
Se dst não estiver vazio e dvchost estiver, ele será mapeado para dst_ip. Por fim, dst_ip é mapeado para target.ip. |
dst_host |
target.hostname |
Se dst não estiver vazio e dvchost estiver, ele será mapeado para dst_host. Por fim, dst_host é mapeado para target.hostname. |
dst_ip |
target.ip |
Se dst não estiver vazio e dvchost estiver, ele será mapeado para dst_ip. Por fim, dst_ip é mapeado para target.ip. |
dst_port |
target.port |
Se dst não estiver vazio e dvchost estiver, ele será mapeado para dst_port. Por fim, dst_port é mapeado para target.port. |
duration |
network.session_duration.seconds |
Se duration não estiver vazio e não for 0, ele será mapeado para network.session_duration.seconds. |
dvchost |
intermediary.ip |
Se dvchost não estiver vazio, ele será mapeado para int_ip. Por fim, int_ip é mapeado para intermediary.ip se for um endereço IP válido. Caso contrário, é mapeado para intermediary.hostname. |
file_path |
target.file.full_path |
Se file_path não estiver vazio, ele será mapeado para target.file.full_path. |
host |
principal.ip |
Se host não estiver vazio, ele será mapeado para src. Por fim, src é mapeado para principal.ip. |
http_method |
network.http.method |
Se requestMethod não estiver vazio, ele será mapeado para http_method. Caso contrário, se method não estiver vazio, ele será mapeado para http_method. Por fim, http_method é mapeado para network.http.method. |
http_proxy_status_code |
network.http.response_code |
Se http_response estiver vazio ou for 0 ou -, e http_proxy_status_code não estiver vazio, ele será mapeado para network.http.response_code. |
http_response |
network.http.response_code |
Se http_response não estiver vazio, não for 0 nem -, ele será mapeado para network.http.response_code. |
http_user_agent |
network.http.user_agent |
Se http_user_agent não estiver vazio e não for -, ele será mapeado para network.http.user_agent. |
in |
network.received_bytes |
Se in não estiver vazio, ele será mapeado para bytes_in. Por fim, bytes_in é mapeado para network.received_bytes. |
int_host |
intermediary.hostname |
Se int_ip não estiver vazio e int_host não estiver vazio e for diferente de int_ip, ele será mapeado para intermediary.hostname. |
int_ip |
intermediary.ip |
Se dvchost não estiver vazio, ele será mapeado para int_ip. Por fim, int_ip é mapeado para intermediary.ip se for um endereço IP válido. Caso contrário, é mapeado para intermediary.hostname. |
level |
target_role.name |
Se level não estiver vazio e role estiver, ele será mapeado para role. Por fim, role é mapeado para target_role.name. |
log_level |
security_result.severity |
Se severity for 1 ou log_level contiver info ou message contiver notice, security_result.severity será definido como INFORMATIONAL. Se severity for 7, security_result.severity será definido como HIGH. |
loginID |
principal.user.userid |
Se loginID não estiver vazio, ele será mapeado para user. Por fim, se user não estiver vazio, não for - e não contiver LDAP, ele será mapeado para principal.user.userid. |
method |
network.http.method |
Se requestMethod não estiver vazio, ele será mapeado para http_method. Caso contrário, se method não estiver vazio, ele será mapeado para http_method. Por fim, http_method é mapeado para network.http.method. |
NatRuleId |
security_result.detection_fields.value |
Se NatRuleId não estiver vazio, ele será mapeado para security_result.detection_fields.value com a chave NatRuleId. |
out |
network.sent_bytes |
Se out não estiver vazio, ele será mapeado para bytes_out. Por fim, bytes_out é mapeado para network.sent_bytes. |
pid |
target.process.pid |
Se pid não estiver vazio, ele será mapeado para target.process.pid. |
policy |
target_role.description |
Se Policy não estiver vazio, ele será mapeado para policy. Se policy não estiver vazio e não for -, ele será mapeado para target_role.description. |
Policy |
target_role.description |
Se Policy não estiver vazio, ele será mapeado para policy. Se policy não estiver vazio e não for -, ele será mapeado para target_role.description. |
product_event |
metadata.product_event_type |
Se product não estiver vazio, ele será mapeado para product_event. Se product_event e deviceFacility não estiverem vazios, eles serão concatenados com - e mapeados para metadata.product_event_type. Caso contrário, product_event será mapeado para metadata.product_event_type. |
proxyStatus-code |
network.http.response_code |
Se http_response estiver vazio ou for 0 ou -, e http_proxy_status_code estiver vazio e proxyStatus-code não estiver, ele será mapeado para network.http.response_code. |
refererUrl |
network.http.referral_url |
Se refererUrl não estiver vazio e não for -, ele será mapeado para network.http.referral_url. |
requestClientApplication |
network.http.user_agent |
Se requestMethod não estiver vazio, ele será mapeado para http_user_agent. Por fim, http_user_agent é mapeado para network.http.user_agent. |
requestMethod |
network.http.method |
Se requestMethod não estiver vazio, ele será mapeado para http_method. Por fim, http_method é mapeado para network.http.method. |
role |
target_role.name |
Se level não estiver vazio e role estiver, ele será mapeado para role. Por fim, role é mapeado para target_role.name. |
RuleID |
security_result.rule_id |
Se RuleID não estiver vazio, ele será mapeado para security_result.rule_id. |
serverStatus-code |
network.http.response_code |
Se http_response estiver vazio ou for 0 ou -, e http_proxy_status_code estiver vazio e proxyStatus-code não estiver, ele será mapeado para network.http.response_code. |
severity |
security_result.severity |
Se severity for 1 ou log_level contiver info ou message contiver notice, security_result.severity será definido como INFORMATIONAL. Se severity for 7, security_result.severity será definido como HIGH. |
spt |
principal.port |
Se spt não estiver vazio, ele será mapeado para src_port. Por fim, src_port é mapeado para principal.port. |
src |
principal.ip |
Se src_host não estiver vazio, ele será mapeado para source_ip_temp. Se source_ip_temp for um endereço IP válido e src estiver vazio, ele será mapeado para src. Se host não estiver vazio, ele será mapeado para src. Por fim, src é mapeado para principal.ip. |
src_host |
principal.hostname |
Se src_host não estiver vazio, ele será mapeado para source_ip_temp. Se source_ip_temp não for um endereço IP válido, ele será mapeado para principal.hostname. Se source_ip_temp for um endereço IP válido e src estiver vazio, ele será mapeado para src. Por fim, src é mapeado para principal.ip. |
src_port |
principal.port |
Se src_port não estiver vazio, ele será mapeado para principal.port. |
suser |
principal.user.userid |
Se loginID não estiver vazio, ele será mapeado para user. Se suser não estiver vazio, ele será mapeado para user. Por fim, se user não estiver vazio, não for - e não contiver LDAP, ele será mapeado para principal.user.userid. |
url |
target.url |
Se url não estiver vazio, ele será mapeado para target.url. |
user |
principal.user.userid |
Se loginID não estiver vazio, ele será mapeado para user. Se suser não estiver vazio, ele será mapeado para user. Caso contrário, se usrName não estiver vazio, ele será mapeado para user. Por fim, se user não estiver vazio, não for - e não contiver LDAP, ele será mapeado para principal.user.userid. |
usrName |
principal.user.userid |
Se loginID não estiver vazio, ele será mapeado para user. Se suser não estiver vazio, ele será mapeado para user. Caso contrário, se usrName não estiver vazio, ele será mapeado para user. Por fim, se user não estiver vazio, não for - e não contiver LDAP, ele será mapeado para principal.user.userid. |
when |
metadata.event_timestamp |
Se when não estiver vazio, ele será analisado e mapeado para metadata.event_timestamp. |
| N/A | metadata.log_type |
O valor FORCEPOINT_WEBPROXY é codificado em metadata.log_type. |
| N/A | metadata.product_name |
O valor Forcepoint Webproxy é codificado em metadata.product_name. |
| N/A | metadata.vendor_name |
O valor Forcepoint é codificado em metadata.vendor_name. |
| N/A | network.application_protocol |
Se dst_port for 80, network.application_protocol será definido como HTTP. Se dst_port for 443, network.application_protocol será definido como HTTPS. |
| N/A | principal.user.group_identifiers |
Se user não estiver vazio, não for - e contiver LDAP, a parte da OU da string do usuário será extraída e mapeada para principal.user.group_identifiers. |
| N/A | principal.user.user_display_name |
Se user não estiver vazio, não for - e contiver LDAP, a parte do nome de usuário da string do usuário será extraída e mapeada para principal.user.user_display_name. |
| N/A | security_result.action |
Se action_msg, action ou act não estiverem vazios, sec_action será definido como ALLOW ou BLOCK com base nos valores deles. Por fim, sec_action é mapeado para security_result.action. |
| N/A | security_result.detection_fields.key |
O valor Disposition Number é codificado em security_result.detection_fields.key ao mapear disposition ou cn1. O valor NatRuleId é fixado no código de security_result.detection_fields.key ao mapear NatRuleId. O valor Category Number é fixado no código security_result.detection_fields.key ao mapear category_no. |
Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais do Google SecOps.