Voidmonk16/bms-guardian-android
GitHub: Voidmonk16/bms-guardian-android
一款通过被动式 GATT 连接锁定机制,防御电动三轮车 BMS 模块遭受蓝牙通道劫持攻击的 Android 安全原型应用。
Stars: 1 | Forks: 0
# BMS Guardian
**这是一款 Android 原型应用,旨在防御影响印度数千万辆电动三轮车的蓝牙实时攻击。**
## 问题所在
印度电动三轮车中广泛部署的电池管理系统 (BMS) 模块包含一个在运行时没有任何连接认证的蓝牙低功耗 (BLE) 无线电。任何人在大约 15 米范围内,都可以使用免费应用连接到该系统,并远程关闭电池的放电功能 —— 瞬间切断车辆的电源。
这是许多 BMS 模块中使用的 BLE 协议实现所面临的行业普遍问题。该漏洞并非某一家制造商独有 —— 它是这些模块在出厂时默认禁用身份验证导致的结果。
这并非理论上的漏洞。执行该攻击不到一秒钟,且不需要任何技术门槛。
## 防御方案
BMS Guardian 利用了 BLE 的一个基本特性:**外围设备同一时间只能保持一个活跃的 GATT 连接。**
通过优先连接到 BMS 并持续保持该连接打开,BMS Guardian 占据了唯一可用的通道。当攻击者尝试连接时,BMS 没有空闲通道提供 —— 在发送任何命令之前,连接请求就会被拒绝。
这被称为**通道锁定 (channel lock)**。
## 应用功能
- 通过 service UUID 和设备名称扫描已知存在漏洞的 BMS 设备
- 连接到 BMS 并持续保持 GATT 连接打开
- 发生任何断开连接时立即重连(零延迟 —— 攻击者的攻击在 1 秒内即可完成)
- 检测 BMS 模块是否支持多重并发连接,并向用户发出警告
- 对已连接的设备进行分类,并显示针对特定制造商的指导
- 对于 JBD 设备:引导用户通过官方 Xiaoxiang BMS 应用设置永久性硬件密码
- 对于所有其他设备:确认通道锁定已激活,并建议保持应用运行
- 以前台服务运行,在应用关闭和设备重启后依然保持运行
- 支持英语、印地语 (हिंदी) 和孟加拉语 (বাংলা)
## 应用不会执行的操作
- **不会向 BMS 写入任何命令。** 这种连接完全是被动式的。BMS Guardian 通过维持 GATT 连接来保持通道打开 —— 它不会发送任何放电命令、更改任何配置,也不会进行任何形式的操作控制。
- **不会修改 BMS 设置或固件。**
- **不会更改 BMS 密码。** 对于 JBD 设备,它会引导用户使用官方制造商应用自行完成此操作。
- **不保证提供绝对保护**,针对支持多重并发连接的 BMS 模块(参见限制说明)。
- **不会修复底层漏洞。** 根本原因在于硬件上 BLE 认证的配置方式。本应用是在软件层面采取的变通防护措施。
## 受支持的 BMS 设备
检测基于 BLE service UUID 和广播的设备名称前缀。根据对广泛部署的 BMS 模块的技术研究,以下型号在理论上受支持。**目前尚未在真实硬件上得到验证。**
| 制造商 | 名称前缀 | Service UUID |
|---|---|---|
| Daly Smart BMS (legacy) | `DALY`, `DL-`, `DT-`, `JHB-` | `FFE0` |
| Daly Smart BMS (modern) | `DALY`, `DL-`, `DT-`, `JHB-` | `FFF0` |
| Daly Smart BMS (native) | `DALY`, `DL-`, `DT-`, `JHB-` | `F000FFC0-0451-4000-6000-000000000000` |
| JBD / Overkill Solar | `JBD-` | `FF00` |
| Grenergy / BAT-BMS | `BAT-BMS` | `FFE0` |
| Lossigy (FFE0 variant) | `LOS` | `FFE0` |
| Lossigy (JBD variant) | `LOS` | `FF00` |
| Epoch Li-ion | `HxxEBP` (e.g. `H12EBP`) | `FFE0` |
| Generic HM-10 module | `BMS` | `FFE0` |
## 限制说明
这些都是真实的已知局限性。由于这是一个安全工具,准确性至关重要,因此我们在此如实记录。
**未进行真实硬件测试**
所有测试均是通过在另一台 Android 设备上使用 nRF Connect 模拟 BMS 广播和 GATT 服务来完成的。该应用从未连接到真实的电动三轮车 BMS。真实硬件的行为可能有所不同 —— 无论是连接时间、GATT 发现行为,还是 OEM 的 BLE 协议栈特性。
**多重连接的 BMS 模块**
某些 BMS 模块支持不止一个并发 GATT 连接。在这些设备上,仅靠通道锁定无法完全阻止攻击者。BMS Guardian 会检测到这种情况并向用户发出警告,但无法自行阻止此类攻击。
**OEM 后台进程查杀**
Android 设备制造商会为了省电而积极地查杀后台服务。BMS Guardian 包含了针对主要 OEM 的电池优化引导设置,但无法保证该服务在所有设备的各种条件下都能保持运行。
**需要智能手机**
此应用需要一台现代 Android 智能手机在车辆旁同步运行。它不是一个独立的硬件解决方案。
**Android 版本支持**
已在 iQOO Neo 7 (Android 13+) 上进行测试。已知问题:在 Redmi 9A (Android 10) 上无法正常工作。支持更低 Android 版本的计划已列出,但尚未实施。
**启动攻击窗口期**
在设备通电到 BMS Guardian 建立其 GATT 连接之间,存在一个短暂的时间窗口,攻击者可能会在此期间连接。这个时间窗口通常为 1–5 秒,具体取决于设备 BLE 协议栈的响应速度。
**无法修补底层漏洞**
根本原因在于 BMS 硬件配置。BMS Guardian 只是一种变通的防护方案 —— 它并未修复漏洞。要永久修复此问题,需要在固件或硬件级别进行更改。
## 构建与安装
BMS Guardian 未上架 Play Store。您必须从源码进行构建。
**环境要求**
- Android Studio Hedgehog 或更高版本
- JDK 21(推荐使用 Temurin)
- 运行 API 29 (Android 10) 或更高版本且支持 Bluetooth LE 的 Android 设备
**步骤**
```
git clone https://github.com/Voidmonk16/bms-guardian.git
cd bms-guardian
```
在 Android Studio 中打开项目,连接您的设备,然后通过“运行”按钮执行,或者使用以下命令:
```
./gradlew installDebug
```
**运行时所需的权限**
- Bluetooth 扫描和连接 (Android 12+)
- 通知显示 (Android 13+)
- 精确位置获取 (仅限 Android 10–11,BLE 扫描必需)
## 没有真实 BMS 时的测试
您可以使用另一台 Android 设备上的 nRF Connect 来模拟 BMS。
**模拟 Daly/通用 BMS(通道锁定测试)**
1. 在辅助设备上,打开 nRF Connect → Advertiser 选项卡 → 创建新的广播
2. 添加 service UUID:`0000ffe0-0000-1000-8000-00805f9b34fb`
3. 设置本地名称:`DALY-BMS`
4. 开始广播
5. 在您的主设备上,启动 BMS Guardian —— 它应该会检测到并建立连接,显示“Vehicle Protected”(车辆已受保护)
6. 尝试使用任何 BLE 扫描仪从第三台设备进行连接 —— 该连接应该会被拒绝
**模拟 JBD BMS(指导卡片测试)**
需要具有 nRF Connect GATT Server 支持的设备:
1. 创建带有 service UUID:`0000ff00-0000-1000-8000-00805f9b34fb` 的广播
2. 添加具有相同 FF00 服务的 GATT Server
3. 开始广播
4. BMS Guardian 应该会建立连接,并显示绿色的 JBD 指导卡片,指引您使用 Xiaoxiang 应用
## 项目状态
该项目正在积极开发中。当前状态:
- ✅ 已实现核心通道锁定防御
- ✅ 基于 UUID 和名称过滤的 BLE 扫描
- ✅ 断开连接时的零延迟重连
- ✅ 多重连接检测及预警
- ✅ 制造商分类及指导卡片
- ✅ 具备开机持久性的前台服务
- ✅ OEM 电池优化引导设置
- ✅ 印地语和孟加拉语本地化
- ✅ 已完成 BLE 生命周期审计(2026 年 7 月)
- ✅ 已移除所有写入操作 —— 应用完全处于被动接收状态
- ⬜ 真实 BMS 硬件测试
- ⬜ Android 10 支持修复
- ⬜ Play Store 发布
## 架构
采用单 Activity + 前台服务架构。没有使用 Fragment,也没有使用第三方 BLE 库。完整的架构概述请参见 [`ARCHITECTURE.md`](ARCHITECTURE.md)。
## 安全
该项目涉及物理车辆的 BLE 安全。如果您发现漏洞,请在公开披露之前阅读 [`SECURITY.md`](SECURITY.md)。
## 许可证
Apache 2.0 —— 请参见 [`LICENSE`](LICENSE)。
## 作者
Muthu Vignesh S — 独立开发者,印度泰米尔纳德邦
为负责任的漏洞披露和防御性安全研究而构建的概念验证
*2026 年 7 月*
标签:Android, DSL, TLS, 后台面板检测, 安全原型, 物联网安全, 电动车BMS, 移动应用, 蓝牙低功耗(BLE), 防御工具