danieloz147/Browser-Based-Ransomware
GitHub: danieloz147/Browser-Based-Ransomware
基于 File System Access API 的浏览器端勒索软件 PoC,用于红队演练中演示无需安装即可在浏览器内加密本地文件的攻击场景。
Stars: 11 | Forks: 0
# CloudGuard 安全
```
██████╗██╗ ██████╗ ██╗ ██╗██████╗ ██████╗ ██╗ ██╗ █████╗ ██████╗ ██████╗
██╔════╝██║ ██╔═══██╗██║ ██║██╔══██╗██╔════╝ ██║ ██║██╔══██╗██╔══██╗██╔══██╗
██║ ██║ ██║ ██║██║ ██║██║ ██║██║ ███╗██║ ██║███████║██████╔╝██║ ██║
██║ ██║ ██║ ██║██║ ██║██║ ██║██║ ██║██║ ██║██╔══██║██╔══██╗██║ ██║
╚██████╗███████╗╚██████╔╝╚██████╔╝██████╔╝╚██████╔╝╚██████╔╝██║ ██║██║ ██║██████╔╝
╚═════╝╚══════╝ ╚═════╝ ╚═════╝ ╚═════╝ ╚═════╝ ╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚═════╝
```
## 截图

## 攻击流程
```
┌─────────────────────────────────────────────────────────────┐
│ TARGET │
│ │
│ visits lure page -> clicks "Start Deep Scan" │
│ | │
│ v │
│ browser asks: "Allow access to Documents?" │
│ | │
│ v │
│ [ALLOW] -> scanner animation -> files processed │
│ | │
│ v │
│ alert screen shown │
│ 72h countdown + Case ID │
└─────────────────────────────────────────────────────────────┘
|
POST /api/session (AES key)
|
┌─────────────────────────────────────────────────────────────┐
│ OPERATOR │
│ │
│ GET /api/admin -> session log + master key │
│ opens /decrypt -> enters token -> selects folder │
│ | │
│ v │
│ files restored │
└─────────────────────────────────────────────────────────────┘
```
**核心设计:** AES-256 密钥仅保存在服务器端。目标无法自行恢复。
## 模式
| 模式 | 行为 | 用例 |
|------|----------|----------|
| `lock` (默认) | 就地使用 AES-256-GCM 加密文件,显示警告屏幕 | 文件加密演示 |
| `drop` | 伪造扫描(始终显示安全),静默将文件写入文件夹 | Payload 投递演示 |
## 快速开始
```
npm install
# Lock mode
PORT=7654 ADMIN_TOKEN=StrongSecret node server.js
# Drop mode
PORT=7654 MODE=drop \
PAYLOAD_FILE=/path/to/update.exe \
PAYLOAD_FILENAME=WindowsUpdate.exe \
ADMIN_TOKEN=StrongSecret \
node server.js
```
**通过 Cloudflare Tunnel 暴露(远程目标使用 HTTPS 时必需):**
```
cloudflared tunnel --url http://localhost:7654 --no-autoupdate
```
## 配置
| 变量 | 默认值 | 描述 |
|----------|---------|-------------|
| `PORT` | `3000` | HTTP 端口 |
| `ADMIN_TOKEN` | `123123` | 恢复控制台密码 |
| `MODE` | `lock` | `lock` 或 `drop` |
| `PAYLOAD_FILE` | - | 要投递的二进制文件 (EXE, DLL...) |
| `PAYLOAD_FILENAME` | `WindowsUpdate.bat` | 写入磁盘的文件名 |
| `PAYLOAD_CONTENT` | BAT 存根 | 内联文本后备 |
## API
| 方法 | 路径 | 认证 | 描述 |
|--------|------|------|-------------|
| `GET` | `/` | - | 诱饵页面 |
| `GET` | `/decrypt` | - | 恢复控制台 |
| `GET` | `/api/config` | - | 当前激活模式 + payload 配置 |
| `POST` | `/api/session` | - | 注册会话,返回 AES 密钥 |
| `GET` | `/api/admin` | `X-Admin-Token` header | 主密钥 + 会话日志 |
## 文件结构
```
browser-ransomware-poc/
|-- server.js Express server (key mgmt, session registry)
|-- public/
| |-- index.html Lure page (target-facing)
| `-- decrypt.html Recovery console (operator-facing)
|-- master.key AES-256 master key (auto-generated, gitignored)
|-- sessions.json Session log (gitignored)
`-- package.json
```
## 环境要求
- Node.js 18+
- Chrome / Edge / Opera (Firefox 和 Safari 会阻止 `showDirectoryPicker`)
- 用于 HTTPS 隧道的 `cloudflared` (可选但推荐)
## 安全说明
| 发现 | 严重性 | 状态 |
|---------|----------|--------|
| Admin token 暴露在 URL 中 | 高 | 已修复:仅限 header (`X-Admin-Token`) |
| `/api/session` 无输入验证 | 中 | 已修复:边界检查 + 清理 |
| 缺失安全 headers | 中 | 已修复 |
| 计时不安全的 token 比较 | 低 | 已修复:`timingSafeEqual` |
| 弱默认 token | 低 | 启动时警告 |
| 密钥文件权限 | 低 | 已修复:`chmod 600` |
## 限制
- 仅限 Chromium (Firefox / Safari 不支持 `showDirectoryPicker`)
- 每次部署仅限一个主密钥
| 在非 localhost 源上使用 `showDirectoryPicker` 需要 HTTPS
- 无速率限制或 DoS 防护
## 致谢
- **Check Point Research (2026)** - 关于通过 File System Access API 滥用浏览器文件系统的原创研究
- **Web Crypto API / File System Access API** - W3C / WHATWG 规范
- **GSAP** - GreenSock 动画平台
- **Plus Jakarta Sans / IBM Plex Mono** - Google Fonts
## 免责声明
仅限授权的红队演练和教育培训使用。
标签:MITM代理, Web安全, 后端开发, 文件加密, 概念验证, 浏览器API, 蓝队分析, 钓鱼