Coletar registros de alerta do Netskope v1

Compatível com:

Visão geral

Esse analisador extrai registros de alerta do Netskope de mensagens formatadas em JSON e os transforma na UDM do Google Security Operations. Ele normaliza campos, analisa carimbos de data/hora, lida com alertas e severidades, extrai informações de rede (IPs, portas, protocolos), enriquece dados de usuários e arquivos e mapeia campos para a estrutura do UDM. O analisador também processa atividades específicas do Netskope, como logins e eventos de DLP, e adiciona rótulos personalizados para melhorar o contexto.

Antes de começar

  • Verifique se você tem uma instância do Google SecOps.
  • Verifique se você tem acesso privilegiado ao Netskope.

Ativar o acesso à API REST da Netskope

  1. Faça login no locatário do Netskope usando suas credenciais de administrador.
  2. Acesse Configurações > Ferramentas > API REST v1.
  3. Crie uma nova chave de API especificamente para o Google SecOps.
  4. Forneça um nome descritivo (por exemplo, Chave do Google SecOps).
  5. Copie e salve a chave e o secret gerados.

Configurar um feed no Google SecOps para processar registros de alerta do Netskope

  1. Acesse Configurações do SIEM > Feeds.
  2. Clique em Adicionar novo.
  3. No campo Nome do feed, digite um nome para o feed (por exemplo, Registros de alerta do Netskope).
  4. Selecione API de terceiros como o Tipo de origem.
  5. Selecione Netskope como o Tipo de registro.
  6. Clique em Próxima.
  7. Especifique valores para os seguintes parâmetros de entrada:
    • Cabeçalho HTTP de autenticação:par de chaves gerado anteriormente no formato <key>:<secret>, usado para autenticação na API da Netskope.
    • Nome do host da API:o FQDN (nome de domínio totalmente qualificado) do endpoint de API REST da Netskope (por exemplo, myinstance.goskope.com).
    • Endpoint da API:digite alerts.
    • Content Type:insira all.
    • Namespace de recursos: o namespace de recursos.
    • Rótulos de ingestão: o rótulo aplicado aos eventos desse feed.
  8. Clique em Próxima.
  9. Revise a configuração do feed na tela Finalizar e clique em Enviar.

Opcional: adicione uma configuração de feed para importar registros de eventos do Netskope

  1. Acesse Configurações do SIEM > Feeds.
  2. Clique em Adicionar novo.
  3. No campo Nome do feed, insira um nome para o feed (por exemplo, Registros de eventos do Netskope).
  4. Selecione API de terceiros como o Tipo de origem.
  5. Selecione Netskope como o Tipo de registro.
  6. Clique em Próxima.
  7. Especifique valores para os seguintes parâmetros de entrada:
    • Cabeçalho HTTP de autenticação:par de chaves gerado anteriormente no formato <key>:<secret>, usado para autenticação na API da Netskope.
    • Nome do host da API:o FQDN (nome de domínio totalmente qualificado) do endpoint de API REST da Netskope (por exemplo, myinstance.goskope.com).
    • Endpoint da API:digite events.
    • Tipo de conteúdo:digite página, aplicação, auditoria, infraestrutura ou rede, dependendo dos eventos que você quer analisar.
    • Namespace de recursos: o namespace de recursos.
    • Rótulos de ingestão: o rótulo aplicado aos eventos desse feed.
  8. Clique em Próxima.
  9. Revise a configuração do feed na tela Finalizar e clique em Enviar.

Tabela de mapeamento do UDM

