跳至正文
首页 » 博客 » 侠盗猎车 — 玩转滚动码(中)

侠盗猎车 — 玩转滚动码(中)

陈华江 星舆车联网安全实验室

0x00 前言

大家好, 我是星舆车联网实验室Kevin2600。团队成员在漏洞挖掘, 硬件逆向与AI大数据方面有着丰富经验, 连续在GeekPwn等破解赛事中斩获奖项。发现众多产品高危漏洞,并获相关厂商致谢。团队研究成果多次发表于DEFCON等国内外顶级安全会议, 成功入选2021特斯拉漏洞名人堂。星舆实验室拥有特斯拉等诸多靶车供研究使用, 期待更多志同道合的小伙伴加入我们。

在上篇侠盗猎车系列文章中, 我们介绍了滚动码的基础,以及通过爆破的手段打开门锁。感兴趣的同学可去 https://bbs.pediy.com/thread-270866.htm复习一波。在这篇文章中我们将了解更多滚动码的细节以及漏洞CVE-2021-46145的发现过程。

0x01 滚动码

前面我们提到通过拨码的方式来改变码位的滚动码模式。但众厂商早已淘汰了此方式, 转而采用通过密钥算法来产生滚动码。例如这款2014款VW大众 Hella 系的汽车钥匙, 就采用私有的加密模式。

抓包分析后我们可以得知VW系采用OOK 调制模式, 通过Manchester 编码对数据解码。

而每段有效的数据都会以 10101000 作为起始sync-word。

305-312字节则为相应的操作指令。如00011100 为开门, 00101010 为关门, 01000110则为开启后备箱指令。数据图中的标蓝部分为VW系钥匙的滚动码部分。

这里我们可以通过python脚本或URH 自带的比对功能, 对不同指令间的滚动码部分进行比对分析。

除了大众系以外还有Microchip出产的HCS系列芯片在RKE钥匙中广为流行。其使用的便是私有协议KEELOQ。

Keeloq 数据结构共有66bits包含了28bits的系列号, 32bits的滚动码, 以及4bits 的按键功能码和2bits状态码。所采用的编码格式为PWM。

通过RTL_433自带的解码插件成功解码出设备ID号以及滚动码。跟我们手动抓包分析后得出的结果相吻合。

众多钥匙体算法中还有很多其他类型, 比如Hitag也是常见的算法之一。想要熟悉每一套算法, 都需要我们进行大量的分析比对。

例如以下是一款2015年福特汽车的钥匙信号。每一串指令都有相同但又不同之处, 因为缺少官方文档, 所以这里我们只能大胆假设小心求证。可以看到从1-26字节都是值为0的引导码。从27-39 的值也都相同, 这里我们可以假设其为设备ID。很明显的是从40-43字节为开关车门的操作, 其值从ebdc 转换成了f3dc, 所以我们可以推测其跟操作指令相关。而44 字节有规律的递减, 这很可能是计数器。最后的45-53字节各不相同, 则大概率为滚动码。

0x02 CVE-2021-46145

这是我在滚动码研究过程中发现的一个本田汽车钥匙的设计缺陷。事实上这在汽车钥匙的安全研究中已经不是第一次出现, 早在2016年就有研究员在比亚迪汽车钥匙设计中找到同类问题。理论上每当车钥匙的按键按下,滚动码的同步计数器便随之向前增加。同时为了避免车主的误操作, 车钥匙与车端会在一定范围内同时接受N组提前协商好的滚动码数列。

根据滚动码的设计原理, 通常我们是无法使用简单的回放攻击打开车门。但是如果我们把过期的开门指令按特定顺序重新排列并发送, 令人意外的是本田汽车的同步计数器竟回滚了, 也意味着之前过期的开门指令又复活了。如视频所示在特殊指令发送后, 本已过期的指令又恢复使用。

很神奇但也很有趣对吗, 那么除此之外是否还有其他方式, 可以破解滚动码的密钥呢? 敬请期待侠盗猎车-玩转滚动码(下)

0x03 文献

https://bbs.pediy.com/thread-269716.htm

https://bbs.pediy.com/thread-270069.htm

https://bbs.pediy.com/thread-270866.htm

https://www.cvedetails.com/cve/CVE-2021-46145

发表回复

您的电子邮箱地址不会被公开。