引言
最近我有机会研究知名安全公司F-Secure关于Guardtec KeyWe智能门锁漏洞的发现。该团队发现由于设计缺陷,攻击者可拦截并解密合法用户的通信数据。在复现研究过程中,我深入分析了蓝牙密钥交换机制,并成功利用Frida工具实现关键函数劫持。
通信协议分析
门锁与手机App通过BLE传输加密数据,采用ECB模式的AES-128加密,依赖三个核心密钥:
- 通用密钥(CommonKey):基于设备蓝牙地址后5字节的静态值
- 应用密钥(AppKey):用于App到门锁的通信加密
- 门锁密钥(DoorKey):用于门锁到App的通信加密
密钥生成流程显示,CommonKey仅依赖设备蓝牙地址的最后两个字节,具有高度可预测性。
Android应用逆向
使用APK逆向工具链对门锁App进行分析:
- 通过APKStudio解包获取Smali代码
- 使用dex2jar转换为Java代码
- 关键发现:
makeAppKey
和makeDoorKey
函数被深度混淆- 会话初始化时交换AppNumber和DoorNumber
- 使用历史版本APK绕过厂商的防root检测
Frida动态分析
配置Frida环境实现运行时监控:
|
|
成功挂钩的关键函数:
AES128Cipher
:监控加密过程eKeyVerify
:提取认证密钥- 绕过root检测:修改
n.b()
返回值
蓝牙流量捕获
对比多种嗅探方案后,采用Android内置BTSNOOP工具:
- 启用开发者选项中的"HCI日志记录"
- 使用ADB提取
btsnoop_hci.log
- Wireshark分析显示13个固定序列的加密数据包
重放攻击实现
通过逆向获得密钥后,修改F-Secure的PoC脚本:
- 从Frida输出提取eKey
- 硬编码到
open_from_pcap.py
- 使用Sena UD100蓝牙适配器成功重放开锁指令
安全建议
- 厂商应实现固件更新机制
- 避免使用自定义加密算法
- 用户应立即升级至v2.1.0以上版本
研究证实,捕获初始密钥交换数据包即可完全破解门锁安全机制,凸显物联网设备安全设计的严峻挑战。完整技术细节和工具配置请参阅原文。