0%

智能汽车安全攻防.md

基础概念

V2X

V2X(Vehicle to X)通信:表示车与X通信,X可以是车(Vehicle)、路(Road)或者其他相关基础设施,相应地也就有了V2V(Vehicle to Vehicle,车与车通信)、V2I(Vehicle to Infrastructure,车与基础设施如道路、服务器等通信)、V2P(Vehicle to Pedestrian,汽车与行人通信)等概念。V2X的典型应用有左转辅助、紧急刹车提示、闯红灯警告、过弯速度警告、施工路段提醒、实时天气信息提醒等。

高级辅助驾驶系统

高级辅助驾驶系统(ADAS,Advanced Driver Assistance System):ADAS是在驾驶过程中辅助驾驶员的系统,它的功能包括安全告警功能、自适应控制功能、信息提示功能等,可在通过传感器检测到可能的危险时对驾驶员发出告警或者接管汽车某些控制功能(比如紧急刹车功能),以及根据环境自动对汽车的某些功能进行控制,比如根据环境亮度自动调节车灯亮度、自适应巡航控制、盲点警告、自动变道等。ADAS 技术通常依赖于各种传感器和通信技术,例如依赖雷达或者摄像头检测与前车的距离,依赖V2V获取附近车辆信息,依赖摄像头检测车道等。

自动驾驶级别

汽车网络安全

攻击向量

即攻击面:

  • 间接物理访问
  • 短距离无线访问
  • 远距离无线访问

间接物理访问

通过这些攻击面发起攻击通常涉及对与这些攻击面进行交互的设备、媒介进行攻击,例如要通过OBD或者播放器进行攻击就要对诊断设备、多媒体光盘等进行恶意修改。

obd 在线诊断接口

OBD是在线诊断接口(On Board Diagnostic interface),是汽车上最重要的一个物理接口,汽车维修人员可以使用专用诊断设备通过这个接口读取汽车的运行状态数据、进行主动测试(例如控制喷油器或者点火器)等功能, 但是攻击者也可以通过这个接口直接访问汽车内网关键的CAN总线进而完全控制汽车的物理功能,造成威胁。

现在有很多远程诊断系统通过OBD盒子(一种插在OBD接口上的硬件设备,作用是将数据无线传输到手机或者服务器,然后对数据进行可视化或分析)远程或近程无线访问汽车数据或者控制汽车,如图2-6所示。这种OBD盒子通常利用蜂窝网与服务器通信,或者利用蓝牙或Wi-Fi与手机通信,再由手机将数据传给服务器。这些通信链路如果被攻击就会使攻击者获得OBD接口的访问权,进而对汽车发起攻击。

OBD是一个潜在的攻击入口,原因是通过OBD可以对汽车进行控制。例如,利用汽车自带的诊断测试功能可以控制一些执行器执行某些操作(如控制喷油器喷油)。通过OBD还可以对ECU的固件进行篡改(如加入恶意代码)等。

娱乐系统

现代汽车的娱乐系统不是孤立的模块,很多娱乐系统都与CAN总线相连(比如需要根据汽车的速度调节音量,通过多媒体显示汽车参数,或者通过多媒体系统的USB接口升级汽车ECU的固件等),所以通过多媒体系统是可能攻入汽车内网的

攻击者可能通过在光盘或者其他可移动设备中植入恶意程序,然后通过社会工程学的方式说服用户播放恶意光盘、插入恶意 U 盘等。攻击者还可能通过攻击用户的手机来安装恶意程序

短距离无线攻击面

间接物理访问有一系列缺点,如操作复杂、无法控制攻击时间(例如CD什么时候播放取决于用户)等,而短距离无线攻击要灵活得多。汽车的短距离攻击向量包括蓝牙、Wi-Fi、无钥匙进入、RFID、胎压管理系统,以及DSRC[专用短距离通信(Dedicated Short Range Communication),专为汽车安全应用通信而制定]等,对于这些攻击向量我们假设攻击者可以获取到对应的收发设备在汽车附近的收发数据。

蓝牙

传输距离一般为10米,但是有研究表明可以使用定向天线及信号放大器等增加距离。蓝牙系统的漏洞研究在无线安全领域是一个非常热门的研究课题。

无钥匙进入系统

无钥匙进入系统又分为遥控无钥匙进入系统(RKE,Remote Keyless Entry,如图2-8所示)和被动无钥匙进入系统(PKE,Passive Keyless Entry)。

RKE 就是我们常见的遥控器,可以遥控开门或者遥控点火启动(RKI,Remote Keyless Ignition),当用户按下遥控器的按钮后,遥控器发射出一串射频信号,汽车接收到信号后判断信号的有效性,再执行相应动作。这串射频信号是加密的,俗称滚动码。

当驾驶员通过按钮或者触摸感应器触发系统后,汽车会通过天线发送挑战信号(比如一个随机数),钥匙接收到后根据这个挑战信号利用密钥生成一个挑战结果(例如利用和汽车共享的密钥对这个挑战信号进行加密)并发送给汽车,汽车接收并验证信号是否正确合法

PKE 又被称为智能钥匙,驾驶员可以将钥匙放在衣服口袋或者背包里不用拿出来,然后走到汽车附近直接触发车门把手(按钮或者触摸感应器)就可以打开汽车。进入汽车后只要钥匙在检测范围内就可以按启动按钮启动汽车,如图2-9所示。

RFID&Hitag

钥匙里嵌入一个RIFD,在钥匙孔附近安装RFID天线,当驾驶员插入钥匙后RFID会和ECU进行相互认证,认证通不过将不能启动,这就防止了通过硬搭线盗取汽车。

胎压管理系统TPMS

在汽车的轮胎上安装胎压传感器将采集到的胎压数据通过短距离无线通信传递给管理模块,管理模块会在胎压过低时发出告警信息,TPMS的工作频率在315MHz左右。这些信号很多没有采取加密等安全措施,可以被伪造

wifi

很多新款汽车提供了Wi-Fi热点功能,手机或笔记本电脑可以通过这个热点上网, 关于Wi-Fi的破解攻击方法有很多,在部署和配置时稍不注意就会出现安全问题,例如弱密码算法、弱密码、密码泄露、伪造热点等一系列问题

专用短距离无线通信DSRC或V2X

DSRC由汽车专用的通信信道和一系列标准构成,典型应用是ETC收费和V2V通信


如何保证驾驶员得到的告警信息是准确的而不是被恶意伪造的?如何保证驾驶员的位置等隐私信息不在通信过程中被暴露?

