收集 Proofpoint On-Demand 日志
支持的平台:
    
      
      
        
        
        
  
    
      Google SecOps
    
  
      
    
      
      
        
        
        
  
    
      SIEM
    
  
      
    
    
  本文档介绍了如何使用内置 API 集成将 Proofpoint On-Demand 日志注入到 Google Security Operations。解析器从 JSON 日志中提取字段,并将其转换为 Chronicle UDM 格式。它可处理两种主要日志格式:一种包含电子邮件元数据,另一种包含 SMTP 交易详情;它使用条件逻辑来适当解析字段,并根据可用数据填充统一数据模型 (UDM) 字段。解析器还会执行数据清理,例如移除无关字符和转换时间戳。
准备工作
请确保满足以下前提条件:
- Google SecOps 实例
 - Proofpoint On-Demand 远程 Syslog 许可
 - 对 Proofpoint 的特权访问权限
 
配置 Proofpoint On-Demand API 访问权限
- 登录 Proofpoint 管理员门户。
 - 复制您的集群 ID(显示在管理界面右上角,版本号旁边)。
 - 前往设置 > API 密钥管理。
 - 点击新建,打开创建新的 API 密钥对话框。
 - 输入唯一的名称(例如 
Google SecOps Key)。 - 生成 API 密钥。
 - 从新 API 密钥的省略号菜单中选择查看详情。
 - 复制 API 密钥。
 
设置 Feed
如需配置 Feed,请按以下步骤操作:
- 依次前往 SIEM 设置 > Feed。
 - 点击添加新 Feed。
 - 点击 Proofpoint Feed 包。
 - 选择 Proofpoint On-Demand 日志类型。
 - 点击下一步。
 - 为以下输入参数指定值:
- 来源类型:第三方 API
 - 身份验证 HTTP 标头:以 
Authorization: Bearer {API_KEY}格式输入 Proofpoint API 密钥,并添加包含以下 WebSocket-Key 数据的新行:Sec-WebSocket-Key: SGVsbG8sIHdvcmxkIQ==。 - 集群 ID:输入您之前复制的 Proofpoint 集群 ID。
 
高级选项
 
- Feed 名称:用于标识 Feed 的预填充值。
 - 资源命名空间:与 Feed 关联的命名空间。
 - 提取标签:应用于相应 Feed 中所有事件的标签。
 
- 点击创建 Feed。
 
