harshadodderi/multi-ioc-exporter
GitHub: harshadodderi/multi-ioc-exporter
一个单文件浏览器工具,解决多源 IOC 快速获取、过滤与导出问题。
Stars: 1 | Forks: 0
# multi-source-ioc-exporter
一个单文件浏览器工具,用于从多个威胁情报提供者获取、过滤并导出妥协指标(IOCs)— **AlienVault OTX**(实时浏览器获取)和 **abuse.ch**(通过 PowerShell 的 MalwareBazaar、URLhaus、ThreatFox)— 无后端、无安装、无依赖。
通过免费层级 AI 工具构建
## 功能
一个 HTML 文件中包含两个工具,通过标签页访问:
- **AlienVault OTX 标签页** — 使用您的个人 API 密钥直接连接 OTX API,拉取已订阅脉冲中的 IOC 数据。所有处理均在浏览器中完成。结果显示在可调整大小、可过滤的表格中,并可导出为 CSV 或 JSON。
- **abuse.ch 标签页** — 生成即拿即用的 PowerShell 单行命令,使用您的 abuse.ch 认证密钥从 MalwareBazaar、URLhaus 和 ThreatFox 获取 IOC。复制命令、粘贴到 PowerShell 后,IOC 将自动导出为 CSV 和 TXT 文件。无 CORS 问题,无浏览器限制。
## 提供商与 IOC 数量
| 提供商 | 方法 | 每次获取 IOC 数量 | IOC 类型 |
|---|---|---|---|
| AlienVault OTX | 浏览器获取(CORS 扩展) | 最多 500 个脉冲(10 页 × 50) | IPv4、域名、URL、哈希、邮箱等 |
| MalwareBazaar | PowerShell(POST) | 最多 1,000 个样本 | SHA256 哈希 |
| URLhaus | PowerShell(GET) | 最近 3 天的所有 URL | 恶意 URL |
| ThreatFox | PowerShell(POST) | 最近 7 天的所有 IOC | IP、域名、URL、哈希 |
## 功能特性
### AlienVault OTX 标签页
- **按需脉冲分页** — 每次加载 50 个脉冲(OTX 单次请求上限)。提供 1–10 页的手动按钮;每页仅在点击时获取并缓存到会话中
- **可调整列宽** — 拖动任意列边界即可调整大小,支持 Excel 风格操作。表格支持水平滚动,确保数据永不隐藏
- **每行完整 IOC 详情** — 包含日期、IOC 值、类型、脉冲名称、作者、TLP 分类、标签以及可直接点击的源 OTX 脉冲链接
- **过滤控制** — 可按 IOC 类型(IPv4、域名、文件哈希、URL、邮箱等)、TLP 级别(WHITE / GREEN / AMBER / RED)或 IOC 值与脉冲名称进行全文搜索
- **颜色编码标签** — IOC 类型与 TLP 级别通过颜色直观区分
- **导出 CSV** — 包含日期、IOC 值、类型、脉冲、脉冲 URL、作者、TLP、标签、创建时间(完整时间戳)和描述
- **导出 JSON** — 每个 IOC 的完整结构化数据,包含脉冲 URL,适合脚本化或流水线处理
- **统计栏** — 显示总 IOC 数、脉冲数、不同 IOC 类型数和不同作者数
### abuse.ch 标签页(PowerShell 生成器)
- **一键生成命令** — 粘贴认证密钥,选择提供者,点击生成并复制命令
- **提供者选择** — 可同时获取全部三个(MalwareBazaar + URLhaus + ThreatFox)或单独选择
- **导出 CSV 与 TXT** — CSV 包含完整元数据(日期、IOC、类型、提供者、家族、标签);TXT 仅包含原始 IOC 值(每行一个,便于用于 SIEM 阻断列表)
- **带时间戳的输出** — 文件保存至 `.\abuse_ch_iocs\`,命名格式为 `iocs_YYYY-MM-DD_HH-mm-ss`
- **无 CORS 问题** — PowerShell 直接调用 API,绕过所有浏览器限制
- **离线运行** — HTML 页面仅作为命令生成器;认证密钥不会通过浏览器离开您的机器
## 使用方法
### AlienVault OTX 标签页
#### 1. 处理 CORS
由于该工具作为本地文件在浏览器中运行,OTX API 默认会因浏览器 CORS 策略而拒绝请求。您需要一个 CORS 解除扩展—设置大约需要 60 秒。
安装以下任一扩展:
| 浏览器 | 扩展 |
|---|---|
| Chrome | [CORS Unblock](https://chrome.google.com/webstore/detail/cors-unblock/lfhmikememgdcahcdlaciloancbhjino) |
| Chrome | [Allow CORS: Access-Control-Allow-Origin](https://chrome.google.com/webstore/detail/allow-cors-access-control/lhobafahddgcelffkeicbaginigeejlf) |
| Firefox | [CORS Everywhere](https://addons.mozilla.org/en-US/firefox/addon/cors-everywhere/) |
#### 2. 获取 OTX API 密钥
1. 访问 [https://otx.alienvault.com/api](https://otx.alienvault.com/api)
2. 从 **“Your API Key”** 部分复制您的个人 API 密钥
#### 3. 获取 IOC
1. 在 Chrome 或 Firefox 中打开 `multi-source-ioc-exporter.html`
2. 启用您的 CORS 扩展
3. 将 API 密钥粘贴到输入框
4. 点击 **获取 IOC** — 立即加载第 1 页(最多 50 个脉冲)
#### 4. 加载更多脉冲页
初始加载后,会出现 **脉冲页** 导航栏(按钮 1–10)。每个按钮代表来自 OTX 的下一批 50 个脉冲。点击任意页数以按需获取该批次。已加载的页面会高亮显示并从缓存中提供,避免重复调用 API。
#### 5. 过滤与搜索
使用表格上方的控件筛选结果:
- **全部类型** 下拉菜单 — 按 IOC 类型过滤(IPv4、DOMAIN、URL、FILEHASH-MD5 等)
- **全部 TLP** 下拉菜单 — 按 TLP 分类过滤
- **搜索框** — 实时搜索 IOC 值与脉冲名称
#### 6. 导出
- **导出 CSV** — 下载当前筛选结果为 `.csv` 文件
- **导出 JSON** — 下载当前筛选结果为结构化的 `.json` 文件
### abuse.ch 标签页(PowerShell)
#### 1. 获取认证密钥
1. 访问 [https://auth.abuse.ch/](https://auth.abuse.ch/)
2. 使用 Google、GitHub、X 或 LinkedIn 登录
3. 添加第二种登录方式,点击 **保存配置**
4. 在 **“Your API Keys”** 下生成认证密钥
5. 一个密钥可用于全部三个提供者(MalwareBazaar、URLhaus、ThreatFox)
#### 2. 生成命令
1. 打开 `multi-source-ioc-exporter.html` 并点击 **abuse.ch** 标签页
2. 粘贴您的认证密钥
3. 选择提供者(全部三个或单独选择)
4. 点击 **生成 PowerShell 命令**
#### 3. 运行
1. 点击 **复制命令**
2. 打开 PowerShell(Win+X → Windows PowerShell)
3. 右键粘贴并按回车
4. IOC 将导出至 `.\abuse_ch_iocs\` 目录,格式为 CSV 与 TXT
#### 快速单行命令(无需 HTML 工具)
```
$k="YOUR-AUTH-KEY";$h=@{"Auth-Key"=$k};$d=".\abuse_ch_iocs";md $d -Force|Out-Null;$t=Get-Date -F "yyyy-MM-dd_HH-mm-ss";Write-Host "`n=== MalwareBazaar ===" -Fore Cyan;$mb=(irm "https://mb-api.abuse.ch/api/v1/" -Method Post -Headers $h -Body "query=get_recent&selector=time&limit=1000").data;Write-Host " $($mb.Count) samples" -Fore Green;Write-Host "`n=== URLhaus ===" -Fore Cyan;$uh=(irm "https://urlhaus-api.abuse.ch/v1/urls/recent/" -Method Get -Headers $h).urls;Write-Host " $($uh.Count) URLs" -Fore Green;Write-Host "`n=== ThreatFox ===" -Fore Cyan;$tf=(irm "https://threatfox-api.abuse.ch/api/v1/" -Method Post -Headers $h -Body '{"query":"get_iocs","days":7}' -ContentType "application/json").data;Write-Host " $($tf.Count) IOCs" -Fore Green;$all=@();$mb|%{$all+=[pscustomobject]@{Date=$_.first_seen;IOC=$_.sha256_hash;Type="SHA256";Provider="MalwareBazaar";Family=$_.signature;Tags=($_.tags-join", ")}};$uh|%{$all+=[pscustomobject]@{Date=$_.date_added;IOC=$_.url;Type="URL";Provider="URLhaus";Family=$_.threat;Tags=($_.tags-join", ")}};$tf|%{$all+=[pscustomobject]@{Date=$_.first_seen;IOC=$_.ioc;Type=$_.ioc_type;Provider="ThreatFox";Family=$_.malware;Tags=($_.tags-join", ")}};$all|Export-Csv "$d\iocs_$t.csv" -NoType;$all|select -Expand IOC|Out-File "$d\iocs_$t.txt";Write-Host "`n Total: $($all.Count) IOCs exported to $d\" -Fore Cyan
```
将 `YOUR-AUTH-KEY` 替换为您的实际密钥。
## abuse.ch API 详情
| 提供商 | 方法 | 端点 | 认证 | 请求体 |
|---|---|---|---|---|
| MalwareBazaar | POST | `https://mb-api.abuse.ch/api/v1/` | Header: `Auth-Key` | `query=get_recent&selector=time&limit=1000` |
| URLhaus | GET | `https://urlhaus-api.abuse.ch/v1/urls/recent/` | Header: `Auth-Key` | 无 |
| ThreatFox | POST | `https://threatfox-api.abuse.ch/api/v1/` | Header: `Auth-Key` | JSON: `{"query":"get_iocs","days":7}` |
## IOC 字段
### AlienVault OTX
| 字段 | 描述 |
|---|---|
| Date | 指标创建日期(`YYYY-MM-DD`) |
| IOC Value | 原始指标(IP、域名、哈希、URL、邮箱等) |
| Type | OTX 指标类型(如 `IPv4`、`DOMAIN`、`FILEHASH-SHA256`) |
| Pulse | 所属 OTX 脉冲名称 |
| Pulse URL | OTX 上该脉冲的直接链接 |
| Author | 脉冲作者的 OTX 用户名 |
| TLP | 交通灯协议级别(`ITE`、`GREEN`、`AMBER`、`RED`) |
| Tags | 与脉冲关联的威胁标签 |
| Created | 指标的完整 ISO 8601 时间戳 |
| Description | 脉冲描述 |
### abuse.ch(CSV 输出)
| 字段 | 描述 |
|---|---|
| Date | 首次出现日期 |
| IOC | 指标值(哈希、URL、IP、域名) |
| Type | IOC 类型(`SHA256`、`URL`、`ip:port`、`domain` 等) |
| Provider | 来源提供者(`MalwareBazaar`、`URLhaus`、`ThreatFox`) |
| Family | 恶意软件家族或威胁名称 |
| Tags | 关联标签 |
## 架构
```
multi-source-ioc-exporter.html
│
├── Tab Bar (AlienVault OTX | abuse.ch)
│
├── Tab 1: AlienVault OTX
│ ├── CORS setup guide (collapsible)
│ ├── API key input
│ ├── Progress bar + status line
│ ├── Stats bar (IOC count, pulse count, types, authors)
│ ├── Pulse page nav (1–10, on-demand fetch)
│ ├── Filter controls (type, TLP, search)
│ ├── Resizable IOC table with pagination
│ └── JS: fetchPulsePage() → extractIOCs() → renderTable() → exportCSV/JSON()
│
└── Tab 2: abuse.ch (PowerShell Generator)
├── Auth-Key input
├── Provider selection (All / MalwareBazaar / URLhaus / ThreatFox)
├── Generate button → builds PowerShell one-liner
├── Copy-to-clipboard output box
└── Step-by-step instructions
```
**无框架、无 npm、无服务器。** 纯 HTML、CSS 与原生 JavaScript 单文件实现。
## 文件命名
建议仓库名称:**`multi-source-ioc-exporter`**
建议文件名:**`multi-source-ioc-exporter.html`**
## 使用场景
- SOC 分析员从订阅的 AlienVault 威胁源拉取最新 IOC 以进行每日分类
- 导出 abuse.ch IOC(哈希、URL、C2 IP)用于 Elastic Security、Splunk 或 Microsoft Sentinel 的检测规则
- 构建 IP、域名、哈希等阻断列表用于 EDR 或防火墙策略
- 在事件响应期间交叉引用带 MITRE ATT&CK 标记的脉冲
- 在调查过程中快速跳转到 OTX 脉冲上下文
- 批量获取带恶意家族分类的 ThreatFox IOC 以进行威胁狩猎
## 限制
- **AlienVault OTX 标签页** 需要 CORS 浏览器扩展才能运行(本地文件对 API 的浏览器安全限制)
- **abuse.ch 标签页** 需要 PowerShell(Windows);HTML 页面仅生成命令,由 PowerShell 执行
- AlienVault 每次会话最多获取 500 个脉冲(10 页 × 50 个)。如需更大 OTX 订阅,请使用 OTX Python SDK 或 DirectConnect API
- abuse.ch API 需要从 [auth.abuse.ch](https://auth.abuse.ch/) 获取免费认证密钥
- 不保存认证状态 — API 密钥不会在会话之间保留
- 需要互联网连接(两个标签页均实时调用 API)
## ⚠ 安全注意事项
### CORS 扩展(仅 AlienVault 标签页)
该标签页需要 CORS 解除扩展以与 OTX API 通信。请注意以下风险:
#### 扩展的作用
CORS(跨域资源共享)是浏览器安全机制,防止网页与本地文件在未明确许可的情况下请求外部 API。CORS 解除扩展通过向每个响应注入 `Access-Control-Allow-Origin: *` 来绕过此限制—全局作用于所有标签页。
#### 启用扩展时的风险
- **您访问的任何网站均可自由发起跨域请求** — 恶意站点可静默调用 API、访问内部网络端点或依赖 CORS 作为安全边界的其它服务
- **内网暴露** — 若您连接在企业 VPN 或内网,启用的 CORS 扩展可能允许页面探测并访问内网服务(如仪表盘、管理面板、API),这些服务通常受同源策略保护
- **会话令牌滥用** — 存储在浏览器中的认证会话(Cookie、Token)可能被恶意脚本利用,以您的身份调用第三方服务
- **无标签页隔离** — 该扩展的绕过作用不局限于本工具;所有打开的标签页会同时受到影响
#### 安全使用建议
| 实践 | 原因 |
|---|---|
| 仅在使用本工具时启用扩展 | 最小化暴露窗口 |
| 启用前关闭所有其他标签页 | 防止其它页面利用开放的 CORS 策略 |
| 导出完成后立即禁用 | 不要在常规浏览时保持开启 |
| 勿在连接内网的工作机上使用 | 避免暴露内部端点 |
| 使用独立的浏览器配置文件 | 将 Cookie 与会话隔离于主配置文件 |
### abuse.ch 标签页(PowerShell)
- 您的认证密钥嵌入生成的 PowerShell 命令中 — 请勿与他人共享该命令
- HTML 页面在本地离线生成命令;密钥不会通过浏览器离开您的机器
- PowerShell 通过 HTTPS 直接将认证密钥发送至 abuse.ch API;无第三方代理或中间件
## 许可证
本软件免费且不受任何限制,已发布至公共领域。
任何人都可自由复制、修改、发布、使用、编译、出售或分发本软件,用于任何目的,商业或非商业。无需署名。
详见 https://unlicense.org
标签:abuse.ch, AlienVault, CORS, Indicators of Compromise, IOC, IPv6, JSON导出, MalwareBazaar, OTX, PowerShell, SEO: IOC导出, SEO: OTX, SEO: PowerShell 一行命令, SEO: 威胁情报工具, ThreatFox, URLhaus, 分页加载, 列重设, 单文件工具, 后端开发, 多模态安全, 多源IOC, 威胁情报, 威胁情报聚合, 开发者工具, 数据可视化, 无后端, 无需安装, 浏览器取证, 浏览器工具, 缓存, 网络安全, 表格过滤, 隐私保护, 零依赖