汽车安全入门 11:蓝牙车链与手机 App 攻击面从协议层穿透到 OEM 接口

导语:之前几讲都集中在车内 CAN 总线和车机端,但攻击者根本不需要摸到车里就能动手——蓝牙和配套的手机 App 同样暴露在空气中。第 11 讲把 KNOB、BIAS、BLE 中继、Honda key fob 重放和 Honda Connect 弱 API 这五起公开案例串成一条攻击链,看完就能搭一套远程劫持的 PoC。


一、车机蓝牙与 App 是被低估的攻击面

车主在车里打蓝牙电话、听音乐、推通讯录,这套”日常蓝牙”实际上把车机密联到一只由无线电包裹着的攻击面上。一旦攻击者离车辆几十米内(甚至更远),就能:

  • 冒充已配对的手机,让车机主动连接过来
  • 读取通讯录 / SMS / 通话记录
  • 顺着车机内部的 CAN 网关,向动力域发任意帧

更狠的是车企配套的官方 App。本质上是把”远程控制汽车”开放成一种 RESTful API,App 鉴权弱了,黑客就能跨城开锁。2022 年集中爆发的这几起事件,把这条完整的攻击链从协议层到接口层都暴露了出来。

蓝牙车链攻击全景图

二、KNOB 协议层熵降级(CVE-2019-9506)

蓝牙会话建立时会协商会话密钥熵值(session key entropy),理论上要 16 字节。但 Bluetooth Classic 的协商协议没做完整性校验,攻击者可以在第三个协商消息里把熵值改为 1 字节,对端几乎都会同意。

为什么 1 字节足以致命?因为 E0 流密码的会话密钥是 PK + 两个 nonce + 协商熵值算出来的,熵从 16 字节降到 1 字节,相当于把密钥空间从 2^128 砍到 2^8——攻击者拿一帧密文,CPU 上跑一分钟就能恢复 SK。

EPFL Antonioli 和 Payer 在 WOOT ’22 论文里实测:5 台测试车机(KIA、Toyota、Mazda、Nissan、Subaru)+ 3 台实车(Suzuki IGNIS 2021、Skoda Fabia 2020、Skoda Octavia 2021)全部接受 1 字节熵协商,即便 KNOB 已经在蓝牙标准里被打了补丁,所有这些车机依然敞着这个口子。

三、BIAS 协议层身份伪装(CVE-2020-10135)

BIAS 钻的是同一个会话建立协议的另一个空子:蓝牙单边认证(unilateral authentication)的角色切换漏洞。

合法流程应该是这样:发起连接的一方是”验证者(verifier)”,被连接方是”被验证者(claimant)”。但蓝牙协议允许角色切换——攻击者在配对时声称”咱换个角色吧”,于是原该发起认证的反而不需要认证了,直接免认证拿到会话。

把 KNOB 和 BIAS 串起来,攻击者根本不需要偷取 PK,也不需要重新配对:

  1. 用受害者的蓝牙地址发起到车机的连接
  2. BIAS 跳到 verifier,绕开 PK 认证
  3. KNOB 把熵值砍到 1 字节
  4. 用偷听来的密文离线暴破 SK
  5. 拿着 SK 加密对话,车机以为这是配对手机

EPFL 论文里复现的硬件配置公开:Cypress CYW920819 开发板 + ThinkPad + internalblue 框架,全套开源代码在 francozappa/bias。

四、BLE 链路层中继解锁 Tesla

经典蓝牙打得到、BLE(低功耗)也跑不掉。NCC Group 2022 年公开了他们的 BLE 链路层中继工具——核心创新是把 round-trip 延迟压到正常响应范围里,连”延迟上限防御”也一并骗过。

实操 PoC:

  • 攻击者 A 端靠近车主(手机或钥匙)
  • 攻击者 B 端靠近 Tesla
  • 链路层 relay 把 A 的 BLE 流量真实转发到 B,连 L2CAP 加密通道一起搬
  • B 端以”近在咫尺”的姿势完成 Tesla 的 proximity 校验