Campo de registro Mapeamento do UDM Lógica
access_method extensions.auth.auth_details Mapeado diretamente do campo access_method.
action security_result.action Mapeado diretamente do campo action ou definido como QUARANTINE se action for "alert" ou "bypass". ALLOW se action for permitido. BLOCK se action estiver bloqueado.
action security_result.action_details Mapeado do campo action se ele for "alert" ou "bypass".
activity security_result.description Mapeado diretamente do campo activity.
alert is_alert Defina como true se alert for "sim", false caso contrário.
alert_name - Não mapeado para o objeto IDM.
alert_type security_result.category_details Mapeado diretamente do campo alert_type.
app target.application Mapeado diretamente do campo app.
app_activity additional.fields{key:"app_activity", value:{string_value: }} Mapeado diretamente do campo app_activity como um par de chave-valor em additional.fields.
app_session_id target.resource.attribute.labels{key:"App Session Id", value: } Extraídos do campo message usando grok e adicionados como um rótulo.
appcategory security_result.category_details Mapeado diretamente do campo appcategory se category estiver vazio.
browser network.http.user_agent Mapeado diretamente do campo browser, se não for "unknown".
browser_version network.http.parsed_user_agent.browser_version Mapeado diretamente do campo browser_version.
browser_version network.http.parsed_user_agent.family Defina como "USER_DEFINED" se browser_version estiver presente.
category security_result.category_details Mapeado diretamente do campo category.
cci security_result.detection_fields{key:"cci", value: } Mapeado diretamente do campo cci como um par de chave-valor em detection_fields.
ccl security_result.confidence Defina com base no valor de ccl: "insatisfatório" ou "baixo" é mapeado para LOW_CONFIDENCE, "médio" para MEDIUM_CONFIDENCE, "alto" ou "excelente" para HIGH_CONFIDENCE.
ccl security_result.confidence_details Mapeado diretamente do campo ccl.
client_bytes network.sent_bytes Mapeado diretamente do campo client_bytes após a conversão para número inteiro não assinado.
count additional.fields{key:"count", value:{string_value: }} Mapeado diretamente do campo count como um par de chave-valor em additional.fields.
device principal.resource.resource_subtype Mapeado diretamente do campo device.
device principal.resource.type Defina como "DEVICE" se o campo device estiver presente.
dlp_file target.file.full_path Mapeado diretamente do campo dlp_file, se presente, ou de file_path.
dlp_profile security_result.rule_type Mapeado diretamente do campo dlp_profile.
dlp_rule security_result.rule_name Mapeado diretamente do campo dlp_rule.
dlp_rule_severity security_result.severity Mapeado diretamente do campo dlp_rule_severity se alert_type for DLP.
dlp_rule_severity _severity Mapeado do campo dlp_rule_severity se severity estiver vazio.
domain target.asset.hostname Mapeado diretamente do campo domain.
domain target.hostname Mapeado diretamente do campo domain.
dsthost target.asset.hostname Mapeado diretamente do campo dsthost se não for um IP e dstip estiver vazio. Caso contrário, será mapeado para target.hostname.
dsthost target.hostname Mapeado diretamente do campo dsthost se não for um IP e dstip não estiver vazio.
dstip target.asset.ip Mapeado diretamente do campo dstip.
dstip target.ip Mapeado diretamente do campo dstip.
dstport target.port Mapeado diretamente do campo dstport após a conversão para número inteiro.
dst_country target.location.country_or_region Mapeado diretamente do campo dst_country.
dst_location target.location.city Mapeado diretamente do campo dst_location.
dst_region target.location.name Mapeado diretamente do campo dst_region.
file_path target.file.full_path Mapeado diretamente do campo file_path se dlp_file estiver vazio.
file_size target.file.size Mapeado diretamente do campo file_size após a conversão para número inteiro não assinado.
file_type target.file.mime_type Mapeado diretamente do campo file_type, se não for "Desconhecido".
from_user network.email.from Mapeado diretamente do campo from_user se for um endereço de e-mail.
from_user_category principal.resource.attribute.labels{key:"From User Category", value: } Mapeado diretamente do campo from_user_category como um par de chave-valor em principal.resource.attribute.labels.
hostname principal.asset.hostname Mapeado diretamente do campo hostname se não estiver vazio, caso contrário, de instance_id.
hostname principal.hostname Mapeado diretamente do campo hostname se não estiver vazio, caso contrário, de instance_id.
id.time metadata.event_timestamp Analisado e mapeado para event_timestamp nos metadados.
instance_id principal.asset.hostname Mapeado diretamente do campo instance_id se hostname estiver vazio.
instance_id principal.hostname Mapeado diretamente do campo instance_id se hostname estiver vazio.
intermediary intermediary Mapeado diretamente do campo intermediary.
ip_protocol network.ip_protocol Mapeado do campo ip_protocol depois de ser analisado pelo arquivo parse_ip_protocol.include.
is_alert is_alert Campo gerado pelo analisador. Defina como verdadeiro se o campo alert for "sim".
is_significant is_significant Campo gerado pelo analisador. Defina como "true" se _severity for "CRITICAL" ou "HIGH".
ja3 network.tls.client.ja3 Mapeado diretamente do campo ja3 se corresponder a um padrão hexadecimal.
ja3s network.tls.server.ja3s Mapeado diretamente do campo ja3s se corresponder a um padrão hexadecimal.
malware_id security_result.threat_id Mapeado diretamente do campo malware_id.
malware_name security_result.threat_name Mapeado diretamente do campo malware_name.
malware_severity security_result.severity Mapeado diretamente do campo malware_severity após a conversão para maiúsculas.
malware_type security_result.detection_fields{key:"Malware Type", value: } Mapeado diretamente do campo malware_type como um par de chave-valor em detection_fields.
matched_username principal.user.email_addresses Mapeado diretamente do campo matched_username se for um endereço de e-mail.
md5 target.file.md5 Mapeado diretamente do campo md5 se ele não estiver vazio ou "Não disponível".
metadata.event_type metadata.event_type Inicialmente, "GENERIC_EVENT", e depois pode ser substituído com base em outros campos. Defina como NETWORK_HTTP se srcip ou hostname e dstip ou dsthost ou domain estiverem presentes. Defina como STATUS_UPDATE se srcip ou hostname estiverem presentes, mas não dstip, dsthost ou domain. Defina como USER_UNCATEGORIZED se user estiver presente. Defina como EMAIL_UNCATEGORIZED se activity for "Introspection scan" e shared_with ou from_user estiverem presentes. Defina como USER_LOGIN se activity for "Login Failed", "Login Successful" ou "Login Attempt".
metadata.log_type metadata.log_type Defina como "NETSKOPE_ALERT".
metadata.product_log_id metadata.product_log_id Mapeado diretamente do campo _id.
metadata.product_name metadata.product_name Defina como "Alerta do Netskope".
metadata.vendor_name metadata.vendor_name Defina como "Netskope".
netskope_pop observer.hostname Mapeado diretamente do campo netskope_pop.
object additional.fields{key:"Object", value:{string_value: }} Mapeado diretamente do campo object como um par de chave-valor em additional.fields.
object_id additional.fields{key:"Object id", value:{string_value: }} Mapeado diretamente do campo object_id como um par de chave-valor em additional.fields.
object_type additional.fields{key:"Object type", value:{string_value: }} Mapeado diretamente do campo object_type como um par de chave-valor em additional.fields.
organization_unit principal.administrative_domain Mapeado diretamente do campo organization_unit.
os principal.platform Mapeado do campo os: "Windows" é mapeado para WINDOWS, "MAC" para MAC e "LINUX" para LINUX.
os_version principal.platform_version Mapeado diretamente do campo os_version.
other_categories - Não mapeado para o objeto IDM.
page network.http.referral_url Mapeado diretamente do campo page se referer estiver vazio.
policy security_result.summary Mapeado diretamente do campo policy.
principal.user.email_addresses principal.user.email_addresses Mesclado do campo user se for um endereço de e-mail.
protocol network.application_protocol Mapeado diretamente do campo protocol após a remoção de tudo depois do primeiro "/". Conversão para letras maiúsculas.
publisher_cn additional.fields{key:"publisher_cn", value:{string_value: }} Mapeado diretamente do campo publisher_cn como um par de chave-valor em additional.fields.
publisher_name additional.fields{key:"publisher_name", value:{string_value: }} Mapeado diretamente do campo publisher_name como um par de chave-valor em additional.fields.
referer network.http.referral_url Mapeado diretamente do campo referer.
security_result.alert_state security_result.alert_state Defina como "ALERTING" se alert for "yes", "NOT_ALERTING" se alert for "no", "UNSPECIFIED" caso contrário.
security_result.category_details security_result.category_details Mesclados dos campos category, appcategory ou alert_type.
security_result.confidence security_result.confidence Derivado do campo ccl.
security_result.confidence_details security_result.confidence_details Mapeado diretamente do campo ccl.
security_result.description security_result.description Mapeado diretamente do campo activity.
security_result.rule_name security_result.rule_name Mapeado diretamente do campo dlp_rule.
security_result.rule_type security_result.rule_type Mapeado diretamente do campo dlp_profile.
security_result.severity security_result.severity Derivada dos campos _severity, malware_severity ou dlp_rule_severity.
security_result.summary security_result.summary Mapeado diretamente do campo policy.
security_result.threat_id security_result.threat_id Mapeado diretamente do campo malware_id.
security_result.threat_name security_result.threat_name Mapeado diretamente do campo malware_name.
server_bytes network.received_bytes Mapeado diretamente do campo server_bytes após a conversão para número inteiro não assinado.
severity _severity Mapeado diretamente do campo severity.
sha256 target.file.sha256 Mapeado diretamente do campo sha256.
shared_with network.email.to Analisado do campo shared_with e adicionado à matriz network.email.to se for um endereço de e-mail.
site additional.fields{key:"site", value:{string_value: }} Mapeado diretamente do campo site como um par de chave-valor em additional.fields.
src_country principal.location.country_or_region Mapeado diretamente do campo src_country.
src_latitude principal.location.region_latitude Mapeado diretamente do campo src_latitude.
src_location principal.location.city Mapeado diretamente do campo src_location.
src_longitude principal.location.region_longitude Mapeado diretamente do campo src_longitude.
src_region principal.location.name Mapeado diretamente do campo src_region.
srcip principal.asset.ip Extraídos do campo srcip usando grok e mesclados nos arrays principal.asset.ip e principal.ip.
srcip principal.ip Extraídos do campo srcip usando grok e mesclados nos arrays principal.asset.ip e principal.ip.
srcport principal.port Mapeado diretamente do campo srcport após a conversão para número inteiro.
target.user.email_addresses target.user.email_addresses Mesclado do campo to_user se for um endereço de e-mail.
threat_match_field security_result.detection_fields{key:"Threat Match Field", value: } Mapeado diretamente do campo threat_match_field como um par de chave-valor em detection_fields.
timestamp metadata.event_timestamp Analisado dos campos timestamp ou id.time.
to_user target.user.email_addresses Analisado do campo to_user e adicionado à matriz target.user.email_addresses se for um endereço de e-mail.
to_user_category target.resource.attribute.labels{key:"To User Category", value: } Mapeado diretamente do campo to_user_category como um par de chave-valor em target.resource.attribute.labels.
traffic_type security_result.detection_fields{key:"traffic_type", value: } Mapeado diretamente do campo traffic_type como um par de chave-valor em detection_fields.
tunnel_id additional.fields{key:"tunnel_id", value:{string_value: }} Mapeado diretamente do campo tunnel_id como um par de chave-valor em additional.fields.
tunnel_type additional.fields{key:"tunnel_type", value:{string_value: }} Mapeado diretamente do campo tunnel_type como um par de chave-valor em additional.fields.
type security_result.detection_fields{key:"type", value: } Mapeado diretamente do campo type como um par de chave-valor em detection_fields.
ur_normalized - Não mapeado para o objeto IDM.
url target.url Mapeado diretamente do campo url.
user event.idm.read_only_udm.principal.user.userid Mapeado diretamente do campo user.
user principal.user.email_addresses Mapeado diretamente do campo user se for um endereço de e-mail.
useragent network.http.user_agent Mapeado diretamente do campo useragent.
useragent network.http.parsed_user_agent Convertido em parseduseragent e mapeado para network.http.parsed_user_agent.
user_agent network.http.user_agent Mapeado diretamente do campo user_agent.
user_agent network.http.parsed_user_agent Convertido em parseduseragent e mapeado para network.http.parsed_user_agent.

