收集 MISP IOC 日志
支持的平台:
Google SecOps
SIEM
概览
此解析器会从格式为 JSON 或 CSV 的 MISP 数据中提取 IOC。它会解析输入、将字段映射到 UDM、处理各种 IOC 类型(IP、网域、文件哈希等),并使用威胁情报上下文(例如置信度和严重程度)丰富数据。解析器还会针对不同的数据格式执行特定逻辑,并处理缺少字段或不受支持的字段的情况。
准备工作
- 确保您拥有 Google SecOps 实例。
- 确保您拥有对 MISP 的超级用户访问权限。
在 Google SecOps 中配置 Feed 以注入 MISP 威胁情报日志
- 依次前往 SIEM 设置 > Feed。
- 点击新增。
- 在Feed 名称字段中,输入 Feed 的名称(例如 MISP 日志)。
- 选择 Webhook 作为来源类型。
- 选择 MISP 威胁情报作为日志类型。
- 点击下一步。
- 可选:为以下输入参数指定值:
- 分隔符:用于分隔日志行(例如
\n
)的分隔符。 - 资源命名空间:资源命名空间。
- 提取标签:应用于此 Feed 中的事件的标签。
- 分隔符:用于分隔日志行(例如
- 点击下一步。
- 在最终确定界面中查看 Feed 配置,然后点击提交。
- 点击生成 Secret 密钥,生成用于对此 Feed 进行身份验证的 Secret 密钥。
- 复制并存储密钥。您将无法再查看此密钥。如有必要,您可以重新生成新的 Secret 密钥,但此操作会使之前的 Secret 密钥过时。
- 在详情标签页中,从端点信息字段复制 Feed 端点网址。您需要在客户端应用中指定此端点网址。
- 点击完成。
为该 Webhook Feed 创建 API 密钥
依次前往 Google Cloud 控制台 > 凭据。
点击创建凭据,然后选择 API 密钥。
限制 API 密钥对 Google Security Operations API 的访问权限。
指定端点网址
- 在客户端应用中,指定 webhook Feed 中提供的 HTTPS 端点网址。
通过在自定义标头中指定 API 密钥和密钥(格式如下)来启用身份验证:
X-goog-api-key = API_KEY X-Webhook-Access-Key = SECRET
建议:将 API 密钥作为标头指定,而不是在网址中指定。
如果您的 webhook 客户端不支持自定义标头,您可以使用以下格式的查询参数指定 API 密钥和密钥:
ENDPOINT_URL?key=API_KEY&secret=SECRET
替换以下内容:
ENDPOINT_URL
:Feed 端点网址。API_KEY
:用于对 Google Security Operations 进行身份验证的 API 密钥。SECRET
:您为对 Feed 进行身份验证而生成的密钥。
在 MISP 中启用向外部网址发送 HTTP 请求
- 访问部署了 MISP 的机器。
- 修改
app/Config/
中的 config.php 文件。 - 找到
rest_client_enable_arbitrary_urls
配置,并将其设置为 True。none 'rest_client_enable_arbitrary_urls' => true
- 保存文件。
在 MISP 中为 Google SecOps 配置 Webhook
- 登录 MISP Threat Intelligence。
- 依次前往管理 > 工作流 > 列出模块。
- 选择 Webhook。
- 前往操作列,然后点击启用。
- 依次前往工作流 > 列出触发器。
- 选择您所需的网络钩子触发器。
- 从模块列表中选择 Webhook。
- 将其拖放到工作区中。
- 将输入端连接到触发器的输出端。
- 在 Webhook 模块中,填写以下字段:
- 网址:依次输入 ENDPOINT_网址、API_KEY 和 SECRET。
- HTTP 请求方法:选择 POST
- 点击保存。
UDM 映射表
日志字段 | UDM 映射 | 逻辑 |
---|---|---|
Attribute.category |
event.idm.entity.metadata.threat.category_details |
直接从“data”字段中的嵌套 JSON 对象中的 Attribute.category 映射而来。用于 JSON 解析路径。 |
Attribute.comment |
event.idm.entity.metadata.threat.summary |
直接从“data”字段中的嵌套 JSON 对象中的 Attribute.comment 映射而来。用于 JSON 解析路径。 |
Attribute.deleted |
event.idm.entity.metadata.threat.detection_fields.value |
直接从 Attribute.deleted 映射,并添加为键为“Attribute deleted”(属性已删除)的检测字段。用于 JSON 解析路径。 |
Attribute.event_id |
event.idm.entity.metadata.threat.detection_fields.value |
直接从 Attribute.event_id 映射,并作为键为“Attribute event_id”的检测字段添加。用于 JSON 解析路径。 |
Attribute.first_seen |
event.idm.entity.metadata.threat.detection_fields.value |
直接从 Attribute.first_seen 映射,并作为键为“Attribute first_seen”的检测字段添加。用于 JSON 解析路径。 |
Attribute.id |
event.idm.entity.metadata.threat.detection_fields.value |
直接从 Attribute.id 映射,并作为检测字段添加(键为“Attribute id”或“Attribute id $$”,具体取决于解析路径)。在 CSV 和 JSON 解析路径中均可使用。 |
Attribute.timestamp |
event.idm.entity.metadata.threat.detection_fields.value |
直接从 Attribute.timestamp 映射,并作为键为“Attribute timestamp”(属性时间戳)的检测字段添加。用于 JSON 解析路径。 |
Attribute.to_ids |
event.idm.entity.metadata.threat.detection_fields.value |
直接从 Attribute.to_ids 映射,并作为键为“Attribute to_ids”的检测字段添加。用于 JSON 解析路径。 |
Attribute.type |
log_type |
直接从“data”字段中的嵌套 JSON 对象中的 Attribute.type 映射而来。用作临时字段,之后用于填充其他 UDM 字段。用于 JSON 解析路径。 |
Attribute.uuid |
event.idm.entity.metadata.product_entity_id |
直接从“data”字段中的嵌套 JSON 对象中的 Attribute.uuid 映射而来。用于 JSON 解析路径。 |
Attribute.value |
多个 | 此字段的值用于填充多个 UDM 字段,具体取决于 Attribute.type (如果从 Attribute.type 派生,则为 log_type ):- 如果 type 为“网域”,则为 event.idm.entity.entity.hostname 。如果 type 为“md5”,则为 - event.idm.entity.entity.file.md5 。如果 type 为“sha1”,则为 - event.idm.entity.entity.file.sha1 。如果 type 为“sha256”,则为 - event.idm.entity.entity.file.sha256 。如果 type 为“mutex”,则为 - event.idm.entity.entity.resource.name 。如果 type 为“regkey”,则为 - event.idm.entity.entity.registry.registry_key 。- 如果 type 为“threat-actor”,则为 event.idm.entity.entity.user.email_addresses 。- 如果 type 为“uri”或“url”,则为 event.idm.entity.entity.url 。如果 type 为“filename”,则为 - event.idm.entity.entity.file.full_path 。- 如果 type 为“ip-dst|port”“ip-dst”或“ip-src”,则会解析为 IP 和端口。用于 JSON 解析路径。 |
column1 |
event.idm.entity.metadata.product_entity_id |
直接从 CSV 解析路径中的 column1 映射而来。 |
column14 |
属于event.idm.entity.metadata.threat.description |
与 description 串联,以在威胁元数据中形成最终说明。用于 CSV 解析路径。 |
column16 |
event.idm.entity.metadata.threat.threat_feed_name ,event.ioc.feed_name |
直接从 column16 映射。用于 CSV 解析路径。 |
column18 |
event.idm.entity.metadata.threat.severity_details ,event.ioc.raw_severity |
直接从 column18 映射。用于 CSV 解析路径。 |
column21 |
event.idm.entity.metadata.threat.description 的一部分,event.ioc.description |
用作说明的基础,稍后会与 event_info 串联。用于 CSV 解析路径。 |
column3 |
属于event.ioc.categorization |
直接从 column3 映射,并与“IOC”串联以形成最终分类。用于 CSV 解析路径。 |
column4 |
event.idm.entity.metadata.description |
直接从 column4 映射。用于 CSV 解析路径。 |
column5 |
多个 | 此字段的值用于填充多个 UDM 字段,具体取决于 column4 字段(映射到 type ):- 如果 type 为“网域”,则为 event.idm.entity.entity.hostname 。- 如果 type 为“ip-dst|port”“ip-dst”或“ip-src”,则会解析为 IP 和端口。如果 type 为“md5”,则为 - event.idm.entity.entity.file.md5 。如果 type 为“sha1”,则为 - event.idm.entity.entity.file.sha1 。如果 type 为“sha256”,则为 - event.idm.entity.entity.file.sha256 。如果 type 为“mutex”,则为 - event.idm.entity.entity.resource.name 。如果 type 为“regkey”,则为 - event.idm.entity.entity.registry.registry_key 。- 如果 type 为“threat-actor”,则为 event.idm.entity.entity.user.email_addresses 。- 如果 type 为“uri”或“url”,则为 event.idm.entity.entity.url 。- 如果 type 为“filename”,则为 event.idm.entity.entity.file.full_path 。用于 CSV 解析路径。 |
column6 |
event.idm.entity.metadata.threat.summary |
直接从 column6 映射。用于 CSV 解析路径。 |
column8 |
event.ioc.active_timerange.start ,event.idm.entity.metadata.interval.start_time |
解析为 UNIX 时间戳。用于 CSV 解析路径。 |
date description |
event.idm.entity.metadata.threat.description |
直接从“data”字段中的嵌套 JSON 对象中的 description 映射而来。用于 JSON 解析路径。 |
event_creator_email |
event.idm.entity.entity.labels.value |
直接从 event_creator_email 映射,并作为键为“event_creator_email”的标签添加。用于 JSON 解析路径。 |
event_id Feed.publish |
event.idm.entity.metadata.threat.detection_fields.value |
直接从 Feed.publish 映射,并作为键为“Feed publish”的检测字段添加。用于 JSON 解析路径。 |
first_seen |
event.ioc.active_timerange.start ,event.idm.entity.metadata.interval.start_time |
解析为采用“yyyy-MM-ddTHH:mm:ssZZ”格式的时间戳。用于 JSON 解析路径。 |
id info |
event.idm.entity.metadata.description |
直接从“data”字段中的嵌套 JSON 对象中的 info 映射而来。用于 JSON 解析路径。 |
last_seen |
event.ioc.active_timerange.end |
解析为采用“yyyy-MM-ddTHH:mm:ssZZ”格式的时间戳。用于 JSON 解析路径。 |
Org.name |
event.idm.entity.metadata.threat.detection_fields.value |
直接从 Org.name 映射,并作为键为“Org name”(组织名称)的检测字段添加。用于 JSON 解析路径。 |
published |
event.idm.entity.metadata.threat.detection_fields.value |
直接从 published 映射,并作为键为“published”的检测字段添加。用于 JSON 解析路径。 |
Tag.colour |
event.idm.entity.metadata.threat.detection_fields.value |
直接从 Tag.colour 映射,并作为键为“tag colour”的检测字段添加。用于 JSON 解析路径。 |
Tag.exportable |
event.idm.entity.metadata.threat.detection_fields.value |
直接从 Tag.exportable 映射,并作为键为“tag exportable”的检测字段添加。用于 JSON 解析路径。 |
Tag.hide_tag |
event.idm.entity.metadata.threat.detection_fields.value |
直接从 Tag.hide_tag 映射,并作为键为“tag hide_tag”的检测字段添加。用于 JSON 解析路径。 |
Tag.id |
event.idm.entity.metadata.threat.detection_fields.value |
直接从 Tag.id 映射,并作为键为“tag id”的检测字段添加。用于 JSON 解析路径。 |
Tag.is_custom_galaxy |
event.idm.entity.metadata.threat.detection_fields.value |
直接从 Tag.is_custom_galaxy 映射,并作为键为“tag is_custom_galaxy”的检测字段添加。用于 JSON 解析路径。 |
Tag.is_galaxy |
event.idm.entity.metadata.threat.detection_fields.value |
直接从 Tag.is_galaxy 映射,并作为键为“tag is_galaxy”的检测字段添加。用于 JSON 解析路径。 |
Tag.isinherited |
event.idm.entity.metadata.threat.detection_fields.value |
直接从 Tag.isinherited 映射,并作为键为“tag isinherited”的检测字段添加。用于 JSON 解析路径。 |
Tag.name |
event.idm.entity.metadata.threat.detection_fields.value |
直接从 Tag.name 映射,并作为键为“tag name”的检测字段添加。用于 JSON 解析路径。 |
Tag.numerical_value |
event.idm.entity.metadata.threat.detection_fields.value |
直接从 Tag.numerical_value 映射,并作为键为“tag numerical_value”的检测字段添加。用于 JSON 解析路径。 |
Tag.user_id |
event.idm.entity.metadata.threat.detection_fields.value |
直接从 Tag.user_id 映射,并作为键为“tag user_id”的检测字段添加。用于 JSON 解析路径。 |
threat_level_id |
event.idm.entity.entity.labels.value |
直接从 threat_level_id 映射,并作为键为“threat_level_id”的标签添加。用于 JSON 解析路径。 |
timestamp |
event.idm.entity.metadata.collected_timestamp ,event.idm.entity.metadata.interval.start_time |
解析为 UNIX 时间戳。用于 CSV 解析路径。 |
uuid |
event.idm.entity.metadata.vendor_name |
由解析器设置为“MISP”。由解析器设置为“MISP”。设置为很久之后的默认值(自公元纪年以来的 253402300799 秒)。由解析器根据 type 或 log_type 字段确定。可以是“FILE”“DOMAIN_NAME”“IP_ADDRESS”“MUTEX”“RESOURCE”或“USER”。可以从 Attribute.comment 或 Attribute.value 派生,具体取决于 Attribute.type 。如果类型与 IP 相关,则从 Attribute.value 或 column5 解析。如果类型为“ip-dst|port”,则从 Attribute.value 或 column5 解析。在 CSV 解析中派生自 column3 ,在 JSON 解析中派生自 Attribute.category 。从 CSV 解析中的 column21 和 column14 派生而来。派生自 column8 或 first_seen 。派生自 last_seen 。使用 Grok 模式从 description 派生而来。派生自 column16 或设为“MISP”。派生自 column18 。如果类型与 IP 相关,则从 Attribute.value 或 column5 解析。如果类型为“ip-dst|port”,则从 Attribute.value 或 column5 解析。如果类型为“网域”,则派生自 Attribute.value 或 column5 。派生自 confidence 字段,该字段从 description 字段中提取。值可以是“HIGH_CONFIDENCE”“MEDIUM_CONFIDENCE”“LOW_CONFIDENCE”或“UNKNOWN_CONFIDENCE”。直接从 confidence 字段映射,该字段从 description 字段中提取。直接从 threat_level 字段映射而来,该字段派生自 CSV 解析路径中的 column18 。直接从 feed_name 字段映射而来,该字段派生自 CSV 解析路径中的 column16 。从 CSV 解析中的 column21 和 column14 派生而来。在 CSV 解析中派生自 column6 ,在 JSON 解析中派生自 Attribute.comment 。系统会添加多个检测字段及其对应的键。系统会添加多个字段作为标签,并附上相应的键。从原始日志中的顶级 timestamp 字段复制。 |
变化
2023-09-26
- 将“published”“Feed.publish”“Org.name”“Attribute.id”“Attribute.event_id”“Attribute.to_ids”“Attribute.timestamp”“Attribute.comment”“Attribute.deleted”“Attribute.first_seen”以及所有“tag.names”映射到“threat.detection_fields”。
2023-08-17
- bug 修复:
- 添加了一个条件,用于仅在日志不是 JSON 时执行“gsub”操作,以移除额外的反斜线。
2023-07-20
- bug 修复:
- 将“metadata.entity_type”更改为“MUTEX”,以便在日志类型为互斥锁时使用。
2023-07-04
- 新创建的解析器。