Coletar registros do proxy do Forcepoint

Compatível com:

Neste documento, explicamos como ingerir registros do proxy do Forcepoint no Google Security Operations usando o Bindplane. Primeiro, o analisador limpa a mensagem de registro de entrada e extrai pares de chave-valor usando padrões grok e expressões regulares. Em seguida, ele mapeia os campos extraídos para o Modelo de dados unificado (UDM, na sigla em inglês) com base em condições e valores de campo específicos, processando vários formatos de registro e casos extremos para garantir uma representação de dados consistente.

Antes de começar

  • Verifique se você tem uma instância do Google Security Operations.
  • 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 ao Forcepoint Proxy.

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: FORCEPOINT_WEBPROXY
                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 Forcepoint Web Security Suite

  1. Faça login no console do Forcepoint.
  2. Acesse Web > Configurações > Geral.
  3. Clique em Integração com SIEM.
  4. Marque a caixa de seleção Ativar a integração do SIEM para este servidor de políticas.
  5. Informe os seguintes detalhes de configuração:
    • Endereço IP ou nome do host: insira o endereço IP do agente do Bindplane.
    • Número da porta: insira o número da porta configurado no agente do Bindplane, por exemplo, 514.
    • Protocolo de transporte: selecione o protocolo UDP.
    • Formato do SIEM: selecione Syslog/CEF (Arcsight).
  6. Clique em OK.
  7. Clique em Salvar e implantar.

Tabela de mapeamento do UDM

Campo de registro Mapeamento do UDM Lógica
ação security_result.summary Se action_msg não estiver vazio, ele será mapeado para security_result.summary. Caso contrário, se a ação não estiver vazia, ela será mapeada 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 a ação não estiver vazia, ela será mapeada 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 o 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.
gato security_result.category_details Se "cat" não estiver vazio, ele será mapeado para "category". Por fim, a categoria é mapeada para security_result.category_details.
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 é 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 é mapeado para target.file.mime_type.
description metadata.description Se a descrição não estiver vazia, ela será mapeada 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 a disposição não estiver vazia, ela será mapeada para security_result.detection_fields.value com a chave Disposition Number.
dst target.ip Se dst não estiver vazio e dvchost estiver vazio, 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 vazio, 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 vazio, 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 vazio, ele será mapeado para dst_port. Por fim, dst_port é mapeado para target.port.
duration network.session_duration.seconds Se a duração não estiver vazia e não for 0, ela será mapeada 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, ele é 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 o 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 o método 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.
em 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, ele é mapeado para intermediary.hostname.
level target_role.name Se "level" não estiver vazio e "role" estiver, ele será mapeado para "role". Por fim, a função é mapeada para target_role.name.
log_level security_result.severity Se a gravidade for 1, o log_level contiver info ou a mensagem contiver notice, security_result.severity será definido como INFORMATIONAL. Se a gravidade for 7, security_result.severity será definido como HIGH.
loginID principal.user.userid Se loginID não estiver vazio, ele será mapeado para o usuário. Por fim, se o usuário não estiver vazio, não for - e não contiver LDAP, ele será mapeado para principal.user.userid.
método network.http.method Se requestMethod não estiver vazio, ele será mapeado para http_method. Caso contrário, se o método 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.
política target_role.description Se a política não estiver vazia, ela será mapeada para "policy". Se a política não estiver vazia e não for -, ela será mapeada para target_role.description.
Política target_role.description Se a política não estiver vazia, ela será mapeada para "policy". Se a política não estiver vazia e não for -, ela será mapeada para target_role.description.
product_event metadata.product_event_type Se o produto 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.
papel target_role.name Se "level" não estiver vazio e "role" estiver, ele será mapeado para "role". Por fim, a função é mapeada 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.
gravidade, security_result.severity Se a gravidade for 1, o log_level contiver info ou a mensagem contiver notice, security_result.severity será definido como INFORMATIONAL. Se a gravidade 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 o 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 o usuário. Se "suser" não estiver vazio, ele será mapeado para "user". Por fim, se o usuário não estiver vazio, não for - e não contiver LDAP, ele será mapeado para principal.user.userid.
url target.url Se o URL não estiver vazio, ele será mapeado para target.url.
usuário principal.user.userid Se loginID não estiver vazio, ele será mapeado para o usuário. 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 o usuário 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 o usuário. 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 o usuário não estiver vazio, não for - e não contiver LDAP, ele será mapeado para principal.user.userid.
quando metadata.event_timestamp Se "when" não estiver vazio, ele será analisado e mapeado para "metadata.event_timestamp".
metadata.log_type O valor FORCEPOINT_WEBPROXY é codificado em metadata.log_type.
metadata.product_name O valor Forcepoint Webproxy é codificado em metadata.product_name.
metadata.vendor_name O valor Forcepoint é codificado em metadata.vendor_name.
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.
principal.user.group_identifiers Se o usuário 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.
principal.user.user_display_name Se o usuário 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.
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.
security_result.category_details Se "cat" não estiver vazio, ele será mapeado para "category". Por fim, a categoria é mapeada para 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:.
security_result.detection_fields.key O valor Disposition Number é fixado no código em security_result.detection_fields.key ao mapear a disposição ou cn1. O valor NatRuleId é codificado no security_result.detection_fields.key ao mapear NatRuleId. O valor Category Number é codificado no security_result.detection_fields.key ao mapear category_no.
security_result.severity Se a gravidade for 1, o log_level contiver info ou a mensagem contiver notice, security_result.severity será definido como INFORMATIONAL. Se a gravidade for 7, security_result.severity será definido como HIGH.
target_role.description Se a política não estiver vazia, ela será mapeada para "policy". Se a política não estiver vazia e não for -, ela será mapeada para target_role.description.
target_role.name Se "level" não estiver vazio e "role" estiver, ele será mapeado para "role". Por fim, a função é mapeada para target_role.name.
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.

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