4CAN——寻找车载计算机漏洞的新工具
概要
现代汽车中含有数以百计的传感器和机械装置,它们通过车载计算机进行相互通信,了解车况和周围环境。这些汽车部件能向驾驶员提供实时信息,远程连接网络,甚至自动驱动车辆。
就和任意一台电脑一样,车载电脑也容易遭受攻击从而导致驾驶员的安全受到威胁,比如软件中的漏洞、物理接触导致的非法接管、以及通过网络非法远程控车辆。近期,Wired杂志和一个由darpa资助的研究团队就证明了这一点。
据Allied Market Research公司的预测,到2025年,全球互联网汽车的市场规模将超过2250亿美元。为了确保汽车上网的安全性,思科在这方面投入了大量资源。其下属的客户评估与渗透团队(CX APT)由来自NDS、Neohapsis和Portcullis的专家组成,专为全球客户提供各种安全评估和模拟攻击服务,且专精于找出互联网车辆中的各种漏洞。
在最近的一次研讨中,Connected Vehicle Security practice发现市场上缺乏一款汽车安全评估的工具。为了给现代互联网汽车的安全性做出过贡献,Connected Vehicle Security practice已经编写并开源一款名为4CAN
的硬件工具(附带软件),这对所有汽车安全研究人员都是件好事。我们希望4CAN
能让安全研究人员和汽车制造商迅速找到车载电脑的潜在漏洞,让汽车在交到用户手上前就变得更安全。
汽车网络是什么样的?
在探讨4CAN
的硬件模块前,让我们先从一些汽车基础知识开始。现代汽车要想有效运行的条件之一,就是能让数百个传感器和机械装置相互通信。当车辆各组件使用WiFi、蓝牙和蜂窝通信协议通信时,车辆网络主干被称为Controller Area Network(CAN),也可称为CAN总线
。
若想物理访问CAN总线,通常需要ODB2连接器,位于驾驶员侧仪表板的下方,不过有时也可以通过移除侧镜或外部灯具来访问。CAN总线对车辆有完全控制权,因此也是安全测试人员和恶意攻击者的首要目标。通常,对WiFi或LTE等外围组件的攻击最终都是为了能访问到CAN总线。
CAN总线的背景
典型的CAN总线架构如下图所示。在安全配置下,汽车关键部件(例如安全气囊和刹车)与非关键部件(如收音机或室内灯)都通过CAN总线进行通信。渗透测试人员和攻击者往往会针对CAN总线进行测试,寻找是否有存在不安全配置。
CAN总线是一种两线式串行总线。每个连接到CAN总线的设备称为“节点”或电子控制单元(ECU)。当设备发送消息或CAN帧时,会通过CAN总线广播,并由每个节点接收。当两个节点同时广播一个CAN帧时,arbitration ID(每个CAN帧上唯一的节点标识符)决定消息的优先级。较低的arbitration ID优先于较高的arbitration ID。
电气方面,CAN总线使用差分信号来减少噪音干扰。有CAN-HI
和CAN-LO
两种信号,互为倒数。此外,总线还有两个120欧姆的匹配电阻,提升通信的可靠性和抗干扰性。下图来自Wikipedia,你也可以Wikipedia了解CAN总线的更多信息。
具有多节点的单CAN总线
汽车网络最简单的实现使用单CAN总线。下图是一个包含3个节点的示例。所有节点都能收到CAN总线中的每个消息,关键组件和非关键组件无任何分隔。
包含网关的多总线架构
一般来说,实际使用中的车辆会设置多个CAN总线,并通过一个网关连通各总线。此网关也会充当防火墙,检查CAN总线ID,确定是否允许某个消息通过。这样,汽车关键组件就和非关键组件分离了开来。
在我们测试的车辆中有4条CAN总线,通过网关连接,架构大致如下:
总线上每个节点的安全性部分取决于网关的隔离能力。在我们这个四总线系统上,测试要求渗透人员能够同时访问这四条总线。
现有解决方案
有几种设备可对CAN总线进行测试。其中大多数使用了MCP2515 CAN控制器,它提供了一个串行外围接口(SPI)与单片机连接,此外还有MCP2551 CAN总线收发器或NXP TJA1050 CAN总线收发器可在CAN总线上产生和接收电信号。以下这个表描述一些目前市场上可用的CAN渗透测试解决方案。
以上每个设备都有其优缺点,但没有一个完全满足我们的需要(易于使用,可同时访问四个总线,价格合适)。以下是当前可用的设备与我们需求的匹配性。
符合我们要求的设备,必须既具有以下特性:
兼容树莓派
能轻易操控120欧姆的匹配电阻
支持SocketCAN,便于Linux集成
便宜
我们的解决方案
我们将最终解决方案称为4CAN
,并在设计时考虑了以下目标:
能验证CAN总线的内部通信策略。
模糊测试组件以便挖掘漏洞。
能测试出控制车辆的CAN命令。
简化使用设置,保持设置同步。
设计
George Tarnovsky是CX APT的成员之一,也是4CAN设计的创始人。由于树莓派包含5个硬件SPI通道,所以我们决定使用MCP2515 CAN总线控制器,它可以通过SPI与树莓派对接。此外我们还用一个四端口DIP开关来代替物理接线,以便易于操控120欧姆的匹配电阻。最后再使用MCP2551 CAN总线收发器作为CAN总线的收发器。
以下示意图描述了高层设计,更详细的版本可以在这里找到。
PCB布局
为了提升兼容性(尽可能符合Raspberry Pi HAT的规格),我们使用了创造性的解决方案来打包所有组件,而且其中不包含相机插件和EEPROM(Electrically Erasable Programmable read only memory)。
所有组件都安装在面板上,而且为了减少体积,除了USB-UART连接器,其他组件都尽可能选择最小的版本。我们没有从头组装,而是使用一个包含所有电路的预制板。这块板子位于4CAN
顶端。而电阻封装进一步减少了零件数量,比四个单独的电阻占用的空间更小。我们没有使用单个晶体振荡器驱动所有四个CAN总线控制器,而是只控制一条。这可能会导致时钟偏移,因为每个组件接收的时钟是串行而不是同时并行的。为了减轻时钟偏移的影响,我们将时钟线尽可能缩短。为了降低成本,我们还采用了2层PCB设计。虽然这影响了路由,但成本明显低于具有多层结构。最后我们还添加了标准的40针GPIO头,以便可以使用剩余的GPIO。
最终的布局如下所示:
对比
之前
为了同时测试四条CAN总线,我们需要三个CAN总线设备。两个TT3201三通道CAN Capes安装在Beaglebones(单板Linux计算机)上,一个CanBerryDual(双通道CAN总线模块)安装树莓派上。我们还有另一个树莓派来实现远程测试。通过以上配置,我们可以往任意两个CAN总线的通道中发送CAN帧。但是,它有点笨拙,附有大量的连接,这使得连接跟踪和测试聚合变得非常困难。
之后
在使用了4CAN
之后,测试流程的配置大大简化了。通过一个树莓派,我们可以同时测试四条CAN总线通道,由于4CAN还有40针的GPIO头,所以我们可以远程控制测试车辆。
使用4CAN的便捷性是显而易见的。
Before 4CAN:
Using 4CAN:
用法
为了使4CAN与树莓派通信,必须为树莓派配置四个SPI通道,并将其绑定到特定的GPIO针脚。此外,树莓派的Linux内核还需要其他驱动程序,例如SocketCAN,它能将CAN设备驱动程序以网络接口实现。从用户角度来看,can-utils会加载SocketCAN驱动程序,然后能嗅探CAN总线流量、发送CAN消息、重放CAN流量、建立CAN网关等等。
中间人
为了确定某个组件是否正在发送或接收消息,或者想修改CAN中的通信流量,可以将4CAN
插入CAN总线和某个组件之间,这样就能捕获和修改通信流量。上述攻击需要can-util中的cangw
命令和我们提供的脚本去搭建所需的连接。
嗅探CAN通信
我们还可以用4CAN
在一条CAN总线上发送一条特制的CAN消息,查看该消息是否出现在不同的CAN总线上,以此来测试CAN总线之间的通信。这样可以让我们了解网关是如何过滤或修改消息。在某些情况下,我们还能观察到不同总线上相同消息中的CAN ID的变化,相关脚本如下。
工具
你可以在Github上找到4CAN。
本文由白帽汇整理并翻译,不代表白帽汇任何观点和立场
来源:https://blog.talosintelligence.com/2019/08/new-4can-tool-helps-identify.html?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+feedburner%2FTalos+%28Talos%E2%84%A2+Blog%29
最新评论