0x00 前言
大家好, 我是星舆车联网实验室Kevin2600。团队成员在漏洞挖掘, 硬件逆向与AI大数据方面有着丰富经验, 连续在GeekPwn等破解赛事中斩获奖项。发现众多产品高危漏洞,并获相关厂商致谢。团队研究成果多次发表于DEFCON等国内外顶级安全会议, 成功入选2021特斯拉漏洞名人堂。星舆实验室正在招新, 我们拥有特斯拉等诸多靶车供研究使用, 期待更多志同道合的小伙伴加入我们。
在上篇侠盗猎车系列文章里, 我们介绍了滚动码的解码细节以及漏洞CVE-2021-46145的发现过程。感兴趣的同学可去 https://bbs.pediy.com/thread-271406.htm 围观。在这篇最终章里我们将介绍某款采用自研滚动码算法的无线锁逆向分析, 以及知名滚动码Keeloq破解过程。
0x01 自研滚动码
密码学界有个广为人知的忠告, 千万不要在产品中使用未经考验的“自研”加密算法。因为不知道这算法何时就会被破解。不过总是有人试图挑战这个说法, 今天我们就来看看这些自研加密算法的安全性到底如何。 先来看款某宝较流行的无线遥控家用锁, 映入眼帘的是防小黑盒破译, 美国军方滚码等吸引眼球的广告词汇。作为不明真相的群众是不是立刻就动心了呢?
星舆本着实战出真理的原则, 立刻入手一套开搞。分析目标频率, 抓数据包并导入URH逆向的方式, 前几篇已经讲过这里就不再累述。当然我们先尝试了1次信号回放攻击, 门锁没有反应, 证明确实应用了滚动码。
但是就在准备好好研究一番的时候, 我们发现出现眼前的滚动码规律竟是那么的明显。眼尖的读者是不是一下就看出了端倪。开锁指令每次仅在15, 31, 47位发生变化, 且变化的内容还是固定的。
这不就是最经典的凯撒换位加密吗?而最可笑的是隔三差五的滚码又回到了最原始的码位, 这key space 也太小了, 我们甚至不需要用到爆破。
以下是滚动码缺陷演示视频, 我们只需要抓一次解锁的报文, 之后不断重放最终达到开锁目的。【https://www.youtube.com/watch?v=EruaGuE-cWI】
0x02 滚动码Keeloq
我们在来看看商密算法Keeloq。由Microchip出产的HCS200, HCS300等系列芯片早年在遥控钥匙中应用较广, 其使用的便是滚动码算法Keeloq。
当我们把遥控钥匙芯片接上示波器或逻辑分析仪, 可以看到Keeloq 的信号波形辨识度还是比较高的。首先会有一段用来确定信号有效性的前导码, 然后将滚动码序列号功能码状态码一并发送。
Keeloq 数据结构共有66bits包含了28bits的系列号, 32bits的滚动码, 以及4bits 的按键功能码和2bits状态码。所采用的编码格式为PWM。
在秘钥生成方面, Keeloq 有简单加密, 标准加密和安全加密3种方式。以标准加密为例, 标准秘钥生成算法假设序列号为0x1234567,首先会拿2+序列号通过Keeloq的厂商秘钥操作得到32Bit的Lsb 为0x89074278,然后在拿6+序列号通过Keeloq的厂商秘钥操作得到32Bit Msb值为: 0x0516FBE9哪这个遥控的编码秘钥为 0x0516FBE989074278,与简单加密不同的是,使用简单加密的厂商生产出来的每个设备编码的秘钥都是相同的,而使用标准秘钥生成的根据每个遥控秘钥都不会相同,意思说如果一辆车上学习了两个遥控,这两个遥控的编码秘钥都不是一样的。
我们用模拟器来实战演示一下, 这里我们将厂商秘钥设置为0123456789ABCDEF, 系列号为4141410, 而计数器则从2600起始。
抓包分析下可以看到28bit系列号确实为预先设置的4141410。
在32bit的滚动码报文中包含了计数器等关键信息。
那么接下来就是要解开32bit的滚动码报文。通过程序在解密后的报文中可以看到按顺序排列的滚动码, 这以我们先前设置的起始值 2600 相符。
以下是在真实设备上的演示视频, 在破解出计数器信息后, 我们可以自行伪造新的数据包并发送。[https://www.youtube.com/watch?v=uyk0xOtnUew]
0x03 文献
https://bbs.pediy.com/thread-269716.htm
https://bbs.pediy.com/thread-270069.htm
https://bbs.pediy.com/thread-270866.htm
https://bbs.pediy.com/thread-271406.htm
https://www.freebuf.com/vuls/192356.html
https://zhuanlan.zhihu.com/p/27250481 (特别致谢曾颖涛)
欢迎加入星球一起学习探讨
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
最后于 2022-3-15 11:04
被星舆实验室编辑
,原因: