Divolika/ioc-extractor

GitHub: Divolika/ioc-extractor

从非结构化威胁情报文本中自动提取、去重、标准化各类妥协指标(IOC)并输出为结构化格式的离线命令行工具与 Python 库。

Stars: 0 | Forks: 0

# ioc-extractor 从非结构化文本(威胁报告、事件记录、博客文章、电子邮件)中提取妥协指标 (IOC),并将其导出为 JSON、CSV 或 STIX 2.1 bundle。 它完全在离线环境下运行(无网络调用),能够处理像 `hxxp://evil[.]com` 这样的**防御性修改** (defanged) 指标,并且在匹配时保持谨慎,以免分析师被误报淹没。 ## 为什么需要它 分析师经常手动从 PDF 和报告中复制指标。该工具一次性完成这些繁琐的工作,并返回干净、去重、标准化的输出,可以直接导入 TIP 或 blocklist 中。 ## 提取的指标类型 | 类型 | 备注 | |-----------|--------------------------------------------------------------| | IPv4/IPv6 | 使用 `ipaddress` 进行验证,因此 `999.1.1.1` 会被拒绝 | | URLs | 进行 Refang 处理并去除末尾标点符号 | | Domains | 经过 TLD 检查;排除像 `payload.exe` 这样的文件名 | | Emails | 电子邮件已包含的域名不会被重复计算 | | Hashes | MD5 / SHA-1 / SHA-256 | | CVEs | 标准化为大写 (`CVE-2021-44228`) | | Files | 常见的恶意软件/文档扩展名 | ## 安装 ``` git clone https://github.com/Divolika/ioc-extractor.git cd ioc-extractor pip install -e . ``` 纯标准库 —— 没有第三方运行时依赖。仅在运行测试时需要 `pytest`。 ## 用法 ``` # 从文件输出 JSON ioc-extractor samples/threat_report.txt # CSV 到文件 ioc-extractor samples/threat_report.txt -f csv -o iocs.csv # STIX 2.1 bundle ioc-extractor samples/threat_report.txt -f stix -o iocs.json # 从 stdin cat report.txt | ioc-extractor -f json ``` 或者作为库使用: ``` from ioc_extractor import extract_iocs result = extract_iocs(open("report.txt").read()) print(result.ipv4, result.cves) print(result.as_dict()) ``` ## 示例 输入(摘自 `samples/threat_report.txt`): ``` The loader beaconed to hxxp://cdn-update[.]example-bad[.]com/gate.php and resolved secondary C2 at 185.220.101[.]45. Initial access leveraged CVE-2023-23397. ``` 输出: ``` { "indicators": { "ipv4": ["185.220.101.45"], "urls": ["http://cdn-update.example-bad.com/gate.php"], "cves": ["CVE-2023-23397"] } } ``` ## 运行测试 ``` pip install pytest pytest -q ``` ## 设计说明 - **Refang** 在匹配之前会还原常见的混淆(`[.]`、`hxxp`、`[at]` 等)。使用 `--no-refang` 禁用。 - **保守的域名匹配**:候选项必须以已知的 TLD 结尾,且不能已经是提取出的 URL 的主机名或电子邮件域名。 - **STIX 输出** 会为网络/文件 IOC 生成 `indicator` 对象,并为 CVE 生成 `vulnerability` 对象,这也是大多数平台所期望的格式。
标签:安全规则引擎, 逆向工具