1
问题通常都出在通信的保密性、通信密钥的管理、数据解析程序漏洞等几个方面。攻击者利用这些漏洞可以造成不同程度的影响。

远距离无线攻击面

汽车上的远距离攻击向量包括 GPS、卫星接收机、数字广播接收机等公用的通信链路,还包括蜂窝网、远程协助系统(如OnStar)、远程控制系统(如Jeep Uconnect和宝马ConnectedDrive)等专用的通信链路。 这些远距离攻击向量是最大的威胁,因为黑客可以在任何地方发起攻击,

汽车安全指导标准

五星汽车网络安全计划

1.设计安全
· 尽量采用经过行业测试的标准。
· 严格的供应链控制。
· 减少攻击入口。
· 独立的、从攻击者角度进行的安全测试。
2.三方合作
· 与第三方专业的安全研究人员合作,与安全公司合作。
· 建立漏洞奖励机制,例如很多厂商已经推出了漏洞悬赏计划(Bug Bounty Program)。
· 与独立的漏洞平台合作。
3.证据采集
· 在汽车上部署类似黑匣子的装置对汽车的数据进行记录,方便发生攻击后的取证调查。
· 在记录数据的同时注意保护车主的隐私。
4.安全的软件升级机制
· 当车辆出现安全漏洞时要能够通过可靠、安全的软件升级渠道打补丁,例如后面章节我们会看到克莱斯勒和特斯拉汽车的升级方式有很大区别。
· 对漏洞的快速响应。
· 健壮的漏洞报告机制,在出现漏洞时能够可靠快速地通知车主或相关方面。
5.功能模块划分及隔离
物理隔离是防止被攻击的次要模块(如多媒体系统)影响到主要功能模块(如转向及刹车模块等安全相关的模块)的唯一办法,很多厂家正在或者计划采用逻辑隔离,但是事实(例如后面会讲到的 Jeep 攻击案例中的 SPI)说明逻辑隔离总能有方法绕过。
· 功能模块物理隔离。
· 系统完整性检查及系统恢复。
· 抗破坏保证。

汽车内部网络

汽车是由许多子系统组成的一个大系统


自动驾驶或者自主驾驶汽车还会配备各种感知道路和环境的传感器,如雷达、摄像头等。上面提到的每个子系统都由单独的或共享 ECU 进行控制,这些 ECU 相互之间又经过汽车内部网络(如CAN)相互连接,共同实现对汽车的整体控制

现代汽车几乎每个功能模块(如刹车系统、发动机系统、变速器系统等)都有对应的电子控制单元,也叫电子控制模块ECM(Electronic Control Module)。通常我们所说的ECU指的不是某一个具体模块,而是指一类模块,是一个统称,比如控制发动机的ECU叫ECU(Engine Control Unit)或者EMU、控制变速器的ECU叫ETC(Electronic Transmission Control)等,这些都称为ECU

常用汽车的ECU模块示意图:

传感器对车辆内部及外部的状态进行感知,就像人的眼耳口鼻一样,对传感器的欺骗攻击也是常见的攻击方式,例如,已经有研究结果表明自动驾驶汽车采用的Lidar和摄像头可以被欺骗

控制器局域网

CAN(Controller Area Network)是控制器局域网, CAN的诞生只是为了实现更大范围的协同功能和全局控制
随着汽车技术的发展,单纯地对汽车的某些功能模块进行电子控制无法满足越来越多的功能要求和控制需求,比如前面提到的自适应巡航控制功能就需要发动机、变速器、刹车等功能模块相互协作,相互协作就意味着需要进行通信交流, 在汽车里,各个功能模块或者各个ECU也是通过专有的通信网络交流沟通的,这就是控制器局域网

网关是一种充当转换重任的计算机系统或设备,使用在不同的通信协议、数据格式、语言,甚至体系结构完全不同的两种系统之间,网关是一个翻译器。与网桥只是简单地传达信息不同,网关对收到的信息要重新打包,以适应目的系统的需求。

汽车内部采用了多种网络协议和多种网络拓扑结构,采用的协议有CAN、MOST和LIN,有的汽车(例如特斯拉)还采用以太网(Ethernet)和 CAN 总线

车联网

车联网(IoV,Internet of Vehicle)是移动互联网和物联网相融合的技术,它囊括了所有通过后装或者原厂配置无线通信模块而具有无线网络连接能力的新老车型,它涉及的技术有通信、环保、节能及安全等。IoV是一个动态的移动通信系统,涉及车与车通信V2V,车与路通信V2R(Vehicle to Road)、车与人通信V2H(Vehicle to Human)、车与传感器通信V2S(Vehicle to Sensor)等。

已经有攻击案例表明黑客可以通过V2V 通信跟踪到车辆的位置,攻击者甚至可以通过车载多媒体系统远程窃听驾驶员的谈话。行车记录仪等设备在记录视频和音频数据时,如果这些数据在传输和保存的过程中处理不当,势必导致隐私的泄露。

V2X是如何提高驾驶安全性的

碰撞预警

因为没有交通信号灯而且两辆车的驾驶员都看不到对方,但是如果这两辆车都配备有V2V功能,那么在它们驶向十字路口时会收到警告信息,这样就可以提前采取措施避免碰撞。

左转辅助

左转辅助(LTA,Left Turn Assist):LTA在车辆左转弯且可能发生碰撞时会提醒驾驶员。

紧急刹车提示

紧急刹车提示(Emergency Electronic Brake Light):当前方的某一辆配备了V2X功能的汽车急刹时,后车会收到提示,这在大雾、大雨天气或者前面有车辆阻挡视线时非常有用。

过弯速度警告

施工路段提醒

施工路段提醒(Reduced Speed Zone Warning):这个功能会提醒驾驶员减速、变道或者准备停车

实时天气信息提醒

这个功能会通过 V2I 下载实时天气信息和位置,必要时向驾驶员发出告警。

