ArmorIntel/mustela
GitHub: ArmorIntel/mustela
一款面向 SOC 分析师的无后端 Chrome 扩展,能自动检测高亮网页上的 IOC 并聚合多源威胁情报进行页内调查。
Stars: 0 | Forks: 0
# Mustela
[](https://github.com/ArmorIntel/mustela/actions/workflows/ci.yml)
[](https://github.com/ArmorIntel/mustela/releases/latest)
[](LICENSE)
[](manifest/chrome.manifest.json)
**Mustela** 是一款专为 SOC 分析师设计的 Chrome 扩展,方便他们直接在当前浏览的页面上调查妥协指标 (IOC)。
你不再需要在多个标签页之间来回复制 IP、域名、URL 和哈希值,Mustela 会高亮显示页面上的 IOC,并提供快捷的上下文调查操作。
## 为什么开发这个扩展
SOC 的工作流中充斥着重复的溯源操作:
- 从 SIEM、工单、邮件或 CTI 报告中复制一个 IOC
- 打开 VirusTotal、AbuseIPDB 或 Shodan
- 粘贴该指标
- 手动比对结果
Mustela 减少了这种繁琐操作,将调查闭环保留在浏览器中。
## 安装说明
### 选项 A — 下载预构建版本(推荐,无需构建工具)
1. 前往 [最新发布版本](https://github.com/ArmorIntel/mustela/releases/latest)
2. 下载 `mustela-vX.X.X-chrome.zip` 文件
3. 将其解压到电脑上的任意位置
4. 在 Chrome 中打开 **`chrome://extensions`**
5. 启用 **开发者模式** — 右上角的开关

6. 点击 **加载已解压的扩展程序**,并选择你刚刚解压的文件夹
7. 工具栏中会出现 Mustela 图标 — 安装完成
### 选项 B — 一行命令(自动从源码构建)
如果你已安装 **Git** 和 **Node.js 18+**,请在终端中运行以下命令:
```
curl -fsSL https://raw.githubusercontent.com/ArmorIntel/mustela/main/install.sh | bash
```
该脚本会克隆仓库、安装依赖、构建扩展,并输出需要粘贴到 Chrome **加载已解压的扩展程序** 对话框中的确切路径。
### 选项 C — 从源码手动构建
```
git clone https://github.com/ArmorIntel/mustela.git
cd mustela
npm install
npm run build
```
然后在 `chrome://extensions` 中通过 **加载已解压的扩展程序** 加载 `dist/chrome`(步骤同上述 4–7 步)。
## 配置服务提供商
Mustela 开箱即用,能够检测并高亮显示 IOC — 无需任何 API 密钥。
要在页内面板中获取 **丰富的判定结果**(信誉评分、扫描结果、暴露服务数据),请连接一个或多个免费的提供商账号。
### 如何打开选项页
右键点击工具栏中的 Mustela 图标 → **选项**。或者前往 `chrome://extensions`,找到 Mustela,点击 **详细信息 → 扩展程序选项**。
### VirusTotal
VirusTotal 汇总了 70 多个防病毒引擎的结果,并提供针对 IP、域名、URL 和文件哈希的信誉数据。
1. 在 [virustotal.com](https://www.virustotal.com/gui/join-us) 创建免费账号
2. 前往你的 [API key 页面](https://www.virustotal.com/gui/my-apikey)
3. 复制你的 **API Key**
4. 将其粘贴到 Mustela 选项页的 **VirusTotal** 字段中
免费额度:每分钟 4 次请求,每天 500 次请求。足够应对分析师的日常工作流。
### AbuseIPDB
AbuseIPDB 是一个众包的恶意 IP 地址举报数据库。
1. 在 [abuseipdb.com](https://www.abuseipdb.com/register) 创建免费账号
2. 前往 [Account → API](https://www.abuseipdb.com/account/api)
3. 点击 **Create Key**,为其命名并复制密钥
4. 将其粘贴到 Mustela 选项页的 **AbuseIPDB** 字段中
免费额度:每天 1,000 次请求。绰绰有余,完全满足日常分析需求。
### Shodan
Shodan 扫描互联网上的暴露服务和设备。非常适合用来丰富 IP 地址的端口、服务和 banner 数据。
1. 在 [shodan.io](https://account.shodan.io/register) 创建免费账号
2. 登录并前往 [My Account](https://account.shodan.io/)
3. 复制页面上显示的 **API Key**
4. 将其粘贴到 Mustela 选项页的 **Shodan** 字段中
免费额度:仅限于基础查询(无历史数据或过滤功能)。涵盖标准的 IP 查询。
如果未配置提供商,Mustela 在检测、高亮显示和外部溯源方面仍能完全正常运行 — 只是不会显示该提供商的丰富数据。
## 配置 LLM (Analyst Assist)
Mustela 集成了 **大语言模型**,通过 AI 驱动的分析来增强调查。此功能是 **可选的** — 不开启它,Mustela 依然能完全正常运行。启用后,它提供以下功能:
- **调查摘要**:针对每个 IOC 由 AI 生成的一句话判定结果及推荐的下一步操作
- **关联分析**:识别调查历史中多个 IOC 之间的模式和关系
LLM 可在任何 **兼容 OpenAI 的 API** 上运行,因此你可以使用:
- **Anthropic Claude**(通过 [Anthropic API](https://console.anthropic.com/))
- **OpenAI**(GPT-4o、GPT-4 Turbo 等)
- **本地模型**(Ollama、LM Studio、vLLM)
- 任何其他具有兼容 OpenAI `/chat/completions` 端点的服务
### 配置 LLM
1. 打开 Mustela **选项** 页(右键点击 Mustela 图标 → **选项**)
2. 下拉滚动至 **Analyst Assist (LLM)** 部分
3. 勾选 **Enable Analyst Assist**
4. 填写:
- **Base URL**:API 端点(例如,Anthropic 填 `https://api.anthropic.com/v1`,OpenAI 填 `https://api.openai.com/v1`,Ollama 填 `http://localhost:11434/v1`)
- **API Key**:你从服务商获取的 API 密钥
- **Model**:模型名称(例如,Claude 填 `claude-3-5-sonnet-20241022`,OpenAI 填 `gpt-4o`,Ollama 填 `mistral`)
5. 点击 **Save**
Mustela 将验证连接。如果有效,LLM 功能会自动激活。
### AI 驱动的调查摘要
当你调查 IOC 时,LLM 会自动生成:
- **摘要**:结合上下文对评分含义的一句话评估
- **操作**:最重要的一步后续调查步骤
LLM 会综合考量:
- IOC 的类型和值
- 所有已配置威胁情报提供商(VirusTotal、AbuseIPDB、Shodan)的判定结果
- 各提供商的结论是否一致(以及如何解决冲突)
- 你发现 IOC 的页面上下文(SIEM、工单、邮件等)
**示例**:如果在调查工单上的某个域名时,VirusTotal 将其标记为恶意,但 Shodan 认为它是干净的,LLM 可能会总结道:*“高可信度的恶意域名;被多个扫描引擎标记,但近期的良性托管背景表明可能是误报 — 请对照你的网络日志进行验证。”* 推荐的操作将是:*“检查你的 DNS 日志中是否有内部查询记录;如果没有,将其标记为误导;如果有,则升级进行封堵。”*
### 跨 IOC 关联分析
通过弹窗中的 **Analyze correlations** 按钮,你可以让 LLM 识别近期调查中的模式:
- **模式检测**:共享基础设施、ASN 集群、相似威胁画像、潜在攻击活动指标、共同上下文
- **关系判定**:这些 IOC 是“可能相关”、“疑似相关”还是“相互独立”?
- **下一步调查**:根据发现的模式给出唯一的最佳行动
此功能适用于:
- 识别跨多个告警的攻击活动
- 对误报或良性基础设施进行集群分类
- 发现已知威胁团伙对基础设施的重复使用
- 在嘈杂的 SIEM 输出中寻找线索串联
**示例**:在调查了一批告警中的 5 个 IP 和 3 个域名后,LLM 识别出它们都使用同一个 ASN,与已知的钓鱼攻击活动共享托管,并且出现在同一基础设施上。建议:*“高度确信这些是协调一致的基础设施 — 检查 ASN 信誉历史;将所有 8 个指标加入你的屏蔽列表,并与已知的 C2 sinkhole 活动进行关联比对。”*
### 推荐模型
| 提供商 | 模型 | 级别 | 适合 Mustela 吗? |
|---|---|---|---|
| **Anthropic** | `claude-3-5-sonnet-20241022` | 标准版 | ✅ 极佳 — 速度快、成本低、延迟低。推荐使用。 |
| **Anthropic** | `claude-3-opus-20250219` | 高级版 | ✅ 是 — 在复杂关联方面能力更强。速度较慢且价格更高。 |
| **OpenAI** | `gpt-4o` | 标准版 | ✅ 良好 — 成本与 Sonnet 相当,稳定可靠。 |
| **OpenAI** | `gpt-4-turbo` | 高级版 | ✅ 是 — 能力更强,延迟更高。 |
| **Ollama** | `mistral` 或 `neural-chat` (本地) | 免费 | ✅ 良好 — 完全离线,无 API 成本。在 CPU 上运行较慢。 |
| **OpenAI** | `gpt-4 mini` | 预算版 | ⚠️ 在处理复杂关联时可能会比较吃力。 |
**默认推荐**:从 **Claude 3.5 Sonnet** 开始。对于此类工作负载,它是速度最快且最具性价比的选择。
### LLM 隐私说明
启用后,LLM 会接收到:
- IOC 的值和类型(例如 `192.168.1.1`,`domain`)
- 来自你配置的提供商的威胁判定(例如 `malicious`、`suspicious`、`clean`)
- 你发现 IOC 的页面上下文(URL、标题)
- 你最近的调查历史(用于关联分析)
请假定 LLM 提供商会看到这些信息。Mustela **不会**:
- 将你的提供商 API 密钥发送给 LLM
- 发送你完整的笔记历史
- 发送有关你已禁用高亮显示的页面的信息
- 存储 LLM 响应;它们是按需实时生成的
如果调查高度敏感的指标,请禁用 LLM 或使用本地模型(Ollama)。
## 功能
### IOC 检测
Mustela 会自动检测任何页面上的以下指标类型:
| 类型 | 示例 |
|---|---|
| IPv4 地址 | `192.168.1.1`、`8.8.8.8` |
| IPv4 子网 | `10.0.0.0/8` |
| ASN | `AS15169` |
| 域名 | `evil.example.com` |
| URL | `http://malware.example.com/payload` |
| MD5 哈希 | `d41d8cd98f00b204e9800998ecf8427e` |
| SHA1 哈希 | `da39a3ee5e6b4b0d3255bfef95601890afd80709` |
| SHA256 哈希 | `e3b0c44298fc1c149afb...` |
检测完全在浏览器本地运行 — 在此阶段不会向外部发送任何数据。
### 页面高亮显示
**检测到的 IOC 并直接在页面上高亮显示:**

检测到的 IOC 会直接在页面上通过带有颜色编码的标记进行下划线标注。这不会影响宿主页面的布局和行为。你可以随时使用弹窗中的 **Disable on this page** 开关,针对特定页面禁用高亮显示。
### 页内调查面板
**点击高亮显示的内容即可打开调查面板:**

点击任何高亮显示的 IOC 都会打开一个固定在页面上的侧边面板。该面板显示:
- IOC 的类型和值
- 来自所有已配置提供商的汇总判定结果
- 用于快速跳转到各个提供商网站查看该 IOC 的链接
- 本地分析师笔记字段(仅存储在你的浏览器中)
- 完整结果的 JSON 导出
### 弹窗 — 手动查询与历史记录
**弹窗汇总了当前页面的信息,并保留了你最近的调查记录:**
点击工具栏中的 Mustela 图标可以:
- 按类型分组查看当前页面上检测到的所有 IOC 摘要
- 通过将 IOC 粘贴到搜索框中,对其执行 **手动查询**
- 浏览跨所有会的 **近期调查** 记录
- 在当前页面上启用或禁用 Mustela
### 右键菜单查询
在页面上选中任意文本,右键点击并选择 **Investigate with Mustela**。Mustela 会自动识别 IOC 类型并打开包含结果的面板。
### 本地存储 — 无后端
所有数据都保留在你的浏览器中:
| 数据 | 存储位置 |
|---|---|
| API 密钥 | `chrome.storage.local` |
| 查询缓存 | `chrome.storage.local` |
| 调查历史 | `chrome.storage.local` |
| 分析师笔记 | `chrome.storage.local` |
| 禁用页面的规则 | `chrome.storage.local` |
不会向任何后端发送任何内容。唯一的出站请求就是你明确触发的提供商查询 — 并且仅指向你配置的提供商。详情请参阅 [`docs/PRIVACY_TRANSPARENCY.md`](docs/PRIVACY_TRANSPARENCY.md)。
## 使用指南
1. 打开任何包含指标的页面 — SIEM 告警、工单、CTI 报告、电子邮件
2. Mustela 会自动检测并高亮显示 IOC(在页面上添加下划线)
3. 点击高亮显示的 IOC 以打开调查面板
4. 查看已配置提供商的汇总判定结果
5. 如果你想保留上下文供以后参考,可以添加分析师笔记
6. 仅在需要提供商网站上更深层的上下文时,才使用外部溯源链接
7. 将结果导出为 JSON,用于你的案件管理工具
对于不在页面上的 IOC,请将其直接粘贴到弹窗的搜索框中。
## 隐私与信任机制
Mustela 的设计刻意保持透明:
- IOC 检测和高亮显示完全在 **浏览器本地运行**
- 设置、缓存、历史记录、笔记和禁用的页面规则都存储在 `chrome.storage.local` 中 — 不会同步到任何云端
- 已配置的提供商查询仅在你主动请求时,才会 **且仅** 将 IOC 发送至已启用的第三方提供商
- 这里 **没有后端、没有遥测、没有分析、没有账号系统**
如果你调查敏感的 IOC,请假定已启用的提商会看到该 IOC。详情请参阅 [`docs/PRIVACY_TRANSPARENCY.md`](docs/PRIVACY_TRANSPARENCY.md)。
## 常见问题解答
**Mustela 能在所有网站上工作吗?**
是的 — 它可以注入到 Chrome 加载的任何页面中。如果它对特定网站造成干扰,你可以通过弹窗开关针对该页面禁用它。
**我可以不使用任何 API 密钥吗?**
可以。检测、高亮显示、外部跳转和右键菜单均可无密钥使用。API 密钥仅用于获取面板内的增强判定结果。
**我的 API 密钥安全吗?**
密钥存储在 `chrome.storage.local` 中,被沙箱隔离在扩展程序内,网页和其他扩展程序无法访问。除了各自的提供商 API 端点外,它们永远不会发送到任何其他地方。
**该扩展会拖慢页面加载速度吗?**
检测只在页面加载时运行一次,并处理 DOM 中已有的文本。它不会持续扫描页面,也不会在后台发起网络请求。
**如果提供商宕机或受到速率限制会怎样?**
面板会为该提供商显示清晰的错误状态,同时仍会显示其他提供商的结果。缓存机制避免了在同一会话中对相同 IOC 的冗余请求。
**支持 Firefox 吗?**
暂不支持。Mustela 目前基于 Manifest V3,主要针对 Chrome 及基于 Chromium 的浏览器(Edge、Brave、Arc 等)。对 Firefox 的支持已在路线图上。
**不配置 LLM 也能使用 LLM 的相关功能吗?**
可以。所有 LLM 功能都是可选的。如果不配置 LLM,Mustela 依然能仅利用你配置的威胁情报提供商来检测、高亮并调查 IOC。
**我需要为 LLM 付费吗?**
这取决于你选择的服务。Anthropic Claude、OpenAI 和其他商业 LLM API 会按请求收费(通常每次调查花费 < $0.01)。如果你想免费使用,可以在本地机器上运行 Ollama,没有 API 成本 — 不过在 CPU 上运行会慢一些,但可以完全离线。
**我可以使用其他的 LLM(不兼容 OpenAI 的)吗?**
暂不支持。Mustela 目前仅支持兼容 OpenAI 的 API。如果你希望支持其他 LLM API(如 Anthropic 原生 API、Azure OpenAI 等),请在 GitHub 上提交 Issue。
**LLM 会看到我的提供商 API 密钥吗?**
不会。LLM 只会接收到来自你提供商的判定结果和摘要 — 永远不会获取 API 密钥本身。
**我可以做贡献吗?**
欢迎。请阅读 [`CONTRIBUTING.md`](CONTRIBUTING.md) 了解相关规范。安全漏洞报告请通过 [`SECURITY.md`](SECURITY.md) 处理 — 请勿针对漏洞公开提交 Issue。
## 开发
```
npm install # install dev dependencies
npm test # fast Node test suite (parsing, providers, storage, popup state)
npm run build # build the extension into dist/chrome
npm run test:e2e # Playwright end-to-end suite (requires a display)
npm run package # build + create dist zip in artifacts/
```
请参阅 [`CONTRIBUTING.md`](CONTRIBUTING.md) 了解规范以及怎样才算一个好的 PR。
## 当前状态
Mustela 是一个 **Chrome MVP**(最小可行性产品)。Firefox 支持、后端服务、团队共享内存和高级自动化等功能尚未实现,我们也并未宣称支持。近期的优先事项包括:更强的检测质量、更少的误报、更好的调查用户体验,以及更稳健的提供商处理机制。
欢迎提交 Issue 和反馈 — 特别是来自从事 SOC 运营、CTI、事件响应或威胁追踪人员的声音。如果你在真实的分析师工作流中测试了 Mustela,你的反馈将比理论架构的探讨更有价值。
## 开源许可
[MIT](LICENSE)
点击工具栏中的 Mustela 图标可以:
- 按类型分组查看当前页面上检测到的所有 IOC 摘要
- 通过将 IOC 粘贴到搜索框中,对其执行 **手动查询**
- 浏览跨所有会的 **近期调查** 记录
- 在当前页面上启用或禁用 Mustela
### 右键菜单查询
在页面上选中任意文本,右键点击并选择 **Investigate with Mustela**。Mustela 会自动识别 IOC 类型并打开包含结果的面板。
### 本地存储 — 无后端
所有数据都保留在你的浏览器中:
| 数据 | 存储位置 |
|---|---|
| API 密钥 | `chrome.storage.local` |
| 查询缓存 | `chrome.storage.local` |
| 调查历史 | `chrome.storage.local` |
| 分析师笔记 | `chrome.storage.local` |
| 禁用页面的规则 | `chrome.storage.local` |
不会向任何后端发送任何内容。唯一的出站请求就是你明确触发的提供商查询 — 并且仅指向你配置的提供商。详情请参阅 [`docs/PRIVACY_TRANSPARENCY.md`](docs/PRIVACY_TRANSPARENCY.md)。
## 使用指南
1. 打开任何包含指标的页面 — SIEM 告警、工单、CTI 报告、电子邮件
2. Mustela 会自动检测并高亮显示 IOC(在页面上添加下划线)
3. 点击高亮显示的 IOC 以打开调查面板
4. 查看已配置提供商的汇总判定结果
5. 如果你想保留上下文供以后参考,可以添加分析师笔记
6. 仅在需要提供商网站上更深层的上下文时,才使用外部溯源链接
7. 将结果导出为 JSON,用于你的案件管理工具
对于不在页面上的 IOC,请将其直接粘贴到弹窗的搜索框中。
## 隐私与信任机制
Mustela 的设计刻意保持透明:
- IOC 检测和高亮显示完全在 **浏览器本地运行**
- 设置、缓存、历史记录、笔记和禁用的页面规则都存储在 `chrome.storage.local` 中 — 不会同步到任何云端
- 已配置的提供商查询仅在你主动请求时,才会 **且仅** 将 IOC 发送至已启用的第三方提供商
- 这里 **没有后端、没有遥测、没有分析、没有账号系统**
如果你调查敏感的 IOC,请假定已启用的提商会看到该 IOC。详情请参阅 [`docs/PRIVACY_TRANSPARENCY.md`](docs/PRIVACY_TRANSPARENCY.md)。
## 常见问题解答
**Mustela 能在所有网站上工作吗?**
是的 — 它可以注入到 Chrome 加载的任何页面中。如果它对特定网站造成干扰,你可以通过弹窗开关针对该页面禁用它。
**我可以不使用任何 API 密钥吗?**
可以。检测、高亮显示、外部跳转和右键菜单均可无密钥使用。API 密钥仅用于获取面板内的增强判定结果。
**我的 API 密钥安全吗?**
密钥存储在 `chrome.storage.local` 中,被沙箱隔离在扩展程序内,网页和其他扩展程序无法访问。除了各自的提供商 API 端点外,它们永远不会发送到任何其他地方。
**该扩展会拖慢页面加载速度吗?**
检测只在页面加载时运行一次,并处理 DOM 中已有的文本。它不会持续扫描页面,也不会在后台发起网络请求。
**如果提供商宕机或受到速率限制会怎样?**
面板会为该提供商显示清晰的错误状态,同时仍会显示其他提供商的结果。缓存机制避免了在同一会话中对相同 IOC 的冗余请求。
**支持 Firefox 吗?**
暂不支持。Mustela 目前基于 Manifest V3,主要针对 Chrome 及基于 Chromium 的浏览器(Edge、Brave、Arc 等)。对 Firefox 的支持已在路线图上。
**不配置 LLM 也能使用 LLM 的相关功能吗?**
可以。所有 LLM 功能都是可选的。如果不配置 LLM,Mustela 依然能仅利用你配置的威胁情报提供商来检测、高亮并调查 IOC。
**我需要为 LLM 付费吗?**
这取决于你选择的服务。Anthropic Claude、OpenAI 和其他商业 LLM API 会按请求收费(通常每次调查花费 < $0.01)。如果你想免费使用,可以在本地机器上运行 Ollama,没有 API 成本 — 不过在 CPU 上运行会慢一些,但可以完全离线。
**我可以使用其他的 LLM(不兼容 OpenAI 的)吗?**
暂不支持。Mustela 目前仅支持兼容 OpenAI 的 API。如果你希望支持其他 LLM API(如 Anthropic 原生 API、Azure OpenAI 等),请在 GitHub 上提交 Issue。
**LLM 会看到我的提供商 API 密钥吗?**
不会。LLM 只会接收到来自你提供商的判定结果和摘要 — 永远不会获取 API 密钥本身。
**我可以做贡献吗?**
欢迎。请阅读 [`CONTRIBUTING.md`](CONTRIBUTING.md) 了解相关规范。安全漏洞报告请通过 [`SECURITY.md`](SECURITY.md) 处理 — 请勿针对漏洞公开提交 Issue。
## 开发
```
npm install # install dev dependencies
npm test # fast Node test suite (parsing, providers, storage, popup state)
npm run build # build the extension into dist/chrome
npm run test:e2e # Playwright end-to-end suite (requires a display)
npm run package # build + create dist zip in artifacts/
```
请参阅 [`CONTRIBUTING.md`](CONTRIBUTING.md) 了解规范以及怎样才算一个好的 PR。
## 当前状态
Mustela 是一个 **Chrome MVP**(最小可行性产品)。Firefox 支持、后端服务、团队共享内存和高级自动化等功能尚未实现,我们也并未宣称支持。近期的优先事项包括:更强的检测质量、更少的误报、更好的调查用户体验,以及更稳健的提供商处理机制。
欢迎提交 Issue 和反馈 — 特别是来自从事 SOC 运营、CTI、事件响应或威胁追踪人员的声音。如果你在真实的分析师工作流中测试了 Mustela,你的反馈将比理论架构的探讨更有价值。
## 开源许可
[MIT](LICENSE)标签:IOC检测, MITM代理, Petitpotam, SOC分析, 威胁情报, 安全运营, 开发者工具, 扫描框架, 数据可视化, 自定义脚本