Coletar registros do proxy Forcepoint
Neste documento, explicamos como transferir os registros do Forcepoint Proxy para as operações de segurança do Google usando o Bindplane. O analisador primeiro 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 a representação consistente dos dados.
Antes de começar
- Verifique se você tem uma instância do Google Security Operations.
- Verifique se você está usando o Windows 2016 ou uma versão mais recente ou um host Linux com
systemd
. - Se estiver executando por trás de um proxy, verifique se as portas do firewall estão abertas.
- Verifique se você tem acesso privilegiado ao Proxy da Forcepoint.
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.
- Faça o download do arquivo de autenticação de transferência. Salve o arquivo com segurança no sistema em que o 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
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 raiz 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 processar o Syslog e enviar ao Google SecOps
Acesse o arquivo de configuração:
- Localize o arquivo
config.yaml
. Normalmente, ele está 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
,vi
ou Notepad).
- Localize o arquivo
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
Substitua a porta e o endereço IP conforme necessário na sua infraestrutura.
Substitua
<customer_id>
pelo ID real do cliente.Atualize
/path/to/ingestion-authentication-file.json
para o caminho em que o arquivo de autenticação foi salvo na seção Receber o arquivo de autenticação de transferência 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 Services ou digite o seguinte comando:
net stop BindPlaneAgent && net start BindPlaneAgent
Configurar o Forcepoint Web Security Suite
- Faça login no console do Forcepoint.
- Acesse Web > Configurações > Geral.
- Clique em Integração com SIEM.
- Marque a caixa de seleção Ativar a integração do SIEM para este servidor de políticas.
- 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 SIEM: selecione Syslog/CEF (Arcsight).
- Clique em OK.
- 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 o ato 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 o ato 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á associado a app_name. Por fim, app_name é mapeado para target.application. |
bytes_in | network.received_bytes | Se o campo "in" não estiver vazio, ele será mapeado para "bytes_in". Por fim, bytes_in é associado a 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, o product_event é 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 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 é associado a 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á associado a int_ip. Por fim, int_ip é mapeado para intermediary.ip se for um endereço IP válido. Caso contrário, ele será 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, o src é mapeado para principal.ip. |
http_method | network.http.method | Se o 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 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 e 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 o campo "in" não estiver vazio, ele será mapeado para "bytes_in". Por fim, bytes_in é associado a 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á associado a int_ip. Por fim, int_ip é mapeado para intermediary.ip se for um endereço IP válido. Caso contrário, ele será mapeado para intermediary.hostname. |
level | target_role.name | Se o nível não estiver vazio e o papel estiver vazio, ele será mapeado para o papel. Por fim, o papel é mapeado 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 será definido como INFORMATIONAL . Se a gravidade for 7 , security_result.severity será definido como HIGH . |
loginID | principal.user.userid | Se o loginID não estiver vazio, ele será mapeado para o usuário. Por fim, se o user não estiver vazio e não for - , nem conter LDAP , ele será mapeado para principal.user.userid. |
método | network.http.method | Se o 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 o 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 a política. 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 a política. 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, o 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, ele será mapeado para network.http.response_code. |
refererUrl | network.http.referral_url | Se o refererUrl não estiver vazio e não for - , ele será mapeado para network.http.referral_url. |
requestClientApplication | network.http.user_agent | Se o requestMethod não estiver vazio, ele será associado a http_user_agent. Por fim, http_user_agent é mapeado para network.http.user_agent. |
requestMethod | network.http.method | Se o 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 o nível não estiver vazio e o papel estiver vazio, ele será mapeado para o papel. Por fim, o papel é mapeado para target_role.name. |
RuleID | security_result.rule_id | Se RuleID não estiver vazio, ele será associado a 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, ele será 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 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, o src é mapeado para principal.ip. |
src_host | principal.hostname | Se src_host não estiver vazio, ele será mapeado para source_ip_temp. Se o 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, o 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 o loginID não estiver vazio, ele será mapeado para o usuário. Se o suser não estiver vazio, ele será mapeado para o usuário. Por fim, se o user não estiver vazio e não for - , nem conter 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 o loginID não estiver vazio, ele será mapeado para o usuário. Se o suser não estiver vazio, ele será mapeado para o usuário. Caso contrário, se usrName não estiver vazio, ele será mapeado para o usuário. Por fim, se o user não estiver vazio e não for - , nem conter LDAP , ele será mapeado para principal.user.userid. |
usrName | principal.user.userid | Se o loginID não estiver vazio, ele será mapeado para o usuário. Se o suser não estiver vazio, ele será mapeado para o usuário. Caso contrário, se usrName não estiver vazio, ele será mapeado para o usuário. Por fim, se o user não estiver vazio e não for - , nem conter LDAP , ele será mapeado para principal.user.userid. |
quando | metadata.event_timestamp | Se o valor de "when" não estiver em branco, 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 e não for - e contiver LDAP , a parte da unidade organizacional da string de usuário será extraída e mapeada para principal.user.group_identifiers. |
|
principal.user.user_display_name | Se o user não estiver vazio e não for - e contiver LDAP , a parte do nome de usuário da string de 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. 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 em security_result.detection_fields.key ao mapear a disposição ou cn1. O valor NatRuleId é codificado em segurança_result.detection_fields.key ao mapear NatRuleId. O valor Category Number é codificado em segurança_result.detection_fields.key ao mapear category_no. |
|
security_result.severity | Se a gravidade for 1 ou 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 a política. Se a política não estiver vazia e não for - , ela será mapeada para target_role.description. |
|
target_role.name | Se o nível não estiver vazio e o papel estiver vazio, ele será mapeado para o papel. Por fim, o papel é mapeado 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 . |
Alterações
2025-01-16
Melhoria:
- Mapeou
security_result.action
paraBLOCK
quandos-action
éTCP_DENIED
.
2024-10-18
Melhoria:
- Adicionamos suporte para analisar os registros CSV não analisados.
- Foi adicionado suporte para excluir registros CSV inválidos.
host-url
foi mapeado paraprincipal.url
.
2024-07-10
Melhoria:
- Foram adicionados os padrões Grok para novos registros de formato KV.
username
foi mapeado paraprincipal.user.userid
.cs-uri
foi mapeado paratarget.url
.- Mapeamos
cs-uri-query
,time-taken
,filter-category
,cs-uri-path
,cs-uri-extension
ers_content_type
paraadditional.fields
. - Se
sc-filter-result
forOBSERVED
, definasecurity_result.action
comoALLOW
. Sesc-filter-result
forDENIED
, definasecurity_result.action
comoBLOCK
. Caso contrário, definasecurity_result.action
comoALLOW
. cs-auth-group
foi mapeado paraprincipal.user_group_identifiers
.cs-method
foi mapeado paranetwork.http.method
.sc-status
foi mapeado pararesponse_code
.s-action
foi mapeado parasecurity_result.detection_fields
.srcport
foi mapeado paraprincipal.port
.dstport
foi mapeado paratarget.port
.sc-bytes
foi mapeado paranetwork.received_bytes
.cs-bytes
foi mapeado paranetwork.sent_bytes
.cs
foi mapeado parasecurity_result.summary
.cs_referer
foi mapeado paranetwork.http.referral_url
.cs-host
foi mapeado paratarget.hostname
.
2024-06-10
Melhoria:
- Adicionamos suporte a registros no formato CSV.
2023-06-12
Melhoria:
- O padrão Grok foi modificado para analisar registros com falha em que alguns dos valores estão presentes como "-".
- Adição de verificação de condição para o campo "http_response" antes do mapeamento.
2022-08-11
Melhoria:
- O grok foi modificado para analisar logs do tipo CEF sem cabeçalho syslog.
2022-05-16
Melhoria:
- Número de categoria mapeado para security_result.detection_fields.
2022-05-05
Melhoria:
- Mapeamento adicionado para campos:
requestClientApplication
para http.user_agent,proxyStatus-code
para http.response_code,disposition
ecn1
para security_result.detection_fields. - O campo "cs2" foi mapeado para "security_result.category_details" se o valor de "cs2Label" for "DynCat".
- O campo "cs2" foi mapeado para "security_result.detection_fields" se o valor de "cs2Label" for "NatRuleId".
Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais do Google SecOps.