值得注意的是,这些功能都要依赖车辆广播的信息实现,这些信息的来源是否可信、传输是否可靠等都是需要解决的安全问题。与传统的安全功能(如 ABS、安全气囊等)不同,V2V 功能的实现需要车辆之间的配合,即车辆需要实时地采集、处理、传输并分析数据,这些数据的传输和处理是提示信息的基础。
V2V 网络需要数据交换,数据交换的车参与主体必须要能够信任对方,这就要求接收数据的V2V设备能够实时地对收到的数据进行验证。另外,V2V系统还要能够抵御来自内部和外部的攻击,以下是三个需要保护的部分。
(1)通信[传输媒介、传输车辆消息或数据,证书(后面讲解),以及其他数据交换所依赖的模块],例如前面提到的V2V安全应用,如果攻击者可以伪造这些告警数据,将会导致安全隐患。
(2)设备(车载设备、路基设备等)。要保证通信安全,势必会涉及前面介绍的加密、证书等安全机制,设备中存储着证书、密码等敏感信息,因此需要保护好。
(3)运营组织(如管理后台、V2I 基础设施等),通过管理后台来攻击可能造成很大的影响,就像已经出现过的针对国内某品牌汽车的管理后台进行攻击的案例表明的那样,攻击者可以通过管理后台打开车门,获取车辆信息、车主信息等。

CAN 总线

高速CAN总线(High Speed CAN,CAN-C):CAN-C的标准是ISO11898-2,速率是 125bit/s 到 1Mbit/s,因此这个速率可以满足驱动系统的实时性数据传输要求。CAN-C经常被用于连接以下子系统:
· 发动机控制单元
· 变速器控制单元
· 车身稳定控制
· 仪表系统

低速CAN总线(Low Speed CAN,CAN-B):CAN-B的标准是ISO11898-3,速率是 5~125kbit/s,对汽车舒适系统和车身控制系统(如天窗、车门等)的一些应用来说这个速率是足够的,CAN-B应用的例子如下:
· 空调系统(AC)
· 座椅调节
· 电动车窗
· 天窗控制
· 后视镜调节
· 灯光系统
· 导航系统控制

CAN总线还被应用于车辆诊断系统,汽车的各个ECU通过CAN总线连接,诊断设备可以直接接收诊断所需要的数据
CAN数据包是广播到网络上每个ECU的,而且CAN数据包没有源地址和目的地址,只有一个消息ID,收到数据的ECU根据这个ID判断是否对这个数据感兴趣,从而传输到应用层进行处理。因此,如果攻击者取得了CAN总线的访问权,他很容易就可以监听网络上的数据或者伪造数据。同时,也提高了逆向分析的门槛,因为很难直接判断到底是网络上哪一个ECU发出了某个ID的数据,即溯源难。

由于CAN总线经常被用于传输控制信号,伪造这些信号就非常简单。ECU连接了各种传感器和执行器,在一些情况下,一个ECU会发送CAN消息指示其他ECU执行某个动作(例如,刹车或加速),或者其他 ECU 根据某些信号自行判断是否需要执行某些动作。

汽车里通常采用双绞线来做传输介质, 这两条线一条作为CAN-H,另一条作为CAN-L。这两条线通过差分信号传输数据以达到抑制共模干扰的目的


距离限制:由于数据在导线上传输会发生延时,为了使接收节点能够正确地接收数据,对数据的传输速率和导线长度有限制。
· 1 Mbit/s,导线长度在40米以内(标准)
· 500 kbit/s,导线长度在100米以内(建议)
· 250 kbit/s,导线长度在250米以内
· 125 kbit/s,导线长度在500米以内
· 40 kbit/s,导线长度在1000米以内

CAN协议的特点

去中心

CAN协议不需要中央控制节点来协调通信,也就是说,网络上的节点都是平等的,每个节点都可以随时发送数据,一个或者多个节点损坏不会影响其他节点的通信。由于没有中央控制节点来协调数据传输,所有节点可能在任意时刻尝试发送数据,而这个尝试是否成功取决于当前总线是否空闲,以及是否通过总线仲裁(及多个节点同时访问总线时允许谁发送数据)。

基于消息的寻址

CAN不对网络中的节点进行寻址而对消息进行寻址,每个消息都有一个消息ID,根据ID判断是什么数据(例如速度消息、车窗控制消息等),但是各ID的消息里也可以有多个信号,所以每个节点发送消息时都是广播的,接收节点只接收那些感兴趣的ID的消息

消息ID分为标准的11比特(CAN2.0A)和扩展的29比特(CAN2.0B)两种。11比特长的ID可以编码2048个不同的CAN消息,而29比特长的ID能编码的不同的CAN消息非常多。汽车中常用11比特CAN ID。
基于消息寻址的一大优势就是网络中的节点不需要知道网络的配置,只需要接收和发送数据就可以,这样系统就非常灵活,例如一个ECU需要新的信息,它可以直接将这个信息对应的ID加入接收消息的表中。当有新节点加入网络时,也可以直接接到网络上,不需对网络上的其他节点进行修改。

总线仲裁

如果总线空闲(即隐态),那么任意节点都可以发送。CAN消息以一个显态作为帧开始(start of frame),接着就是消息ID。当有多个节点同时发送时,ID最小的消息优先发送且不会有数据丢失,这种仲裁方式允许显态重写隐态(即某一个或几个节点发送的是隐态,另外一个或几个节点发送的是显态,则总线上的电平是显态)。每个节点将消息ID一个比特一个比特地发送到总线上,MSB先发送。在这个仲裁过程中,每个参与仲裁的节点都将总线上的电平与自己发送的电平做比较。当某节点发送的是隐态而总线是显态时,就知道自己仲裁失败,而一个高优先级的消息(ID小的)则可以继续发送不被打断,因为 ID小且MSB先发送而逻辑0(显态)可以重写1(隐态)。

当两个相同ID的消息被同时发送时会出现错误,所以CAN总线上不允许不同节点发送相同ID的消息。值得注意的是,当攻击者取得总线的访问权后,不停地发送优先级最高的消息(即ID=0),这时 其他消息都得避让,造成拒绝服务攻击。

CAN消息协议

CAN总线上传输的有以下4种帧。
数据帧:消息中包含发送节点的数据(如发动机转速)。
远程帧:一个节点向其他节点请求数据。
错误帧:当一个节点检测到错误时,将发送错误帧通知其他节点。
超载帧:当一个节点无法及时处理数据时,即正在处理之前发送的数据,发送这种帧来告诉其他节点延迟发送下一个数据。

很多时候,我们在利用工具读取或发送CAN数据时都只关心数据帧,所以接下来介绍数据帧。数据帧的结构:

很多工具可以用于抓取CAN数据,图6-10所示为用一款名为BusMater的免费软件,结合Kvaser的硬件,通过OBD接口上的CAN总线抓取到的数据帧。

ISO-TP

虽然CAN协议标准里规定了数据最长为8个字节,但是有标准的基于CAN的上层协议用于发送大于8个字节的数据,比如ISO-TP或者ISO15765-2,根据这个标准可以通过CAN总线发送任意长度的数据

