收集 Proofpoint On-Demand 日志
支持的语言:
Google SecOps
SIEM
本文档介绍了如何使用内置 API 集成将 Proofpoint On-Demand 日志注入到 Google Security Operations。解析器从 JSON 日志中提取字段,并将其转换为 Chronicle UDM 格式。它可处理两种主要日志格式:一种包含电子邮件元数据,另一种包含 SMTP 交易详情;它使用条件逻辑来适当解析字段,并根据可用数据填充统一数据模型 (UDM) 字段。解析器还会执行数据清理,例如移除无关字符和转换时间戳。
准备工作
请确保满足以下前提条件:
- Google SecOps 实例
- Proofpoint On-Demand Remote Syslog 许可
- 对 Proofpoint 的特权访问权限
配置 Proofpoint On-Demand API 访问权限
- 登录 Proofpoint 管理员门户。
- 复制您的集群 ID(显示在管理界面右上角,版本号旁边)。
- 前往设置 > API 密钥管理。
- 点击新建,打开创建新的 API 密钥对话框。
- 输入唯一的名称(例如
Google SecOps Key
)。 - 生成 API 密钥。
- 从新 API 密钥的省略号菜单中选择查看详情。
- 复制 API 密钥。
设置 Feed
您可以通过两种不同的入口点在 Google SecOps 平台中设置 Feed:
- SIEM 设置 > Feed
- 内容中心 > 内容包
通过“SIEM 设置”>“Feed”设置 Feed
如需配置 Feed,请按以下步骤操作:
- 依次前往 SIEM 设置 > Feed。
- 点击添加新 Feed。
- 在下一页上,点击配置单个 Feed。
- 在Feed 名称字段中,输入 Feed 的名称(例如
PoD Logs
)。 - 选择第三方 API 作为来源类型。
- 选择 Proofpoint On-Demand 日志类型。
- 点击下一步。
为以下输入参数指定值:
- 身份验证 HTTP 标头:以
Authorization: Bearer {API_KEY}
格式输入 Proofpoint API 密钥,并添加一个新行,其中包含以下 WebSocket-Key 数据:Sec-WebSocket-Key: SGVsbG8sIHdvcmxkIQ==
。 - 集群 ID:输入您之前复制的 Proofpoint 集群 ID。
- 身份验证 HTTP 标头:以
点击下一步。
在最终确定界面中检查 Feed 配置,然后点击提交。
设置来自内容中心的 Feed
为以下字段指定值:
- 身份验证 HTTP 标头:以
Authorization: Bearer {API_KEY}
格式输入 Proofpoint API 密钥,并在新行中添加以下 WebSocket-Key 数据:Sec-WebSocket-Key: SGVsbG8sIHdvcmxkIQ==
。 - 集群 ID:输入您之前复制的 Proofpoint 集群 ID。
高级选项
- Feed 名称:用于标识 Feed 的预填充值。
- 来源类型:用于将日志收集到 Google SecOps 中的方法。
- 资源命名空间:与 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 |
该值直接来自原始日志中的 connection.tls.inbound.version 字段,除非加密方式为“NONE”。 |
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 |
该值直接来自原始日志中的 tls.version 字段,除非加密方式为“NONE”。 |
toAddresses |
network.email.to |
如果 toAddresses 中的电子邮件地址有效,则会合并到 network.email.to 字段中。 |
ts |
@timestamp |
该值通过以下方式从 ts 字段解析得出:使用 ISO8601 或 RFC 3339 格式,并进行一些预处理以处理额外的秒的小数部分。 |
需要更多帮助?从社区成员和 Google SecOps 专业人士那里获得解答。