Recolha registos do ntopng

Compatível com:

Vista geral

Este analisador extrai registos de monitorização de rede ntopng no formato SYSLOG ou JSON. Analisa a mensagem de registo, converte os campos relevantes para o formato UDM e enriquece o evento com metadados, como os nomes dos produtos e dos fornecedores. O analisador também processa estruturas JSON aninhadas e mapeia campos ntopng específicos para eventos de rede UDM, incluindo alertas de fluxo e acesso a recursos do utilizador.

Antes de começar

Certifique-se de que tem os seguintes pré-requisitos:

  • Instância do Google SecOps.
  • Acesso privilegiado ao ntopng.

Configure feeds

Para configurar um feed, siga estes passos:

  1. Aceda a Definições do SIEM > Feeds.
  2. Clique em Adicionar novo feed.
  3. Na página seguinte, clique em Configurar um único feed.
  4. No campo Nome do feed, introduza um nome para o feed; por exemplo, Registos Ntopng.
  5. Selecione Webhook como o Tipo de origem.
  6. Selecione Ntopng como o Tipo de registo.
  7. Clicar em Seguinte.
  8. Opcional: especifique valores para os seguintes parâmetros de entrada:
    • Delimitador de divisão: o delimitador usado para separar linhas de registo, como \n.
  9. Clicar em Seguinte.
  10. Reveja a configuração do feed no ecrã Finalizar e, de seguida, clique em Enviar.
  11. Clique em Gerar chave secreta para gerar uma chave secreta para autenticar este feed.
  12. Copie e armazene a chave secreta. Não pode ver esta chave secreta novamente. Se necessário, pode regenerar uma nova chave secreta, mas esta ação torna a chave secreta anterior obsoleta.
  13. No separador Detalhes, copie o URL do ponto final do feed do campo Informações do ponto final. Tem de especificar este URL do ponto final na sua aplicação cliente.
  14. Clique em Concluído.

Crie uma chave da API para o feed de webhook

  1. Aceda à Google Cloud consola > Credenciais.

    Aceder a Credenciais

  2. Clique em Criar credenciais e, de seguida, selecione Chave de API.

  3. Restrinja o acesso da chave de API à API Google Security Operations.

Especifique o URL do ponto final

  1. Na aplicação cliente, especifique o URL do ponto final HTTPS fornecido no feed do webhook.
  2. Ative a autenticação especificando a chave da API e a chave secreta como parte do cabeçalho personalizado no seguinte formato:

    X-goog-api-key = API_KEY
    X-Webhook-Access-Key = SECRET
    

    Recomendação: especifique a chave da API como um cabeçalho em vez de a especificar no URL.

  3. Se o seu cliente de webhook não suportar cabeçalhos personalizados, pode especificar a chave da API e a chave secreta através de parâmetros de consulta no seguinte formato:

    ENDPOINT_URL?key=API_KEY&secret=SECRET
    

    Substitua o seguinte:

    • ENDPOINT_URL: o URL do ponto final do feed.
    • API_KEY: a chave da API para autenticar no Google Security Operations.
    • SECRET: a chave secreta que gerou para autenticar o feed.

Configurar um webhook no ntopng para o Google SecOps

  1. Inicie sessão na interface Web do ntopng.
  2. Selecione o menu Sistema no menu pendente.
  3. Aceda a Notificações > Pontos finais.
  4. Clique em Adicionar .
  5. Especifique valores para os seguintes parâmetros de entrada:
    • Nome do ponto final: indique um nome único e descritivo (por exemplo, Google SecOps).
    • Tipo de ponto final: selecione Webhook na lista.
    • URL do webhook: introduza o ENDPOINT_URL do Google SecOps com API_KEY e SECRET.
  6. Clique em Adicionar.
  7. Aceda a Notificações > Destinatários.
  8. Clique em Adicionar .
  9. Especifique valores para os seguintes parâmetros de entrada:
    • Nome do destinatário: indique um nome exclusivo e descritivo (por exemplo, Google SecOps).
    • Selecionar ponto final: selecione o ponto final criado anteriormente.
    • Gravidade: selecione a gravidade a enviar para o Google SecOps (por exemplo, Informação, Aviso e Erro).
    • Filtro de categorias: selecione o que enviar para o Google SecOps.
  10. Clique em Testar destinatário para validar a associação.
  11. Clique em Adicionar para guardar o webhook.