NCC Group 公开演示,从几十米外打开一辆 Tesla Model 3 用时不到 10 秒,然后可以无限次重复。Model Y 大概率同样中招。Kwikset / Weiser Kevo 智能锁、楼宇门禁、笔记本、手机、医疗跟踪器——只要是基于 BLE proximity 的鉴权,几乎全在同一威胁模型里。

Sultan Qasim Khan 给出的攻击硬件是现成的:”市面上随便买得到,淘宝 50 块钱一对就行”,唯一缺的是他的工具软件。

五、Honda Rolling Pwn:100 英尺外重放 key fob

更夸张的案例是 Honda 和 Acura。

2022 年 3 月,The Hacker News 报道两个研究员公开了名为 Rolling Pwn 的 PoC:所有 Honda/Acura 带无钥匙进入的车型,遥控钥匙根本不滚动码。所谓”滚动码(rolling code)”是为了防重放每次按锁都换一次密钥码,Honda 的 key fob 直接没用。

攻击手法三步:

  1. 用 SDR(如 HackRF 或 RTL-SDR)在 100 英尺(约 30 米)内嗅探车主按锁车键的无线信号
  2. 把信号存下来,里面包含解锁指令 + 静态身份码
  3. 任何时候,用同一 SDR 重放这帧信号,车子照单全收——开锁、解锁、启动一条龙

Reddit、CivicX、CR-V Owners Club 上车主自己复现都成功过,是这两年车安全最有戏剧性的攻击之一。本质逻辑是 crypto 工程失误——滚动码是 30 多年前 Keeloq 那代就普及的技术,Honda 一直到 2022 年还在用静态码。

六、Honda Connect App:弱 API 直接开车门

App 侧的攻击比蓝牙层更直白。2022 年 8 月公开的 Honda Connect 漏洞演示(第 5 代 Honda City 等车型)显示,App 后端服务的鉴权机制非常脆弱:

  • API 端点缺少签名校验或会话校验
  • 简单的逆向就能拿到查询指令用的端点和参数格式
  • 鉴权只是用户登录态,没有”动作授权”二次校验
  • 车牌号或车架号一旦泄露,能直接对绑定车辆下发”解锁 / 启动”指令

这不是 Bluetooth 那一层的事了——是车企云端 API 的鉴权设计失误。攻击者连车主身旁的范围都不用进,云上一打一个准。

七、防御要点(红队 + 蓝队视角)

实战里要保平安,至少做到这五条:

  1. 强制 SC(Secure Connections)模式:禁用旧的 E0 流密码和单边认证,让 KNOB/BIAS 无从下手
  2. 绑定 KNOB 修复:在蓝牙协议栈实现里强制熵值 ≥ 7 字节,不接收协商下限
  3. 角色切换拒绝:在认证阶段拒绝 verifier 角色变更,BIAS 直接废
  4. 车钥匙加滚动码:和 Keeloq / Hitag2 一样,每次发送唯一码,防 SDR 重放
  5. OEM 移动端 API 鉴权加固:App 调用必须带设备绑定 + 数字签名 + 服务端二次风控,单靠 cookie 不够

如果是有 IoT 背景的安全工程师,这五条和常规 BLE 安全是同一套清单——区别只在于它在车上,打通了就是”远程开门+启动”。

八、思考题

  1. KNOB 和 BIAS 同时打中一台车机的概率有多高?EPFL 论文里给的实验是不是已经同时打了?
  2. BLE 中继攻击和经典蓝牙 KNOB/BIAS 在协议层有什么区别?为什么前者更难被发现?
  3. Honda 重放事故后,HackerOne 上 OEM 厂商的 bug bounty 项目里,最容易拿钱的是哪一类漏洞?
  4. 假如你是 TC(车厂)安全负责人,30 天内只能上一个补丁,该先修哪一项?

九、素材出处

© 版权声明
THE END
喜欢就支持一下吧
点赞14 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容