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` 对象,这也是大多数平台所期望的格式。
标签:安全规则引擎, 逆向工具