统一诊断服务

统一诊断服务 UDS(Unified Diagnostic Services)对应的标准是 ISO14229, 它定义了一系列诊断服务(service),这些诊断服务允许诊断仪(client 客户端)控制ECU(server服务器)的诊断功能,这些功能包括电子燃油喷射、自动变速箱和ABS系统,而这些控制单元都是通过车上的串行数据链路(如CAN总线)连接起来的。说它是独立于数据链路层的也就是说它可以基于各种数据传输协议实现,如基于CAN、Wi-Fi、FlexRay等。基于CAN的UDS的具体实现标准是ISO15765-3

诊断会话控制

10 这个服务和ECU建立一个诊断会话,在其他命令发送前这是必需的

安全访问

27 为了完成许多敏感诊断行为,有必要对ECU进行鉴别,这是由安全访问服务完成的。有多种级别的访问可能。首次请求是向ECU请求一个密码种子,ECU和发送者共享一个密码函数和密钥,给出种子后才会发出响应消息。然后,发送者发送根据密码种子计算的结果给 ECU,以证明其拥有密钥。用这种方式,实际的密钥不会在CAN网络中传输,但反过来进行非重复的复杂响应就值得商榷了

输入/输出控制

从安全研究者的角度看,其中一个有趣的功能是输入/输出控制。这个测试功能允许经授权的工具控制或者监视 ECU 的外部输入。例如,可以让 ECU 假装正在接收某个传感器的值以让汽修工判断传感器是否出了问题。

基于局部识别码的输入/输出控制

这个服务很像输入/输出控制,是丰田汽车针对诊断测试所特有的服务。这些类型的诊断测试对于安全研究人员来说很有用,因为它们可以验证汽车的某个功能。

程序控制

这个服务像是ECU里的RPC服务,它允许用户让ECU执行一些预编码的程序。
第一个字节01告诉ECU我们想做什么,01的意思是开始程序。接下来的两个字节是程序识别码,在这个例子中是FF 00。剩余的字节是子程序的参数。ECU可能有一些程序控制服务或者根本没有。

请求下载

最根本的服务是请求上传和请求下载服务,这些服务可以导出或上传ECU的数据

CAN分析工具及逆向分析方法

对汽车进行安全测试需要模拟攻击者对汽车发起攻击。攻击者要通过CAN总线使汽车执行刹车、转向等危险操作前了解CAN总线上的控制数据,这就需要对CAN数据进行逆向分析,破解控制协议。
CAN 协议的分析可以使用汽车行业所采用的标准工具。例如,VehicleSpy、BusMaster、CANSpy等,还有一些安全研究人员使用的开源工具如CANToolz,本节就来介绍这些分析CAN总线的硬件工具及配套软件。

python CANToolz

示例:
CAN开关过滤器扫描检测哪个CAN帧可以通过诊断接口到HU并返回。
中间人与防火墙(ECU ID检测)检测哪些包对应选定的“行为”。
重放可以用于发现哪些包对应产生哪些“行为”,即逆向分析用。
Ping发现(支持ISO TP和UDS)、检测UDS等。

CAN协议逆向分析举例

CAN 数据库是描述 CAN 消息含义的数据,一般是一个文本文件,属于厂家的保密信息。因为很多CAN消息的具体含义由厂家定义,所以CAN数据库可能会随着汽车型号的不同而不同。常见的CAN数据库格式为.dbc文件,VehicleSpy等专业的分析软件都支持这个格式,而BusMaster支持的CAN数据库文件为DBF

确认简单的开关信号可以在打开或关闭开关的同时查看数据流是否有对应变化;速度消息可以通过寻找随着车速变化而变化的CAN消息确定。
找到如速度或者转速这样的消息后可能还需要进行修正(加减修正量、乘以修正系数等)才能得到正确的物理值。

LIN总线

在汽车内,还有许多ECU的控制并不需要CAN这样高速率和高安全的通信,本地互联网 LIN 就是为适应这类应用而设计的低成本解决方案。LIN 是一个公开的协议,它基于(UART)串行通信的格式
几乎所有的 IC 都带有 SCI(UART)接口,LIN很快就在车内低端控制器领域取得领先地位。典型的LIN应用有车门、后视镜、导向轮、马达、照明及其他智能传感器。

MOST 总线

MOST总线几乎只用于影音娱乐系统的连接


MOST25的速率是24.8Mbit/s,MOST50的速率是50Mbit/s,MOST150的速率是150Mbit/s。
MOST 总线系统中一个节点坏掉就会瘫痪整个网络,所以可以采用直接旁路某节点的方式检查故障

FlexRay

FlexRay是高速总线,在汽车上主要用于开环或闭环控制系统,主要特点是可靠性高、容错性好、实时性好。主要用于对可靠性和实时性要求比较高的应用场景,如电控转向、电控刹车、电控驱动等系统、电控油门,以及其他主动安全系统。这些系统可能没有机械备用系统,也就是说,如果电子系统故障将无法补救,所以对可靠性要求较高,

攻击案例

jeep Uconnect漏洞分析

总线上的模块

潜在攻击点

本案例主要是找的远程攻击点, 而对攻击面很窄的近距离攻击都略过了

胎压管理系统

汽车上每个轮胎都有一个胎压传感器,会时刻测量胎压并把数据通过无线传输给对应的ECU,如图7-6所示。在Jeep上,接收传感器信号的ECU连接到了RFHM上。TPMS采用的无线数据协议或者格式往往是私有的,但几乎可以确定的是,通过采取一些操作是可以攻击TPMS系统的,欺骗车辆让其以为轮胎或TPMS系统出现了问题。另外,已有研究表明可以远程造成TPMS的ECU崩溃。从远程代码执行这个方面看,这个攻击面很窄。但是,既然ECU会崩溃说明其数据处理方式不够安全,所以这类攻击还是可能的。

如今许多汽车都配备了蜂窝网功能(如GPRS、3G、4G等),一般叫作车载通信系统,用于将车辆连接到数据网络,例如通用安吉星系统。蜂窝连接也可以用于接收交通或天气信息等数据。
这套系统是最重要的攻击入口,因为攻击距离很广,广到只要目标汽车上有蜂窝通信就可进行。即使车载通信系统没有被直接连接到CAN总线上,这个通信单元仍然可以用来传输如数据、声音等数据。有的研究人员此前就在没有涉及用户交互的情况下,远程利用过汽车上的通信单元。在Jeep上,所有这些功能都是由无线电控制的,而这个无线电广播又接在了CAN-IHS总线和CAN-C总线这两者之上。