UDM 映射表
| 日志字段 | UDM 映射 | 逻辑 | 
|---|---|---|
classification | 
security_result.detection_fields.classification | 
该值直接来自原始日志中的 classification 字段。 | 
cluster | 
security_result.detection_fields.cluster | 
该值直接来自原始日志中的 cluster 字段。 | 
completelyRewritten | 
security_result.detection_fields.completelyRewritten | 
该值直接来自原始日志中的 completelyRewritten 字段。 | 
connection.country | 
principal.location.country_or_region | 
该值直接来自原始日志中的 connection.country 字段,除非该字段的值为“**”。 | 
connection.host | 
principal.hostname | 
该值直接来自原始日志中的 connection.host 字段。 | 
connection.ip | 
principal.ip | 
如果原始日志中的 connection.ip 字段是有效的 IPv4 地址,则该值直接来自该字段。如果存在,还会与 senderIP 合并。 | 
connection.protocol | 
network.application_protocol | 
使用 gsub 提取 connection.protocol 中英文冒号前的协议部分并进行映射。例如,“smtp:smtp”会变为“SMTP”。 | 
connection.tls.inbound.cipher | 
network.tls.cipher | 
该值直接来自原始日志中的 connection.tls.inbound.cipher 字段,除非该字段的值为“NONE”。 | 
connection.tls.inbound.version | 
network.tls.version | 
除非加密方式为“NONE”,否则该值直接来自原始日志中的 connection.tls.inbound.version 字段。 | 
envelope.from | 
network.email.from | 
该值直接来自原始日志中的 envelope.from 字段。如果存在 sm.from 或 fromAddress,则也会替换此值。 | 
envelope.rcpts | 
network.email.to | 
如果 envelope.rcpts 中的电子邮件地址有效,则会合并到 network.email.to 字段中。如果存在,还会与 sm.to 或 toAddresses 合并。 | 
envelope.rcptsHashed | 
read_only_udm.additional.fields | 
envelope.rcptsHashed 中的哈希电子邮件地址会添加为其他字段,键为“toHashed_0”“toHashed_1”等。 | 
eventTime | 
@timestamp | 
该值使用 ISO8601 或 RFC 3339 格式从 eventTime 字段解析而来。 | 
eventType | 
security_result.summary | 
该值直接来自原始日志中的 eventType 字段。 | 
filter.disposition | 
security_result.action_details | 
该值直接来自原始日志中的 filter.disposition 字段,除非存在 tls.verify。 | 
filter.modules.av.virusNames.0 | 
security_result.threat_name | 
该值直接来自原始日志中的 filter.modules.av.virusNames.0 字段。 | 
filter.modules.dmarc.authResults | 
read_only_udm.additional.fields | 
filter.modules.dmarc.authResults 中每个条目的方法和结果都会添加为其他字段,键类似于“authResultsMethod_0”“authResults_result_0”“authResultsMethod_1”等。 | 
filter.modules.spam.langs | 
read_only_udm.additional.fields | 
filter.modules.spam.langs 中的每种语言都会添加为附加字段,键为“lang_0”“lang_1”等。 | 
filter.modules.spam.safeBlockedListMatches.0.listType | 
security_result.detection_fields.safeBlockedListMatches_listType | 
该值直接来自原始日志中的 filter.modules.spam.safeBlockedListMatches.0.listType 字段。 | 
filter.modules.spam.safeBlockedListMatches.0.rule | 
security_result.detection_fields.safeBlockedListMatches_rule | 
该值直接来自原始日志中的 filter.modules.spam.safeBlockedListMatches.0.rule 字段。 | 
filter.modules.spam.scores.classifiers.adult | 
security_result.detection_fields.adult | 
如果原始日志中的 filter.modules.spam.scores.classifiers.adult 字段不为空或不为 0,则该值直接来自该字段。 | 
filter.modules.spam.scores.classifiers.bulk | 
security_result.detection_fields.bulk | 
如果原始日志中的 filter.modules.spam.scores.classifiers.bulk 字段不为空或不为 0,则该值直接来自该字段。 | 
filter.modules.spam.scores.classifiers.impostor | 
security_result.detection_fields.impostor | 
如果原始日志中的 filter.modules.spam.scores.classifiers.impostor 字段不为空或不为 0,则该值直接来自该字段。 | 
filter.modules.spam.scores.classifiers.lowpriority | 
security_result.detection_fields.lowpriority | 
如果原始日志中的 filter.modules.spam.scores.classifiers.lowpriority 字段不为空或不为 0,则该值直接来自该字段。 | 
filter.modules.spam.scores.classifiers.malware | 
security_result.detection_fields.malware | 
如果原始日志中的 filter.modules.spam.scores.classifiers.malware 字段不为空或不为 0,则该值直接来自该字段。 | 
filter.modules.spam.scores.classifiers.mlx | 
security_result.detection_fields.mlx | 
如果原始日志中的 filter.modules.spam.scores.classifiers.mlx 字段不为空或不为 0,则该值直接来自该字段。 | 
filter.modules.spam.scores.classifiers.mlxlog | 
security_result.detection_fields.mlxlog | 
如果原始日志中的 filter.modules.spam.scores.classifiers.mlxlog 字段不为空或不为 0,则该值直接来自该字段。 | 
filter.modules.spam.scores.classifiers.phish | 
security_result.detection_fields.phish | 
如果原始日志中的 filter.modules.spam.scores.classifiers.phish 字段不为空或不为 0,则该值直接来自该字段。 | 
filter.modules.spam.scores.classifiers.spam | 
security_result.detection_fields.spam | 
如果原始日志中的 filter.modules.spam.scores.classifiers.spam 字段不为空或不为 0,则该值直接来自该字段。 | 
filter.modules.spam.scores.classifiers.suspect | 
security_result.detection_fields.suspect | 
如果原始日志中的 filter.modules.spam.scores.classifiers.suspect 字段不为空或不为 0,则该值直接来自该字段。 | 
filter.modules.spam.scores.engine | 
security_result.detection_fields.engine | 
如果原始日志中的 filter.modules.spam.scores.engine 字段不为空或不为 0,则该值直接来自该字段。 | 
filter.modules.spam.scores.overall | 
security_result.detection_fields.overall | 
如果原始日志中的 filter.modules.spam.scores.overall 字段不为空或不为 0,则该值直接来自该字段。 | 
filter.modules.spam.version.definitions | 
security_result.summary | 
该值直接来自原始日志中的 filter.modules.spam.version.definitions 字段。 | 
filter.modules.spam.version.engine | 
metadata.product_version | 
该值直接来自原始日志中的 filter.modules.spam.version.engine 字段。 | 
filter.modules.urldefense.counts.rewritten | 
read_only_udm.additional.fields.urldefenseCountsRewritten | 
该值直接来自原始日志中的 filter.modules.urldefense.counts.rewritten 字段。 | 
filter.modules.urldefense.counts.total | 
security_result.detection_fields.urldefense_total | 
该值直接来自原始日志中的 filter.modules.urldefense.counts.total 字段。 | 
filter.modules.zerohour.score | 
read_only_udm.additional.fields.zeroHourScore | 
该值直接来自原始日志中的 filter.modules.zerohour.score 字段。 | 
filter.origGuid | 
read_only_udm.additional.fields.origGuid | 
该值直接来自原始日志中的 filter.origGuid 字段。 | 
filter.qid | 
read_only_udm.additional.fields.filterQid | 
该值直接来自原始日志中的 filter.qid 字段。 | 
filter.quarantine.folder | 
security_result.detection_fields.filter_quarantine_folder | 
该值直接来自原始日志中的 filter.quarantine.folder 字段。 | 
filter.quarantine.folderId | 
security_result.detection_fields.filter_quarantine_folderId | 
该值直接来自原始日志中的 filter.quarantine.quarantine.folderId 字段。 | 
filter.quarantine.module | 
security_result.detection_fields.filter_quarantine_module | 
该值直接来自原始日志中的 filter.quarantine.module 字段。 | 
filter.quarantine.rule | 
security_result.detection_fields.filter_quarantine_rule | 
该值直接来自原始日志中的 filter.quarantine.rule 字段。 | 
filter.quarantine.type | 
security_result.detection_fields.filter_quarantine_type | 
该值直接来自原始日志中的 filter.quarantine.type 字段。 | 
filter.routeDirection | 
network.direction | 
如果 filter.routeDirection 为“inbound”,则 network.direction 设置为“INBOUND”。如果 filter.routeDirection 为“outbound”,则 network.direction 设置为“OUTBOUND”。 | 
filter.routes | 
read_only_udm.additional.fields | 
filter.routes 中的每个路线都会添加为一个额外的字段,键为“filterRoutes_0”“filterRoutes_1”等。 | 
fromAddress | 
network.email.from | 
如果 fromAddress 中的电子邮件地址有效,则会将其替换为 network.email.from 字段中的电子邮件地址。 | 
guid | 
metadata.product_log_id | 
该值直接来自原始日志中的 guid 字段。 | 
GUID | 
metadata.product_log_id | 
该值直接来自原始日志中的 GUID 字段。 | 
headerFrom | 
network.email.from | 
该值直接来自原始日志中的 headerFrom 字段。 | 
impostorScore | 
security_result.detection_fields.impostorScore | 
该值直接来自原始日志中的 impostorScore 字段。 | 
malwareScore | 
security_result.detection_fields.malwareScore | 
该值直接来自原始日志中的 malwareScore 字段。 | 
messageID | 
network.email.mail_id | 
该值直接来自原始日志中的 messageID 字段。 | 
messageSize | 
security_result.detection_fields.messageSize | 
该值直接来自原始日志中的 messageSize 字段。 | 
messageTime | 
@timestamp | 
该值使用 ISO8601 或 RFC 3339 格式从 messageTime 字段解析而来。 | 
metadata.customerId | 
principal.labels.customerId | 
该值直接来自原始日志中的 metadata.customerId 字段。 | 
metadata.origin.data.agent | 
network.http.user_agent | 
该值直接来自原始日志中的 metadata.origin.data.agent 字段。 | 
metadata.origin.data.cid | 
principal.user.userid | 
该值直接来自原始日志中的 metadata.origin.data.cid 字段。 | 
metadata.origin.data.version | 
metadata.product_version | 
该值直接来自原始日志中的 metadata.origin.data.version 字段。 | 
msg.header.from | 
read_only_udm.additional.fields.msgHeaderFrom | 
该值直接来自原始日志中的 msg.header.from.0 字段。 | 
msg.header.reply-to | 
network.email.reply_to | 
提取并映射 msg.header.reply-to.0 中用 <> 括起来的电子邮件地址。 | 
msg.header.subject | 
network.email.subject | 
该值直接来自原始日志中的 msg.header.subject 字段。 | 
msg.header.to | 
read_only_udm.additional.fields.msgHeaderTo | 
该值直接来自原始日志中的 msg.header.to 字段。 | 
msg.normalizedHeader.subject | 
network.email.subject | 
该值直接来自原始日志中的 msg.normalizedHeader.subject 字段。 | 
msg.parsedAddresses.cc | 
network.email.cc | 
如果 msg.parsedAddresses.cc 中的电子邮件地址有效,则会合并到 network.email.cc 字段中。 | 
msg.parsedAddresses.ccHashed | 
read_only_udm.additional.fields | 
msg.parsedAddresses.ccHashed 中的哈希电子邮件地址会添加为其他字段,键为“ccHashed_0”“ccHashed_1”等。 | 
msg.parsedAddresses.from | 
read_only_udm.additional.fields.msgParsedAddressesFrom | 
该值直接来自原始日志中的 msg.parsedAddresses.from.0 字段。 | 
msg.parsedAddresses.from.0 | 
principal.user.email_addresses | 
该值直接来自原始日志中的 msg.parsedAddresses.from.0 字段。 | 
msg.parsedAddresses.fromHashed | 
read_only_udm.additional.fields.fromHashed | 
该值直接来自原始日志中的 msg.parsedAddresses.fromHashed.0 字段。 | 
msg.parsedAddresses.to | 
target.user.email_addresses | 
如果 msg.parsedAddresses.to 中的电子邮件地址有效,则会合并到 target.user.email_addresses 字段中。 | 
msgParts | 
read_only_udm.about | 
创建多个 about 对象,msgParts 中的每个条目对应一个对象。系统会提取文件哈希、MIME 类型、大小和其他元数据。 | 
QID | 
security_result.detection_fields.QID | 
该值直接来自原始日志中的 QID 字段。 | 
recipient | 
target.user.email_addresses | 
如果 recipient 中的电子邮件地址有效,则会合并到 target.user.email_addresses 字段中。 | 
replyToAddress | 
network.email.reply_to | 
如果 replyToAddress 中的电子邮件地址有效,则会将其替换为 network.email.reply_to 字段中的电子邮件地址。 | 
sender | 
principal.user.email_addresses | 
如果原始日志中的 sender 字段包含有效的电子邮件地址,则该值直接来自该字段。 | 
senderIP | 
principal.ip | 
该值直接来自原始日志中的 senderIP 字段。 | 
sm.from | 
network.email.from | 
该值直接来自原始日志中的 sm.from 字段。 | 
sm.msgid | 
network.email.mail_id | 
该值直接来自原始日志中的 sm.msgid 字段,并移除了“<”和“>”。 | 
sm.proto | 
network.application_protocol | 
该值直接来自原始日志中的 sm.proto 字段。 | 
sm.qid | 
security_result.detection_fields.QUID | 
该值直接来自原始日志中的 sm.qid 字段。 | 
sm.relay | 
intermediary.hostname,intermediary.ip | 
主机名和 IP 地址是从 sm.relay 中使用 grok 提取的。 | 
sm.stat | 
security_result.detection_fields.Stat | 
使用 grok 提取 sm.stat 的第一个字词并进行映射。 | 
sm.to | 
network.email.to | 
如果 sm.to 中的电子邮件地址有效,则会合并到 network.email.to 字段中。 | 
spamScore | 
security_result.detection_fields.spamScore | 
该值直接来自原始日志中的 spamScore 字段。 | 
subject | 
network.email.subject | 
该值直接来自原始日志中的 subject 字段。 | 
threat | 
security_result.detection_fields.threat | 
该值直接来自原始日志中的 threat 字段。 | 
threatsInfoMap | 
security_result.detection_fields | 
系统会将 threatsInfoMap 中每个条目的键值对添加为检测字段。 | 
threatType | 
security_result.detection_fields.threatType | 
该值直接来自原始日志中的 threatType 字段。 | 
tls.cipher | 
network.tls.cipher | 
该值直接来自原始日志中的 tls.cipher 字段,除非该字段的值为“NONE”。 | 
tls.verify | 
security_result.action_details | 
该值直接来自原始日志中的 tls.verify 字段。 | 
tls.version | 
network.tls.version | 
除非加密方式为“NONE”,否则该值直接来自原始日志中的 tls.version 字段。 | 
toAddresses | 
network.email.to | 
如果 toAddresses 中的电子邮件地址有效,则会合并到 network.email.to 字段中。 | 
ts | 
@timestamp | 
该值通过以下方式从 ts 字段解析得出:使用 ISO8601 或 RFC 3339 格式,并进行一些预处理以处理额外的秒的小数部分。 | 
需要更多帮助?从社区成员和 Google SecOps 专业人士那里获得解答。