Coletar registros do Proofpoint On-Demand
Este documento explica como ingerir registros do Proofpoint On-Demand no Google Security Operations usando a integração de API integrada. O analisador extrai campos de registros JSON, transformando-os no formato UDM do Chronicle. Ele processa dois formatos de registro principais: um com metadados de e-mail e outro com detalhes de transação SMTP. Ele usa lógica condicional para analisar campos de maneira adequada e preencher os campos do Modelo de Dados Unificado (UDM) com base nos dados disponíveis. O analisador também realiza a limpeza de dados, como a remoção de caracteres estranhos e a conversão de carimbos de data/hora.
Antes de começar
Verifique se você tem os pré-requisitos a seguir:
- Instância do Google SecOps
- Licença do Proofpoint On-Demand Remote Syslog
- Acesso privilegiado à Proofpoint
Configurar o acesso à API do Proofpoint On-Demand
- Faça login no portal Proofpoint Admin.
- Copie o ID do cluster, que aparece no canto superior direito da interface de gerenciamento, ao lado do número da versão.
- Acesse Configurações > Gerenciamento de chaves de API.
- Clique em Criar nova para abrir a caixa de diálogo Criar nova chave de API.
- Insira um Nome exclusivo (por exemplo,
Google SecOps Key
). - Gere a chave de API.
- Selecione Ver detalhes no menu de reticências da nova chave de API.
- Copie a chave de API.
Configurar feeds
Há dois pontos de entrada diferentes para configurar feeds na plataforma do Google SecOps:
- Configurações do SIEM > Feeds
- Central de conteúdo > Pacotes de conteúdo
Configure feeds em "Configurações do SIEM" > "Feeds".
Para configurar um feed, siga estas etapas:
- Acesse Configurações do SIEM > Feeds.
- Clique em Adicionar novo feed.
- Na próxima página, clique em Configurar um único feed.
- No campo Nome do feed, insira um nome para o feed (por exemplo,
PoD Logs
). - Selecione API de terceiros como o Tipo de origem.
- Selecione o tipo de registro Proofpoint On-Demand.
- Clique em Próxima.
Especifique valores para os seguintes parâmetros de entrada:
- Cabeçalhos HTTP de autenticação: insira a chave da API do Proofpoint no formato
Authorization: Bearer {API_KEY}
e adicione uma nova linha com os seguintes dados de chave do WebSocket:Sec-WebSocket-Key: SGVsbG8sIHdvcmxkIQ==
. - ID do cluster: insira o ID do cluster do Proofpoint que você copiou antes.
- Cabeçalhos HTTP de autenticação: insira a chave da API do Proofpoint no formato
Clique em Próxima.
Revise a configuração do feed na tela Finalizar e clique em Enviar.
Configurar feeds na Central de conteúdo
Especifique valores para os seguintes campos:
- Cabeçalhos HTTP de autenticação: insira a chave de API do Proofpoint em um formato
Authorization: Bearer {API_KEY}
e adicione uma nova linha com os seguintes dados de chave do WebSocket:Sec-WebSocket-Key: SGVsbG8sIHdvcmxkIQ==
. - ID do cluster: insira o ID do cluster do Proofpoint que você copiou antes.
Opções avançadas
- Nome do feed:um valor pré-preenchido que identifica o feed.
- Tipo de origem:método usado para coletar registros no Google SecOps.
- Namespace do recurso:namespace associado ao feed.
- Rótulos de ingestão:rótulos aplicados a todos os eventos deste feed.
Tabela de mapeamento da UDM
Campo de registro | Mapeamento do UDM | Lógica |
---|---|---|
classification |
security_result.detection_fields.classification |
O valor vem diretamente do campo classification no registro bruto. |
cluster |
security_result.detection_fields.cluster |
O valor vem diretamente do campo cluster no registro bruto. |
completelyRewritten |
security_result.detection_fields.completelyRewritten |
O valor vem diretamente do campo completelyRewritten no registro bruto. |
connection.country |
principal.location.country_or_region |
O valor vem diretamente do campo connection.country no registro bruto, a menos que seja "**". |
connection.host |
principal.hostname |
O valor vem diretamente do campo connection.host no registro bruto. |
connection.ip |
principal.ip |
O valor vem diretamente do campo connection.ip no registro bruto, se for um endereço IPv4 válido. Ele também é mesclado com senderIP , se presente. |
connection.protocol |
network.application_protocol |
A parte do protocolo antes dos dois pontos em connection.protocol é extraída usando gsub e mapeada. Por exemplo, "smtp:smtp" vira "SMTP". |
connection.tls.inbound.cipher |
network.tls.cipher |
O valor vem diretamente do campo connection.tls.inbound.cipher no registro bruto, a menos que seja "NONE". |
connection.tls.inbound.version |
network.tls.version |
O valor vem diretamente do campo connection.tls.inbound.version no registro bruto, a menos que a criptografia seja "NONE". |
envelope.from |
network.email.from |
O valor vem diretamente do campo envelope.from no registro bruto. Ele também é substituído por sm.from ou fromAddress , se estiverem presentes. |
envelope.rcpts |
network.email.to |
Os endereços de e-mail em envelope.rcpts são mesclados no campo network.email.to se forem válidos. Ele também é mesclado com sm.to ou toAddresses , se estiverem presentes. |
envelope.rcptsHashed |
read_only_udm.additional.fields |
Os endereços de e-mail com hash em envelope.rcptsHashed são adicionados como campos extras com chaves como "toHashed_0", "toHashed_1" etc. |
eventTime |
@timestamp |
O valor é analisado do campo eventTime usando o formato ISO8601 ou RFC 3339. |
eventType |
security_result.summary |
O valor vem diretamente do campo eventType no registro bruto. |
filter.disposition |
security_result.action_details |
O valor vem diretamente do campo filter.disposition no registro bruto, a menos que tls.verify esteja presente. |
filter.modules.av.virusNames.0 |
security_result.threat_name |
O valor vem diretamente do campo filter.modules.av.virusNames.0 no registro bruto. |
filter.modules.dmarc.authResults |
read_only_udm.additional.fields |
O método e o resultado de cada entrada em filter.modules.dmarc.authResults são adicionados como campos extras com chaves como "authResultsMethod_0", "authResults_result_0", "authResultsMethod_1" etc. |
filter.modules.spam.langs |
read_only_udm.additional.fields |
Cada idioma em filter.modules.spam.langs é adicionado como um campo extra com chaves como "lang_0", "lang_1" etc. |
filter.modules.spam.safeBlockedListMatches.0.listType |
security_result.detection_fields.safeBlockedListMatches_listType |
O valor vem diretamente do campo filter.modules.spam.safeBlockedListMatches.0.listType no registro bruto. |
filter.modules.spam.safeBlockedListMatches.0.rule |
security_result.detection_fields.safeBlockedListMatches_rule |
O valor vem diretamente do campo filter.modules.spam.safeBlockedListMatches.0.rule no registro bruto. |
filter.modules.spam.scores.classifiers.adult |
security_result.detection_fields.adult |
O valor vem diretamente do campo filter.modules.spam.scores.classifiers.adult no registro bruto, se não estiver vazio ou for 0. |
filter.modules.spam.scores.classifiers.bulk |
security_result.detection_fields.bulk |
O valor vem diretamente do campo filter.modules.spam.scores.classifiers.bulk no registro bruto, se não estiver vazio ou for 0. |
filter.modules.spam.scores.classifiers.impostor |
security_result.detection_fields.impostor |
O valor vem diretamente do campo filter.modules.spam.scores.classifiers.impostor no registro bruto, se não estiver vazio ou for 0. |
filter.modules.spam.scores.classifiers.lowpriority |
security_result.detection_fields.lowpriority |
O valor vem diretamente do campo filter.modules.spam.scores.classifiers.lowpriority no registro bruto, se não estiver vazio ou for 0. |
filter.modules.spam.scores.classifiers.malware |
security_result.detection_fields.malware |
O valor vem diretamente do campo filter.modules.spam.scores.classifiers.malware no registro bruto, se não estiver vazio ou for 0. |
filter.modules.spam.scores.classifiers.mlx |
security_result.detection_fields.mlx |
O valor vem diretamente do campo filter.modules.spam.scores.classifiers.mlx no registro bruto, se não estiver vazio ou for 0. |
filter.modules.spam.scores.classifiers.mlxlog |
security_result.detection_fields.mlxlog |
O valor vem diretamente do campo filter.modules.spam.scores.classifiers.mlxlog no registro bruto, se não estiver vazio ou for 0. |
filter.modules.spam.scores.classifiers.phish |
security_result.detection_fields.phish |
O valor vem diretamente do campo filter.modules.spam.scores.classifiers.phish no registro bruto, se não estiver vazio ou for 0. |
filter.modules.spam.scores.classifiers.spam |
security_result.detection_fields.spam |
O valor vem diretamente do campo filter.modules.spam.scores.classifiers.spam no registro bruto, se não estiver vazio ou for 0. |
filter.modules.spam.scores.classifiers.suspect |
security_result.detection_fields.suspect |
O valor vem diretamente do campo filter.modules.spam.scores.classifiers.suspect no registro bruto, se não estiver vazio ou for 0. |
filter.modules.spam.scores.engine |
security_result.detection_fields.engine |
O valor vem diretamente do campo filter.modules.spam.scores.engine no registro bruto, se não estiver vazio ou for 0. |
filter.modules.spam.scores.overall |
security_result.detection_fields.overall |
O valor vem diretamente do campo filter.modules.spam.scores.overall no registro bruto, se não estiver vazio ou for 0. |
filter.modules.spam.version.definitions |
security_result.summary |
O valor vem diretamente do campo filter.modules.spam.version.definitions no registro bruto. |
filter.modules.spam.version.engine |
metadata.product_version |
O valor vem diretamente do campo filter.modules.spam.version.engine no registro bruto. |
filter.modules.urldefense.counts.rewritten |
read_only_udm.additional.fields.urldefenseCountsRewritten |
O valor vem diretamente do campo filter.modules.urldefense.counts.rewritten no registro bruto. |
filter.modules.urldefense.counts.total |
security_result.detection_fields.urldefense_total |
O valor vem diretamente do campo filter.modules.urldefense.counts.total no registro bruto. |
filter.modules.zerohour.score |
read_only_udm.additional.fields.zeroHourScore |
O valor vem diretamente do campo filter.modules.zerohour.score no registro bruto. |
filter.origGuid |
read_only_udm.additional.fields.origGuid |
O valor vem diretamente do campo filter.origGuid no registro bruto. |
filter.qid |
read_only_udm.additional.fields.filterQid |
O valor vem diretamente do campo filter.qid no registro bruto. |
filter.quarantine.folder |
security_result.detection_fields.filter_quarantine_folder |
O valor vem diretamente do campo filter.quarantine.folder no registro bruto. |
filter.quarantine.folderId |
security_result.detection_fields.filter_quarantine_folderId |
O valor vem diretamente do campo filter.quarantine.quarantine.folderId no registro bruto. |
filter.quarantine.module |
security_result.detection_fields.filter_quarantine_module |
O valor vem diretamente do campo filter.quarantine.module no registro bruto. |
filter.quarantine.rule |
security_result.detection_fields.filter_quarantine_rule |
O valor vem diretamente do campo filter.quarantine.rule no registro bruto. |
filter.quarantine.type |
security_result.detection_fields.filter_quarantine_type |
O valor vem diretamente do campo filter.quarantine.type no registro bruto. |
filter.routeDirection |
network.direction |
Se filter.routeDirection for "inbound", network.direction será definido como "INBOUND". Se filter.routeDirection for "outbound", network.direction será definido como "OUTBOUND". |
filter.routes |
read_only_udm.additional.fields |
Cada rota em filter.routes é adicionada como um campo extra com chaves como "filterRoutes_0", "filterRoutes_1" etc. |
fromAddress |
network.email.from |
Os endereços de e-mail em fromAddress são substituídos no campo network.email.from se forem válidos. |
guid |
metadata.product_log_id |
O valor vem diretamente do campo guid no registro bruto. |
GUID |
metadata.product_log_id |
O valor vem diretamente do campo GUID no registro bruto. |
headerFrom |
network.email.from |
O valor vem diretamente do campo headerFrom no registro bruto. |
impostorScore |
security_result.detection_fields.impostorScore |
O valor vem diretamente do campo impostorScore no registro bruto. |
malwareScore |
security_result.detection_fields.malwareScore |
O valor vem diretamente do campo malwareScore no registro bruto. |
messageID |
network.email.mail_id |
O valor vem diretamente do campo messageID no registro bruto. |
messageSize |
security_result.detection_fields.messageSize |
O valor vem diretamente do campo messageSize no registro bruto. |
messageTime |
@timestamp |
O valor é analisado do campo messageTime usando o formato ISO8601 ou RFC 3339. |
metadata.customerId |
principal.labels.customerId |
O valor vem diretamente do campo metadata.customerId no registro bruto. |
metadata.origin.data.agent |
network.http.user_agent |
O valor vem diretamente do campo metadata.origin.data.agent no registro bruto. |
metadata.origin.data.cid |
principal.user.userid |
O valor vem diretamente do campo metadata.origin.data.cid no registro bruto. |
metadata.origin.data.version |
metadata.product_version |
O valor vem diretamente do campo metadata.origin.data.version no registro bruto. |
msg.header.from |
read_only_udm.additional.fields.msgHeaderFrom |
O valor vem diretamente do campo msg.header.from.0 no registro bruto. |
msg.header.reply-to |
network.email.reply_to |
O endereço de e-mail entre <> em msg.header.reply-to.0 é extraído e mapeado. |
msg.header.subject |
network.email.subject |
O valor vem diretamente do campo msg.header.subject no registro bruto. |
msg.header.to |
read_only_udm.additional.fields.msgHeaderTo |
O valor vem diretamente do campo msg.header.to no registro bruto. |
msg.normalizedHeader.subject |
network.email.subject |
O valor vem diretamente do campo msg.normalizedHeader.subject no registro bruto. |
msg.parsedAddresses.cc |
network.email.cc |
Os endereços de e-mail em msg.parsedAddresses.cc são mesclados no campo network.email.cc se forem válidos. |
msg.parsedAddresses.ccHashed |
read_only_udm.additional.fields |
Os endereços de e-mail com hash em msg.parsedAddresses.ccHashed são adicionados como campos extras com chaves como "ccHashed_0", "ccHashed_1" etc. |
msg.parsedAddresses.from |
read_only_udm.additional.fields.msgParsedAddressesFrom |
O valor vem diretamente do campo msg.parsedAddresses.from.0 no registro bruto. |
msg.parsedAddresses.from.0 |
principal.user.email_addresses |
O valor vem diretamente do campo msg.parsedAddresses.from.0 no registro bruto. |
msg.parsedAddresses.fromHashed |
read_only_udm.additional.fields.fromHashed |
O valor vem diretamente do campo msg.parsedAddresses.fromHashed.0 no registro bruto. |
msg.parsedAddresses.to |
target.user.email_addresses |
Os endereços de e-mail em msg.parsedAddresses.to são mesclados no campo target.user.email_addresses se forem válidos. |
msgParts |
read_only_udm.about |
Vários objetos "about" são criados, um para cada entrada em msgParts . Hashes de arquivo, tipo MIME, tamanho e outros metadados são extraídos. |
QID |
security_result.detection_fields.QID |
O valor vem diretamente do campo QID no registro bruto. |
recipient |
target.user.email_addresses |
Os endereços de e-mail em recipient são mesclados no campo target.user.email_addresses se forem válidos. |
replyToAddress |
network.email.reply_to |
Os endereços de e-mail em replyToAddress são substituídos no campo network.email.reply_to se forem válidos. |
sender |
principal.user.email_addresses |
O valor vem diretamente do campo sender no registro bruto, se for um endereço de e-mail válido. |
senderIP |
principal.ip |
O valor vem diretamente do campo senderIP no registro bruto. |
sm.from |
network.email.from |
O valor vem diretamente do campo sm.from no registro bruto. |
sm.msgid |
network.email.mail_id |
O valor vem diretamente do campo sm.msgid no registro bruto, depois de remover "<" e ">". |
sm.proto |
network.application_protocol |
O valor vem diretamente do campo sm.proto no registro bruto. |
sm.qid |
security_result.detection_fields.QUID |
O valor vem diretamente do campo sm.qid no registro bruto. |
sm.relay |
intermediary.hostname , intermediary.ip |
O nome do host e o endereço IP são extraídos de sm.relay usando grok. |
sm.stat |
security_result.detection_fields.Stat |
A primeira palavra de sm.stat é extraída usando grok e mapeada. |
sm.to |
network.email.to |
Os endereços de e-mail em sm.to são mesclados no campo network.email.to se forem válidos. |
spamScore |
security_result.detection_fields.spamScore |
O valor vem diretamente do campo spamScore no registro bruto. |
subject |
network.email.subject |
O valor vem diretamente do campo subject no registro bruto. |
threat |
security_result.detection_fields.threat |
O valor vem diretamente do campo threat no registro bruto. |
threatsInfoMap |
security_result.detection_fields |
Os pares de chave-valor de cada entrada em threatsInfoMap são adicionados como campos de detecção. |
threatType |
security_result.detection_fields.threatType |
O valor vem diretamente do campo threatType no registro bruto. |
tls.cipher |
network.tls.cipher |
O valor vem diretamente do campo tls.cipher no registro bruto, a menos que seja "NONE". |
tls.verify |
security_result.action_details |
O valor vem diretamente do campo tls.verify no registro bruto. |
tls.version |
network.tls.version |
O valor vem diretamente do campo tls.version no registro bruto, a menos que a criptografia seja "NONE". |
toAddresses |
network.email.to |
Os endereços de e-mail em toAddresses são mesclados no campo network.email.to se forem válidos. |
ts |
@timestamp |
O valor é analisado do campo ts usando o formato ISO8601 ou RFC 3339, após algum pré-processamento para lidar com segundos fracionários extras. |
Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais do Google SecOps.