在2014年款的Jeep上,其通信系统、网络、无线电广播和APP都集成到哈曼卡顿的Uconnect系统上, 2014年款的Jeep使用了由哈曼卡顿生产的Uconnect 8.4AN/RA4无线电广播系统,全权负责提供Wi-Fi连接、导航、APP和蜂窝通信.

IFS用于放置系统二进制及Uconnect车机运行QNX操作系统所需要的配置文件。他们通过观察从克莱斯勒汽车上获取的 ISO 文件中的文件判断哪些文件会在更新过程中受到影响

Wi-Fi密钥生成机制漏洞

车载wifi 热点
默认的Wi-Fi加密方法是WPA2,使用的密码是随机生成的8位字母数字组合。就目前 WPA2 的强度和可能的密码数量来看,这是一种非常安全的设置,所以问题是攻击者怎样才能入侵这样的网络呢?如果用户选用了WEP加密方法,或没有使用加密(虽然可能性比较小),攻击者都能轻易破解这种无线访问点。

但是,即使用户使用了默认的 WPA2 设置,攻击者还是可以利用 Wi-Fi 密码生成算法的漏洞来破解 Wi-Fi 密码,而且方法很简单。通过反汇编 OMAP 芯片上的‘WifiSvc’二进制文件就可以找到用于生成 Wi-Fi 密码的算法

开放端口

连接上车载wifi 热点后, 通常会扫描默认的网关确定是否有开放的端口来判断是否易于攻击

研究者发现 uconnect 系统上存在开放端口 6667 , 运行dbus 服务, 可以用于跨进程通信
D-Bus本可以要求认证,但是在uconnect车机上却允许匿名登录:
可以使用DFeet工具与Jeep上的D-Bus服务交互: D-bus 服务可以列出车机娱乐系统上的服务, 类似于ServiceManager, 通过wifi 连接后 通过dbus 服务就可以控制车机的娱乐系统

但wifi 热点这种还是属于近距离通信的场景, 攻击面比较窄

蜂窝网连接

2014年款Jeep的哈曼Uconnect系统还能够通过Sprint蜂窝网进行通信, 通过伪基站的方式可以联通 Dbus 进而控制车机娱乐系统

can总线连接情况

Uconnect系统除了可以通过Wi-Fi、蜂窝网和蓝牙等方式与外界通信外,还可以与CAN总线通信。虽然在德州仪器OMAP-DM3730系统上运行的ARM处理器无法直接访问CAN总线,但是主板上另一个Renesas V850处理器芯片有与CAN-IHS和CAN-C通信的能力

Dbus 服务

在网络上暴露像 D-Bus 这样强大和全面的服务会造成几个安全问题,例如功能滥用、代码注入,甚至内存崩溃等。
尤其是如果这样的服务有exec 权限和这样的接口, 那就可以进行命令注入, 非常危险

车机娱乐系统

GPS

娱乐系统往往能够获取车机的定位, 这对于隐私追踪行为的风险是非常高的, 如果娱乐系统没有对这样的数据进行保护, 一旦娱乐系统被攻破(如 root提权等), 那类似这样的数据会被肆意利用

HVAC

车机空调系统

音量

低音

电台

显示屏

旋钮

发现在关闭某项服务后能够使车机的旋钮控制失效,比如音量和调音器控制钮。通过关闭主要的 D-Bus 服务可以使所有的车机控制失去响应。如果关闭服务之前先执行几项其他的操作,这种攻击会变得非常烦人,比如把低音和音量调到最高后再关闭对应服务,就无法手动调低回去了

IOC

Uconnect系统能够与两条CAN总线通信,CAN通信是由Renesas V850ES/FJ3芯片负责处理的。漏洞利用了D-Bus后虽然取得了 OMAP 芯片的代码执行权限,但这块芯片并不能直接发送 CAN 信息。虽然这样,OMAP芯片可以与V850芯片通信,而V850芯片可以发送CAN信息。

车机(OMAP芯片)可以对IOC(V850芯片)进行固件升级,通常是通过U盘完成

逆向IOC

这项研究的主要目的不仅仅是证明汽车的通信系统是可以入侵的,还证明了在成功远程入侵通信系统后可以通过CAN总线控制汽车的物理功能,威胁到驾驶人员的安全。
Jeep 上的IOC(V 850) 固件并没有加密, 可以对其固件进行反汇编来确定CAN 指令是如何发送的

另外对照芯片手册能加快反汇编的速度, 芯片手册上还记录了CAN模块所使用的寄存器和消息缓冲区, 针对这些寄存器可以进一步的快速定位.
其次使用芯片的官方demo 示例编写代码然后查看其反汇编代码, 对照需要进行逆向的代码可进一步加速逆向的速度. 诸如此类的, 有官方demo的, 按官方demo 例程来开发的都给逆向工作带来了隐患.

通过逆向, 发现代码的函数中有一个发送CAN 命令的函数, 通过向RAM中的几个位置填充想要的值,他们可以发送含有任意数据、消息 ID 和长度的 CAN消息, 类似这样可以发送任意原生CAN 指令数据的函数是非常危险的

至此,他们遇到的最大问题是虽然有能力编辑任意CAN消息,但是他们实际上没有办法远程直接调用发送函数来发送,即他们只能间接地通过篡改V850的固件来调用函数发送CAN信息。虽然Uconnect系统确实执行了一些CAN功能,但是他们无法直接通过车机调用这些功能,所以他们需要另外想办法往CAN总线上发消息。他们想将V850作为一个代理,然后从OMAP芯片上通过V850发送CAN消息。

研究人员进一步利用SPI 总线和修改过的v850 固件, 使得uconnect 系统可以通过omap spi 总线联通 ioc 系统, 使得uconnect 可以接入修改固件的ioc 的 can接口来发送任意can 消息

破解烧写链路

ioc 基于v850 芯片, 能直接访问CAN 总线, v850的固件没有签名, 且可以通过omap 板子更新. 但是该系统设计为只能通过usb 进行更新.
该芯片也分下载模式和启动模式, 只有在下载模式下才能更新烧写固件. 即芯片处于启动模式下, 是不能进行烧写的

要让V850进入下载模式的唯一办法是复位V850,但是复位也会同时复位OMAP芯片,这样攻击者就会因为断线而失去控制。当OMAP进入“更新模式”时(要想让IOC进入下载模式的前提),OMAP处理器会尝试从USB设备更新。这种更新方式是硬编码的无法更改。

