kaaaanoooo/local-ioc-db
GitHub: kaaaanoooo/local-ioc-db
基于 SQLite 的轻量级本地 IOC 数据库工具,通过拉取公开威胁情报源并提供命令行查询与批量比对接口,让安全人员在无需复杂基础设施的情况下快速检索和碰撞失陷指标。
Stars: 1 | Forks: 0
# local-ioc-db
一个轻量级的本地 IOC 数据库,适用于实验室、DFIR 工作流和小型防御项目。
`local-ioc-db` 下载公开的 IOC 数据源,规范化 IP/域名/URL/哈希值,将其存储在 SQLite 中,并允许您针对本地数据库检查混合词表。
它刻意保持简单:无需 MISP,无需 OpenCTI,无需 Docker 栈,无需 API 密钥。
## 功能
- 无需 API 密钥即可下载公开数据源。
- 将 IOC 存储在本地 SQLite 数据库中。
- 规范化常见的 IOC 格式:
- IP 地址
- 域名
- URL
- MD5/SHA1/SHA256 哈希
- 去混淆值,例如 `evil[.]com` 或 `hxxp[:]//evil[.]com/payload.exe`
- 跟踪每个 IOC 的来源。
- 跟踪摄取运行情况。
- 使用 `--prune` 软删除过期的 IOC。
- 在明确请求时执行硬删除。
- 针对本地数据库检查混合词表。
- 导出 IP/域名/URL/哈希列表。
- 为自定义 IOC 提供手动 CRUD 操作。
## 默认数据源
当前的默认数据源包括:
| 来源 | IOC 类型 |
|---|---|
| URLhaus 近期 CSV | URL 和提取的域名 |
| Feodo Tracker IP 封禁列表 | IP |
| SSLBL 证书黑名单 | SHA1 证书指纹 |
| StevenBlack hosts | 域名 |
| Emerging Threats 被攻陷的 IP | IP |
在重新分发或商业使用之前,请查看各提供商的许可/使用条款。
## 安装
### 选项 A:可编辑安装
```
python3 -m venv venv
source venv/bin/activate
pip install -e .
```
然后使用:
```
iocdb --help
```
### 选项 B:作为模块运行
```
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
python -m local_ioc_db --help
```
## 快速入门
初始化数据库:
```
iocdb init
```
下载并摄取默认数据源:
```
iocdb update
```
显示统计信息:
```
iocdb stats
```
搜索单个 IOC:
```
iocdb search 8.8.8.8
iocdb search example.com
iocdb search 'hxxp[:]//evil[.]example/payload.exe'
```
检查混合词表:
```
iocdb check-file examples/wordlist.txt
```
将匹配结果保存到 CSV:
```
iocdb check-file examples/wordlist.txt -o results.csv
```
## CRUD 操作
添加手动 IOC:
```
iocdb add evil.example --confidence 90 --tags "manual,lab,suspicious"
```
停用 IOC 而不实际删除它:
```
iocdb delete evil.example
```
硬删除 IOC:
```
iocdb delete evil.example --hard
```
同时搜索非活动的 IOC:
```
iocdb search evil.example --include-inactive
```
## 更新与清理
常规更新:
```
iocdb update
```
更新并停用不再出现在其原始来源中的 IOC:
```
iocdb update --prune
```
物理删除没有活动来源且非手动添加的过期 IOC:
```
iocdb update --prune --hard-delete
```
实验室推荐的默认操作:
```
iocdb update --prune
```
软删除更安全,因为它保留了历史上下文。
## 导出列表
导出活动 IP:
```
iocdb export --type ip -o malicious_ips.txt
```
导出活动域名:
```
iocdb export --type domain -o malicious_domains.txt
```
导出活动 URL:
```
iocdb export --type url -o malicious_urls.txt
```
导出 SHA1 哈希:
```
iocdb export --type hash_sha1 -o malicious_sha1.txt
```
导出所有活动 IOC:
```
iocdb export -o all_iocs.txt
```
## 数据库位置
默认情况下,数据库创建为:
```
iocs.db
```
使用自定义路径:
```
iocdb --db /opt/iocdb/iocs.db update --prune
```
## Cron 示例
每天 08:00 更新:
```
0 8 * * * cd /opt/local-ioc-db && /opt/local-ioc-db/venv/bin/iocdb update --prune >> /opt/local-ioc-db/ioc_update.log 2>&1
```
## Zeek 工作流示例
从 Zeek 的 `dns.log` 中提取 DNS 查询:
```
cat dns.log | zeek-cut query | sort -u > domains.txt
```
针对本地 IOC 数据库进行检查:
```
iocdb check-file domains.txt -o zeek_dns_matches.csv
```
从 `conn.log` 中提取 IP:
```
cat conn.log | zeek-cut id.orig_h id.resp_h | tr '\t' '\n' | sort -u > ips.txt
```
对它们进行检查:
```
iocdb check-file ips.txt -o zeek_ip_matches.csv
```
## SQLite 检查
```
sqlite3 iocs.db
```
有用的查询:
```
.tables
.schema iocs
.schema ioc_sources
SELECT type, active, COUNT(*) FROM iocs GROUP BY type, active;
SELECT source, active, COUNT(*) FROM ioc_sources GROUP BY source, active;
SELECT * FROM ingest_runs ORDER BY id DESC LIMIT 5;
.quit
```
## 开发
安装开发依赖:
```
pip install -r requirements-dev.txt
pip install -e .
```
运行测试:
```
pytest -q
```
运行 lint:
```
ruff check .
```
## 项目结构
```
local-ioc-db/
├── local_ioc_db/
│ ├── __init__.py
│ ├── __main__.py
│ └── iocdb.py
├── examples/
│ └── wordlist.txt
├── docs/
│ ├── DATABASE_SCHEMA.md
│ └── FEEDS.md
├── tests/
│ └── test_normalize.py
├── .github/workflows/
│ └── python.yml
├── .gitignore
├── LICENSE
├── Makefile
├── pyproject.toml
├── requirements.txt
├── requirements-dev.txt
└── README.md
```
## 安全与局限性
此工具用于防御性分析、实验室工作和本地 CTI 丰富。
重要局限性:
- 数据源质量因提供商而异。
- 匹配并不自动意味着已被攻陷。
- 许多公开的封锁列表包含嘈杂或低上下文的指标。
- 旧的 IOC 可能不再具有恶意。
- 在分类排查时,请参考置信度、标签、来源和时间戳。
## 许可证
MIT。
标签:ESC4, Feodo Tracker, IOC, IP地址, IP 地址批量处理, MD5, OSINT, Python, SHA1, SHA256, SQLite, StevenBlack, URL, URLhaus, 去Defang, 域名, 妥协指标, 威胁情报, 库, 应急响应, 开发者工具, 情报聚合, 数据泄露, 文件哈希, 文档结构分析, 无后门, 本地数据库, 网络信息收集, 网络安全, 逆向工具, 隐私保护, 黑白名单