我不是一条咸鱼,而是一条死鱼啊!
更多关于车联网安全常见术语的内容,请移步:https://orangey.blog.csdn.net/article/details/118888796
0x01 前言
随着云计算的发展,不单单针对主机、数据库、网站的漏洞利用攻击愈来愈多,且随着汽车的智能化、网联化、自动化快速发展,汽车的安全问题正面临前所未有的复杂挑战,带来暴露面引致汽车攻击面的增加,不少漏洞遭纰漏,其中包括埋藏在系统、设备中多年未被发现的漏洞,影响面非常广泛。
因此,汽车安全也值得关注。
我们来看看,随着汽车的智能化、网联化、自动化快速发展给汽车安全带来了哪些变化,同学我个人觉得汽车的安全问题正面临前所未有的复杂挑战,其中最大挑战是网联化带来暴露面增加。
那么,要攻击一辆汽车,物理接触已非必经之路。从网络安全角度看,智能网联汽车身处“人车路云”构成的复杂网络中,每一个点、每一个暴露面,包括产生的大量数据都可能成为风险点、“投毒点”。
当汽车进入智能网联时代,数据不仅成为驱动汽车发展的重要价值点,还深度融入社会生活的方方面面,成为重要的基础资源。
这些车具有网络连接功能,通常还具有Wi-Fi热点功能用于和其他设备分享车载网络连接。具有网络连接功能的汽车通常还会扩展出其他功能来充分利用网络连接带来的优势,例如车祸自动报警求救、远程控制、远程升级[Over the Air(OTA)Update]、安全预警等。
我们来看看汽车的攻击知识图谱,如下:
这张图是从攻击者视角车联网安全会关注的点,我们来看看主要的攻击点。比如说车机是很主要的入口,WIFI、蓝牙、USB,然后还有Tbox,负责与云端后台通信,然后再往底层有一个网关,前几年可能还是传统的防火墙,现在可能会变成智能网关这样的概念,下面就是不同的域,基本走的是CAN协议,以及包括周边的一些设施,比如说充电桩、ADAS,V2X等等
1.1 常见的汽车攻击特征
1)物理接触
通过OBD端口向连接的CAN总线发送未授权指令到CAN总线,从而非法控制车辆。
2)近身攻击
利用移动应用的安全漏洞,破解WIFI或者蓝牙,发送未授权指令到CAN总线,从而非法控制车辆。
3)远程控制
通过破解WIFI进入车载娱乐信息系统,再利用车载系统的漏洞进行权限升级,刷写恶意固件,发送未授权指令到CAN总线,从而非法控制车辆。
0x02 网联汽车
联网的车(Connected Car):又称网联汽车,即这些车具有网络连接功能,通常还具有Wi-Fi热点功能用于和其他设备分享车载网络连接。具有网络连接功能的汽车通常还会扩展出其他功能来充分利用网络连接带来的优势,例如车祸自动报警求救、远程控制、远程升级[Over the Air(OTA)Update]、安全预警等。
0x03 车端基础概念知识
3.1 V2X
V2X(Vehicle to X)通信:表示车与X通信,X可以是车(Vehicle)、路(Road)或者其他相关基础设施,相应地也就有了V2V(Vehicle to Vehicle,车与车通信)、V2I(Vehicle to Infrastructure,车与基础设施如道路、服务器等通信)、V2P(Vehicle to Pedestrian,汽车与行人通信)等概念。V2X的典型应用有左转辅助、紧急刹车提示、闯红灯警告、过弯速度警告、施工路段提醒、实时天气信息提醒等。
3.2 高级辅助驾驶系统
高级辅助驾驶系统(ADAS,Advanced Driver Assistance System):ADAS是在驾驶过程中辅助驾驶员的系统,它的功能包括安全告警功能、自适应控制功能、信息提示功能等,可在通过传感器检测到可能的危险时对驾驶员发出告警或者接管汽车某些控制功能(比如紧急刹车功能),以及根据环境自动对汽车的某些功能进行控制,比如根据环境亮度自动调节车灯亮度、自适应巡航控制、盲点警告、自动变道
3.3 自动驾驶汽车
自动驾驶汽车(Automated Driving Car):自动驾驶汽车依靠人工智能、视觉计算、雷达、监控装置和全球定位系统的协作,让计算机在没有任何人主动操作的场景下,通过汽车线控(X-By-Wire)系统自动安全地操作机动车辆。
自主驾驶汽车(Autonomous Car):作者刻意避免使用自动驾驶汽车这个概念,是想将现在的汽车所具备的智能驾驶功能与自动这个概念做些区别,自动可以定义为根据预先设定的程序对环境做出预先设定的反应,而自主驾驶汽车能体现出汽车可以在一定的权限内自主做出一些决定,因为汽车采用了很多人工智能里的学习算法,这些算法模型会在汽车整个生命周期中不断自我学习升级,会越来越“聪明”。
汽车在智能化、联网化、自动化等趋势下必须要考虑到被黑客攻击的可能性,汽车采用或者将要采用的技术如传感器、无线网络连接、云服务器等都可能遭到黑客攻击
3.4 汽车网络安全
为什么汽车网络攻击这个话题近几年这么火?是什么造成汽车受到网络攻击的威胁?面对汽车网络安全威胁我们可以做些什么?
3.4.1 汽车电子及网络系统的发展
纵观汽车一百多年的发展历史,表面上看汽车没有太大的变化,一个内燃机、一个变速器、四个轮子,加上通用的操作接口(一个方向盘、一个刹车踏板、一个油门踏板、一个离合器、一个变速杆等)。但其实在过去这几十年,汽车内部的控制系统发生了巨大变化。今天的汽车已经不再是简单的机械系统,今天的汽车配备了各种各样的电子控制模块(ECU,Electronic Control Unit)及传感器。这些电子控制模块相互协同,通过各种传感器和执行器对车辆的各部件、道路状况、驾驶员和乘客等进行持续的感知和控制。传统汽车上由机械控制的部件越来越依赖于电子系统来辅助控制(即线控,X-By-Wire),前者甚至会被后者取代。
传统的汽车生产厂家其实一直非常重视汽车安全的研究,在汽车的安全方面投入了大量的人力物力进行研发。他们关注的往往是汽车本身的性能安全及操作安全,所以开发了很多功能来保证驾驶安全,如刹车防抱死系统(ABS)、安全气囊、预紧安全带等,这些都是安全功能(Safety Features),但是他们没有对汽车在越来越电子化、网络化的趋势下是否会遭受到同样可以威胁到汽车安全的网络攻击(Cyber Attack)引起足够重视。随着现代汽车集成越来越多的复杂的网络服务和通信功能,汽车所暴露的攻击面也越来越大,例如通过标配的OBD接口可以直接访问汽车内部网络,多媒体系统与汽车控制器内网之间的接口、蓝牙、Wi-Fi、SubGHz、蜂窝网(GPRS、3G、4G)等都提供了潜在的汽车内网入口。从网络的另一端来看,联网后的汽车和我们的PC或手机没有太大区别,将要面对来自世界任何地方的黑客的考验。
在功能不断增多,网络连接越来越普遍的发展趋势下,我们要看到汽车在这个发展过程中会暴露出越来越多的攻击点,并提出相应的预防措施,因为汽车不只像我们的个人电脑,汽车遭受网络攻击后可能会威胁到驾驶员的生命安全
3.4.2 汽车网络安全威胁的原因
原因有很多,如下列出部分原因
-
设计之初缺乏安全考虑
-
越来越广泛和深入的网络化
-
越来越多的功能依赖软件控制
3.5 汽车网络安全攻击面
安全是一个体系,需要从系统的角度来保护,就像木桶原理一样,任意一个环节都不能出错。
从两个角度分析汽车攻击向量
-
技术能力
-
可操作性
技术能力是指我们假设攻击者了解目标车辆及攻击者有能力开发出针对目标车辆的恶意利用。
可操作性是指攻击者通过某攻击向量发起攻击需要克服的条件限制。也就是说,可以通过某方式来攻击,但是要这样攻击需要有条件限制(比如通过 OBD 接口来攻击就需要物理进入汽车)。这些限制条件可以分为三种:间接物理访问、短距离无线访问和远距离无线访问。
3.5.1 间接物理攻击面
汽车的众多攻击面中最普遍的攻击面就是间接物理攻击面。之所以称其为间接物理攻击面,是因为通过这些攻击面发起攻击通常涉及对与这些攻击面进行交互的设备、媒介进行攻击,例如要通过OBD或者播放器进行攻击就要对诊断设备、多媒体光盘等进行恶意修改。
-
OBD-II
OBD是在线诊断接口(On Board Diagnostic interface),是汽车上最重要的一个物理接口,汽车维修人员可以使用专用诊断设备通过这个接口读取汽车的运行状态数据、进行主动测试(例如控制喷油器或者点火器)等功能,但是攻击者也可以通过这个接口直接访问汽车内网关键的CAN总线进而完全控制汽车的物理功能,造成威胁,OBD盒子通常利用蜂窝网与服务器通信,或者利用蓝牙或Wi-Fi与手机通信,再由手机将数据传给服务器。这些通信链路如果被攻击就会使攻击者获得OBD接口的访问权,进而对汽车发起攻击。
PS:控制器局域网
CAN(Controller Area Network)是控制器局域网的英文缩写,CAN的诞生只是为了实现更大范围的协同功能和全局控制。
-
娱乐系统
汽车娱乐系统会与光盘、USB 接口、手机等进行交互,几乎所有的汽车都具有这些接口,光盘播放器可以解码音频、视频等,通过USB等接口用户可以播放可移动存储设备里的多媒体文件、升级汽车软件等,一些汽车还允许通过手机进行屏幕投射,如支持Android Auto、苹果CarPlay等的汽车。
攻击者可能通过在光盘或者其他可移动设备中植入恶意程序,然后通过社会工程学的方式说服用户播放恶意光盘、插入恶意 U 盘等。攻击者还可能通过攻击用户的手机来安装恶意程序。
现代汽车的娱乐系统还具有Wi-Fi、蓝牙、蜂窝网络连接等功能,这些也是非常危险的攻击入口,但这些是无线攻击入口,但是现代汽车的娱乐系统不是孤立的模块,而且很多娱乐系统都与CAN总线相连,且采用了Linux或Android操作系统的娱乐系统,都存在被攻击。
3.5.2 短距离无线攻击面
间接物理访问有一系列缺点,如操作复杂、无法控制攻击时间(例如CD什么时候播放取决于用户)等,而短距离无线攻击要灵活得多。汽车的短距离攻击向量包括蓝牙、Wi-Fi、无钥匙进入、RFID、胎压管理系统,以及DSRC[专用短距离通信(Dedicated Short Range Communication),专为汽车安全应用通信而制定]等,对于这些攻击向量我们假设攻击者可以获取到对应的收发设备在汽车附近的收发数据。
-
蓝牙
-
无钥匙进入系统(PKE 钥匙)
-
FID&Hitag(广泛采用的一种被动RFID,类似双因子认证)
-
胎压管理系统TPMS
-
Wi-Fi
-
用短距离无线通信DSRC或V2X
3.5.3 远距离无线攻击面
汽车上的远距离攻击向量包括 GPS、卫星接收机、数字广播接收机等公用的通信链路,还包括蜂窝网、远程协助系统(如OnStar)、远程控制系统(如Jeep Uconnect和宝马ConnectedDrive)等专用的通信链路。这些远距离攻击向量是最大的威胁,因为黑客可以在任何地方发起攻击。
3.6 物联网时代的汽车电子
在物联网时代,所有接入网络的设备都面临安全威胁
除了汽车内网以外,汽车和其他物联网设备有很多共通的地方,例如利用了共同的网络基础设施,采用了相同的网络架构,如果发现了公共的网络基础设施的漏洞,那么这些漏洞非常有可能同时影响到汽车和其他物联网终端的安全。
汽车是由许多子系统组成的一个大系统
上图中的每个子系统都由单独的或共享 ECU 进行控制,这些 ECU 相互之间又经过汽车内部网络(如CAN)相互连接,共同实现对汽车的整体控制
3.6.1 什么是ECU?
ECU 类似于我们的个人电脑,是一个闭环控制系统。个人电脑通过键盘、鼠标等输入设备感知用户的意图或命令,并去驱动显示器、喇叭等输出设备执行命令,用户通过监测输出设备看是否达到控制预期。如果没有达到,就修正输入设备的输入最终实现目的,整个控制过程形成一个闭环。ECU 也是一样的道理,它通过传感器采集到被控制设备的各种参数(比如压力、转速、车速等),如果这些参数不符合要求则驱动执行器去改变这些参数,这样就形成了一个闭环控制系统。
通常我们所说的ECU指的不是某一个具体模块,而是指一类模块,是一个统称,比如控制发动机的ECU叫ECU(Engine Control Unit)或者EMU、控制变速器的ECU叫ETC(Electronic Transmission Control)等,这些都称为ECU,所以将来看到某些资料里提到某模块缩写时,要根据上下文判断具体是在讲什么。例如,要根据上下文分清楚资料里提到的ECU到底是指发动机控制单元还是泛指电子控制单元。汽车的某些功能需要控制各个功能模块的ECU协同工作才能实现,比如电子稳定控制系统(ESP,Electronic Stability Control)。
3.6.2 V2V 需要保护吗?
V2V 网络需要数据交换,数据交换的车参与主体必须要能够信任对方,这就要求接收数据的V2V设备能够实时地对收到的数据进行验证。
那么此时,我想大家应该也能想到,V2V系统是否需要拥有能抵御来自内部和外部的攻击了吧?
需保护部分:
(1)通信[传输媒介、传输车辆消息或数据,证书(后面讲解),以及其他数据交换所依赖的模块],例如前面提到的V2V安全应用,如果攻击者可以伪造这些告警数据,将会导致安全隐患。
(2)设备(车载设备、路基设备等)。要保证通信安全,势必会涉及前面介绍的加密、证书等安全机制,设备中存储着证书、密码等敏感信息,因此需要保护好。
(3)运营组织(如管理后台、V2I 基础设施等),通过管理后台来攻击可能造成很大的影响,就像已经出现过的针对国内某品牌汽车的管理后台进行攻击的案例表明的那样,攻击者可以通过管理后台打开车门,获取车辆信息、车主信息等。
3.7 在线诊断系统(OBD)
由于OBD初期是为排放测试而生,所以排放相关数据必须通过DLC提供,大多数厂家将DLC作为查询或诊断汽车数据的唯一接口,不仅通过OBD接口传输与排放相关的数据,还利用其实现其他功能,通过OBD接口可以访问发动机控制单元ECU的数据,这些数据可以为汽车故障诊断提供非常有用的信息。
此时,我们可以看出通过OAD接口可以请求自定义的数据,由此看出OBD是一个潜在攻击点,原因是通过OBD可以对汽车进行控制。
通过OBD获取的信息量可能因为不同的汽车型号而不同,最早的OBD在检测到故障时只是简单地点亮故障灯而不提供具体的故障信息,而现代的OBD提供了一个标准的数字通信接口(也就是常说的OBD接口)来获取汽车的更多实时数据及一些标准的诊断故障码(DTC,Diagnostic Trouble Code),这些数据一般都是通过汽车解码器(或者叫诊断仪)连接OBD接口来获取的。这样车主或者维修人员就可以快速定位故障。
OBD-II是OBD1的升级版,OBD标准除了规定了数据接口(DLC,Data Link Connector,也就是OBD接口)的引脚、数据通信协议、消息格式等,DLC有专门的电源引脚为解码器提供电源,OBD-II还提供了一个可扩展的故障码列表,可根据提供的标准来查询任何汽车ECU数据以及可对ECU 固件进行篡改。
3.8 汽车总线协议
汽车内网采用了多种协议,例如FlexRay、MOST、CAN、LIN等,这些协议的速率和成本不同,因此有各自的应用场景,如图6-1所示。例如,MOST常用于多媒体系统中高速传输数据,FlexRay用于实时性要求较高的X-By-Wire,CAN常用于连接控制器,LIN则用于门窗开关等。
3.8.1 为何使用高低速CAN总线呢?
为了节约成本(例如:发动机系统的总线对数据的传输率要求就比舒适系统的要求高,而舒适系统的总线一般离连接设备较远,比较更容易收到干扰或损坏),不同子系统采用了不同速率的总线(高速CAN总线和低速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总线连接,那么诊断汽车的设备可以直接接收诊断所需的数据。
有些ECU还可能和多条总线相连,ECU之间通过发送CAN数据包进行通信。CAN数据包是广播到网络上每个ECU的,而且CAN数据包没有源地址和目的地址,只有一个消息ID,收到数据的ECU根据这个ID判断是否对这个数据感兴趣,从而传输到应用层进行处理。因此,如果攻击者取得了CAN总线的访问权,他很容易就可以监听网络上的数据或者伪造数据。同时,也提高了逆向分析的门槛,因为很难直接判断到底是网络上哪一个ECU发出了某个ID的数据,导致溯源困难。
3.8.2 CAN 协议特点
-
去中心
CAN协议不需要中央控制节点来协调通信
-
基于消息的寻址
CAN不对网络中的节点进行寻址而对消息进行寻址,每个消息都有一个消息ID,根据ID判断是什么数据(例如速度消息、车窗控制消息等),但是各ID的消息里也可以有多个信号,所以每个节点发送消息时都是广播的,接收节点只接收那些感兴趣的ID的消息。
3.8.3 CAN消息协议
CAN总线上传输的有以下4种帧
-
数据帧:消息中包含发送节点的数据(如发动机转速)
-
远程帧:一个节点向其他节点请求数据
-
错误帧:当一个节点检测到错误时,将发送错误帧通知其他节点
-
超载帧:当一个节点无法及时处理数据时,即正在处理之前发送的数据,发送这种帧来告诉其他节点延迟发送下一个数据
3.8.4 CAN的上层协议
3.8.4.1 ISO-TP
ISO-TP 是CAN的上层协议用于发送大于8个字节的数据
3.8.4.2 CANopen
CANopen 是一种架构在控制局域网络上的高层通信协议
当传输数据发生冲突时,CAN总线的仲裁机制会使COB-ID最小的信息继续传送,不用等待或重传。COB-ID的前4位是CANopen的功能码,因此数值小的功能码表示对应的功能重要,允许的延迟时间较短。
CANopen设备间的通信可以分为三种通信模型
-
主从(master/slave)模型:一个CANopen设备为主设备(master),负责发送或接收其他从设备(slave)的数据
-
客户端服务器(client/server)模型:在SDO协定中,SDO 客户端(client)将对象字典的索引及子索引传送给 SDO 服务器,因此会产生一个或数个请求数据(对象字典中,索引及子索引对应的内容)的SDO封包
-
生产者/消费者(producer/consumer)模型:数据产生者与数据消费者,模型采用了心跳信号(心跳协议)
-
心跳协议(Heartbeat Protocol)用来监控网络中的节点及确认其正常工作。心跳信息的生产者(一般是slave设备)周期性地送出功能码1110、ID为本身节点ID的信息,信息的资料部分有一个表示节点状态的位。
心跳信息的消费者负责接收上述资料,若在指定时间(于设备的对象字典中定义)内,消费者均未收到信息,可采取相关行动(例如,显示错误或重置该设备)。
由一个生产者送出数据给消费者,同一个生产者的数据可能给一个以上的消费者。又可分为推送和拉取两种:
-
推送(push-model):生产者会自动送出数据给消费者。
-
拉取(pull-model):消费者需送出请求信息,数据生产者才会送出数据。
3.8.5 统一诊断服务
UDS 规定了诊断系统的要求,它定义了一系列诊断服务(service),这些诊断服务允许诊断仪(client 客户端)控制ECU(server服务器)的诊断功能,这些功能包括电子燃油喷射、自动变速箱和ABS系统,而这些控制单元都是通过车上的串行数据链路(如CAN总线)连接起来的。说它是独立于数据链路层的也就是说它可以基于各种数据传输协议实现,如基于CAN、Wi-Fi、FlexRay等。基于CAN的UDS的具体实现标准是ISO15765-3。
3.9 CAN分析工具及逆向分析方法
要对汽车发起攻击,攻击者要通过CAN总线使汽车执行刹车、转向等危险操作前了解CAN总线上的控制数据,这就需要对CAN数据进行逆向分析,破解控制协议。
CAN 协议的分析可以使用汽车行业所采用的标准工具。
例如,VehicleSpy、BusMaster、CANSpy等,还有一些安全研究人员使用的开源工具如CANToolz。
-
1.VehicleSpy
VehicleSpy是美国英特佩斯控制系统有限公司的产品,是一款集成了诊断、节点/ECU仿真、数据获取、自动测试和车内通信网络监控等功能的工具,支持标准的CAN数据库(即.dbc 文件),与配套的接口适配器硬件结合还可以支持 CAN 以外的其他协议,如FlexRay、LIN、汽车以太网等。
它支持的硬件有很多,分析CAN协议使用ValueCAN就可以。能同时查看、筛选、分类、定制和记录多种总线网络的信号和消息。它的自动消息高亮显示能准确清晰地指示车辆总线上正在变化的数据,这在对CAN进行逆向分析时非常方便。消息编辑界面能让用户方便地设定汽车网络通信的发送或接收消息和信号。VehicleSpy还有非常强大的图形化数据分析功能,包括复合Y轴、复合X轴、数据文件重叠、图表、复制到剪贴板、多种指针仪表等
VehicleSpy还支持脚本编程,功能非常强大,具体可以查看其用户手册。
-
2.BusMaster
BusMaster是一款开源的免费软件,支持多家厂商的硬件,例如Kavaser、Vector等厂家的硬件。图6-13所示为BusMaster支持的硬件。
BusMaster支持CAN数据的重放、记录、图形化显示、模拟,以及加载CAN数据库(但不是标准的DBC文件而是后缀名为.dbf的文件)等,功能非常强大。由于它是免费的,所以非常适合入门学习。Kavaser Leaf Light与BusMaster一起使用非常稳定
-
3.SocketCAN
SocketCAN是大众公司向Linux内核贡献的CAN驱动及协议栈实现,支持虚拟CAN设备、内置CAN芯片、USB或者串口CAN接口设备。
传统的Linux CAN驱动程序采用的是字符设备模型,通常情况下只支持单个进程发送或者接收CAN数据。SocketCAN采用的是网络设备模型
-
4.CANToolz
CANToolz又叫YACHT(Yet Another Car Hacking Tool),是一个分析CAN和设备的框架。该工具基于不同的模块组装在一起,可以被安全研究人员和汽车业/OEM的安全测试人员用来进行黑盒分析等,可以使用 CANToolz 发现电子控制单元(ECU)、中间人攻击测试、模糊测试、暴力破解、扫描或R&D测试和验证。
3.10 LIN总线
在汽车内,还有许多ECU的控制并不需要CAN这样高速率和高安全的通信,本地互联网 LIN 就是为适应这类应用而设计的低成本解决方案。LIN 是一个公开的协议,它基于SCI(UART)串行通信的格式,结合了汽车应用的特点。
LIN的传输速率最高可到20kbit/s,主要受EMI和时钟同步的限制。LIN 器件很常见,几乎所有的 IC 都带有 SCI(UART)接口,LIN很快就在车内低端控制器领域取得领先地位。典型的LIN应用有车门、后视镜、导向轮、马达、照明及其他智能传感器。LIN不但定义了物理层和数据层,还定义了相关的应用软件层。
LIN支持单线双向通信,采用廉价的由RC振荡器驱动的单片机,可以省掉晶体振荡器或陶瓷振荡器的费用。但在时间和软件上却要付出代价,每条报文必须经过一个自动确定波特率的过程。LIN协议支持最高20kbit/s的传输速率,以及一个低功耗休眠模式,此时总线将被关闭,不再消耗汽车电池。采用8位单片机并结合外部或内部RC有助于降低系统成本,减少PCB实际的面积。
当任意一个节点将总线拉低时,总线处于低电平,意味着总线进入占用状态;当所有节点都使总线浮空时总线处于电池的电压,意味着总线处于非占用状态(Recessive State);在空闲状态下浮空的总线通过电阻被上拉到高电平。总线工作在9V~18V的电压下,但所有连接到总线上的器件必须能承受40V的电压。一般情况下,微控制器通过线路驱动器或接收器与总线隔离。总线上的每一个节点被上拉电阻上拉到Vbat(电池电压),主节点通过一个1kΩ的上拉电阻上拉,而从节点则通过一个阻值为20kΩ~47kΩ的上拉电阻上拉,通常是30kΩ。总线最大长度为40米。
位错误:正在发送的节点应该对希望发送的数据与总线上实际出现的数据进行比较,控制器必须等待足够时间以确保总线对发出的数据做出反应,然后才可以测试这一数据。假定总线响应信号的最小边沿变化速率为1V/μs,最大总线电压为18V,那么发送器应等待18μs后才可进行测试。
3.11 MOST总线
-
MOST:媒体导向系统传输(MOST,Media Oriented Systems Transport)是一种用于汽车的高速多媒体网络技术,可以用于汽车及其他领域。串行MOST总线采用环形拓扑,同步数据传输机制,采用光纤传输音频、视频等。
MOST主要用于汽车的信息娱乐系统的联网,例如CD播放器、收音机等,除了这些还有更新的功能(如DVD视频播放等),这些都需要较高的数据传输速率。
信息娱乐系统对数据传输的速率要求较高,例如传输音频、视频等多媒体数据要求数据发送方和数据接收方支持较高的传输数据速率及较准确的同步性。另外,要将MOST应用于汽车这种高电磁干扰的环境中还要求其满足电磁兼容性、抗干扰性等。
MOST 特点:
-
MOST总线几乎只用于影音娱乐系统的连接
-
MOST总线最多可以连接64个设备
-
MOST有多个版本,不同版本的速率不同:MOST25的速率是24.8Mbit/s,MOST50的速率是50Mbit/s,MOST150的速率是150Mbit/s。
-
MOST采用环形拓扑
-
MOST总线的信道分为控制、同步和异步3种。
-
MOST 总线系统中一个节点坏掉就会瘫痪整个网络,所以可以采用直接旁路某节点的方式检查故障,MOST节点的接口可以被拔掉进行旁路。
3.12 FlexRay 高速总线
FlexRay:FlexRay是高速总线,在汽车上主要用于开环或闭环控制系统,主要特点是可靠性高、容错性好、实时性好。主要用于对可靠性和实时性要求比较高的应用场景,如电控转向、电控刹车、电控驱动等系统、电控油门,以及其他主动安全系统。这些系统可能没有机械备用系统,也就是说,如果电子系统故障将无法补救,所以对可靠性要求较高,并且X-By-Wire是一种趋势
静态部分使用TDMA(Time Division Multiple Access)方法,每个节点会均匀分配时间片,每个节点只有在属于自己的时间片里才能发送消息,即使某个节点当前无消息可发,该时间片依然会保留(也就造成了一定的总线资源浪费)
静态部分使用TDMA(Time Division Multiple Access)方法,每个节点会均匀分配时间片,每个节点只有在属于自己的时间片里才能发送消息,即使某个节点当前无消息可发,该时间片依然会保留(也就造成了一定的总线资源浪费)
3.12.1 FlexRay拓扑
点对点:这是最简单的配置,即两个FlexRay节点直接相连,最大距离为24米。
总线结构:FlexRay系统配置为总线结构时可以支持4~22个节点,任意两个节点间的距离小于24米。还有星形、混合型、级联型等结构。
3.12.2 FlexRay硬件
FlexRay节点由主控制器(Host)、通信控制器(Communication Controller)和总线驱动器组成,每个节点还可能包括总线保护器(BUS Guardian)用于监控总线驱动器。
在Metasploit Framework 6大模块中有一个Payload模块,在该模块下有Single、Stager、Stages这三种类型,Single是一个all-in-one的Payload,不依赖其他的文件,所以它的体积会比较大,Stager主要用于当目标计算机的内存有限时,可以先传输一个较小的Stager用于建立连接,Stages指利用Stager建立的连接下载后续的Payload。Stager和Stages都有多种类型,适用于不同场景。
FlexRay采用的传输介质是双绞线,屏蔽和非屏蔽的都可以。通信控制器用于实现FlexRay协议的功能(如同步、调度、控制总线访问等)。总线驱动器的功能是将比特流转换为电平信号发送到总线上或者将总线上的电平信号转换为比特流。总线监控器负责控制节点在允许通信的情况下才能访问总线。
3.12.3 FlexRay数据帧格式
FlexRay 在每个周期的静态段或者动态段的时间槽中进行数据传输所采用的实际数据报文包含几个部分
FlexRay帧结构
FlexRay的每个数据包可以传输254个字节的数据(因为数据长度域只有7个比特,而且FlexRay的载荷数据总是以2个字节组成的字为单位进行传输的)
帧头 | 载荷 | CRC | ||||
5 比特状态位 | 11比特帧ID | 7 比特载荷长度 | 11 比特帧 | 周期计数器 | 载荷长度 x2个字节 | 3 字节 |
案例一
假设,如果我们能入侵车机就能访问CAN IHS(中速CAN)和CAN-C(高速CAN)网络上的ECU。
可以,尝试把信息发送到所有的ECU上,而这些ECU控制着车辆的各种物理特性。
最后能入侵车机后,并没能直接访问CAN总线而是还需要利用漏洞更新一个固件。
CAN-C(高速总线) | CAN IHS 总线 |
---|---|
ABS 模块: 防抱死制动系统 | AMP 放大器: 无线电广播 |
AHLM模块: 大灯高度调整 | BCM 模块: 车身控制模块 |
ACC模块: 自适应巡航控制 | CCB 连接器 |
BCM模块: 车身控制模块 | CCIP 连接器 |
CCB 连接器: 星形CAN-C 主体 | DDM 模块 |
CCIP 连接器: 星形CANCIP | DLC 诊断接口 |
DLC 诊断接口 | EDM 模块 |
DTCM 模块: 驱动系统控制 | HSM模块: 座椅加热 |
EPB 模块: 电子驻车制动器 | HVAC 模块:A/C 加热器 |
EPS 模块: 电子助力转向系统 | ICS 模块: 集成中心栈开关 |
ESM 模块: 电子变速 | IPC 模块 |
FFCM 摄像头: 前置摄像头模块 | LBSS 传感器: 盲点左后方 |
IPC 集群 | MSM 模块: 记忆座椅驱动 |
OCM 模块: 乘客分类模块 | PDM 模块: 乘客门 |
ORC 模块: 安全控制器 | PLGM 模块: 电动尾门 |
PAM 模块: 泊车辅助模块 | 车机: 无线电广播(非桥接) |
PCM 模块: 动力系统控制 | RBSS 传感器: 盲点右后方 |
车机: 无线电广播 | |
RFH 模块: 射频模块 | |
SCM 模块: 转向柱 | |
SCLM 模块: 转向柱锁控制模块 | |
TCM 模块: 变速器控制模块 |
被动防盗系统(PATS)
汽车的点火钥匙中都植入了一个小芯片,与车辆上的传感器通信。
胎压监测系统(TPMS)
汽车上每个轮胎都有一个胎压传感器,会时刻测量胎压并把数据通过无线传输给对应的ECU。
遥控进入(RKE)
无钥匙进入,也就是遥控钥匙中有一个短距离的无线收发器,可以与车辆上的ECU 通信,这个无线电收发器会发送认证信息数据给汽车,然后汽车会判断这些认证信息是否有效,从而决定是否执行上锁、解锁和启动引擎等指令。
0x04 远程攻击入口
攻击者可能选择的一些切入点。很多人在看到这些项目时想到的都是各种技术术语,但是对于攻击者来说,每项与外界交互的技术都是一个潜在的攻击切入点。
-
攻击入口及对应的总线
入口 | ECU | 总线 |
---|---|---|
RKE | RFHM | CAN-C |
胎压管理系统 | RFHM | CAN-C |
蓝牙 | Radio | CAN-C,CAN IHS |
车机 | 车机 | CAN-C,CAN IHS |
蜂窝网 | 车机 | CAN-C,CAN IHS |
物联网/应用程序 | 车机 | CAN-C,CAN IHS |
4.1 蓝牙
大多数汽车都能够通过蓝牙与设备同步数据,如打电话、发短信、播放音乐等,蓝牙不同于现有的其他信号,蓝牙栈很庞大,同时也存在着大量的攻击漏洞,所以攻击面很大。一般来说,涉及蓝牙栈的攻击方案有两种。第一种是利用未配对的设备。这种攻击的危险程度最高,因为任何攻击者都可以获取设备的代码。第二种利用方法是在配对完成后,因为涉及了用户交互,所以威胁性没那么大。曾经就有研究人员演示了如何利用蓝牙接口入侵一辆汽车。Codenomicon的研究人员还发现,汽车中常用的蓝牙接收器有很多崩溃的情况。
4.2 Wi-Fi
无线电接收机不仅可以接收声音信号,也可以接收数据。无线电接收机可以接收多种无线输入,比如GPS、AM/FM广播和卫星广播。多数情况下,这些信号被简单地转换成音频输出,数据解析的数量也不大,这就说明其中不太可能有可以利用的漏洞。但是,一个可能的例外是无线电数据系统,这种系统在传输FM模拟信号的同时传输如歌曲名、电台名字等数据。因此就涉及对数据的解析从而可能出现安全漏洞。
有些具备蜂窝数据连接的汽车会通过Wi-Fi热点的方式和乘客共享网络连接
4.3 车载通信系统/互联网/应用程序
如今许多汽车都配备了蜂窝网功能(如GPRS、3G、4G等),一般叫作车载通信系统,用于将车辆连接到数据网络,例如通用安吉星系统。蜂窝连接也可以用于接收交通或天气信息等数据。
这套系统是最重要的攻击入口,因为攻击距离很广,广到只要目标汽车上有蜂窝通信就可进行。即使车载通信系统没有被直接连接到CAN总线上,这个通信单元仍然可以用来传输如数据、声音等数据。有的研究人员此前就在没有涉及用户交互的情况下,远程利用过汽车上的通信单元。
4.4 硬件信息收集方法
首先对系统进行分析,找出可能的攻击向量,然后再研究特定的攻击向量,首先是物理攻击向量。
可能会存在的物理攻击向量:
-
CID有两张可插拔的存储卡
-
CID有一个USB接口
-
一个4针的以太网接口
-
各种测试点和调试诊断接口
其他可能存在的攻击向量:
-
浏览器:不仅CID运行的操作系统是老版本的Ubuntu系统,其运行的浏览器也是比较老的版本,浏览器基于WebKit 534.34,这个版本的浏览器引擎有几个比较知名的漏洞。通过这些漏洞可以让浏览器崩溃但是没有实现代码执行。
-
蓝牙:没有找到漏洞。USB:可以通过CID的USB接口让CID重启进入NVIDA Tegra的Recovery模式,但是bootloader是通过密码保护的,所以没有办法通过这种方式提取固件。
-
存储卡:其中一张存储卡上有一个名叫 carkeys.tar 的文件,其中包含了这辆Model S的OpenVPN认证信息,也就是一个X509标准证书、一个RSA私钥和一个OpenVPN静态密钥,这些相当于车钥匙,所以未来汽车的钥匙可能都是基于密码算法的。
-
Wi-Fi:将Model S连入Wi-Fi后并没有发现开放的端口,但是当Model S连上Wi-Fi后首先会通过向一些服务器发起http请求确定网络连通性,在确定网络连通性后尝试通过 OpenVPN 连接特斯拉服务器(地址是 vpn.vn.teslamotors.com)。
-
以太网接口:
通过这个接口可以与汽车的娱乐信息系统网络通信,接入信息娱乐系统网络后使用Nmap等工具对内网扫描就可以发现3个设备,一个是CID、一个是IC、另一个是网关。
三个设备发送了大量(约 1000 个包每秒)的 UDP 广播包(目的地址192.168.90.255),根据数据类型的不同使用不同的端口,这就与CAN总线的机制非常类似,网络上每个节点将数据广播到网络上,需要数据的节点就接收需要的数据,猜测这里的端口号类似于CAN的消息ID。
可以通过扫描发现开放的端口及对应的服务。
4.5 固件升级步骤
4.5.1 汽车一般升级固件大致步骤
-
首先,汽车厂家发布新版本固件到升级服务器,新版本固件包含了对漏洞的修复或者对性能的改进。
-
汽车从服务器下载新固件
-
汽车对新固件进行验证
-
汽车更新固件
4.5.2 OTA 升级中的安全性
1、厂家发布新固件到升级服务器
-
服务的安全
-
汽车对服务器的认证(数字证书)
2、汽车下载固件
-
网络通信安全,加密传输
-
断点传输
-
防止固件泄露导致知识产权泄露
3、汽车验证并升级固件
-
固件签名:防止攻击者利用篡改过的固件来更新系统
-
固件新鲜性:防止黑客利用存在漏洞老版本固件来更新系统然后利用漏洞发起攻击
-
固件加密:可以防止黑客通过抓包来窃取固件从而造成知识产权泄露(比如辅助驾驶控制算法)
4.5.3 安全的OTA升级系统
典型的固件升级过程如下
-
开发人员开发出新版本的固件
-
厂家对新版本的固件进行加密并用私钥进行签名
-
签名后的新版固件被上传到厂家的升级服务器
-
汽车同服务器建立安全的通信链路(例如,通过验证服务器证书来防止服务器被伪造)
-
汽车通过安全通信链路下载固件
-
汽车对固件进行解密
-
汽车验证固件签名
-
汽车利用固件进行升级
– 密钥和证书这类重要信息最好引入防破解的硬件安全模块 HSM(Hardware Security Module)来安全保存和处理。为了防止一辆汽车被破解而影响其他车辆的情况出现,每辆汽车需要有自己的密钥,密钥的管理问题也需要解决。
-
回滚需要用到的固件需要备份并加密保存,当更新出现问题时能够保证回滚到可以运行的老版本固件,防止由于升级失败而使汽车变砖。
-
固件更新程序(例如bootloader)控制远程更新,而其本身一般无法更新,所以代码的安全只能通过安全开发及测试保证。
0x05 汽车传感器安全
应用 | 技术 | 传感器类型 |
---|---|---|
发动机诊断 | 霍尔、磁阻等传感器 | 转动 |
汽车和发动机诊断 | 压阻、电容 | 压力 |
转向、刹车、变速 | 霍尔、摄像头 | 角度和位移 |
导航、安全 | GPS、压阻 | 线性加速 |
安全、舒适系统 | 超声波、毫米波雷达 | 近距离障碍检测 |
安全 | 毫米波、Lidar、摄像头 | 近距离障碍检测 |
非智能驾驶的汽车上这些传感器的攻击或者干扰因为有驾驶员的控制可能并不能造成严重的后果。这些传感器只是被用于辅助驾驶系统,驾驶员会始终处于主导地位,但是智能汽车完全依赖于这些传感器控制汽车时就要求这些传感器采集的环境数据高度可靠,如果这些数据受到干扰,甚至伪造,则会威胁到驾乘人员的生命安全。所以非常有必要在智能汽车大规模应用之前对这些传感器的安全性进行研究,无论是抗干扰还是抗伪造攻击等都值得研究。
5.1 GPS安全
智能汽车采用GPS主要是定位,然后结合地图进行导航及结合其他传感器数据感知环境,但是定位不光可以用 GPS,还可以用国产的北斗、俄罗斯的 GLONASS等。
5.1.2 GPS安全性分析
GPS 的安全性威胁主要分两种,一种是干扰、另一种是欺骗。
-
GPS干扰
-
GPS欺骗
5.2 超声波传感器安全
超声波传感器根据发送出去的超声波信号和接收到的反射信号的时间差计算出传感器与物体间的距离
如果攻击者要干扰这种传感器可以通过不断发射超声波达到目的,如果要进行欺骗可以通过计算目标传感器发射的超声波的时间,有针对性的延时或者超前将超声波信号发送给目标传感器来伪造反射信号,从而使其计算出指定的距离,而且用于攻击的设备成本也非常低,一个Arduino就可以搞定
5.3 摄像头安全
智能器依靠摄像头来识别障碍物、车道、甚至计算出与前车的距离,所以是非常重要的传感器。例如,来自以色列的高级辅助驾驶系统厂商MobileEye就仅仅基于摄像头实现了车辆识别、距离计算、车道识别等
-
前碰撞预警(Front Collision Warning,FCW)
-
行人探测与防撞警示(Pedestrian Collision Warning,PCW)
-
车道偏离预警(Lane Departure Warning,LDW)
-
车道保持与危险预警(Vehicle Distance Monitoring Warning,HMW)
-
城市前碰撞警告(Urban Forward Collision Warning,UFCW)
-
智能远光灯控制(Intelligent High Beam Control,IHC)
5.4 Lidar安全
无人驾驶汽车利用Lidar探测障碍物,Lidar即激光雷达传感器,Lidar是个合成词,取自“light”(光)和“radar”(雷达)。辅助驾驶系统将 Lidar 的数据与其他传感器的数据融合后来控制汽车。由于Lidar是汽车探测环境主要依赖的传感器之一,所以Lidar被干扰或者欺骗的影响非常大
-
Lidar的原理
Lidar发射激光束并经空气传播到地面或物体表面,再经表面反射,反射能量被Lidar接收并记录为一个电信号。如果将发射时刻和接收时刻的时间精确记录,那么激光器至地面或者物体表面的距离(R)就可以通过以下公式计算出来R=ct/2(c表示光速,t表示发射时刻和接收时刻的差)。
-
攻击方法
最简单的攻击方法就是发送干扰信号来扰乱Lidar,使其无法检测到障碍物,更高级的攻击可以让Lidar检测到不存在的障碍,也就是欺骗
0x06 汽车遥控器及PKE系统安全
随着汽车数量的增多,汽车被盗数量也逐年上升,车辆防盗器的安全已成为车主关注的问题,汽车采用的防盗技术有多种,例如在钥匙里植入RFID、采用滚动码遥控器,以及采用PKE(Passive Keyless Entry)系统等。汽车遥控器及PKE系统都是汽车防盗系统的关键技术,其安全性值得研究。
6.1 汽车遥控器安全
简单来说,汽车遥控器的工作原理是将指令通过无线电发送给汽车,汽车在接收到指令后执行开门、关门等操作
由于无线信号的广播特性,任何人只要在信号接收范围内都可以接收到这个无线信号,所以如果不对遥控信号进行加密就存在被攻击的危险。按照信号加密和不加密把遥控器分为两类,即固定码和滚动码遥控器。
固定码遥控器的编解码电路目前已经朝着高度集成化发展,普通的固定码遥控器已经被广泛用于众多领域,如遥控车库门、无线门铃、门禁、遥控玩具、遥控开关、防盗报警器、车位锁等,然而这些采用固定码的芯片并不能保证系统的安全,因为采用固定码的这些芯片的无线遥控每次发送的数据都是一模一样的,可以被重放攻击。鉴于固定码的脆弱性,其慢慢被滚动码(Rolling Code)遥控器代替。
6.2 滚动码
滚动码是指采用了某种加密算法加密后的遥控器信号。
参考链接:
参考《智能汽车安全攻防大揭秘》里面的常见名词的解释
还有一些其它地方的来源,有遗漏的链接私聊一下,会在原文章上添加上去
我自横刀向天笑,去留肝胆两昆仑
原文始发于微信公众号(橙留香Park):车联网安全车端知识术语总结