收集 MISP IOC 日志
支持的语言:
Google SecOps
SIEM
本指南概述了使用 Bindplane 将 MISP(恶意软件信息共享平台)IOC(入侵指标)日志注入到 Google Security Operations 的步骤。解析器从以 JSON 或 CSV 格式设置的 MISP 数据中提取 IOC。它会解析输入内容,将字段映射到统一数据模型 (UDM),处理各种 IOC 类型(例如 IP、网域和文件哈希),并使用置信度和严重程度等威胁情报上下文来丰富数据。解析器还会针对不同的数据格式执行特定逻辑,并处理缺少字段或字段不受支持的情况。
准备工作
请确保满足以下前提条件:
- Google SecOps 实例
- 搭载
systemd
的 Linux 主机 - 如果在代理后运行,防火墙端口处于开放状态
- 对 MISP 服务器的特权访问权限
获取 MISP API 密钥
- 以管理员身份登录 MISP 网页界面。
- 依次前往管理 > 列出授权密钥。
- 点击添加身份验证密钥。
- 提供以下密钥配置:
- 用户:选择与密钥关联的用户账号。
- 允许使用的 IP 地址:您可以选择为密钥指定允许使用的 IP 地址。
- 复制密钥并将其保存在安全的位置。
- 点击我已记下密钥。
配置 MISP 日志导出
- 使用 SSH 登录您的 MISP 实例。
使用以下命令安装 PyMISP:
pip3 install pymisp
使用以下内容修改
get_csv.py
导出脚本:#!/usr/bin/env python3 # -*- coding: utf-8 -*- import argparse from pymisp import ExpandedPyMISP from keys import misp_url, misp_key, misp_verifycert if __name__ == '__main__': parser = argparse.ArgumentParser(description='Get MISP data in a CSV format.') parser.add_argument("--controller", default='attributes', help="Attribute to use for the search (events, objects, attributes)") parser.add_argument("-e", "--event_id", help="Event ID to fetch. Without it, it will fetch the whole database.") parser.add_argument("-a", "--attribute", nargs='+', help="Attribute column names") parser.add_argument("-o", "--object_attribute", nargs='+', help="Object attribute column names") parser.add_argument("-t", "--misp_types", nargs='+', help="MISP types to fetch (ip-src, hostname, ...)") parser.add_argument("-c", "--context", action='store_true', help="Add event level context (tags...)") parser.add_argument("-f", "--outfile", help="Output file to write the CSV.") parser.add_argument("-l", "--last", required=True, help="can be defined in days, hours, minutes (for example 5d or 12h or 30m).") args = parser.parse_args() pymisp = ExpandedPyMISP(misp_url, misp_key, misp_verifycert, debug=True) attr = [] if args.attribute: attr += args.attribute if args.object_attribute: attr += args.object_attribute if not attr: attr = None print(args.context) response = pymisp.search(return_format='csv', controller=args.controller, eventid=args.event_id, requested_attributes=attr, publish_timestamp=args.last, type_attribute=args.misp_types, include_context=args.context) if args.outfile: with open(args.outfile, 'w') as f: f.write(response) else: print(response)
修改
keys.py
文件,使其包含您的 MISP API 凭据和网址,如下所示:misp_url = 'https://<MISP_URL>' misp_key = '<MISP_API_KEY>' misp_verifycert = False misp_client_cert = ''
- 将
<MISP_URL>
替换为您的 MISP IP 或主机名。 - 将
<MISP_API_KEY
替换为之前生成的实际 API 密钥。
- 将
使用
crontab -e
命令打开 crontab,然后输入以下内容:0 20 * * * python3 /opt/misp/<YOUR_EXPORT_SCRIPT_PATH> -f /opt/misp/ioc_export/url.log -t "url" -l 1d -c 0 20 * * * python3 /opt/misp/<YOUR_EXPORT_SCRIPT_PATH> -f /opt/misp/ioc_export/ip-dst.log -t "ip-dst" -l 1d -c 0 20 * * * python3 /opt/misp/<YOUR_EXPORT_SCRIPT_PATH> -f /opt/misp/ioc_export/ip-src.log -t "ip-src" -l 1d -c 0 20 * * * python3 /opt/misp/<YOUR_EXPORT_SCRIPT_PATH> -f /opt/misp/ioc_export/domain.log -t "domain" -l 1d -c 0 20 * * * python3 /opt/misp/<YOUR_EXPORT_SCRIPT_PATH> -f /opt/misp/ioc_export/sha256.log -t "sha256" -l 1d -c 0 20 * * * python3 /opt/misp/<YOUR_EXPORT_SCRIPT_PATH> -f /opt/misp/ioc_export/file.log -t "filename" -l 1d -c 0 20 * * * python3 /opt/misp/<YOUR_EXPORT_SCRIPT_PATH> -f /opt/misp/ioc_export/registry.log -t "registry" -l 1d -c 0 20 * * * python3 /opt/misp/<YOUR_EXPORT_SCRIPT_PATH> -f /opt/misp/ioc_export/mutex.log -t "mutex" -l 1d -c 0 20 * * * python3 /opt/misp/<YOUR_EXPORT_SCRIPT_PATH> -f /opt/misp/ioc_export/threat-actor.log -t "threat-actor" -l 1d -c
- 根据实际的导出脚本位置更新
<YOUR_EXPORT_SCRIPT_PATH>
。
- 根据实际的导出脚本位置更新
获取 Google SecOps 注入身份验证文件
- 登录 Google SecOps 控制台。
- 依次前往 SIEM 设置 > 收集代理。
- 下载注入身份验证文件。将该文件安全地保存在将要安装 Bindplane 的系统上。
获取 Google SecOps 客户 ID
- 登录 Google SecOps 控制台。
- 依次前往 SIEM 设置 > 配置文件。
- 复制并保存组织详细信息部分中的客户 ID。
在 MISP 服务器上安装 Bindplane 代理
Linux 安装
- 打开具有 root 或 sudo 权限的终端。
运行以下命令:
sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
其他安装资源
如需了解其他安装选项,请参阅安装指南。
配置 Bindplane 代理以注入 MISP 日志文件并将其发送到 Google SecOps
- 访问配置文件:
- 找到
config.yaml
文件。通常,它位于 Linux 上的/etc/bindplane-agent/
目录中。 - 使用文本编辑器(例如
nano
、vi
或记事本)打开该文件。
- 找到
按如下方式修改
config.yaml
文件:receivers: filelog: file_path: /opt/misp/ioc_export/*.log log_type: 'file' exporters: chronicle/chronicle_w_labels: compression: gzip # Adjust the path to the credentials file you downloaded in Step 1 creds_file_path: '/path/to/ingestion-authentication-file.json' # Replace with your actual customer ID from Step 2 customer_id: <customer_id> endpoint: malachiteingestion-pa.googleapis.com # Add optional ingestion labels for better organization ingestion_labels: log_type: 'MISP_IOC' raw_log_field: body service: pipelines: logs/source0__chronicle_w_labels-0: receivers: - filelog exporters: - chronicle/chronicle_w_labels
- 根据基础架构的需要替换端口和 IP 地址。
- 将
<customer_id>
替换为实际的客户 ID。 - 将
/path/to/ingestion-authentication-file.json
更新为获取 Google SecOps 提取身份验证文件部分中保存身份验证文件的路径。
重启 Bindplane 代理以应用更改
如需在 Linux 中重启 Bindplane 代理,请运行以下命令:
sudo systemctl restart bindplane-agent
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 映射,并添加为检测字段,键为“属性时间戳”。用于 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 。- event.idm.entity.entity.user.email_addresses (如果 type 为“威胁正文”)。- 如果 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 。- event.idm.entity.entity.user.email_addresses (如果 type 为“威胁正文”)。- 如果 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 映射,并添加为键为“组织名称”的检测字段。用于 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.type 从 Attribute.comment 或 Attribute.value 派生。如果类型与 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 字段复制。 |
需要更多帮助?从社区成员和 Google SecOps 专业人士那里获得解答。