Alterações

2024-06-04

  • "matched_username" foi associado a "principal.user.email_addresses".
  • Quando "action" é "bypass" ou "alert", mapeie "action" para "security_result.action_details" e defina "security_result.action" como "QUARANTINE".
  • Quando "alert_type" é "DLP", "dlp_rule_severity" é mapeado para "security_result.severity".

2024-02-19

  • O mapeamento de "client_bytes" mudou de "network.received_bytes" para "network.sent_bytes".
  • O mapeamento de "server_bytes" mudou de "network.sent_bytes" para "network.received_bytes".

2024-02-08

  • Mapeamos "useragent" e "user_agent" para "network.http.user_agent" e "network.http.parsed_user_agent".

2023-11-10

  • Adição do padrão Grok para verificar se "srcip" é um padrão de IP válido.
  • "instance_id" foi mapeado para "principal.hostname".
  • "traffic_type" foi associado a "security_result.detection_fields".
  • "app_activity" foi associado a "additional.fields".
  • "count" foi mapeado para "additional.fields".
  • Mapeamos "site" para "additional.fields".
  • Mapeou "device" para "principal.resource.resource_sub_type".
  • "type" foi associado a "security_result.detection_fields".
  • O mapeamento de "hostname" foi alterado para usar "replace" em vez de "rename".
  • O mapeamento "cci" mudou de "additional.fields" para "security_result.detection_fields".
  • O mapeamento "ccl" mudou de "additional.fields" para "security_result.confidence_details".
  • "security_result.confidence" preenchido de acordo com o valor em "ccl".

