ernos/browser-xpi-malware-scanner
GitHub: ernos/browser-xpi-malware-scanner
一款针对 Firefox 浏览器扩展文件的静态恶意软件扫描器,可检测混淆、隐写、凭据窃取等多种恶意技术并生成分级报告。
Stars: 3 | Forks: 0
# XPI Analyzer — Firefox 扩展安全扫描器
一款用于分析 Firefox 扩展文件(`.xpi`)的命令行工具,旨在检测恶意软件、混淆、隐藏 Payload、隐写术以及其他试图绕过扩展审核团队检查的技术。
## 功能简介
`browser-xpi-malware-scanner.py` 深入解析 Firefox 扩展,对其中的每个文件执行一系列安全检查。随后生成一份经过颜色编码的报告,按严重程度对发现的问题进行排序。
### 检查项目
| 类别 | 检查内容 |
|---|---|
| **权限 (Permissions)** | 危险或过于宽泛的权限(如 `nativeMessaging`、``、`debugger`、`desktopCapture` 等) |
| **内容安全策略 (Content Security Policy)** | CSP 中的 `unsafe-inline`、`unsafe-eval` 以及远程脚本源 |
| **JavaScript 混淆** | `eval()`、`atob()`、`Function()` 构造函数滥用、十六进制转义序列、split/join/reverse 重组、编码字符串字面量、使用字符串参数的 `setTimeout` |
| **可疑 URL** | 可能作为 C2 服务器的硬编码外部域名 |
| **凭据与机密** | 硬编码的 API 密钥、令牌(AWS、GitHub、Slack、Google)、密码、私钥以及 IP 地址 |
| **Base64 Payload** | 解码嵌入的 Base64 数据块并扫描其中的可执行文件、脚本和网络代码 |
| **PNG 隐写术** | 检测 PNG `IEND` 之后追加的数据、未知块类型、LSB 通道异常以及异常高的像素熵 |
| **文件元数据** | 通过魔数检测可执行文件(`.exe`、`.elf`、`.dylib`)、双扩展名(例如 `photo.png.js`)、可疑文件名(`keylog`、`miner`、`wallet`) |
| **多语言文件 (Polyglot Files)** | 同时在两种格式下有效的文件(例如 HTML + ZIP) |
| **ZIP 技巧** | 路径穿越条目、文件名中的空字节、可能欺骗解析器的重复条目、携带 Payload 的 ZIP 注释 |
| **远程代码** | 从远程 URL 加载的后台页面或 Service Worker |
| **高熵值** | 熵值异常高的文件或字符串字面量(可能是加密或压缩的 Payload) |
### 严重程度级别
- `CRITICAL` — 几乎可以确定是恶意的;需要立即调查
- `HIGH` — 高度可疑;值得仔细审查
- `MEDIUM` — 潜在风险;需结合上下文审查
- `LOW` — 轻微问题;仅供参考
- `INFO` — 元数据(哈希、文件大小等)
## 安装说明
需要 **Python 3.10+**。
```
# LSB 隐写术分析所需(可选但推荐)
pip install pillow numpy
```
如果未安装 Pillow/NumPy,工具仍可运行 —— 只会跳过 LSB 和像素熵检查,并打印一条警告。
## 使用方法
```
# 分析单个扩展
python3 browser-xpi-malware-scanner.py extension.xpi
# 分析多个扩展
python3 browser-xpi-malware-scanner.py a.xpi b.xpi c.xpi
# 分析目录中的所有 .xpi 文件(递归)
python3 browser-xpi-malware-scanner.py /path/to/extensions/
# 仅显示 HIGH 和 CRITICAL 发现
python3 browser-xpi-malware-scanner.py extension.xpi --min-severity HIGH
# 以 JSON 格式输出结果(适用于脚本/CI)
python3 browser-xpi-malware-scanner.py extension.xpi --json
# 仅扫描特定类型的可疑代码/块
python3 browser-xpi-malware-scanner.py extension.xpi --checks obfuscation payloads permissions steganography
# 打印尽可能多的信息
python3 browser-xpi-malware-scanner.py extension.xpi --verbose
```
### 选项
## | 标志 | 描述 |
|---|---|
| `targets` | 一个或多个 `.xpi` 文件或目录 |
| `--min-severity` | 过滤输出:`CRITICAL`、`HIGH`、`MEDIUM`、`LOW`、`INFO`(默认值:`INFO`) |
| `--json` | 将发现的结果输出为 JSON 文档,而非人类可读的报告 |
| `--verbose` 或 `-v` | 打印 `manifest.json` 的内容,并在发现可疑模式时包含其周围约 5 行代码 |
| `--checks` | 仅扫描指定的**检查类别**(见下文)
## | 可用的 **检查类别** | 类别中的检查描述
|---|---|
| permissions | 危险/宽泛的清单权限和 CSP 问题
| remote-code | 从远程 URL 加载的后台页面或 Service Worker
| obfuscation | eval/atob/编码技巧、可疑 URL、高熵字符串
| payloads | Base64 编码的数据块,经解码后扫描可执行文件/脚本
| steganography | PNG 追加数据、未知块、LSB 通道分析
| credentials | 硬编码的 API 密钥、令牌、密码、私钥、IP 地址
| file-meta | 魔数、双扩展名、可疑文件名、文件熵
| polyglot | 同时在两种格式下有效的文件(例如 HTML+ZIP)
| zip-tricks | 路径穿越、空字节、重复条目、ZIP 注释
| cross-file | 与 JS localStorage 键交叉引用的 HTML 类令牌
## 解读输出
```
════════════════════════════════════════════════════════════════════════════
XPI ANALYZER — example.xpi
════════════════════════════════════════════════════════════════════════════
Overall verdict: HIGH RISK
Findings: 1 CRITICAL 3 HIGH 2 MEDIUM 1 LOW
── CRITICAL ────────────────────────────────────────────────────────────
[CRITICAL ] [JS_OBFUSCATION] content.js
eval() call — can execute arbitrary code from strings
Evidence: var x = eval(atob("dmFyIGE9MTs…"))
── HIGH ────────────────────────────────────────────────────────────────
[HIGH ] [PERMISSION] manifest.json
Dangerous permission: 'nativeMessaging' — Can spawn native OS …
Evidence: permissions: ['nativeMessaging', 'storage', '']
…
```
当分析多个文件时,会在单独的报告之后打印一个比较表,并排显示所有扩展。
## 退出代码
| 代码 | 含义 |
|---|---|
| `0` | 无 CRITICAL 或 HIGH 发现 |
| `1` | 至少有一个 HIGH 发现 |
| `2` | 至少有一个 CRITICAL 发现 |
这使得在 CI 流水线或 Shell 脚本中使用变得非常直接:
```
python3 browser-xpi-malware-scanner.py extension.xpi --min-severity HIGH
if [ $? -eq 2 ]; then echo "CRITICAL issues found!"; fi
```
## 局限性
- **仅限静态分析。** 该工具不执行任何代码。动态技术(运行时获取 Payload、服务端多态)无法被捕获。
- **LSB 隐写术启发式算法** 在某些天然噪点高或高度压缩的图像上会产生误报。
- **混淆模式** 侧重于常见技术;自定义或新颖的打包器可能不会触发警告。
- **白名单域名**(Google APIs、Mozilla、W3C)在 URL 检查中不会被标记。调用其他受信 CDN 的合法扩展可能会显示为 `HIGH` 发现。
- 该工具**不**会将文件提交到任何外部服务。所有分析均在本地进行。
## 作者
Maximilian Cornett
https://www.yourdev.net
https://www.github.com/ernos
## 许可证
GNU General Public License - 本工具仅供安全研究和防御分析使用。
标签:AMSI绕过, Base64解码, DAST, DeepSeek, DNS 反向解析, Firefox插件, GraphQL安全矩阵, HTTP工具, JavaScript安全, Polyglot检测, XPI分析, ZIP陷阱, 云安全监控, 凭据窃取, 威胁检测, 安全扫描器, 恶意软件分析, 浏览器扩展安全, 混淆检测, 熵值分析, 编程工具, 网络信息收集, 网络安全, 网络安全审计, 远程代码执行, 隐写术, 隐私保护, 静态分析