看上去,一切都很土豪、轻松、有趣对吧?事实上,他下面要解密的事情会让你竖起汗毛——正儿八经买的一辆新车,可以轻而易举地被他开走?!
其实,在11月,刘健皓就展示了这一酷炫的技术。那是一个天空都飘着几个字:“不要惹黑客”的一天,360 公司大楼下列阵了二十几台豪车,利用神秘的技术,刘健皓和团队轻松逐一破解了这些车。
这次,他就是来详细解密——他是如何做到的。
CAN 总线留下的 BUG
一切危险的源头是因为汽车的CAN总线设计。
CAN 是控制器局域网络 ( Controller Area Network ) 的简称,是在1986 年,由以研发和生产汽车电子产品著称的德国 BOSCH 公司开发的,并最终成为国际标准(ISO 11898),是国际上应用最广泛的现场总线之一。
对于汽车,有很多种攻击途径:OBD 盒子、WI-FI、蓝牙、车机 APP、车联网平台……它们都要经由 CAN 总线进行控制。如果 CAN 总线安全,那么即使黑客利用上述途径,对车耍花招,汽车整体安全还是可以被保证,这些花招都仅仅是“娱乐”而已。但是,如果 CAN 总线不安全,这样的汽车就可以受到“狗带”般的攻击——你拿着车钥匙也没用,这车现在属于控制了 CAN 总线的黑客。
如何守卫 CAN 总线的安全,要从 CAN 总线的结构说起。
故事是这样开始的,很久很久以前……
传统的汽车线束结构是这样:很多控制器链接在一个东西上,控制器之间可能还会互相干扰……
直到有一天,人们忍不了了,设计出一个总线架构,就像交换机一样,所有 ECU (电子控制单元)都要经过这个“交换机”:交换信息,协调指令。
但是,现在看来,CAN 总线还有几个致命的攻击点:
1.它遵从 CSMA/CD 的交流方式,在任何一个节点搭上总线,都可以看到总线的数据,所以黑客只要找到一个点攻破,就可以看到车内所有数据;
2.它支持多路访问,网络上所有节点接收数据都经过一条总线,所有数据都在一条线上,发的数据是广播的,所以可以看到很多控制器发的控制指令,如果控制指令是明文,那么就可以通过重放的方式控制汽车的一些设备;
3.它有一个冲突检测机制,所有节点在发送数据的过程中,会不断检测所发送的数据,预防与其它节点产生冲突,由于这样的机制,只要一直在传统线中发送数据,就可以导致 CAN 总线拒绝服务,车上任何控制器都没有反应。
刘健皓介绍,只要知道 CAN 总线的数据、ID、发送周期,那么黑客就可以通过重放来判断某个控制功能。
所以,对 CAN 总线的攻击其实十分危险,可以窃听总线数据、伪造协议,实施重放攻击和拒绝服务攻击。这意味着,如果做了这些动作,车处于极度危险中。
万能车破解器真的能破解一切车?
是的,只要车有 CAN 总线设计。
先看一下理论分析——汽车 CAN 网络逆向过程主要分为4个步骤:筛选、定位、破解信号、验证和保存。
第一步:筛选
使用市面上一些 USB-CAN 的工具与汽车的 CAN 总线相连,可以获取 CAN 总线上广播的 CAN 数据包,从大量数据包中进行逆向分析,找到想要的 CAN 数据包。
第二步:定位 CAN_ID
对于车身的某一项功能的控制,只需要一个 CAN ID 的数据包即可,这时只需要单纯地重放即可达到攻击的目的,还有一些功能需要多个 CAN ID 的数据包联合才可以,还有一些 CAN ID 数据包上带有计数器,在攻击时必须加上计数器才能绕过预碰撞系统的阻碍。
第三步:破解信号
CAN_ID 的数据包里一共有8个字节,每一个字节代表什么以及这些字节上的数字都是不固定的,比如速度表上的数值是根据公式计算出来的,如果改变成想要的数值(就是电影里那样改变速度置人于死地),需要带入公式才能得到正确的结果。
在测试的过程中需要触发汽车动作,再确定 CAN_ID 的变化,然后找到对应的值,这样就可以把信号和汽车动作破解出来了。
第四步:验证和保存
结合上述结果,做成 FUZZ 工具,进而发现更多的汽车漏洞,如果需要修复的话,当然也是可以的。
实际操作起来,要不断解决一些困难。
刘健皓说:“我们拿一些传统 USB 工具接到车上面,发现刷屏非常快,分析 CAN 协议时,看执行动作,眼睛都要花掉。”
为了能清晰地分析数据,没有工具,那就自己造一个。因此,刘健皓及他的团队造出了一个“CAN—Pick”。这个“CAN—Pick”就是他们口中的“汽车安全总线测试平台”——测试汽车总线是否安全。
其实,它也是一个万能车破解器。
虽然,它的外表看上去没有那么酷炫狂拽,仅是一个可以连接车的小黑盒和一个软件平台。
那么,究竟如何操作,这辆车就会被黑掉呢?
拿着电脑和小黑盒连接到车身,车身在静止状态时也会产生一些数据,这些数据被称为干扰数据,第一步就是获得这些干扰数据。小黑盒连接上的时候,软件平台上就会出现可视化的干扰数据;然后,操作车灯,获得车灯操作时的数据包,与干扰数据进行比对,从而发现真正能够下达操作车灯的指令数据包。把这个新获得的数据包进行重放,那么就可以操作车灯。
其它操作同理。
360 车联网安全中心另一工程师严敏睿介绍:
这款软件支持全平台,有多种硬件可以进行试配,不管是市面上的,还是自己开发出来的,都会提供 SDK,让你自己自行进行试配。同时可以在线编写一些插件,这些插件可以共享到服务端,也可以从服务端下载一些别人编写的插件进行共享,多个人可以同时对这款软件进行操作。
这意味着,“全民”可以加入到“黑车”——哦,不,是测试车是否安全的平台中来。
目前“CAN—Pick”有哪些插件功能?据刘健皓和严敏睿介绍:
主要包括 CAN-BUS 总线协议的 Fuzzing、 UDS 探测,数据报文分析,总线数据加密强度检测,数据通过可视化可以看到可视化的图,操作车身的一些控制,开车门、关灯、开引擎,可以实时看到数据中哪些变化,非常容易发现哪个 ID ,哪个数据再控制哪一项车身的东西,最后还有定制化功能的在线编写。
不过,这一切看上去好像很简单,其实还有多种因素的干扰,比如,时间间隔、数据包中有效数据的提取分析……,这些都是包括刘健皓在内的各个安全工程师正不断完善与探索的领域。
当然,作为安全研究人员,总是要挖出一个坑,然后试着填上。
既然 CAN 总线可以被攻击,这个工具也可以检测出一辆车是否安全,那么有没有什么方法可以阻止这一切发生?
刘健皓告诉雷锋网(公众号:雷锋网)宅客频道,汽车总线设计之初是在封闭网络环境中使用,并没有考虑安全问题,对于总线网络结构及控制指令的设计,要增强各 ECU 之间的验证措施,包括使用时间戳和校验的方式防止重放破解攻击,提高控制协议被逆向的成本,同时要控制好联网部件的安全性。
他们现在的思路是,对 CAN 总线进行安全加密,比如,在数据包中是否可以插入一些加密算法。刘健皓透露,目前,清华大学的研究团队也正在对这一领域进行研究。