srini-cybersec/threathunter

GitHub: srini-cybersec/threathunter

一款轻量级命令行 OSINT 威胁情报富化框架,支持对 IP、域名、URL 和文件哈希等多类 IOC 进行多源查询、评分聚合和报告生成。

Stars: 0 | Forks: 0

# ThreatHunter ![CI](https://img.shields.io/badge/CI-passing-brightgreen) ![Python](https://img.shields.io/badge/python-3.11%2B-blue) ![License](https://img.shields.io/badge/license-MIT-green) ![Docker](https://img.shields.io/badge/docker-ready-blue) ThreatHunter 是一个命令行 OSINT 富化工具,它针对给定的妥协指标 (IOC) 查询多个威胁情报 API,并生成带有评分且具有可操作性的报告。它支持 IPv4/IPv6 地址、域名、URL 和文件哈希 (MD5, SHA-1, SHA-256),并且无需 API 密钥即可对指标进行分类和结构分析——仅在获取实时威胁情报时才需要密钥。 ## 功能 - **多源 IOC 富化** — 根据IOC类型查询 VirusTotal, AbuseIPDB, Shodan, AlienVault OTX, URLScan.io 和 ThreatFox。 - **自动 IOC 类型分类** — 在无外部依赖的情况下检测 IPv4, IPv6, 域名, URL, MD5, SHA-1 和 SHA-256。 - **威胁评分算法 (0-100)** — VirusTotal 最多贡献 60 分,AbuseIPDB 最多贡献 30 分,OTX 最多贡献 20 分,最终得分映射为 `MALICIOUS / SUSPICIOUS / LOW_RISK / CLEAN` 结论。 - **带有 TTL 的基于磁盘的响应缓存** — API 响应以 MD5 哈希为键持久化为 JSON 文件;可配置的 TTL 避免了冗余的 API 调用。 - **线程安全的速率限制** — 令牌桶限制器在所有来源中强制执行可配置的每秒请求数上限。 - **从 IOC 文件进行批量富化** — 从纯文本文件处理数千个指标,支持注释和空行。 - **JSON, CSV 和 HTML 报告生成** — 每次运行都会生成机器可读和人类可读的输出。 - **丰富的终端输出** — 使用 Rich 库渲染带有颜色编码的结论表、进度指示器和关联摘要。 - **Docker 容器化** — 支持通过环境变量注入,单条命令完成 Docker 构建和运行。 ## 架构 ``` graph LR A[CLI Input] --> B[IOC Classifier] B --> C[IOCAnalyzer] C --> D[VirusTotal API] C --> E[AbuseIPDB API] C --> F[Shodan API] C --> G[AlienVault OTX] C --> H[URLScan.io] C --> I[ThreatFox] C --> J[ResponseCache] D & E & F & G & H & I --> K[ThreatCorrelator] K --> L[Reporter] L --> M[JSON/CSV/HTML] ``` 查看 [`docs/architecture.md`](docs/architecture.md) 获取完整的 ASCII 图表、组件描述、数据流、缓存策略、速率限制细节以及评分算法的分解说明。 ## 安装 ### 标准安装 ``` # 1. 克隆仓库 git clone https://github.com/your-org/threathunter.git cd threathunter # 2. 安装依赖 pip install -r requirements.txt # 3. 配置 API 密钥 cp .env.example .env # 编辑 .env 并填写您要使用的源的密钥 ``` ### Docker ``` docker build -t threathunter . docker run --env-file .env threathunter enrich 8.8.8.8 ``` ## API 密钥 所有密钥均为可选。未提供密钥的来源将被静默跳过。 | 来源 | 环境变量 | 免费套餐 | 更多信息 | |--------|----------------------|-----------|-----------| | VirusTotal | `VT_API_KEY` | 免费 (500 次/天) | virustotal.com | | AbuseIPDB | `ABUSEIPDB_API_KEY` | 免费 (1,000 次/天) | abuseipdb.com | | Shodan | `SHODAN_API_KEY` | 付费 (~$49/月) | shodan.io | | AlienVault OTX | `OTX_API_KEY` | 免费 (无限次) | otx.alienvault.com | | URLScan.io | `URLSCAN_API_KEY` | 免费 (100 次扫描/天) | urlscan.io | | ThreatFox | `THREATFOX_API_KEY` | 免费 | threatfox.abuse.ch | ## 使用 ``` # 无需 API 调用即可分类 IOC 类型 python -m src.main classify 8.8.8.8 # 丰富单个 IP python -m src.main enrich 8.8.8.8 # 丰富多个 IOC python -m src.main enrich 8.8.8.8 malware.com d41d8cd98f00b204e9800998ecf8427e # 丰富所有报告格式 python -m src.main enrich 8.8.8.8 --output all # 从文件批量丰富 python -m src.main bulk --file iocs.txt # 清除缓存 python -m src.main cache clear # Docker docker run --env-file .env threathunter enrich 8.8.8.8 ``` ### `enrich` 命令选项 | 标志 | 默认值 | 描述 | |------|---------|-------------| | `--output`, `-o` | `json` | 报告格式:`json`, `csv`, `html` 或 `all` | | `--out-dir` | `./reports` | 报告文件的保存目录 | | `--no-cache` | 关闭 | 绕过磁盘缓存并始终获取最新结果 | ### `bulk` 命令选项 | 标志 | 默认值 | 描述 | |------|---------|-------------| | `--file`, `-f` | 必填 | IOC 列表文件的路径 | | `--out-dir` | `./reports` | 报告文件的保存目录 | | `--no-cache` | 关闭 | 绕过磁盘缓存 | ## IOC 文件格式 纯文本格式,每行一个 IOC。以 `#` 开头的行和空行将被忽略。在保留插入顺序的同时,会移除重复的条目。 ``` # ThreatHunter IOC 列表 # 生成日期:2026-05-04 # 已知恶意 IP 1.2.3.4 5.6.7.8 # 可疑域名 malware-c2.example.com phishing-kit.example.net # 文件哈希 (MD5) d41d8cd98f00b204e9800998ecf8427e # SHA-256 e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 ``` ## 报告输出 ### JSON 包含每个 IOC 的完整富化数据 (包括 `sources` 中的原始 API 响应) 以及关联摘要。 ``` { "summary": { "total": 3, "by_verdict": {"MALICIOUS": 1, "CLEAN": 2}, "by_type": {"ipv4": 2, "domain": 1}, "avg_score": 26.67, "top_threats": [...] }, "iocs": [ { "ioc": "1.2.3.4", "type": "ipv4", "verdict": "MALICIOUS", "threat_score": 80, "sources": { "virustotal": {...}, "abuseipdb": {...} } } ] } ``` ### CSV 具有 `ioc, type, verdict, threat_score` 列的扁平文件。适合导入到 SIEM 平台、电子表格或进行进一步脚本处理。 ### HTML 一个独立的暗色主题页面,包含汇总统计信息 (IOC 总数、恶意数量、可疑数量、平均分数) 以及带颜色编码的结论表。无外部 CSS 或 JavaScript 依赖——适合离线查看或作为电子邮件附件。 ## 开发 ### 运行测试 ``` # 所有测试及覆盖率报告 pytest tests/ -v --cov=src --cov-report=term-missing # 仅单元测试 pytest tests/test_core.py -v # 仅集成测试 pytest tests/test_integration.py -v ``` ### 代码检查和格式化 ``` # 使用 Black 格式化 black src/ tests/ examples/ # 使用 Ruff 进行 Lint ruff check src/ tests/ examples/ # 使用 mypy 进行类型检查 mypy src/ ``` ### 安全扫描 ``` # 常见安全问题的静态分析 bandit -r src/ # 依赖漏洞扫描 safety check ``` ### 运行演示 (无需 API 密钥) ``` python examples/demo.py ``` ## 安全考量 - **API 密钥**完全从环境变量中加载。切勿将包含敏感信息的 `.env` 文件提交到版本控制。此仓库中的 `.gitignore` 默认排除了 `.env`。 - **缓存文件**包含原始 API 响应,其中可能包含敏感的威胁情报数据。默认缓存位置 (`/tmp/threathunter_cache`) 在大多数系统上是临时的,但运维人员应确保在共享环境中该位置不允许可被全局读取。 - **IOC 文件解析**在评估前会去除每行的首尾空格;不会对用户提供的输入执行 shell 解释或 `eval` 操作。 - **HTTP 请求**使用带有可配置超时 (`THREATHUNTER_TIMEOUT`,默认为 30 秒) 的 `requests.Session`,以防止无限期阻塞。 - **速率限制**在每次出站请求之前强制执行,以防止因违反速率限制而导致 API 密钥被意外吊销。 - **无硬编码凭证** — 代码库通过了 `bandit` 高严重级别的安全扫描,且未发现任何与机密泄露相关的结果。 ## 贡献 1. 派生 (Fork) 该仓库并创建一个功能分支: `git checkout -b feature/my-improvement` 2. 进行更改,添加或更新测试,并确保所有测试通过: `pytest tests/ -v` 3. 运行代码检查器和格式化工具: `ruff check src/ tests/ && black src/ tests/` 4. 开启一个带有清晰更改描述及其背后动机的 Pull Request。 5. 所有 Pull Request 必须维持或提高测试覆盖率,并通过 CI。 请遵循现有的代码风格 (类型注解、公共方法的 docstring、禁止使用裸 `except` 子句)。 ## 许可证 MIT License — 查看 [LICENSE](LICENSE) 了解全文。 Copyright (c) 2026 ThreatHunter Contributors
标签:AbuseIPDB, Ask搜索, CSV报告, Cyber Threat Intelligence, Docker, ESC4, FTP漏洞扫描, HTML报告, HTTP/HTTPS抓包, IOC丰富, IP 地址批量处理, JSON报告, OSINT, Python, SOC工具, ThreatFox, ThreatHunter, Typosquatting检测, VirusTotal, XSS, 域名信誉, 威胁分析, 威胁情报, 威胁评分, 安全报告生成, 安全编排, 安全规则引擎, 安全防御评估, 库, 应急响应, 开发者工具, 态势感知, 恶意IP检测, 数字取证与事件响应, 文件哈希分析, 无后门, 沙箱集成, 漏洞发现, 漏洞情报, 端点安全, 网络信息收集, 网络威胁, 网络安全, 自动化侦查工具, 补丁管理, 请求拦截, 逆向工具, 隐私保护, 黑名单检查