Recolha registos do Proofpoint On-Demand
Este documento explica como carregar registos do Proofpoint On-Demand para o Google Security Operations através da integração de API incorporada. O analisador extrai campos dos registos JSON, transformando-os no formato UDM do Chronicle. Processa dois formatos de registo principais: um que contém metadados de email e outro que contém detalhes de transações SMTP, usando lógica condicional para analisar os campos adequadamente 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 carateres estranhos e a conversão de datas/horas.
Antes de começar
Certifique-se de que tem os seguintes pré-requisitos:
- Instância do Google SecOps
- Licença do Proofpoint On-Demand Remote Syslog
- Acesso privilegiado ao Proofpoint
Configure o acesso à API Proofpoint On-Demand
- Inicie sessão no portal Proofpoint Admin.
- Copie o ID do cluster (apresentado no canto superior direito da interface de gestão, junto ao número da versão).
- Aceda a Definições > Gestão de chaves de API.
- Clique em Criar novo para abrir a caixa de diálogo Criar nova chave de API.
- Introduza um Nome único (por exemplo,
Google SecOps Key
). - Gere a chave da API.
- Selecione Ver detalhes no menu de reticências da nova chave da API.
- Copie a chave da API.
Configure feeds
Para configurar um feed, siga estes passos:
- Aceda a Definições do SIEM > Feeds.
- Clique em Adicionar novo feed.
- Na página seguinte, clique em Configurar um único feed.
- No campo Nome do feed, introduza um nome para o feed (por exemplo,
PoD Logs
). - Selecione API de terceiros como o Tipo de origem.
- Selecione o tipo de registo Proofpoint On-Demand.
- Clicar em Seguinte.
Especifique valores para os seguintes parâmetros de entrada:
- Cabeçalhos HTTP de autenticação: introduza a chave da API Proofpoint no formato
Authorization: Bearer {API_KEY}
e adicione uma nova linha com os seguintes dados da chave WebSocket:Sec-WebSocket-Key: SGVsbG8sIHdvcmxkIQ==
. - ID do cluster: introduza o ID do cluster do Proofpoint que copiou anteriormente.
- Cabeçalhos HTTP de autenticação: introduza a chave da API Proofpoint no formato
Clicar em Seguinte.
Reveja a configuração do feed no ecrã Finalizar e, de seguida, clique em Enviar.
Tabela de mapeamento do UDM
Campo de registo | Mapeamento de UDM | Lógica |
---|---|---|
classification |
security_result.detection_fields.classification |
O valor é proveniente diretamente do campo classification no registo não processado. |
cluster |
security_result.detection_fields.cluster |
O valor é proveniente diretamente do campo cluster no registo não processado. |
completelyRewritten |
security_result.detection_fields.completelyRewritten |
O valor é proveniente diretamente do campo completelyRewritten no registo não processado. |
connection.country |
principal.location.country_or_region |
O valor é proveniente diretamente do campo connection.country no registo não processado, a menos que seja "**". |
connection.host |
principal.hostname |
O valor é proveniente diretamente do campo connection.host no registo não processado. |
connection.ip |
principal.ip |
O valor é proveniente diretamente do campo connection.ip no registo não processado, se for um endereço IPv4 válido. Também é unida com senderIP , se estiver presente. |
connection.protocol |
network.application_protocol |
A parte do protocolo antes dos dois pontos em connection.protocol é extraída através de gsub e mapeada. Por exemplo, "smtp:smtp" torna-se "SMTP". |
connection.tls.inbound.cipher |
network.tls.cipher |
O valor é proveniente diretamente do campo connection.tls.inbound.cipher no registo não processado, a menos que seja "NONE". |
connection.tls.inbound.version |
network.tls.version |
O valor é proveniente diretamente do campo connection.tls.inbound.version no registo não processado, a menos que a cifra seja "NONE". |
envelope.from |
network.email.from |
O valor é proveniente diretamente do campo envelope.from no registo não processado. Também é substituído por sm.from ou fromAddress , se estiver presente. |
envelope.rcpts |
network.email.to |
Os endereços de email em envelope.rcpts são unidos no campo network.email.to se forem endereços de email válidos. Também é unido com sm.to ou toAddresses , se estiver presente. |
envelope.rcptsHashed |
read_only_udm.additional.fields |
Os endereços de email com hash em envelope.rcptsHashed são adicionados como campos adicionais com chaves como "toHashed_0", "toHashed_1", etc. |
eventTime |
@timestamp |
O valor é analisado a partir do campo eventTime através do formato ISO8601 ou RFC 3339. |
eventType |
security_result.summary |
O valor é proveniente diretamente do campo eventType no registo não processado. |
filter.disposition |
security_result.action_details |
O valor é proveniente diretamente do campo filter.disposition no registo não processado, a menos que tls.verify esteja presente. |
filter.modules.av.virusNames.0 |
security_result.threat_name |
O valor é proveniente diretamente do campo filter.modules.av.virusNames.0 no registo não processado. |
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 adicional com chaves como "lang_0", "lang_1", etc. |
filter.modules.spam.safeBlockedListMatches.0.listType |
security_result.detection_fields.safeBlockedListMatches_listType |
O valor é proveniente diretamente do campo filter.modules.spam.safeBlockedListMatches.0.listType no registo não processado. |
filter.modules.spam.safeBlockedListMatches.0.rule |
security_result.detection_fields.safeBlockedListMatches_rule |
O valor é proveniente diretamente do campo filter.modules.spam.safeBlockedListMatches.0.rule no registo não processado. |
filter.modules.spam.scores.classifiers.adult |
security_result.detection_fields.adult |
O valor é proveniente diretamente do campo filter.modules.spam.scores.classifiers.adult no registo não processado, se não estiver vazio ou for 0. |
filter.modules.spam.scores.classifiers.bulk |
security_result.detection_fields.bulk |
O valor é proveniente diretamente do campo filter.modules.spam.scores.classifiers.bulk no registo não processado, se não estiver vazio ou for 0. |
filter.modules.spam.scores.classifiers.impostor |
security_result.detection_fields.impostor |
O valor é proveniente diretamente do campo filter.modules.spam.scores.classifiers.impostor no registo não processado, se não estiver vazio ou for 0. |
filter.modules.spam.scores.classifiers.lowpriority |
security_result.detection_fields.lowpriority |
O valor é proveniente diretamente do campo filter.modules.spam.scores.classifiers.lowpriority no registo não processado, se não estiver vazio ou for 0. |
filter.modules.spam.scores.classifiers.malware |
security_result.detection_fields.malware |
O valor é proveniente diretamente do campo filter.modules.spam.scores.classifiers.malware no registo não processado, se não estiver vazio ou for 0. |
filter.modules.spam.scores.classifiers.mlx |
security_result.detection_fields.mlx |
O valor é proveniente diretamente do campo filter.modules.spam.scores.classifiers.mlx no registo não processado, se não estiver vazio ou for 0. |
filter.modules.spam.scores.classifiers.mlxlog |
security_result.detection_fields.mlxlog |
O valor é proveniente diretamente do campo filter.modules.spam.scores.classifiers.mlxlog no registo não processado, se não estiver vazio ou for 0. |
filter.modules.spam.scores.classifiers.phish |
security_result.detection_fields.phish |
O valor é proveniente diretamente do campo filter.modules.spam.scores.classifiers.phish no registo não processado, se não estiver vazio ou for 0. |
filter.modules.spam.scores.classifiers.spam |
security_result.detection_fields.spam |
O valor é proveniente diretamente do campo filter.modules.spam.scores.classifiers.spam no registo não processado, se não estiver vazio ou for 0. |
filter.modules.spam.scores.classifiers.suspect |
security_result.detection_fields.suspect |
O valor é proveniente diretamente do campo filter.modules.spam.scores.classifiers.suspect no registo não processado, se não estiver vazio ou for 0. |
filter.modules.spam.scores.engine |
security_result.detection_fields.engine |
O valor é proveniente diretamente do campo filter.modules.spam.scores.engine no registo não processado, se não estiver vazio ou for 0. |
filter.modules.spam.scores.overall |
security_result.detection_fields.overall |
O valor é proveniente diretamente do campo filter.modules.spam.scores.overall no registo não processado, se não estiver vazio ou for 0. |
filter.modules.spam.version.definitions |
security_result.summary |
O valor é proveniente diretamente do campo filter.modules.spam.version.definitions no registo não processado. |
filter.modules.spam.version.engine |
metadata.product_version |
O valor é proveniente diretamente do campo filter.modules.spam.version.engine no registo não processado. |
filter.modules.urldefense.counts.rewritten |
read_only_udm.additional.fields.urldefenseCountsRewritten |
O valor é proveniente diretamente do campo filter.modules.urldefense.counts.rewritten no registo não processado. |
filter.modules.urldefense.counts.total |
security_result.detection_fields.urldefense_total |
O valor é proveniente diretamente do campo filter.modules.urldefense.counts.total no registo não processado. |
filter.modules.zerohour.score |
read_only_udm.additional.fields.zeroHourScore |
O valor é proveniente diretamente do campo filter.modules.zerohour.score no registo não processado. |
filter.origGuid |
read_only_udm.additional.fields.origGuid |
O valor é proveniente diretamente do campo filter.origGuid no registo não processado. |
filter.qid |
read_only_udm.additional.fields.filterQid |
O valor é proveniente diretamente do campo filter.qid no registo não processado. |
filter.quarantine.folder |
security_result.detection_fields.filter_quarantine_folder |
O valor é proveniente diretamente do campo filter.quarantine.folder no registo não processado. |
filter.quarantine.folderId |
security_result.detection_fields.filter_quarantine_folderId |
O valor é proveniente diretamente do campo filter.quarantine.quarantine.folderId no registo não processado. |
filter.quarantine.module |
security_result.detection_fields.filter_quarantine_module |
O valor é proveniente diretamente do campo filter.quarantine.module no registo não processado. |
filter.quarantine.rule |
security_result.detection_fields.filter_quarantine_rule |
O valor é proveniente diretamente do campo filter.quarantine.rule no registo não processado. |
filter.quarantine.type |
security_result.detection_fields.filter_quarantine_type |
O valor é proveniente diretamente do campo filter.quarantine.type no registo não processado. |
filter.routeDirection |
network.direction |
Se filter.routeDirection for "inbound", network.direction é definido como "INBOUND". Se filter.routeDirection for "outbound", network.direction é definido como "OUTBOUND". |
filter.routes |
read_only_udm.additional.fields |
Cada trajeto em filter.routes é adicionado como um campo adicional com chaves como "filterRoutes_0", "filterRoutes_1", etc. |
fromAddress |
network.email.from |
Os endereços de email em fromAddress são substituídos no campo network.email.from se forem endereços de email válidos. |
guid |
metadata.product_log_id |
O valor é proveniente diretamente do campo guid no registo não processado. |
GUID |
metadata.product_log_id |
O valor é proveniente diretamente do campo GUID no registo não processado. |
headerFrom |
network.email.from |
O valor é proveniente diretamente do campo headerFrom no registo não processado. |
impostorScore |
security_result.detection_fields.impostorScore |
O valor é proveniente diretamente do campo impostorScore no registo não processado. |
malwareScore |
security_result.detection_fields.malwareScore |
O valor é proveniente diretamente do campo malwareScore no registo não processado. |
messageID |
network.email.mail_id |
O valor é proveniente diretamente do campo messageID no registo não processado. |
messageSize |
security_result.detection_fields.messageSize |
O valor é proveniente diretamente do campo messageSize no registo não processado. |
messageTime |
@timestamp |
O valor é analisado a partir do campo messageTime através do formato ISO8601 ou RFC 3339. |
metadata.customerId |
principal.labels.customerId |
O valor é proveniente diretamente do campo metadata.customerId no registo não processado. |
metadata.origin.data.agent |
network.http.user_agent |
O valor é proveniente diretamente do campo metadata.origin.data.agent no registo não processado. |
metadata.origin.data.cid |
principal.user.userid |
O valor é proveniente diretamente do campo metadata.origin.data.cid no registo não processado. |
metadata.origin.data.version |
metadata.product_version |
O valor é proveniente diretamente do campo metadata.origin.data.version no registo não processado. |
msg.header.from |
read_only_udm.additional.fields.msgHeaderFrom |
O valor é proveniente diretamente do campo msg.header.from.0 no registo não processado. |
msg.header.reply-to |
network.email.reply_to |
O endereço de email incluído em <> em msg.header.reply-to.0 é extraído e mapeado. |
msg.header.subject |
network.email.subject |
O valor é proveniente diretamente do campo msg.header.subject no registo não processado. |
msg.header.to |
read_only_udm.additional.fields.msgHeaderTo |
O valor é proveniente diretamente do campo msg.header.to no registo não processado. |
msg.normalizedHeader.subject |
network.email.subject |
O valor é proveniente diretamente do campo msg.normalizedHeader.subject no registo não processado. |
msg.parsedAddresses.cc |
network.email.cc |
Os endereços de email em msg.parsedAddresses.cc são unidos no campo network.email.cc se forem endereços de email válidos. |
msg.parsedAddresses.ccHashed |
read_only_udm.additional.fields |
Os endereços de email 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 é proveniente diretamente do campo msg.parsedAddresses.from.0 no registo não processado. |
msg.parsedAddresses.from.0 |
principal.user.email_addresses |
O valor é proveniente diretamente do campo msg.parsedAddresses.from.0 no registo não processado. |
msg.parsedAddresses.fromHashed |
read_only_udm.additional.fields.fromHashed |
O valor é proveniente diretamente do campo msg.parsedAddresses.fromHashed.0 no registo não processado. |
msg.parsedAddresses.to |
target.user.email_addresses |
Os endereços de email em msg.parsedAddresses.to são unidos no campo target.user.email_addresses se forem endereços de email válidos. |
msgParts |
read_only_udm.about |
São criados vários objetos about, um para cada entrada em msgParts . São extraídos hashes de ficheiros, o tipo MIME, o tamanho e outros metadados. |
QID |
security_result.detection_fields.QID |
O valor é proveniente diretamente do campo QID no registo não processado. |
recipient |
target.user.email_addresses |
Os endereços de email em recipient são unidos no campo target.user.email_addresses se forem endereços de email válidos. |
replyToAddress |
network.email.reply_to |
Os endereços de email em replyToAddress são substituídos no campo network.email.reply_to se forem endereços de email válidos. |
sender |
principal.user.email_addresses |
O valor é proveniente diretamente do campo sender no registo não processado, se for um endereço de email válido. |
senderIP |
principal.ip |
O valor é proveniente diretamente do campo senderIP no registo não processado. |
sm.from |
network.email.from |
O valor é proveniente diretamente do campo sm.from no registo não processado. |
sm.msgid |
network.email.mail_id |
O valor é proveniente diretamente do campo sm.msgid no registo não processado, após a remoção de "<" e ">". |
sm.proto |
network.application_protocol |
O valor é proveniente diretamente do campo sm.proto no registo não processado. |
sm.qid |
security_result.detection_fields.QUID |
O valor é proveniente diretamente do campo sm.qid no registo não processado. |
sm.relay |
intermediary.hostname , intermediary.ip |
O nome do anfitrião e o endereço IP são extraídos de sm.relay através do grok. |
sm.stat |
security_result.detection_fields.Stat |
A primeira palavra de sm.stat é extraída através do grok e mapeada. |
sm.to |
network.email.to |
Os endereços de email em sm.to são unidos no campo network.email.to se forem endereços de email válidos. |
spamScore |
security_result.detection_fields.spamScore |
O valor é proveniente diretamente do campo spamScore no registo não processado. |
subject |
network.email.subject |
O valor é proveniente diretamente do campo subject no registo não processado. |
threat |
security_result.detection_fields.threat |
O valor é proveniente diretamente do campo threat no registo não processado. |
threatsInfoMap |
security_result.detection_fields |
Os pares de chave-valor de cada entrada em threatsInfoMap são adicionados como campos de deteção. |
threatType |
security_result.detection_fields.threatType |
O valor é proveniente diretamente do campo threatType no registo não processado. |
tls.cipher |
network.tls.cipher |
O valor é proveniente diretamente do campo tls.cipher no registo não processado, a menos que seja "NONE". |
tls.verify |
security_result.action_details |
O valor é proveniente diretamente do campo tls.verify no registo não processado. |
tls.version |
network.tls.version |
O valor é proveniente diretamente do campo tls.version no registo não processado, a menos que a cifra seja "NONE". |
toAddresses |
network.email.to |
Os endereços de email em toAddresses são unidos no campo network.email.to se forem endereços de email válidos. |
ts |
@timestamp |
O valor é analisado a partir do campo ts usando o formato ISO8601 ou RFC 3339, após algum pré-processamento para processar segundos fracionários adicionais. |
Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais da Google SecOps.