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), 防御工具