收集 MISP IOC 日志

支持的平台:

概览

此解析器会从格式为 JSON 或 CSV 的 MISP 数据中提取 IOC。它会解析输入、将字段映射到 UDM、处理各种 IOC 类型(IP、网域、文件哈希等),并使用威胁情报上下文(例如置信度和严重程度)丰富数据。解析器还会针对不同的数据格式执行特定逻辑,并处理缺少字段或不受支持的字段的情况。

准备工作

  • 确保您拥有 Google SecOps 实例。
  • 确保您拥有对 MISP 的超级用户访问权限。

在 Google SecOps 中配置 Feed 以注入 MISP 威胁情报日志

  1. 依次前往 SIEM 设置 > Feed
  2. 点击新增
  3. Feed 名称字段中,输入 Feed 的名称(例如 MISP 日志)。
  4. 选择 Webhook 作为来源类型
  5. 选择 MISP 威胁情报作为日志类型
  6. 点击下一步
  7. 可选:为以下输入参数指定值:
    • 分隔符:用于分隔日志行(例如 \n)的分隔符。
    • 资源命名空间资源命名空间
    • 提取标签:应用于此 Feed 中的事件的标签。
  8. 点击下一步
  9. 最终确定界面中查看 Feed 配置,然后点击提交
  10. 点击生成 Secret 密钥,生成用于对此 Feed 进行身份验证的 Secret 密钥。
  11. 复制并存储密钥。您将无法再查看此密钥。如有必要,您可以重新生成新的 Secret 密钥,但此操作会使之前的 Secret 密钥过时。
  12. 详情标签页中,从端点信息字段复制 Feed 端点网址。您需要在客户端应用中指定此端点网址。
  13. 点击完成

为该 Webhook Feed 创建 API 密钥

  1. 依次前往 Google Cloud 控制台 > 凭据

    转到“凭据”页面

  2. 点击创建凭据,然后选择 API 密钥

  3. 限制 API 密钥对 Google Security Operations API 的访问权限。

指定端点网址

  1. 在客户端应用中,指定 webhook Feed 中提供的 HTTPS 端点网址。
  2. 通过在自定义标头中指定 API 密钥和密钥(格式如下)来启用身份验证:

    X-goog-api-key = API_KEY
    X-Webhook-Access-Key = SECRET
    

    建议:将 API 密钥作为标头指定,而不是在网址中指定。

  3. 如果您的 webhook 客户端不支持自定义标头,您可以使用以下格式的查询参数指定 API 密钥和密钥:

    ENDPOINT_URL?key=API_KEY&secret=SECRET
    

    替换以下内容:

    • ENDPOINT_URL:Feed 端点网址。
    • API_KEY:用于对 Google Security Operations 进行身份验证的 API 密钥。
    • SECRET:您为对 Feed 进行身份验证而生成的密钥。

在 MISP 中启用向外部网址发送 HTTP 请求

  1. 访问部署了 MISP 的机器。
  2. 修改 app/Config/ 中的 config.php 文件。
  3. 找到 rest_client_enable_arbitrary_urls 配置,并将其设置为 Truenone 'rest_client_enable_arbitrary_urls' => true
  4. 保存文件。

在 MISP 中为 Google SecOps 配置 Webhook

  1. 登录 MISP Threat Intelligence。
  2. 依次前往管理 > 工作流 > 列出模块
  3. 选择 Webhook
  4. 前往操作列,然后点击启用
  5. 依次前往工作流 > 列出触发器
  6. 选择您所需的网络钩子触发器。
  7. 从模块列表中选择 Webhook
  8. 将其拖放到工作区中。
  9. 将输入端连接到触发器的输出端。
  10. 在 Webhook 模块中,填写以下字段:
    • 网址:依次输入 ENDPOINT_网址API_KEYSECRET
    • HTTP 请求方法:选择 POST
  11. 点击保存

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_nameevent.ioc.feed_name 直接从 column16 映射。用于 CSV 解析路径。
column18 event.idm.entity.metadata.threat.severity_detailsevent.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.startevent.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.startevent.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_timestampevent.idm.entity.metadata.interval.start_time 解析为 UNIX 时间戳。用于 CSV 解析路径。
uuid event.idm.entity.metadata.vendor_name 由解析器设置为“MISP”。由解析器设置为“MISP”。设置为很久之后的默认值(自公元纪年以来的 253402300799 秒)。由解析器根据 typelog_type 字段确定。可以是“FILE”“DOMAIN_NAME”“IP_ADDRESS”“MUTEX”“RESOURCE”或“USER”。可以从 Attribute.commentAttribute.value 派生,具体取决于 Attribute.type。如果类型与 IP 相关,则从 Attribute.valuecolumn5 解析。如果类型为“ip-dst|port”,则从 Attribute.valuecolumn5 解析。在 CSV 解析中派生自 column3,在 JSON 解析中派生自 Attribute.category。从 CSV 解析中的 column21column14 派生而来。派生自 column8first_seen。派生自 last_seen。使用 Grok 模式从 description 派生而来。派生自 column16 或设为“MISP”。派生自 column18。如果类型与 IP 相关,则从 Attribute.valuecolumn5 解析。如果类型为“ip-dst|port”,则从 Attribute.valuecolumn5 解析。如果类型为“网域”,则派生自 Attribute.valuecolumn5。派生自 confidence 字段,该字段从 description 字段中提取。值可以是“HIGH_CONFIDENCE”“MEDIUM_CONFIDENCE”“LOW_CONFIDENCE”或“UNKNOWN_CONFIDENCE”。直接从 confidence 字段映射,该字段从 description 字段中提取。直接从 threat_level 字段映射而来,该字段派生自 CSV 解析路径中的 column18。直接从 feed_name 字段映射而来,该字段派生自 CSV 解析路径中的 column16。从 CSV 解析中的 column21column14 派生而来。在 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

  • 新创建的解析器。