Recolha registos do proxy Forcepoint
Este documento explica como carregar registos do proxy Forcepoint para o Google Security Operations através do Bindplane. O analisador primeiro limpa a mensagem de registo de entrada e extrai pares de chave-valor através de padrões grok e expressões regulares. Em seguida, mapeia os campos extraídos para o modelo de dados unificado (UDM) com base em condições e valores de campos específicos, processando vários formatos de registos e casos extremos para garantir uma representação de dados consistente.
Antes de começar
- Certifique-se de que tem uma instância do Google Security Operations.
- 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 ao proxy Forcepoint.
Obtenha o ficheiro de autenticação de carregamento do Google SecOps
- Inicie sessão na consola Google SecOps.
- Aceda a Definições do SIEM > Agentes de recolha.
- 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
- Inicie sessão na consola Google SecOps.
- Aceda a Definições do SIEM > Perfil.
- Copie e guarde o ID do cliente da secção Detalhes da organização.
Instale o agente do Bindplane
Instalação do Windows
- Abra a Linha de comandos ou o PowerShell como administrador.
Execute o seguinte 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 raiz ou sudo.
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
- Para ver opções de instalação adicionais, consulte este guia de instalação.
Configure o agente Bindplane para carregar o Syslog e enviá-lo para o Google SecOps
Aceda ao ficheiro de configuração:
- 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. - Abra o ficheiro com um editor de texto (por exemplo,
nano,viou Bloco de notas).
- Localize o ficheiro
Edite o ficheiro
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: FORCEPOINT_WEBPROXY 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 de cliente real.Atualize
/path/to/ingestion-authentication-file.jsonpara 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-agentPara reiniciar o agente do Bindplane no Windows, pode usar a consola Services ou introduzir o seguinte comando:
net stop BindPlaneAgent && net start BindPlaneAgent
Configure o Forcepoint Web Security Suite
- Inicie sessão na consola do Forcepoint.
- Aceda a Web > Definições > Geral.
- Clique em Integração de SIEM.
- Selecione a caixa de verificação Ativar a integração do SIEM para este servidor de políticas.
- Indique os seguintes detalhes de configuração:
- Endereço IP ou nome de anfitrião: introduza o endereço IP do agente do Bindplane.
- Número da porta: introduza o número da porta configurado no agente do Bindplane; por exemplo,
514. - Protocolo de transporte: selecione o protocolo UDP.
- Formato SIEM: selecione Syslog/CEF (Arcsight).
- Clique em OK.
- Clique em Guardar e implementar.
Tabela de mapeamento da UDM
| Campo de registo | Mapeamento de UDM | Lógica |
|---|---|---|
| ação | security_result.summary | Se action_msg não estiver vazio, é mapeado para security_result.summary. Caso contrário, se a ação não estiver vazia, é mapeada para security_result.summary. Caso contrário, se act não estiver vazio, é mapeado para security_result.summary. |
| action_msg | security_result.summary | Se action_msg não estiver vazio, é mapeado para security_result.summary. Caso contrário, se a ação não estiver vazia, é mapeada para security_result.summary. Caso contrário, se act não estiver vazio, é mapeado para security_result.summary. |
| app | target.application | Se destinationServiceName não estiver vazio, é mapeado para app_name. Caso contrário, se app não estiver vazio e não contiver http nem HTTP, é mapeado para app_name. Por último, app_name é mapeado para target.application. |
| bytes_in | network.received_bytes | Se in não estiver vazio, é mapeado para bytes_in. Por fim, bytes_in é mapeado para network.received_bytes. |
| bytes_out | network.sent_bytes | Se out não estiver vazio, é mapeado para bytes_out. Por fim, bytes_out é mapeado para network.sent_bytes. |
| gato | security_result.category_details | Se cat não estiver vazio, é mapeado para a categoria. Por fim, a categoria é mapeada para security_result.category_details. |
| cn1 | security_result.detection_fields.value | Se cn1 não estiver vazio, é mapeado para security_result.detection_fields.value com a chave Disposition Number. |
| ContentType | target.file.mime_type | Se contentType não estiver vazio, é mapeado para ContentType. Por último, 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, é mapeado para security_result.category_details com o prefixo Dynamic Category:. |
| cs3 | target.file.mime_type | cs3 está mapeado para target.file.mime_type. |
| descrição | metadata.description | Se a descrição não estiver vazia, é mapeada para metadata.description. |
| destinationServiceName | target.application | Se destinationServiceName não estiver vazio, é mapeado para app_name. Por último, app_name é mapeado para target.application. |
| deviceFacility | metadata.product_event_type | Se product_event e deviceFacility não estiverem vazios, são concatenados com - e mapeados para metadata.product_event_type. Caso contrário, product_event é mapeado para metadata.product_event_type. |
| disposição | security_result.detection_fields.value | Se a disposição não estiver vazia, é 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, é 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, é mapeado para dst_host. Por último, dst_host é mapeado para target.hostname. |
| dst_ip | target.ip | Se dst não estiver vazio e dvchost estiver vazio, é 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, é mapeado para dst_port. Por último, dst_port é mapeado para target.port. |
| duração | network.session_duration.seconds | Se a duração não estiver vazia e não for 0, é mapeada para network.session_duration.seconds. |
| dvchost | intermediary.ip | Se dvchost não estiver vazio, é 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, é mapeado para target.file.full_path. |
| anfitrião | principal.ip | Se o anfitrião não estiver vazio, é mapeado para src. Por último, src é mapeado para principal.ip. |
| http_method | network.http.method | Se requestMethod não estiver vazio, é mapeado para http_method. Caso contrário, se o método não estiver vazio, é mapeado para http_method. Por último, http_method é mapeado para network.http.method. |
| http_proxy_status_code | network.http.response_code | Se http_response estiver vazio ou 0 ou -, e http_proxy_status_code não estiver vazio, é mapeado para network.http.response_code. |
| http_response | network.http.response_code | Se http_response não estiver vazio, não for 0 nem -, é 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 -, é mapeado para network.http.user_agent. |
| em | network.received_bytes | Se in não estiver vazio, é 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, é mapeado para intermediary.hostname. |
| int_ip | intermediary.ip | Se dvchost não estiver vazio, é 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. |
| nível | target_role.name | Se o nível não estiver vazio e a função estiver vazia, é mapeado para a função. Por fim, a função é mapeada para target_role.name. |
| log_level | security_result.severity | Se a gravidade for 1 ou log_level contiver info ou a mensagem contiver notice, security_result.severity é definido como INFORMATIONAL. Se a gravidade for 7, security_result.severity é definida como HIGH. |
| loginID | principal.user.userid | Se loginID não estiver vazio, é mapeado para o utilizador. Por último, se o utilizador não estiver vazio, não for - e não contiver LDAP, é mapeado para principal.user.userid. |
| método | network.http.method | Se requestMethod não estiver vazio, é mapeado para http_method. Caso contrário, se o método não estiver vazio, é mapeado para http_method. Por último, http_method é mapeado para network.http.method. |
| NatRuleId | security_result.detection_fields.value | Se NatRuleId não estiver vazio, é mapeado para security_result.detection_fields.value com a chave NatRuleId. |
| sair | network.sent_bytes | Se out não estiver vazio, é mapeado para bytes_out. Por fim, bytes_out é mapeado para network.sent_bytes. |
| pid | target.process.pid | Se pid não estiver vazio, é mapeado para target.process.pid. |
| política | target_role.description | Se a política não estiver vazia, é mapeada para a política. Se a política não estiver vazia e não for -, é mapeada para target_role.description. |
| Política | target_role.description | Se a política não estiver vazia, é mapeada para a política. Se a política não estiver vazia e não for -, é mapeada para target_role.description. |
| product_event | metadata.product_event_type | Se o produto não estiver vazio, é mapeado para product_event. Se product_event e deviceFacility não estiverem vazios, são concatenados com - e mapeados para metadata.product_event_type. Caso contrário, product_event é mapeado para metadata.product_event_type. |
| proxyStatus-code | network.http.response_code | Se http_response estiver vazio ou 0 ou -, e http_proxy_status_code estiver vazio e proxyStatus-code não estiver vazio, é mapeado para network.http.response_code. |
| refererUrl | network.http.referral_url | Se refererUrl não estiver vazio e não for -, é mapeado para network.http.referral_url. |
| requestClientApplication | network.http.user_agent | Se requestMethod não estiver vazio, é mapeado para http_user_agent. Por último, http_user_agent é mapeado para network.http.user_agent. |
| requestMethod | network.http.method | Se requestMethod não estiver vazio, é mapeado para http_method. Por último, http_method é mapeado para network.http.method. |
| função | target_role.name | Se o nível não estiver vazio e a função estiver vazia, é mapeado para a função. Por fim, a função é mapeada para target_role.name. |
| RuleID | security_result.rule_id | Se RuleID não estiver vazio, é mapeado para security_result.rule_id. |
| serverStatus-code | network.http.response_code | Se http_response estiver vazio ou 0 ou -, e http_proxy_status_code estiver vazio e proxyStatus-code não estiver vazio, é mapeado para network.http.response_code. |
| gravidade | security_result.severity | Se a gravidade for 1 ou log_level contiver info ou a mensagem contiver notice, security_result.severity é definido como INFORMATIONAL. Se a gravidade for 7, security_result.severity é definida como HIGH. |
| spt | principal.port | Se spt não estiver vazio, é mapeado para src_port. Por fim, src_port é mapeado para principal.port. |
| src | principal.ip | Se src_host não estiver vazio, é mapeado para source_ip_temp. Se source_ip_temp for um endereço IP válido e src estiver vazio, é mapeado para src. Se o anfitrião não estiver vazio, é mapeado para src. Por último, src é mapeado para principal.ip. |
| src_host | principal.hostname | Se src_host não estiver vazio, é mapeado para source_ip_temp. Se source_ip_temp não for um endereço IP válido, é mapeado para principal.hostname. Se source_ip_temp for um endereço IP válido e src estiver vazio, é mapeado para src. Por último, src é mapeado para principal.ip. |
| src_port | principal.port | Se src_port não estiver vazio, é mapeado para principal.port. |
| suser | principal.user.userid | Se loginID não estiver vazio, é mapeado para o utilizador. Se suser não estiver vazio, é mapeado para user. Por último, se o utilizador não estiver vazio, não for - e não contiver LDAP, é mapeado para principal.user.userid. |
| url | target.url | Se o URL não estiver vazio, é mapeado para target.url. |
| utilizador | principal.user.userid | Se loginID não estiver vazio, é mapeado para o utilizador. Se suser não estiver vazio, é mapeado para user. Caso contrário, se usrName não estiver vazio, é mapeado para o utilizador. Por último, se o utilizador não estiver vazio, não for - e não contiver LDAP, é mapeado para principal.user.userid. |
| usrName | principal.user.userid | Se loginID não estiver vazio, é mapeado para o utilizador. Se suser não estiver vazio, é mapeado para user. Caso contrário, se usrName não estiver vazio, é mapeado para o utilizador. Por último, se o utilizador não estiver vazio, não for - e não contiver LDAP, é mapeado para principal.user.userid. |
| quando | metadata.event_timestamp | Se when não estiver vazio, é analisado e mapeado para metadata.event_timestamp. |
| metadata.log_type | O valor FORCEPOINT_WEBPROXY está codificado nos metadados.log_type. |
|
| metadata.product_name | O valor Forcepoint Webproxy está codificado nos metadados metadata.product_name. |
|
| metadata.vendor_name | O valor Forcepoint está codificado nos metadados.vendor_name. |
|
| network.application_protocol | Se dst_port for 80, network.application_protocol é definido como HTTP. Se dst_port for 443, network.application_protocol é definido como HTTPS. |
|
| principal.user.group_identifiers | Se o utilizador não estiver vazio, não for - e contiver LDAP, a parte da UO da string de utilizador é extraída e mapeada para principal.user.group_identifiers. |
|
| principal.user.user_display_name | Se o utilizador não estiver vazio, não for - e contiver LDAP, a parte do nome de utilizador da string do utilizador é 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 é definido como ALLOW ou BLOCK com base nos respetivos valores. Por fim, sec_action é mapeado para security_result.action. |
|
| security_result.category_details | Se cat não estiver vazio, é mapeado para a categoria. Por fim, a categoria é mapeada para security_result.category_details. Se cs2 não estiver vazio e não for 0, é mapeado para security_result.category_details com o prefixo Dynamic Category:. |
|
| security_result.detection_fields.key | O valor Disposition Number está codificado no campo security_result.detection_fields.key quando mapeia a disposição ou cn1. O valor NatRuleId está codificado no security_result.detection_fields.key quando mapeia NatRuleId. O valor Category Number está codificado em security_result.detection_fields.key quando mapeia category_no. |
|
| security_result.severity | Se a gravidade for 1 ou log_level contiver info ou a mensagem contiver notice, security_result.severity é definido como INFORMATIONAL. Se a gravidade for 7, security_result.severity é definida como HIGH. |
|
| target_role.description | Se a política não estiver vazia, é mapeada para a política. Se a política não estiver vazia e não for -, é mapeada para target_role.description. |
|
| target_role.name | Se o nível não estiver vazio e a função estiver vazia, é mapeado para a função. Por fim, a função é mapeada para target_role.name. | |
| category_no | security_result.detection_fields.value | Se category_no não estiver vazio, é mapeado para security_result.detection_fields.value com a chave Category Number. |
Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais da Google SecOps.