2023-07-14

  • Correção de bugs:
  • Valor extraído para "browser_session_id","app_session_id" usando o padrão Grok antes do mapeamento.
  • Adição de uma verificação de condição para validar o e-mail antes de mapear o campo "to_user".

2023-07-06

  • Melhoria:
  • O padrão Grok foi modificado para identificar se "dsthost" é um endereço IP ou não.
  • Se "dsthost" for um endereço IP, ele será mapeado para "target.ip". Caso contrário, ele será mapeado para "target.hostname".

2023-06-06

  • Melhoria:
  • "domain" foi mapeado para "target.hostname".
  • "app_session_id" foi mapeado para "target.resource.attribute.labels".
  • Mapeamos "malware_severity" para "security_result.severity".
  • Mapeamos "malware_type" para "security_result.detection_fields".
  • O "threat_match_field" foi mapeado para "security_result.detection_fields".
  • "Ja3" foi mapeado para "network.tls.client.ja3".
  • "Ja3s" foi mapeado para "network.tls.server.ja3s".
  • Mapeamos "cci" e "ccl" para "additional.fields".
  • "access_method" foi associado a "extensions.auth.auth_details".
  • "browser_version" foi associado a "network.http.parsed_user_agent.browser_version".
  • Mapeou "dlp_profile" para "security_result.rule_type".
  • "dlp_rule" foi associado a "security_result.rule_name".
  • "netskope_pop" foi mapeado para "observer.hostname".
  • "Page" foi mapeado para "network.http.referral_url".
  • "to_user" foi associado a "target.user.email_addresses".
  • "to_user_category" foi associado a "target.resource.attribute.labels".

