fsola99/ioc-hunter
GitHub: fsola99/ioc-hunter
一款威胁情报指标分类筛选控制台,为文件哈希、IP、域名和 URL 提供统一格式的标准化报告,并结合 MITRE ATT&CK 缓解措施映射辅助安全研判。
Stars: 1 | Forks: 0
# IoC Hunter
针对最终真正进入工单的四类威胁情报进行分类筛选:**文件哈希、IP
地址、域名和 URL**。粘贴一个指标(无论是否经过防武器化处理),无论它属于什么类型,都能获得统一格式的报告。
`FastAPI` · `React` · `TypeScript` · `Docker` · `VirusTotal` · `AbuseIPDB` · `MITRE ATT&CK` · 221 个测试

## 功能介绍
- **适用于所有指标类型的统一报告格式。** 哈希、IP、域名和 URL 都会标准化为相同的判定结果、引擎统计信息、信誉度和时间戳,并在下方附带特定类型的详细信息块。无论你接手的是什么类型的指标,分类筛选的阅读体验都是一致的。
- **读取防武器化指标。** `evil[.]com`、`hxxps://`、`192.168.1[.]1` 和 `evil(dot)com` 会在查询前被还原,因此你可以直接从报告或邮件中粘贴这些指标。
- **将沙箱技术与 ATT&CK 缓解措施进行映射。** 在沙箱引爆过程中观察到的技术会与 MITRE 官方的“技术-缓解措施”映射数据进行匹配,因此报告不仅会告诉你*发生*了什么,还会建议你应该*做*什么。
- **离线浏览 ATT&CK 矩阵。** 完整的 Enterprise 矩阵随应用一同发布——包含 15 个战术(tactics)、222 个技术和 475 个子技术——支持按平台过滤和按名称搜索,且全程无需网络请求。在分类筛选时观察到的某项技术,只需点击一下即可跳转到它在矩阵中的位置。
- **指标间关联透视。** 联系过的域名和被动 DNS 解析记录只需点击一下,即可作为下一个查询目标。
- **数据导出。** 支持将本次会话的查询记录或整个 ATT&CK 目录导出为 CSV 格式。
## 频率限制,以及 UI 为什么采用这种设计
VirusTotal 免费层级的限制为**每分钟 4 次请求,每天 500 次**。这一配额限制直接影响了整体设计:
| 操作 | 上游请求数 |
|---|---|
| 查询任意指标 | 1 |
| 加载沙箱行为和 ATT&CK | 2,仅在您打开该标签页时触发 |
| 加载关联指标 | 1,仅在您打开该标签页时触发 |
| 在缓存周期内重复查询 | 0 |
初次查询始终固定消耗一次请求。较重的数据面板采用按需加载,并且响应数据会在进程内进行缓存(默认为 15 分钟),因此从会话历史中重新打开某个指标是零消耗的。当配额耗尽时,API 会返回 429 状态码,界面也会明确提示这一点。
## 运行方式
你需要一个免费的 [VirusTotal API key](https://www.virustotal.com/gui/my-apikey)。可选的 [AbuseIPDB key](https://www.abuseipdb.com/account/api) 可以在 IP 报告中增加历史记录信息。
```
cp .env.example .env
# 编辑 .env 并设置 VT_API_KEY
```
### Docker
```
docker compose up --build
```
然后打开 。
### 本地运行
后端:
```
cd backend
python -m venv .venv && source .venv/bin/activate
pip install -e ".[dev]"
uvicorn app.main:app --reload
```
前端,请在第二个终端中运行:
```
cd frontend
npm install
npm run dev
```
开发服务器会将 `/api` 代理到后端,因此请打开 。
如果想要仅通过后端来提供所有服务,请先构建前端(`npm run build`);随后 API 即可在根目录提供 `frontend/dist` 的服务。
## API
交互式文档位于 `/docs`。指标是作为查询参数传递的,因此无需对 URL 进行转义。
| Endpoint | 用途 |
|---|---|
| `GET /api/classify?indicator=` | 服务如何解析字符串,不会查询任何 provider |
| `GET /api/lookup?indicator=` | 获取标准化报告 |
| `GET /api/behaviour?indicator=` | 获取文件哈希的沙箱活动和 ATT&CK 覆盖情况 |
| `GET /api/relations?indicator=` | 获取关联的指标 |
| `GET /api/history` | 获取本次会话的查询记录 |
| `GET /api/history/export.csv` | 将本次会话的查询记录导出为 CSV |
| `DELETE /api/history` | 清除本次会话的查询记录 |
| `GET /api/health` | 获取服务版本和 provider 可用性 |
| `GET /api/attack/matrix?q=&platform=` | 获取 ATT&CK 矩阵,支持可选的过滤条件 |
| `GET /api/attack/techniques/{id}` | 获取特定技术及其子技术和父级技术 |
| `GET /api/attack/export.csv` | 将整个 ATT&CK 目录导出为 CSV |
历史记录基于会话 cookie 进行标识,因此不同浏览器的查询记录是相互独立的。ATT&CK 相关的 endpoint 仅读取内置的目录数据,绝不会向外部的 provider 发起调用,因此它们不会消耗任何配额。
## ATT&CK 矩阵

矩阵视图是 Enterprise ATT&CK 的可浏览副本,由一个随应用一同发布的 0.9 MB 文件提供支持。战术(Tactics)严格遵循 MITRE 的官方顺序排列;每个单元格都会标记 ATT&CK 是否记录了针对该技术的缓解措施,而这通常也是防御者在查看矩阵时最关心的问题。打开单元格即可查看描述、平台、缓解措施和子技术。
在你对文件进行分类筛选并加载其沙箱报告后,该样本被观察到的所有技术在矩阵中都会被高亮显示,并且报告中的技术 ID 会直接链接到矩阵的对应位置。
`GET /api/attack/export.csv` 会返回整个目录,每个技术或子技术占一行——包含 ID、名称、战术、平台、缓解措施、描述和链接。
## 测试
```
cd backend && pytest
```
共 221 个测试。上游响应数据通过 `respx` 进行了 mock 处理,因此整个测试套件可以离线运行。
## 刷新 ATT&CK 数据
内置的目录是根据 MITRE 官方的 Enterprise ATT&CK STIX bundle 构建的。可以在 ATT&CK 发布新版本后重新生成它:
```
python tools/refresh_attack_data.py # current release
python tools/refresh_attack_data.py --version v18.0 # pin a release
```
该工具会解析技术与缓解措施之间的映射关系,按照矩阵的呈现方式对战术进行排序,并将 ATT&CK 的 markdown 和内联的 `(Citation: …)` 标记简化为纯文本。
## 目录结构
```
backend/
app/
ioc.py indicator recognition and refanging
models.py the normalised report shape
data/attack.json the bundled ATT&CK catalogue
providers/ VirusTotal and AbuseIPDB clients
services/ caching, normalisation, ATT&CK catalogue, export
routers/ HTTP surface
tests/
frontend/
src/components/ verdict banner, engine meter, report panels, matrix
tools/
refresh_attack_data.py
```
## 项目背景
IoC Hunter 最初是作为一次威胁情报面试的居家作业项目诞生的:它是一个单文件的 FastAPI 脚本,用于在 VirusTotal 上查询文件哈希并将结果导出为 CSV。当前版本保留了这一核心理念,并重构了其他所有部分——支持多指标查询、标准化的报告格式、围绕免费层级频率限制设计的按需加载机制、基于 React 和 TypeScript 的前端,以及完整的测试套件。
矩阵视图融合了我的一个早期项目 `ttps-magician`,那个项目为了制作电子表格,会每次通过一个请求去抓取 attack.mitre.org 上的每一个技术页面。现在这个版本改为读取官方的 STIX bundle:只需下载一次,而不是抓取大约 1,200 个网页;MITRE 修改页面标记也不会导致程序出错,而且同样只需点击一下即可导出表格。
## 鸣谢
- [VirusTotal](https://www.virustotal.com/) 和 [AbuseIPDB](https://www.abuseipdb.com/) 提供的 API。
- [MITRE ATT&CK](https://attack.mitre.org/) 提供的技术和缓解措施数据。
标签:AV绕过, Docker, FastAPI, React, Syscalls, TypeScript, 威胁情报, 安全插件, 安全运营, 安全防御评估, 开发者工具, 扫描框架, 请求拦截, 逆向工具