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&quo
t; /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)" instal
l_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
,vi
ou Bloco de notas).
- Localize o ficheiro
Edite o ficheiro
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 < custom>er_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/c
hronicle_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.json
para 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-agent
Para 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.