Coletar registros do Check Point Harmony
Versão do analisador:3.0
Neste documento, explicamos como ingerir registros do Check Point Harmony Email and
Collaboration (HEC) no Google Security Operations usando o Bindplane. Esse código de analisador
extrai pares de chave-valor das mensagens de syslog do Check Point Harmony e os mapeia
para um modelo de dados unificado (UDM). Primeiro, ele normaliza o formato da mensagem e, em seguida, analisa e mapeia iterativamente os campos para categorias do UDM, como principal, target, network e security_result, enriquecendo os dados para análise de segurança.
Antes de começar
Verifique se você tem os pré-requisitos a seguir:
- Instância do Google SecOps
- Windows 2016 ou mais recente ou um host Linux com
systemd - Se estiver em execução atrás de um proxy, as portas do firewall estão abertas
- Acesso privilegiado ao HEC do Check Point Harmony (Infinity Portal)
Receber credenciais do Google SecOps para o agente do BindPlane
Para autenticar o agente do Bindplane no Google SecOps, escolha um dos seguintes métodos:
- Novas implantações: use a API Chronicle (opção 1).
- Implantações legadas: continue usando o arquivo de autenticação de ingestão (opção 2) até que a API Ingestion seja desativada em 20 de julho de 2027.
Opção 1: criar uma conta de serviço para a API Chronicle (recomendado)
- Faça login no console doGoogle Cloud e selecione o projeto do Google Cloud vinculado à sua instância do Google SecOps.
- Acesse IAM e administrador > Contas de serviço.
- Clique em Criar conta de serviço.
- Informe os seguintes detalhes de configuração:
- Nome da conta de serviço: insira um nome para a conta (por exemplo,
bindplane-ingest). - Descrição da conta de serviço: insira uma descrição (por exemplo,
Bindplane agent log ingestion).
- Nome da conta de serviço: insira um nome para a conta (por exemplo,
- Clique em Criar e continuar.
- Na seção Conceder a essa conta de serviço acesso ao projeto, clique em Selecionar uma função e escolha Editor do Chronicle.
- Clique em Continuar e depois em Concluído.
- Clique na conta de serviço que você criou e acesse a guia Chaves.
- Clique em Adicionar chave > Criar nova chave.
- Selecione JSON e clique em Criar. O download do arquivo de chave é feito no seu computador.
- Salve o arquivo de chave como
ingestion-auth.jsonno diretório do coletor do BindPlane (/opt/observiq-otel-collector/ingestion-auth.jsonno Linux ouC:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.jsonno Windows) ou atualizecreds_file_pathemconfig.yamlpara corresponder ao caminho em que você o salvou. - Acesse IAM e administrador > Configurações e copie o Número do projeto. Você vai precisar dele para a configuração do exportador.
Opção 2: fazer o download do arquivo de autenticação de ingestão (legado)
- 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 ingestão.
- Salve o arquivo com segurança no sistema em que o agente do 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 de cliente na seção Detalhes da organização.
Instalar o agente do Bindplane
Instale o agente do Bindplane no sistema operacional Windows ou Linux de acordo com as instruções a seguir.
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 o guia de instalação.
Configurar o agente do Bindplane para ingerir o Syslog e enviar ao Google SecOps
- Acesse o arquivo de configuração:
- Localize o arquivo
config.yaml. Normalmente, ele está no diretório/opt/observiq-otel-collector/no Linux ou no diretório de instalação no Windows. - Abra o arquivo usando um editor de texto (por exemplo,
nano,viou Bloco de Notas).
- Localize o arquivo
Edite o arquivo
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: protocol: https # Region of your instance, for example us, europe, asia-southeast1 location: <LOCATION> # Project number of the Google Cloud project linked to the instance project: '<PROJECT_NUMBER>' compression: gzip # Adjust the path to the credentials file you downloaded in Step 1 creds_file_path: '/path/to/ingestion-authentication-file.json' # Replace with your actual customer ID from Step 2 customer_id: <customer_id> endpoint: chronicle.googleapis.com # Add optional ingestion labels for better organization log_type: 'CHECKPOINT_HARMONY' raw_log_field: body ingestion_labels: 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
<LOCATION>pela região da sua instância do Google SecOps (por exemplo,us,europeouasia-southeast1). O exportador prefixachronicle.googleapis.comcom esse valor. - Substitua
<PROJECT_NUMBER>pelo número do projeto em IAM e administrador > Configurações. - Substitua
<customer_id>pelo ID de cliente real. - Atualize
/path/to/ingestion-authentication-file.jsonpara o caminho em que o arquivo de chave da conta de serviço (Opção 1) foi salvo na seção Receber credenciais do Google SecOps para o agente do Bindplane.
Exportador da API de ingestão legada
Se você usar o arquivo de autenticação de ingestão da Opção 2, substitua o bloco
exporterspelo seguinte. Definacreds_file_pathcomo o caminho para o arquivo de autenticação de ingestão e, se a instância estiver fora dos EUA, substituamalachiteingestion-pa.googleapis.compelo endpoint regional (por exemplo,europe-malachiteingestion-pa.googleapis.com).exporters: chronicle/chronicle_w_labels: compression: gzip # Adjust the path to the credentials file you downloaded in Step 1 creds_file_path: '/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 log_type: 'CHECKPOINT_HARMONY' raw_log_field: body ingestion_labels:
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-agentPara reiniciar o agente do Bindplane em Windows, use o console Serviços ou insira o seguinte comando:
net stop BindPlaneAgent && net start BindPlaneAgent
Configurar o Syslog para o HEC do Check Point Harmony
- Faça login na interface da Web do Infinity Portal > Harmony Email & Collaboration.
- Acesse Configurações > Monitoramento > SIEM.
- Clique em Adicionar servidor SIEM.
- Informe os seguintes detalhes de configuração:
- Host: insira o endereço IP do agente do Bindplane.
- Porta: insira o número da porta do agente do Bindplane.
- Protocolo: selecione UDP.
- (Opcional) Token: insira uma tag opcional nos registros.
- Clique em Salvar.
Tabela de mapeamento de UDM
| Campo de registro | Mapeamento de UDM | Lógica |
|---|---|---|
| ação | security_result.action_details | Mapeado diretamente. |
| security_result.action | Mapeado para ALLOW, BLOCK, ALLOW_WITH_MODIFICATION ou QUARANTINE com base no valor do campo "action". | |
| additional_info | additional.fields.value.string_value | Mapeado diretamente com a chave = additional_info. |
| analyzed_on | security_result.detection_fields.value | Mapeado diretamente com a chave = analyzed_on. |
| client_name | additional.fields.value.string_value | Mapeado diretamente com a chave = client_name. |
| client_version | intermediary.platform_version | Mapeado diretamente. |
| confidence_level | security_result.detection_fields.value | Mapeado diretamente com a chave = confidence_level. |
| security_result.confidence | Mapeado para UNKNOWN_CONFIDENCE, LOW_CONFIDENCE, MEDIUM_CONFIDENCE ou HIGH_CONFIDENCE com base no valor do campo confidence_level. | |
| descrição | security_result.description | Mapeado diretamente. |
| dst | target.ip | Mapeado diretamente. |
| dst_dns_name | security_result.detection_fields.value | Mapeado diretamente com a chave = dst_dns_name. |
| dst_machine_name | security_result.detection_fields.value | Mapeado diretamente com a chave = dst_machine_name. |
| target.asset.hostname | Mapeado diretamente. | |
| target.hostname | Mapeado diretamente. | |
| dst_user_dn | security_result.detection_fields.value | Mapeado diretamente com a chave = dst_user_dn. |
| dst_user_name | target.user.userid | Mapeado diretamente. |
| ep_rule_id | security_result.rule_id | Mapeado diretamente se "rule_uid" estiver vazio. |
| erros | security_result.summary | Mapeado diretamente. |
| event_type | metadata.product_event_type | Mapeado diretamente. |
| file_md5 | target.process.file.md5 | Mapeado diretamente se o valor for um hash MD5 válido e não tiver apenas zeros. |
| target.file.md5 | Mapeado diretamente se o valor for um hash MD5 válido e não for composto apenas por zeros. | |
| file_name | target.process.file.full_path | Mapeado diretamente. |
| file_sha1 | target.process.file.sha1 | Mapeado diretamente se o valor for um hash SHA-1 válido e não for composto apenas por zeros. |
| target.file.sha1 | Mapeado diretamente se o valor for um hash SHA-1 válido e não for composto apenas por zeros. | |
| file_sha256 | target.process.file.sha256 | Mapeado diretamente se o valor for um hash SHA256 válido e não for composto apenas por zeros. |
| target.file.sha256 | Mapeado diretamente se o valor for um hash SHA256 válido e não for composto apenas por zeros. | |
| file_size | target.file.size | Mapeado diretamente. |
| file_type | target.file.file_type | Mapeado para FILE_TYPE_ZIP, FILE_TYPE_DOS_EXE, FILE_TYPE_PDF ou FILE_TYPE_XLSX com base no valor do campo "file_type". |
| flags | additional.fields.value.string_value | Mapeado diretamente com a chave = flags. |
| fw_subproduct | additional.fields.value.string_value | Mapeado diretamente com key = fw_subproduct se o produto estiver vazio. |
| metadata.product_name | Mapeado diretamente se o produto estiver vazio. | |
| host_type | security_result.detection_fields.value | Mapeado diretamente com a chave = host_type. |
| ifdir | network.direction | Mapeado diretamente após a conversão para maiúsculas. |
| ifname | security_result.detection_fields.value | Mapeado diretamente com a chave = ifname. |
| installed_products | security_result.detection_fields.value | Mapeado diretamente com a chave = installed_products. |
| is_scanned | security_result.detection_fields.value | Mapeado diretamente com a chave = is_scanned. |
| layer_name | security_result.detection_fields.value | Mapeado diretamente com a chave = layer_name. |
| security_result.rule_set_display_name | Mapeado diretamente. | |
| layer_uuid | security_result.detection_fields.value | Mapeado diretamente com a chave = layer_uuid. |
| security_result.rule_set | Mapeado diretamente. | |
| loguid | metadata.product_log_id | Mapeado diretamente. |
| machine_guid | principal.asset.attribute.labels.value | Mapeado diretamente com a chave = machine_guid. |
| malware_action | security_result.detection_fields.value | Mapeado diretamente com a chave = malware_action. |
| malware_family | security_result.detection_fields.value | Mapeado diretamente com a chave = malware_family. |
| media_authorized | security_result.detection_fields.value | Mapeado diretamente com a chave = media_authorized. |
| media_class_id | security_result.detection_fields.value | Mapeado diretamente com a chave = media_class_id. |
| media_description | security_result.detection_fields.value | Mapeado diretamente com a chave = media_description. |
| media_encrypted | security_result.detection_fields.value | Mapeado diretamente com a chave = media_encrypted. |
| media_manufacturer | security_result.detection_fields.value | Mapeado diretamente com a chave = media_manufacturer. |
| media_type | security_result.detection_fields.value | Mapeado diretamente com a chave = media_type. |
| métodos | security_result.detection_fields.value | Mapeado diretamente com a chave = methods. |
| originsicname | security_result.detection_fields.value | Mapeado diretamente com a chave = originsicname. |
| origem | intermediary.ip | Mapeado diretamente. |
| os_version | principal.asset.platform_software.platform_patch_level | Mapeado diretamente. |
| outzone | security_result.detection_fields.value | Mapeado diretamente com a chave = outzone. |
| parent_rule | security_result.detection_fields.value | Mapeado diretamente com a chave = parent_rule. |
| peer_gateway | intermediary.ip | Mapeado diretamente. |
| policy_guid | security_result.detection_fields.value | Mapeado diretamente com a chave = policy_guid. |
| policy_name | security_result.detection_fields.value | Mapeado diretamente com a chave = policy_name. |
| policy_number | security_result.detection_fields.value | Mapeado diretamente com a chave = policy_number. |
| policy_type | security_result.detection_fields.value | Mapeado diretamente com a chave = policy_type. |
| produto | additional.fields.value.string_value | Mapeado diretamente com a chave = product. |
| metadata.product_name | Mapeado diretamente. | |
| product_family | additional.fields.value.string_value | Mapeado diretamente com a chave = product_family. |
| program_name | additional.fields.value.string_value | Mapeado diretamente com a chave = program_name. |
| protection_name | security_result.detection_fields.value | Mapeado diretamente com a chave = protection_name. |
| protection_type | security_result.detection_fields.value | Mapeado diretamente com a chave = protection_type. |
| reading_data_access | security_result.detection_fields.value | Mapeado diretamente com a chave = reading_data_access. |
| rule_action | security_result.detection_fields.value | Mapeado diretamente com a chave = rule_action. |
| rule_name | security_result.rule_name | Mapeado diretamente. |
| rule_uid | security_result.rule_id | Mapeado diretamente se "ep_rule_id" estiver vazio. |
| s_port | principal.port | Mapeado diretamente. |
| esquema | security_result.detection_fields.value | Mapeado diretamente com a chave = scheme. |
| sequencenum | additional.fields.value.string_value | Mapeado diretamente com key = sequencenum. |
| serviço | target.port | Mapeado diretamente. |
| service_id | security_result.detection_fields.value | Mapeado diretamente com a chave = service_id. |
| session_uid | network.session_id | Mapeado diretamente. |
| src | principal.ip | Mapeado diretamente. |
| src_dns_name | security_result.detection_fields.value | Mapeado diretamente com a chave = src_dns_name. |
| src_machine_name | security_result.detection_fields.value | Mapeado diretamente com a chave = src_machine_name. |
| principal.asset.hostname | Mapeado diretamente. | |
| principal.hostname | Mapeado diretamente. | |
| src_user_dn | security_result.detection_fields.value | Mapeado diretamente com a chave = src_user_dn. |
| src_user_name | principal.user.userid | Mapeado diretamente. |
| principal.user.email_addresses | O endereço de e-mail é extraído do campo src_user_name, se ele existir e estiver no formato userid (email). |
|
| te_verdict_determined_by | security_result.detection_fields.value | Mapeado diretamente com a chave = te_verdict_determined_by. |
| timestamp | metadata.event_timestamp | Mapeado diretamente. |
| trusted_domain | security_result.detection_fields.value | Mapeado diretamente com a chave = trusted_domain. |
| usuário | principal.user.userid | Mapeado diretamente se src_user_name estiver vazio. |
| principal.user.email_addresses | O endereço de e-mail é extraído do campo "Usuário", se ele existir e estiver no formato userid (email). |
|
| user_name | principal.user.email_addresses | Mapeado diretamente se o valor for um endereço de e-mail válido. |
| user_sid | principal.user.windows_sid | Mapeado diretamente. |
| veredito | security_result.detection_fields.value | Mapeado diretamente com a chave = verdict. |
| versão | additional.fields.value.string_value | Mapeado diretamente com a chave = version. |
| vpn_feature_name | security_result.detection_fields.value | Mapeado diretamente com a chave = vpn_feature_name. |
| web_client_type | security_result.detection_fields.value | Mapeado diretamente com a chave = web_client_type. |
| metadata.log_type | Esse campo é fixado no código como CHECKPOINT_HARMONY. |
|
| metadata.vendor_name | Esse campo está fixado no código como CHECKPOINT_HARMONY. |
|
| principal.asset.platform_software.platform | Mapeado para WINDOWS, MAC ou LINUX com base no valor do campo "os_name". | |
| network.ip_protocol | Mapeado para TCP, UDP, ICMP, IP6IN4 ou GRE com base no valor do campo proto e em outros campos, como service e service_id. | |
| security_result.severity | Mapeado para LOW, MEDIUM, HIGH ou CRITICAL com base no valor do campo de gravidade. | |
| metadata.event_type | Esse campo será definido como NETWORK_CONNECTION se o principal e o destino estiverem presentes, STATUS_UNCATEGORIZED se apenas o principal estiver presente e GENERIC_EVENT caso contrário. |
|
label |
event.idm.read_only_udm.network.email.to |
Mapeado do registro de mudanças |
entityLink |
event.idm.read_only_udm.metadata.url_back_to_product |
Mapeado do registro de alterações |
actionType |
event.idm.read_only_udm.security_result.action_details |
Mapeado do registro de alterações |
eventId |
event.idm.read_only_udm.metadata.product_log_id |
Mapeado do registro de alterações |
eventCreated |
event.idm.read_only_udm.metadata.event_timestamp |
Mapeado do registro de alterações |
type |
event.idm.read_only_udm.metadata.product_event_type |
Mapeado do registro de alterações |
act.createTime |
event.idm.read_only_udm.additional.fields |
Mapeado do registro de alterações |
act.relatedEntityId |
event.idm.read_only_udm.additional.fields |
Mapeado do registro de alterações |
customerId |
event.idm.read_only_udm.additional.fields |
Mapeado do registro de alterações |
saas |
event.idm.read_only_udm.additional.fields |
Mapeado do registro de alterações |
state |
event.idm.read_only_udm.additional.fields |
Mapeado do registro de alterações |
entityId |
event.idm.read_only_udm.additional.fields |
Mapeado do registro de alterações |
connectivity_state |
event.idm.read_only_udm.additional.fields |
Mapeado do registro de alterações |
actions.actionType |
event.idm.read_only_udm.security_result.action |
Mapeado do registro de alterações |
senderAddress |
event.idm.read_only_udm.network.email.from |
Mapeado do registro de alterações |
Registro de alterações
Confira o registro de alterações deste analisador
Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais do Google SecOps.