Android BLE扫描漏洞:扫描过滤绕过、MAC地址随机化缺陷、扫描响应数据伪造、隐私泄露风险
各位同学,今天我们来聊聊BLE扫描这个环节。说实话,很多人觉得扫描不就是发现设备嘛,能有什么安全问题?我当年也是这么想的,直到在一次车载蓝牙项目中,被攻击者用伪造的扫描响应数据骗过了过滤器……嗯,从那以后我再也不敢小看扫描阶段了。
BLE扫描,说白了就是手机在“听”周围设备在广播什么。但这个“听”的过程,漏洞可不少。我把它归纳为四大类:过滤绕过、MAC随机化缺陷、响应数据伪造、隐私泄露。咱们一个一个来看。
1. 扫描过滤绕过:你以为过滤了,其实没有
Android的BLE扫描API允许开发者设置过滤条件,比如只扫描特定UUID的设备。但问题是,这个过滤是在应用层做的,还是在底层做的?
我习惯把过滤分为两类:
- 硬件过滤:在蓝牙芯片层面就过滤掉,不传给上层。省电,但灵活度低。
- 软件过滤:所有广播包都上报,应用层自己判断。灵活,但费电。
Android的ScanFilter类,其实大部分实现是软件过滤。你想想看,这意味着什么?
核心问题:攻击者可以构造一个广播包,让它的某些字段符合过滤条件,但实际行为完全不同。
举个例子,你过滤了Service UUID为0x180D(心率设备)的设备。攻击者可以构造一个广播包,里面包含这个UUID,但实际连接后暴露的是恶意服务。我在项目中遇到过,有人用这种方式伪装成合法的健康设备,实际上在窃取数据。
我的建议:不要完全信任ScanFilter。扫描到设备后,一定要在连接后再次验证服务UUID和特征值。双重校验,才能防住这种绕过。
3. MAC地址随机化缺陷:隐私保护的“皇帝新衣”
Android从6.0开始支持BLE MAC地址随机化,目的是防止设备被长期追踪。听起来很美好,对吧?但实际效果呢?
我直接说结论:MAC随机化在大多数场景下,就是个心理安慰。
为什么会这样?因为随机化只改变了MAC地址本身,但广播包里的其他数据——比如设备名称、服务UUID、厂商自定义数据——这些都没变。攻击者只要组合这些“指纹”,就能唯一标识一台设备。
| 指纹类型 | 示例 | 稳定性 |
|---|---|---|
| MAC地址 | AA:BB:CC:DD:EE:FF | 低(随机化后变化) |
| 设备名称 | "Mi Band 5" | 高(用户很少改) |
| 服务UUID组合 | 0x180D + 0x180F | 高(设备固件决定) |
| 厂商自定义数据 | 0xFF + 厂商ID + 数据 | 极高(唯一性强) |
你看,MAC地址只是其中一个维度。攻击者用其他三个维度,照样能追踪你。我曾经做过一个实验:在商场里用三台不同手机扫描同一款手环,MAC地址都不同,但通过厂商自定义数据里的设备序列号,轻松关联到同一台设备。
避坑指南:如果你在开发BLE设备固件,千万不要在广播包里放唯一标识符(比如序列号、IMEI)。Android系统层的随机化救不了你,因为广播数据是你自己决定的。
3. 扫描响应数据伪造:你看到的,不一定是真的
BLE扫描分为两种:主动扫描和被动扫描。被动扫描只收广播包,主动扫描会额外发送扫描请求,设备回复扫描响应数据。
问题就出在这个“扫描响应”上。攻击者可以伪造扫描响应数据,让你以为连接的是一个合法设备。
我记得有一次,一个客户说他们的App总是连到一个“假”的血压计。我抓包一看,发现攻击者伪造了扫描响应,里面包含了和真血压计一模一样的设备名称和UUID。但连接后,攻击者设备暴露的服务是恶意的。
攻击流程大概是这样的:
- 真设备广播:包含真实UUID
- 攻击者监听:收到广播后,记录UUID
- 攻击者伪造:用同样的UUID广播,但扫描响应里放恶意服务信息
- 受害者App:看到UUID匹配,直接连接——中招
关键点:扫描响应数据是未经加密的,任何人都可以伪造。不要因为扫描阶段匹配了,就认为设备是可信的。
4. 隐私泄露风险:广播数据本身就是个“裸奔”
BLE广播数据,默认是明文传输的。你广播了什么,周围所有人都能收到。这本身不是漏洞,是协议设计如此。但很多开发者把它当成了“安全通道”,这就出问题了。
我见过最离谱的例子:某个智能门锁App,在广播数据里直接放了用户的手机号后四位,用于“快速配对”。你想想看,在商场里,周围所有人的手机都能收到这个广播。隐私?不存在的。
常见的隐私泄露场景:
- 设备名称泄露:比如广播里直接放“张三的iPhone”
- 位置信息泄露:某些设备广播GPS坐标(真的有人这么干)
- 用户行为泄露:广播数据里包含“运动模式”、“睡眠模式”等状态
- 设备指纹泄露:厂商自定义数据里包含唯一ID
我的习惯:在广播数据里,只放必要的标识信息。能不放的,坚决不放。如果非要放敏感数据,至少做一层简单的异或混淆——虽然不能防专业攻击,但能防住“路过的好奇者”。
知识体系总览
下面这张图,是我梳理的BLE扫描漏洞全景。你可以看到,四个漏洞之间是相互关联的:过滤绕过和MAC随机化缺陷,最终都可能导致隐私泄露;而扫描响应伪造,则是中间人攻击的前置步骤。
嗯,这张图我画了好一会儿。你可以看到,四个漏洞并不是孤立的。比如,攻击者利用MAC随机化缺陷追踪到你的设备,然后结合扫描响应伪造,就能实施一次完美的中间人攻击。
好了,这一章的内容就到这里。扫描阶段是BLE安全的第一道防线,但也是最容易被忽视的。下一章我们会深入连接阶段的漏洞,到时候你会看到,扫描阶段的问题如果没解决,连接阶段会出更大的乱子。