Coletar registros do Proofpoint On-Demand
Esse analisador extrai campos dos registros JSON sob demanda da Proofpoint e os transforma no formato UDM. Ele processa dois formatos de registro principais: um com metadados de e-mail e outro com detalhes da transação SMTP, usando lógica condicional para analisar os campos adequadamente e preencher os campos do UDM com base nos dados disponíveis. O analisador também executa 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 uma instância do Google Security Operations.
- Verifique se você tem a licença do Proofpoint On Demand Remote Syslog.
- Verifique se você tem acesso privilegiado ao Proofpoint.
Configurar o acesso à API Proofpoint on Demand
- Faça login no portal de administrador da Proofpoint.
- Copie o ID do cluster, que aparece na interface de gerenciamento ao lado do número da versão.
- Selecione 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.
- Gere a chave de API.
- Selecione Ver detalhes no menu da nova chave de API.
- Copie a chave de API.
Configurar um feed no Google SecOps para ingerir registros do Proofpoint On Demand (PoD)
- Acesse Configurações do SIEM > Feeds.
- Clique em Adicionar novo.
- No campo Nome do feed, insira um nome para o feed (por exemplo, Registros de PoD).
- Selecione API de terceiros como o Tipo de origem.
- Selecione Proofpoint On Demand como o tipo de registro.
- Clique em Próxima.
- Especifique valores para os seguintes parâmetros de entrada:
- Cabeçalhos HTTP de autenticação: insira a chave da API da Proofpoint no formato
key:<value>
. - ID do cluster: insira o ID do cluster da Proofpoint que você copiou anteriormente.
- Namespace de recursos: o namespace de recursos.
- Rótulos de ingestão: o rótulo aplicado aos eventos desse feed.
- Cabeçalhos HTTP de autenticação: insira a chave da API da Proofpoint no formato
- Clique em Próxima.
- 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 |
---|---|---|
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" se torna "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 "NÃO". |
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 "Nenhuma". |
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 presente. |
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 presente. |
envelope.rcptsHashed |
read_only_udm.additional.fields |
Os endereços de e-mail com hash em envelope.rcptsHashed são adicionados como campos adicionais 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 adicionais 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 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 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 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 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 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 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 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 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 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 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 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 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 "saída", network.direction será definido como "SAÍDA". |
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 incluído em <> 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 adicionais 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 . Os hashes de arquivos, o tipo MIME, o 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 o 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 "NÃO". |
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 "Nenhuma". |
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 processar segundos fracionários extras. |
Alterações
2024-11-28
- Melhoria:
- "msgParts.metadata.company" e "msgParts.metadata.author" foram mapeados para "security_result.detection_fields".
- O mapeamento duplicado de "email.subject" foi removido.
- O mapeamento dos campos "filter.modules.dmarc.authResults." foi alterado de "additional.fields" para "security_result.detection_fields".
2024-08-28
- Melhoria:
- A chave "security_result.detection_fields" mudou de "filterQid" para "qid".
2024-08-21
- Melhoria:
- "metadata.origin.data.cid" foi mapeado para "additional.fields".
2024-07-22
- Melhoria:
- Se "about.file.size" for um número inteiro sem sinal válido, mapeie "msgPart.detectedSizeBytes" para "about.file.size".
- Suporte adicionado para um novo padrão de registros SYSLOG.
2024-07-09
- Melhoria:
- "msg.header.x-mailer" foi associado a "additional.fields".
2024-07-09
- Melhoria:
- "msg.header.x-mailer" foi associado a "additional.fields".
2023-11-13
- "Assunto" foi mapeado para "network.email.subject".
- "messageID" foi mapeado para "network.email.mail_id".
- "fromAddress" foi mapeado para "network.email.from".
- "ccAddresses" foi associado a "network.email.cc".
- "replyToAddress" foi associado a "network.email.reply_to".
- Mapeamos "toAddresses" para "network.email.to".
- "sender" foi mapeado para "principal.user.email_addresses".
- Mapeamos "senderIP" para "principal.ip".
- Mapeamos "recipient" para "target.user.email_addresses".
- "spamScore", "phishScore", "threatsInfoMap", "impostorScore", "malwareScore" e "" foram mapeados para "security_result.detection_fields".
2023-10-26
- "msg.headeparsedAddressesr.from.0" foi associado a "principal.user.email_addresses".
- Mapeamentos modificados de campos UDM descontinuados para campos alternativos.
- Foi adicionado o mapeamento de "about.labels" para "about.resource.attribute.labels".
- Foi adicionado o mapeamento de "principal.labels" para "principal.resource.attribute.labels".
2023-06-05
- Foi adicionada uma verificação a "msg.header.reply-to.0" antes do mapeamento para a UDM para verificar se é uma matriz de e-mails.
- Adicionamos a verificação "-1" a "msgPart.detectedSizeBytes" antes do mapeamento para o UDM.
2022-07-14
- Melhoria para mapear o elemento a seguir para o elemento UDM:
- Mapeou langs para additional.fields.
- Definições mapeadas para "security_result.summary".
- O mecanismo foi mapeado para metadata.product_version.
2022-06-29
- Melhoria: adição de gsub para remover "<>" dos campos "sm.msgid" e "msg.header.message-id.0" mapeados para "network.email.mail_id".
2022-05-20
- Melhoria para mapear os seguintes elementos para elementos do UDM:
- Mapeamos "tls.verify" e "filter.disposition" para "security_result.action_details".
- O mapeamento de "filter.modules.dmarc.authResults.result" para "additional.fields".
- Mapeou "filter.quarantine.module", "filter.quarantine.folder", "filter.quarantine.type", "filter.quarantine.folderId", "filter.modules.spam.scores.overall", "filter.modules.spam.scores.engine", "filter.modules.spam.scores.classifiers.spam", "filter.modules.spam.scores.classifiers.mlxlog", "filter.modules.spam.scores.classifiers.phish", "filter.modules.spam.scores.classifiers.impostor", "filter.modules.spam.scores.classifiers.lowpriority", "filter.modules.spam.scores.classifiers.mlx", "filter.modules.spam.scores.classifiers.bulk", "filter.modules.spam.scores.classifiers.suspect", "filter.modules.spam.scores.classifiers.malware", "filter.modules.spam.scores.classifiers.adult" para "security_result.detection_fields".
2022-04-13
- Melhoria para mapear o elemento a seguir para o elemento UDM:
- O mapeamento de filter.modules.av.virusNames para "security_result.threat_name".