Coletar registros do Forcepoint Web Security

Compatível com:

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

  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.
  4. Salve o arquivo com segurança no sistema em que o agente do Bindplane será instalado.

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

Instale o agente do Bindplane no seu sistema operacional Windows ou Linux de acordo com as instruções a seguir.

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
    
  3. Aguarde a conclusão da instalação.

  4. Execute o seguinte comando para confirmar a instalação:

    sc query observiq-otel-collector
    

    O serviço vai aparecer como EM EXECUÇÃO.

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
    
  3. Aguarde a conclusão da instalação.

  4. Execute o seguinte comando para confirmar a instalação:

    sudo systemctl status observiq-otel-collector
    

    O 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.yaml
    
  • Windows:

    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_webproxy
    
  • Opçã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.0 para detectar em todas as interfaces (recomendado)
      • A porta 514 é a porta padrão do syslog (requer raiz no Linux; use 1514 para 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
    • customer_id: ID do cliente copiado do console do Google SecOps
    • endpoint: 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.

Salve o arquivo de configuração.

  • Depois de editar, salve o arquivo:
    • Linux: pressione Ctrl+O, Enter e Ctrl+X.
    • Windows: clique em Arquivo > Salvar.

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-collector
    
    1. Verifique se o serviço está em execução:

      sudo systemctl status observiq-otel-collector
      
    2. Verifique 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-collector
      
    • Console de serviços:

      1. Pressione Win+R, digite services.msc e pressione Enter.
      2. Localize o Coletor do OpenTelemetry da observIQ.
      3. Clique com o botão direito do mouse e selecione Reiniciar.
      4. Verifique se o serviço está em execução:

        sc query observiq-otel-collector
        
      5. Verifique se há erros nos registros:

        type "C:\Program Files\observIQ OpenTelemetry Collector\log\collector.log"
        

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

  1. Faça login no Forcepoint Security Manager com credenciais de administrador.
  2. Acesse Configurações > Registro.
  3. Na navegação à esquerda, selecione Servidores de registros.
  4. Clique em Adicionar para criar uma configuração de servidor de registros.
  5. 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 tcplog no Bindplane (recomendado).
      • Selecione UDP se você configurou o receptor udplog no Bindplane.
    • 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.
  6. 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.
  7. Opcional: configure outras opções:
    • Tamanho do lote: defina como 1 para 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.
  8. Clique em Testar conexão para verificar a conectividade com o agente do Bindplane.
  9. Clique em Salvar para aplicar a configuração.
  10. 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:

  1. Faça login na interface de gerenciamento do Forcepoint Web Security Appliance.
  2. Acesse Sistema > Servidor de registros.
  3. Clique em Adicionar ou Editar para criar ou modificar um servidor de registros.
  4. 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.
  5. Em Tipos de registro, selecione os registros a serem encaminhados:
    • Registros de acesso (em inglês)
    • Registros de segurança
    • Registros do administrador
  6. Clique em Aplicar ou Salvar.
  7. 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.