现在的主要目标是让V850在没有USB设备参与的情况下进入“更新模式”,这样他们就可以利用远程上传到文件系统中的固件来更新V850。
第一步是运行代码来重启V850并使其进入引导程序模式,同时还使OMAP进入更新模式。

发现OMAP 进入更新模式时会调用文件系统上的一个可执行文件, 这个可执行文件居然是可写的, 这个可执行文件可以通过前面说的dbus的漏洞修改, 因为那个漏洞可以exec 进程, 将sh 植入进去就能修改文件系统了, 进一步为破解人员提供了便利.

整个攻击链路

下面总结漏洞利用链及利用链是如何工作的。

1.目标识别
首先攻击者需要车辆的IP地址。他可以随便选择一个IP进行攻击或写一个蠕虫来攻击所有的车辆。如果知道汽车的VIN或GPS,可以对所了解的车辆所在的IP段进行扫描直到发现对应的VIN或GPS。由于Sprint网络上设备速度很慢,要采用这种方法可能需要很多台设备(可能上百台)同时进行并行扫描才能现实。

2.利用车机中的OMAP芯片
一旦攻击者得到了车辆的IP地址,就可以使用相应的D-Bus服务的execute方法执行任意代码。最简单的方法就是上传一个SSH公钥和配置文件,然后启动SSH服务。这样就可以通过SSH接入目标车辆并在远程终端上运行命令。

3.控制Uconnect系统
如果攻击者只是想进行如控制无线电广播、空调、获取GPS信息或者其他不涉及CAN的攻击 其实调用D-Bus服务就可以实现大部分的控制功能,不需要通过代码来控制

4.在V850中刷入篡改过的固件
准备好一个篡改过的V850固件,按照前文中提到的要求就可以轻易地把篡改后的固件刷入V850。这个过程需要自动重启系统,这可能会让驾驶员产生警觉。如果这一步搞砸了车机就会变砖,需要更换。

5.通过网络执行物理操作
利用篡改过的固件,从OMAP芯片通过SPI向V850芯片(运行的是修改过的固件)发送消息,从而向CAN总线发送适当的CAN消息实现物理控制车辆,这一过程需要用到类似他们2013年发表的文章中的知识,即CAN总线攻击。

逆向CAN 消息

在实现远程发送CAN消息后要开始想办法发送CAN消息来物理控制汽车。为了弄明白要发送哪些CAN消息才能控制汽车,他们需要弄明白Jeep的CAN私有控制协议(除了诊断数据以外的 CAN 数据大多都是厂家自定义的)。这一过程需要不断地尝试,逆向汽车维修设备、逆向ECU固件、分析数据流等

和所有的安全研究一样,拥有合适的工具就能省很多事儿。所以他们搞了一套适用于Jeep车的维修诊断工具。诊断工具可以在底层通过CAN与ECU交互。在这些工具中包含攻击者感兴趣的安全访问密钥和诊断测试功能等

虽然某些研究可以在不使用诊断设备的情况下进行,但是很多主动测试和 ECU解锁都需要分析这些诊断工具获得密钥、校验算法、协议等

Jeep 适配的诊断系统为 wiTECH, 是Java写的, 逆向更加容易, 因为可以把字节码反编译为源码.
该系统经过了 Java Allatori混淆器生成, 但是可以导入到Java 应用中, 也就是换了一个应用容器来让这些代码有环境执行, 使得代码能正常运行起来, 然后应用中调用库函数解密混淆的字符串.

虽然他们没有解锁算法,但是他们很清楚整个解锁流程。首先 wiTECH 会向ECU请求获取密码种子,在获得密码种子后再判断ECU的类型,并解密对应的解锁文件,而他们认为密钥的生成算法就在这些解锁文件中。 通过观察源码中的函数名称以及代码实现, 研究人员找到了生成密钥的算法, 尽管这些算法被加密了,

ECU 逆向

利用 wiTECH 工具他们能够执行主动功能测试,并嗅探测试结果。他们破解了安全解锁算法和密钥,这样就可以执行需要权限才能执行的操作。但问题是wiTECH工具发送的消息是固定的而且没有使用校验和,而ECU之间的通信经常会使用校验和,如果他们想要自己生成CAN消息(或者伪造CAN消息),而不是仅重放嗅探到的消息,他们就必须要能够自己生成校验和
研究人员通过逆向 PAM(自动泊车系统)的固件(这个固件可以通过wiTECH升级, 从wiTECH下载的升级固件中可以找到这个ECU的固件), 找到了生成CAN消息校验和的函数算法.

至此研究人员掌握整个攻击链路, 通过娱乐系统攻入控制系统, 往控制系统中注入伪造的CAN消息达到控制车辆的目的

漏洞总结

对于上述的攻击链路, 防御的链路需要重点注意下面几个方面:

  1. 娱乐系统的对外通信一定要做到是安全的链路, 不能有开放的端口, 类似ServiceManager Dbus这样的服务一定要做好安全的管控.
  2. ecu的固件最好是保密且认证的, 密钥和证书或者公钥或公钥的hash是存在hsm内部的, 防止被篡改
  3. can消息的校验和函数最好保证是自主硬件实现, 且不对外公布. 如果CAN消息能做到是加密的则更好, 这个比较难.
  4. 配套的obd 维修套件尽量不要用java来写, java的安全性相对于c/c++来说还是太弱了. obd 维修套件最好做好加密措施, 保证不能被轻易破解
  5. 娱乐系统和控制系统之间做好逻辑及物理隔离, 确需娱乐系统发送控制命令的, 尽量使用接入api的方式, 且需要鉴权机制.

宝马攻击案例

ConnectedDrive是宝马汽车配备的典型系统。为了研究这类系统是否存在侵犯用户隐私等问题,ADAC邀请研究员Dieter Spaar对宝马ConnectedDrive系统进行了研究,尽管这项研究不是以漏洞挖掘为目的,但在研究过程中还是发现了一些严重的漏洞。 该系统可以通过手机远程控制车的一些功能, 如解锁上锁等

分析Combox 控制器

V850与通信模块之间采用串行通信接口SPI相连接,经过分析发现,在串行通信线上抓取到的数据与通信模块发送出去并被基站捕获到的数据不同,因此判断数据在通信模块中被加密了
由于通信模块没有提供标准的调试接口(如jtag)用于读取固件,所以要得到固件就需要将通信模块的Flash芯片拆下来,然后用一个转接器读取固件, 为了读取Flash里的内容,将Flash芯片与一块STM32单片机开发板相连,然后利用单片机通过串口将数据发送到计算机。