Configurar subscritores de recursos de webhook do ntopng

  1. Aceda a Pools.
  2. Selecione o recurso a partir do qual quer partilhar os eventos.

  3. Clique no ícone de lápis na coluna Ações.

  4. Clique no menu pendente Destinatários.

  5. Selecione o destinatário do webhook do Google SecOps.

  6. Clique em Editar para guardar a configuração.

  7. Repita o processo para outros recursos.

Tabela de mapeamento da UDM

Campo de registo Mapeamento de UDM Lógica
action security_result.detection_fields.key=action, security_result.detection_fields.value=%{action} O valor de action do registo não processado é mapeado para um objeto security_result.detection_fields com a chave "action".
alert_generation.host_info.broadcast_domain_host security_result.detection_fields.key=host_info broadcast_domain_host, security_result.detection_fields.value=%{alert_generation.host_info.broadcast_domain_host} O valor de alert_generation.host_info.broadcast_domain_host do JSON aninhado é mapeado para um objeto security_result.detection_fields com a chave "host_info broadcast_domain_host".
alert_generation.host_info.dhcpHost security_result.detection_fields.key=host_info dhcpHost, security_result.detection_fields.value=%{alert_generation.host_info.dhcpHost} O valor de alert_generation.host_info.dhcpHost do JSON aninhado é mapeado para um objeto security_result.detection_fields com a chave "host_info dhcpHost".
alert_generation.host_info.is_blacklisted security_result.detection_fields.key=host_info is_blacklisted, security_result.detection_fields.value=%{alert_generation.host_info.is_blacklisted} O valor de alert_generation.host_info.is_blacklisted do JSON aninhado é mapeado para um objeto security_result.detection_fields com a chave "host_info is_blacklisted".
alert_generation.host_info.is_broadcast security_result.detection_fields.key=host_info is_broadcast, security_result.detection_fields.value=%{alert_generation.host_info.is_broadcast} O valor de alert_generation.host_info.is_broadcast do JSON aninhado é mapeado para um objeto security_result.detection_fields com a chave "host_info is_broadcast".
alert_generation.host_info.is_multicast security_result.detection_fields.key=host_info is_multicast, security_result.detection_fields.value=%{alert_generation.host_info.is_multicast} O valor de alert_generation.host_info.is_multicast do JSON aninhado é mapeado para um objeto security_result.detection_fields com a chave "host_info is_multicast".
alert_generation.host_info.localhost security_result.detection_fields.key=host_info localhost, security_result.detection_fields.value=%{alert_generation.host_info.localhost} O valor de alert_generation.host_info.localhost do JSON aninhado é mapeado para um objeto security_result.detection_fields com a chave "host_info localhost".
alert_generation.host_info.privatehost security_result.detection_fields.key=host_info privatehost, security_result.detection_fields.value=%{alert_generation.host_info.privatehost} O valor de alert_generation.host_info.privatehost do JSON aninhado é mapeado para um objeto security_result.detection_fields com a chave "host_info privatehost".
alert_generation.host_info.systemhost security_result.detection_fields.key=host_info systemhost, security_result.detection_fields.value=%{alert_generation.host_info.systemhost} O valor de alert_generation.host_info.systemhost do JSON aninhado é mapeado para um objeto security_result.detection_fields com a chave "host_info systemhost".
alert_generation.script_key security_result.category_details=%{alert_generation.script_key} O valor de alert_generation.script_key do JSON aninhado é mapeado para security_result.category_details.
alert_generation.subdir security_result.detection_fields.key=alert_generation_subdir, security_result.detection_fields.value=%{alert_generation.subdir} O valor de alert_generation.subdir do JSON aninhado é mapeado para um objeto security_result.detection_fields com a chave "alert_generation_subdir".
alert_id security_result.detection_fields.key=alert_id, security_result.detection_fields.value=%{alert_id} O valor de alert_id do registo não processado é mapeado para um objeto security_result.detection_fields com a chave "alert_id".
alerts_map security_result.detection_fields.key=alerts_map, security_result.detection_fields.value=%{alerts_map} O valor de alerts_map do registo não processado é mapeado para um objeto security_result.detection_fields com a chave "alerts_map".
cli2srv_bytes network.sent_bytes O valor de cli2srv_bytes do registo não processado é convertido num número inteiro sem sinal e mapeado para network.sent_bytes.
cli_asn principal.resource.attribute.labels.key=cli_asn, principal.resource.attribute.labels.value=%{cli_asn} O valor de cli_asn do registo não processado é convertido numa string e mapeado para um objeto principal.resource.attribute.labels com a chave "cli_asn".
cli_blacklisted principal.resource.attribute.labels.key=cli_blacklisted, principal.resource.attribute.labels.value=%{cli_blacklisted} O valor de cli_blacklisted do registo não processado é convertido numa string e mapeado para um objeto principal.resource.attribute.labels com a chave "cli_blacklisted".
cli_city_name principal.location.city O valor de cli_city_name do registo não processado é mapeado para principal.location.city.
cli_continent_name principal.resource.attribute.labels.key=cli_continent_name, principal.resource.attribute.labels.value=%{cli_continent_name} O valor de cli_continent_name do registo não processado é mapeado para um objeto principal.resource.attribute.labels com a chave "cli_continent_name".
cli_country_name principal.location.country_or_region O valor de cli_country_name do registo não processado é mapeado para principal.location.country_or_region.
cli_host_pool_id principal.resource.attribute.labels.key=cli_host_pool_id, principal.resource.attribute.labels.value=%{cli_host_pool_id} O valor de cli_host_pool_id do registo não processado é convertido numa string e mapeado para um objeto principal.resource.attribute.labels com a chave "cli_host_pool_id".
cli_ip principal.ip, principal.asset.ip O valor de cli_ip do registo não processado é mapeado para principal.ip e principal.asset.ip.
cli_localhost principal.resource.attribute.labels.key=cli_localhost, principal.resource.attribute.labels.value=%{cli_localhost} O valor de cli_localhost do registo não processado é convertido numa string e mapeado para um objeto principal.resource.attribute.labels com a chave "cli_localhost".
cli_location principal.location.name O valor de cli_location do registo não processado é convertido numa string. Se não for "0", é mapeado para principal.location.name.
cli_name principal.hostname, principal.asset.hostname O valor de cli_name do registo não processado é mapeado para principal.hostname e principal.asset.hostname.
cli_network principal.resource.attribute.labels.key=cli_network, principal.resource.attribute.labels.value=%{cli_network} O valor de cli_network do registo não processado é convertido numa string e mapeado para um objeto principal.resource.attribute.labels com a chave "cli_network".
cli_port principal.port O valor de cli_port do registo não processado é convertido num número inteiro e mapeado para principal.port.
entity_id principal.resource.attribute.labels.key=entity_id, principal.resource.attribute.labels.value=%{entity_id} O valor de entity_id do registo não processado é convertido numa string e mapeado para um objeto principal.resource.attribute.labels com a chave "entity_id".
entity_val principal.resource.attribute.labels.key=entity_val, principal.resource.attribute.labels.value=%{entity_val} O valor de entity_val do registo não processado é mapeado para um objeto principal.resource.attribute.labels com a chave "entity_val", a menos que seja igual ao valor de ip.
event.type metadata.event_type Determinado pela lógica do analisador com base na presença dos campos principal, target e network. Valores possíveis: NETWORK_FLOW, NETWORK_UNCATEGORIZED, USER_RESOURCE_ACCESS e GENERIC_EVENT.
first_seen principal.asset.first_seen_time O valor de first_seen do registo não processado é convertido numa string, analisado como milissegundos desde a época e mapeado para principal.asset.first_seen_time.
flow_risk_bitmap security_result.detection_fields.key=flow_risk_bitmap, security_result.detection_fields.value=%{flow_risk_bitmap} O valor de flow_risk_bitmap do registo não processado é convertido numa string e mapeado para um objeto security_result.detection_fields com a chave "flow_risk_bitmap".
granularity security_result.detection_fields.key=granularity, security_result.detection_fields.value=%{granularity} O valor de granularity do registo não processado é convertido numa string e mapeado para um objeto security_result.detection_fields com a chave "granularity".
hash_entry_id security_result.detection_fields.key=hash_entry_id, security_result.detection_fields.value=%{hash_entry_id} O valor de hash_entry_id do JSON aninhado é mapeado para um objeto security_result.detection_fields com a chave "hash_entry_id".
host_ip principal.ip, principal.asset.ip O endereço IP extraído da parte <INT>Oct 20 15:34:53 1.1.1.1 da mensagem é mapeado para principal.ip e principal.asset.ip.
ifid principal.asset_id O valor de ifid do registo não processado é convertido numa string e mapeado para principal.asset_id com o prefixo "ifid: ".
ip principal.ip, principal.asset.ip ou target.ip, target.asset.ip Se is_client for verdadeiro, o valor de ip do registo não processado é mapeado para principal.ip e principal.asset.ip. Se is_server for verdadeiro, é mapeado para target.ip e target.asset.ip.
is_cli_attacker security_result.detection_fields.key=is_cli_attacker, security_result.detection_fields.value=%{is_cli_attacker} O valor de is_cli_attacker do registo não processado é convertido numa string e mapeado para um objeto security_result.detection_fields com a chave "is_cli_attacker".
is_cli_victim security_result.detection_fields.key=is_cli_victim, security_result.detection_fields.value=%{is_cli_victim} O valor de is_cli_victim do registo não processado é convertido numa string e mapeado para um objeto security_result.detection_fields com a chave "is_cli_victim".
is_flow_alert security_result.detection_fields.key=is_flow_alert, security_result.detection_fields.value=%{is_flow_alert}, security_result.detection_fields.key=alert type, security_result.detection_fields.value=flow O valor de is_flow_alert do registo não processado é convertido numa string e mapeado para um objeto security_result.detection_fields com a chave "is_flow_alert". Se is_flow_alert for verdadeiro, também é criado um objeto security_result.detection_fields com a chave "alert type" e o valor "flow".
is_srv_attacker security_result.detection_fields.key=is_srv_attacker, security_result.detection_fields.value=%{is_srv_attacker} O valor de is_srv_attacker do registo não processado é convertido numa string e mapeado para um objeto security_result.detection_fields com a chave "is_srv_attacker".
is_srv_victim security_result.detection_fields.key=is_srv_victim, security_result.detection_fields.value=%{is_srv_victim} O valor de is_srv_victim do registo não processado é convertido numa string e mapeado para um objeto security_result.detection_fields com a chave "is_srv_victim".
metadata.product_name metadata.product_name=NTOPNG Codificado de forma rígida para "NTOPNG".
metadata.vendor_name metadata.vendor_name=%{vendor_name} O valor de vendor_name da mensagem é mapeado para metadata.vendor_name.
name principal.hostname, principal.asset.hostname ou target.hostname, target.asset.hostname Se is_client for verdadeiro, o valor de name do registo não processado é mapeado para principal.hostname e principal.asset.hostname. Se is_server for verdadeiro, é mapeado para target.hostname e target.asset.hostname.
ntopng_key security_result.detection_fields.key=ntopng_key, security_result.detection_fields.value=%{ntopng_key} O valor de ntopng.key (com o nome alterado para ntopng_key) do JSON aninhado é mapeado para um objeto security_result.detection_fields com a chave "ntopng_key".
observation_point_id observer.asset_id O valor de observation_point_id do registo não processado é convertido numa string. Se não for "0", é mapeado para observer.asset_id com o prefixo "id: ".
pool_id principal.resource.attribute.labels.key=pool_id, principal.resource.attribute.labels.value=%{pool_id} O valor de pool_id do registo não processado é convertido numa string e mapeado para um objeto principal.resource.attribute.labels com a chave "pool_id".
probe_ip intermediary.ip O valor de probe_ip do registo não processado é mapeado para intermediary.ip.
proto.confidence security_result.confidence_details O valor de proto.confidence do registo não processado é convertido numa string e mapeado para security_result.confidence_details.
proto.http.last_method network.http.method O valor de proto.http.last_method do registo não processado é mapeado para network.http.method.
proto.http.last_return_code network.http.response_code O valor de proto.http.last_return_code do registo não processado é convertido num número inteiro e mapeado para network.http.response_code.
proto.http.last_server_name network.tls.client.server_name O valor de proto.http.server_name do registo não processado é mapeado para network.tls.client.server_name.
proto.http.last_url network.http.referral_url O valor de proto.http.last_url do registo não processado é mapeado para network.http.referral_url.
proto.http.last_user_agent network.http.user_agent O valor de proto.http.last_user_agent do registo não processado é mapeado para network.http.user_agent.
proto.http.server_name network.tls.client.server_name O valor de proto.http.server_name do registo não processado é mapeado para network.tls.client.server_name.
proto.l4 network.ip_protocol O valor de proto.l4 do registo não processado é mapeado para network.ip_protocol.
proto_ndpi additional.fields.key=proto ndpi, additional.fields.value.string_value=%{proto_ndpi}, network.application_protocol O valor de proto.ndpi (com o nome alterado para proto_ndpi) do registo não processado é mapeado para um objeto additional.fields com a chave "proto ndpi". Também é usado para determinar o valor de network.application_protocol com base em palavras-chave como "NTP" e "HTTP".
proto_ndpi_app principal.application O valor de proto_ndpi_app do registo não processado é mapeado para principal.application.
proto_ndpi_breed security_result.detection_fields.key=proto_ndpi_breed, security_result.detection_fields.value=%{proto_ndpi_breed} O valor de proto_ndpi_breed do registo não processado é convertido numa string e mapeado para um objeto security_result.detection_fields com a chave "proto_ndpi_breed".
proto_ndpi_cat security_result.category_details O valor de proto_ndpi_cat do registo não processado é mapeado para security_result.category_details.
proto_ndpi_cat_id security_result.detection_fields.key=proto_ndpi_cat_id, security_result.detection_fields.value=%{proto_ndpi_cat_id} O valor de proto_ndpi_cat_id do registo não processado é convertido numa string e mapeado para um objeto security_result.detection_fields com a chave "proto_ndpi_cat_id".
score security_result.detection_fields.key=score, security_result.detection_fields.value=%{score} O valor de score do registo não processado é convertido numa string e mapeado para um objeto security_result.detection_fields com a chave "score".
srv2cli_bytes network.received_bytes O valor de srv2cli_bytes do registo não processado é convertido num número inteiro sem sinal e mapeado para network.received_bytes.
srv_asn target.resource.attribute.labels.key=srv_asn, target.resource.attribute.labels.value=%{srv_asn} O valor de srv_asn do registo não processado é convertido numa string e mapeado para um objeto target.resource.attribute.labels com a chave "srv_asn".
srv_blacklisted target.resource.attribute.labels.key=srv_blacklisted, target.resource.attribute.labels.value=%{srv_blacklisted} O valor de srv_blacklisted do registo não processado é convertido numa string e mapeado para um objeto target.resource.attribute.labels com a chave "srv_blacklisted".
srv_city_name target.location.city O valor de srv_city_name do registo não processado é mapeado para target.location.city.
srv_continent_name target.resource.attribute.labels.key=srv_continent_name, target.resource.attribute.labels.value=%{srv_continent_name} O valor de srv_continent_name do registo não processado é mapeado para um objeto target.resource.attribute.labels com a chave "srv_continent_name".
srv_country_name target.location.country_or_region O valor de srv_country_name do registo não processado é mapeado para target.location.country_or_region.
srv_host_pool_id target.resource.attribute.labels.key=srv_host_pool_id, target.resource.attribute.labels.value=%{srv_host_pool_id} O valor de srv_host_pool_id do registo não processado é convertido numa string e mapeado para um objeto target.resource.attribute.labels com a chave "srv_host_pool_id".
srv_ip target.ip, target.asset.ip O valor de srv_ip do registo não processado é mapeado para target.ip e target.asset.ip.
srv_localhost target.resource.attribute.labels.key=srv_localhost, target.resource.attribute.labels.value=%{srv_localhost} O valor de srv_localhost do registo não processado é convertido numa string e mapeado para um objeto target.resource.attribute.labels com a chave "srv_localhost".
srv_location target.location.name O valor de srv_location do registo não processado é convertido numa string. Se não for "0", é mapeado para target.location.name.
srv_location_lat target.location.region_coordinates.latitude O valor de srv_location_lat do registo não processado é mapeado para target.location.region_coordinates.latitude.
srv_location_lon target.location.region_coordinates.longitude O valor de srv_location_lon do registo não processado é mapeado para target.location.region_coordinates.longitude.
srv_name target.hostname, target.asset.hostname O valor de srv_name do registo não processado é mapeado para target.hostname e target.asset.hostname.
srv_network target.resource.attribute.labels.key=srv_network, target.resource.attribute.labels.value=%{srv_network} O valor de srv_network do registo não processado é convertido numa string e mapeado para um objeto target.resource.attribute.labels com a chave "srv_network".
srv_port target.port O valor de srv_port do registo não processado é convertido num número inteiro e mapeado para target.port.
tstamp additional.fields.key=tstamp, additional.fields.value.string_value=%{tstamp} O valor de tstamp do registo não processado é convertido numa string e mapeado para um objeto additional.fields com a chave "tstamp".
vlan_id principal.resource.attribute.labels.key=vlan_id, principal.resource.attribute.labels.value=%{vlan_id} O valor de vlan_id do registo não processado é convertido numa string e mapeado para um objeto principal.resource.attribute.labels com a chave "vlan_id".
when metadata.event_timestamp O valor de when do registo não processado é analisado como uma data/hora e mapeado para metadata.event_timestamp.

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