2023-03-23

  • Melhoria:
  • "security_result.alert_state" foi mapeado para "ALERTING" se "alert" for igual a "yes".
  • O "security_result.alert_state" foi mapeado para "NOT_ALERTING" se "alert" for igual a "no".
  • O "security_result.alert_state" foi mapeado para "UNSPECIFIED" se "alert" for nulo.

2022-07-23

  • O mapeamento desnecessário para "metadata.description" foi removido.

2022-07-01

  • O campo "os" foi mapeado para "principal.platform".
  • O campo "dsthost" é mapeado para "target.ip" se "dsthost" for um IP. Caso contrário, ele é mapeado para "target.hostname".
  • O campo "dstport" foi mapeado para "target.port".
  • O campo "srcport" foi mapeado para "principal.port".
  • O campo "user" é associado a "principal.user.email_addresses" se "user" for um endereço de e-mail válido.
  • O campo "src_latitude" foi mapeado para "principal.location.region_latitude".
  • O campo "src_longitude" foi mapeado para "principal.location.region_longitude".
  • O campo "ip_protocol" mapeado para "network.ip_protocol".
  • O campo "client_bytes" foi mapeado para "network.received_bytes".
  • O campo "server_bytes" foi mapeado para "network.sent_bytes".
  • O campo "browser_session_id" foi mapeado para "network.session_id".
  • O campo "network_session_id" foi mapeado para "network.session_id".
  • O campo "appcategory" mapeado para "security_result.category_details".
  • O campo "publisher_cn" foi mapeado para "additional.fields[n]".
  • O campo "publisher_name" foi mapeado para "additional.fields[n]".
  • O campo "tunnel_id" foi mapeado para "additional.fields[n]".
  • O campo "tunnel_type" foi mapeado para "additional.fields[n]".
  • O mapeamento do campo "shared_with" foi alterado de "intermediary.user.email_addresses" para "network.email.to".
  • O mapeamento do campo "network.email.to" foi alterado de "principal.user.email_addresses" para "network.email.from".
  • Foram adicionadas verificações condicionais para os campos "_severity", "shared_with", "from_user" e "protocol".
  • Modificação de "metadata.event_type" para os seguintes casos:
  • "GENERIC_EVENT" para "NETWORK_HTTP", em que "principal.ip ou principal.hostname" e "target.ip ou target.hostname" não são nulos.
  • "GENERIC_EVENT" para "STATUS_UPDATE", em que "principal.ip ou principal.hostname" não é nulo.
  • "GENERIC_EVENT" para "USER_UNCATEGORIZED", em que "principal.user.userid" não é nulo.

2022-06-17

  • Correção de bugs:
  • Foi adicionada uma verificação condicional para "md5" == "not available".