侠盗猎车 -- 玩转滚动码(上)

原文首发于看雪,作者为Kevin2600,文章联系作者授权转载。

0x00 前言

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

在前两篇侠盗猎车系列文章中, 我们介绍了固定码逆向分析的思路和原理。感兴趣的同学可去(https://bbs.pediy.com/thread-269716.htm和(https://bbs.pediy.com/thread-270069.htm) 复习一波。值得一提的是其中一个测试目标无线门锁, 在锁的接收端与遥控器部分都带有一个8 bits的DIP开关。每一bit又可有上中下3种变化码位。只有当两边的bits拨码位相匹配时, 遥控器才能将门锁打开。

相对传统不可更改的固定码而言, 这大大提升了无线门锁的码位空间。以下是分别代表了3段不同拨码位的信号频谱图, 可以看出这3段信号的后半部分完全相同, 而每段第1位的信号却各不相同, 因为随着1st bit拨码位的更改, 以其相对应的信号也随之改变。是不是发现有点滚动码的意思了, 这种设计给重放攻击带来一定困扰。

0x01 爆破

不过其影响非常有限, 因为拨码仅8bits, 3^8 总共只有6561种组合。对于如今电脑算力实在不费吹灰之力, 且大多数的无线门锁系统并没有防爆破机制。这里跟大家推荐一款为无线信号逆向破解而生的软件Universe Radio Hacker。想要逆向常见的无线钥匙系统使用URH足够了。如下图通过URH来判断无线信号的频率范围和调制方式。

在捕捉到无线门锁的信号后, 还可以通过URH进行可视化分析。如下图门锁遥控信号的固定码一览无余。

前面提到过此款无线门锁的拨码变化空间有限, 所以可以在分析完信号结构后生成所有可能的排列组合, 通过URH的Fuzzing 功能对门锁进行爆破攻击。

以下是URH爆破无线门锁指令演示视频 (https://www.youtube.com/watch?v=xuIouejbXss)

0x02 De Bruijn 序列

传统的爆破攻击往往需要很长的时间, 从实战角度来说我们还需要进行优化。这里要跟大家介绍下De Bruijn序列, 这是由荷兰数学家Nicolas Govert de Bruijn命名而来。De Bruijn序列的表达式为B (k,n)。我们用常见的银行ATM密码举个例子, k为所有的数字组合{0,1,2,3,4,5,6,7,8,9}, n则是密码的总长度假设为4, 因此De Bruijn表达式为B (10,4)。

这样的密码总共可有10,000种组合, 如果每组都单独尝试仍需要花很长的时间。电子电路中还有一个shift register的概念, 如下图中只出现了1组数列, 但却可用于3次密码尝试。因为如果采用了shift register机制, 每次尝试电路寄存器都自动向前移动一位。

在举个例子我们用二进制数列来分别表示1,2,3,4:

现在假设密码是111111000000。我们首先尝试0111111000000 这12bits数列, 这显然不对, 但如果目标系统用shift register, 我们则无需在尝试另一组12bts数列, 因为shift register 每次仅向前移动1bit 变为111111000000, 密码正确。在无线指令爆破攻击中, 我们可以提前生成具有De Bruijn序列特性的数组。从而大大减少了所需时间。以下是利用De Bruijn序列爆破无线门铃视频 (https://www.youtube.com/watch?v=o3CjamtVbjQ)

0x03 总结

但当我们的目标是汽车钥匙滚动码的时候, 即使De Bruijn序列也不够用。这就需要我们找到滚动码算法或者系统本身的设计缺陷。敬请期待玩转滚动码 (中) 篇的内容。以下是某款汽车滚动码缺陷演示视频 (https://www.youtube.com/watch?v=9JKg3IUJYPU)

0x04 文献

http://samy.pl/opensesame/

https://github.com/jopohl/urh

https://www.usenix.org/conference/woot18/presentation/pohl

posted @ 2022-11-21 17:30  1go0  阅读(119)  评论(0编辑  收藏  举报