它通过IDA Pro很快便在固件中发现了几种加密算法和摘要算法,这是因为一些常见的加密算法采用了常量表(如AES的S盒、DES的置换表等),通过搜索这些常量表可以分辨出采用的是哪些算法。
知道了加密算法后下一步就要找到密钥,一个乐观的假设是通信模块所采用的密钥是为每一辆车单独生成的,然后保存在V850ES里,再由V850ES发送给通信模块。如果真是这样的话,寻找密钥就非常费事了

先对紧急电话的协议进行分析,通过固件的一些关键字符串很快发现通信模块采用了下一代通信与信息系统协议, 该协议可以更新密钥, 所以推断出密钥一定保存在某个地方,最后发现固件里包含了一些比较可疑的数据,尝试使用这些数据解密通过基站监听到的紧急短信,经过一些尝试后成功解密了数据。

经过进一步分析发现,通信模块采用了56位的DES、128位AES对数据进行加密。对数据签名采用的是 DES CBC-MAC、HMAC-SHA1,以及HMAC-SHA256。数据加密或者签名所采用的密钥是在由16对64位密钥组成的密钥池里选取的,数据采用的加密或者签名算法及所采用的密钥编号在消息的头部会有声明,从而让接收方采用对应的算法进行解密或者认证。

要使用远程开锁功能需要车主在宝马的网站上注册一个账号,然后开通远程控制功能就可以使用宝马推出的iOS版本或者安卓版本的名叫“My BMW Remote”的手机应用程序开车门了。首先要分析服务器与汽车之间的通信数据, 监听通信数据最简单的办法就是在V850SE与通信模块之间的串行通信上进行数据记录和监听。当通过手机应用发送开门命令后,在所记录的数据里找到短消息,消息包含调试字符,因为这些消息是给通信模块进行处理的。由于之前已经获得了密钥池和加密算法,能轻松地解密这些消息。为了验证汽车的反应,通过基站测试环境给汽车发送监听到的消息(即重放攻击)。汽车收到信息后需要一分钟左右启动主系统,然后Combox会向宝马后台服务器发起数据连接来获取数据(经过后续分析发现获取的数据其实就是要执行的命令), 攻击者可以通过便携式基站发送激活短信并伪造服务返回开门命令数据,而这整个过程车主都不知情。

比较令人惊讶的是汽车与后台的通信数据可以轻易地通过搭建的测试基站环境获取,没有任何问题。这辆车发送了一个简单的 HTTP 请求,传输中并不存在SSL或TLS加密。
为了弄清楚Combox需要从服务器获得什么信息才能打开车门,首先通过手机应用发送开门指令,这样服务器就会将汽车需要的开锁指令数据准备好以便汽车收到短信后去请求,然后进行短信的重放攻击。经过测试这样可以打开车门, 只需要通过一台笔记本和一个基站就可以伪造短信和服务器开门,即通过基站发送短信,然后使用笔记本伪造成宝马后台服务器在汽车请求开锁数据时将数据发给汽车

激活远程控制功能

激活远程控制功能的流程和前面开门的流程类似,开通 ConnectedDrive 远程控制功能的流程如图所示

由于XML格式的配置文件没有加密或者签名,可以通过像之前伪造开门命令一样的方式伪造。所以,针对没有开通ConnectedDrive远程控制的汽车可以先通过这种方式开通远程控制功能,然后打开车门
伪造基站网络来解锁所需设备只需要一个背包能装入。伪造的基站(即 IMSI Catcher)的覆盖范围可达到100米以上,即使在市中心也是如此。IMSI Catcher在这个区域中会提供比实际移动网络更强的信号,导致手机会优先选择接入伪造网络。

伪基站可以通过入网认证许可号(IMEI) 来识别设备, IMEI的前八个字符标识了设备型号

漏洞总结

总结整个研究过程,ConnectedDrive一共出现了6个漏洞。
(1)宝马在所有车型中使用了相同的对称密钥。可以为每辆汽车设置不同密钥来预防。
(2)有些服务没有对车辆与宝马后端服务器之间传输的信息进行加密。https 加密防御
(3)ConnectedDrive配置数据没有采用防篡改机制。 对配置文件进行签名
(4)Combox通过NGTP错误信息暴露了正确VIN。不要对错误请求进行响应
(5)通过短信发送的NGTP数据采用了不安全的DES算法进行加密。升级加密算法,采用安全的加密算法。
(6)Combox没有针对重放攻击采取防护措施。对数据加入序列号并签名。或者加入单调计数器

特斯拉model S 攻击案例

这种将汽车的控制器网络与娱乐信息系统进行隔离的网络架构是非常优秀的设计,因为娱乐信息系统有丰富的网络连接,当黑客入侵娱乐系统后还需要通过网关才能控制汽车的关键部件[例如,行驶安全相关的部件(如电动转向、电子刹车等)]。

Wi-Fi:将Model S连入Wi-Fi后并没有发现开放的端口,但是当Model S连上Wi-Fi后首先会通过向一些服务器发起http请求确定网络连通性,在确定网络连通性后尝试通过 OpenVPN 连接特斯拉服务器(地址是 vpn.vn.teslamotors.com)。由于OpenVPN配置正确,不能进行中间人攻击。

特斯拉的OpenVPN使用UDP协议,并启用了tls-auth,这就是CarKey.tar中包含的那个静态密钥的用处,即用于对数据包加入HMAC(Keyed-Hashing for Message Authentication)用于消息认证、用于防止DoS攻击、端口扫描、未授权的SSL/TLS握手和初始化等。

特斯拉在配置OpenVPN 服务时, 客户端与服务器进行通信, 服务器需要返回服务器证书, 由客户端进行校验, 而服务器端需要校验客户端的证书, 客户端证书和服务器证书并不是一个, 杜绝了中间人攻击. 即假的服务器是无法通过客户端的校验的.
如果能找到一个由Issuing CA签发的证书而且这个证书的EKU指定用途为服务端认证,就可以伪造一个VPN服务器进行中间人攻击。

通过扫描以太网接口, 发现了一些开放的端口和服务
最后,他们还找到了分别运行于IC(仪表盘)和CID(中央信息显示模块)上的两个程序ic-updater和cid-updater,从字面意思理解这两个程序分别为IC和CID的升级程序,功能是获取诊断信息、上传文件或者固件,这两个程序的大部分命令都有认证保护,但是其中也有些没有,例如‘status’,这两个程序在输入‘status’状态命令时会打印出许多信息娱乐系统的关键信息,属于信息泄露漏洞

status 显示信息中泄露了固件升级的下载地址, 由于之前已经找到了客户端的证书, 可以伪造客户端请求来申请更新固件, 即可以下载到固件.
下载到ic和cid(中央信息显示模块后)的固件后, 该固件没有加密, 所以可以直接挂载到pc上, 该固件运行的系统是ubuntu的, 通过查找linux的私钥和shadow 文件(Linux 系统里存储用户名和密码哈希等相关信息的文件), 找到了ic的shadow文件, 下一步就是破解shadow 文件获得密码(如彩虹表 字典 暴力破解等). 特斯拉设置的密码是弱密码, 很容易破解. 有了 密码和账号后, 由于前面扫描出的端口中居然有ssh的开放端口, 可以直接登录到系统中, 而且账号是有sudo权限的.

IC的root权限已经搞定了,下一步要搞定CID的root权限,由于没有CID的shadow文件,所以只有继续分析固件,通过分析固件发现CID每隔24小时就会从一个名为mothership的服务器获取一个安全令牌(Security Token),然后将一个名为tesla1 的账号的密码设为这个安全令牌。CID 还会将安全令牌发给IC,IC 则将安全令牌明文存储。通过在IC的文件系统中找到这个安全令牌可以登录CID上的tesla1账号,而且这个tesla1账号也是一个sudoer,就这样,IC和CID的root权限都被搞定了。

获得了IC和CID的root权限后,下一步再来看看如何控制汽车,Model S的内网数据传输率较高,每秒约 500~1000 个 UDP 报文包,搞清楚哪些数据包包含的是控制数据比较困难,所以通过分析程序判断哪些数据是通过手机应用或者 CID 上面的按钮进行操作才出现的数据可以快速弄清楚哪些数据控制哪些功能。在弄清楚控制某些功能的数据后还要弄清楚是哪个服务发送了这些数据,由于是通过 CID 的触摸屏来控制的,所以在CID 上使用strace 系统调用监控命令来分析是哪个服务发送了这些数据,结果发现是一个名为QtCarVehicle的服务发送了那些控制数据包。

QtCarVehicle包含一个叫Gateway Message Sender的类,用于通过网关发送消息的类,然后就是执行这个类的各种功能的方法。

值得注意的是,经过逆向分析还发现Model S并不会直接通过信息娱乐系统发送CAN原始数据包控制汽车,而是采用了API调用的方式,即CID通过功能调用接口请求网关执行某个功能的操作,这些功能操作都是预先定义好的允许执行的操作。

娱乐系统通过功能接口请求网关执行特定操作的设计非常重要(这里指 CID 通过 API 请求网关),这种设计可以保障在信息娱乐系统被黑客攻陷后,不能直接往CAN 总线发送原始 CAN 数据,只能执行预先设置好的“允许”的功能。当然,这是在网关没有被攻破(例如,Jeep案例中,攻击者将被修改后的固件刷入V850后)的前提下。

接入CID后调用QtCarVehicle服务提供的功能可以控制汽车的一些功能,例如关闭电源
还可以控制如下功能。
(1)关闭汽车。
(2)启动汽车。
(3)开关门。
(4)开关天窗。
(5)开关前后行李箱。
(6)控制大灯。
(7)控制减震器。
(8)控制空调。
(9)鸣笛。

漏洞防御总结

汽车的娱乐系统安全性都是比较差的, 特斯拉做的比较好的一点就是将控制网络与娱乐信息系统进行隔离, 只能通过网关的api 做一些预设的功能.

对固件来说, 系统要进行分区, 系统分区对应的固件要进行加密, 由secureboot 链路保证即使下载到了固件, 也不能读上面的内容, 一方面保证了知识产权, 另一方面对linux root 相关的文件做了二次保护.

不能有开放的端口, 尤其是不能开放ssh .
服务器与车之间的通信要做到强安全链路, 如特斯拉的openvpn配置是比较好的一种策略.

信息娱乐系统网络上的节点间通信没有加密,并且有些还没有认证:网络上的节点间通信没有加密,所以攻击者可以分析网络上的所有流量。另外,只有少部分服务采用了认证机制。如果要实现节点级别的安全,那么网络上所有的节点绝对不能对网络有任何信任,任何节点间的通信都应该经过加密和认证。

OTA 升级

(1)ConnectedDrive的漏洞中没有对服务器进行认证,导致可以进行中间人攻击,而且汽车采用相同的密钥,导致通信密钥一旦泄露就会影响到所有采用相同密钥的车型。
(2)Jeep车的V850在更新固件时由于没有采用固件签名和加密,导致黑客可以得到固件进行逆向分析后对固件进行篡改(加入发送 CAN 数据的代码),再用篡改后的固件对V850进行升级从而控制汽车。
(3)在Tesla Model S的案例分析中,由于固件下载地址及客户端向服务器认证的信息泄露,导致600多兆的固件可以被下载。

典型的固件升级过程如下:
(1)开发人员开发出新版本的固件。
(2)厂家对新版本的固件进行加密并用私钥进行签名。
(3)签名后的新版固件被上传到厂家的升级服务器。
(4)汽车同服务器建立安全的通信链路(例如,通过验证服务器证书来防止服务器被伪造)。
(5)汽车通过安全通信链路下载固件。
(6)汽车对固件进行解密。
(7)汽车验证固件签名。
(8)汽车利用固件进行升级。

在上面的过程中,由于固件是加密的,所以就算攻击者破坏了传输过程的安全获得的也只是加密的固件,防止了IP(知识产权,Intellectual Property)泄漏。汽车和服务器相互验证了彼此的证书,防止了中间人攻击。固件使用签名防止了被串改。

另外,还有一些问题需要解决。
(1)密钥和证书的安全保存和管理问题,在特斯拉和宝马的案例中黑客通过物理方法获取密钥和证书,像这类重要信息最好引入防破解的硬件安全模块 HSM(Hardware Security Module)来安全保存和处理。为了防止一辆汽车被破解而影响其他车辆的情况出现,每辆汽车需要有自己的密钥,密钥的管理问题也需要解决。
(2)回滚需要用到的固件需要备份并加密保存,当更新出现问题时能够保证回滚到可以运行的老版本固件,防止由于升级失败而使汽车变砖。
(3)固件更新程序(例如bootloader)控制远程更新,而其本身一般无法更新,所以代码的安全只能通过安全开发及测试保证。