张 翼,郭 燕,3,周继祥,龚汉文,唐顺成,薛吟兴,3
1(中国科学技术大学 软件学院,合肥 230026)
2(中国科学技术大学 计算机科学与技术学院,合肥 230027)
3(中国科学技术大学 苏州高等研究院,江苏 苏州 215123)
随着自动驾驶技术的快速发展,现代车辆软硬件系统日益复杂,同时,车联网也不断演进,以适应车内部、车与车、车与路边基础设施、车与云端之间进行大量数据交互的需求.车联网的快速发展有助于车辆整体的智能驾驶水平和整体交通运行效率的提高.但另一方面,系统越复杂,暴露出的攻击面就越大,由此引发的安全技术问题有可能越多.
车联网系统由车辆和云平台、路基设施、其他车辆等共同参与,是一个包括Wi-Fi、移动通信网络、CAN总线网络等多种网络协议的复杂系统.到目前为止,安全人员汇报过多起针对车联网协议进行攻击的案例,从而达到硬件篡改、未经授权的数据访问、消息修改、跟踪车辆位置等攻击目的.部分案列是针对车联网络中的身份认证、通信链路和CAN总线漏洞进行攻击,如嗅探攻击[1]、绕过身份认证[2]和车载僵尸网络攻击[3].部分案例针对云服务器进行侧信道攻击[4]、消息重放攻击[5]和DDoS(Distributed Denial of Service)攻击[6,7].表1列出了部分漏洞/攻击的类型、介绍及效果.虽然目前存在一些加强车联网安全性的措施,如加强身份认证难度[2],提高隐私保护力度[8],但是这些案例极大影响了用户对自动驾驶系统安全性的信心,也对汽车行业的发展带来了巨大的影响.2021年工信部发布《工业和信息化部关于加强车联网网络安全和数据安全工作的通知》,要求加强车联网网络安全防护.因此,对车联网的网络协议进行安全测试,尽早发现系统中存在的漏洞是一项迫在眉睫的工作.
表1 针对车联网的攻击
车联网面临的安全问题包括系统内所有平台和网络协议所面对的各种安全威胁,包括但不限于网络入侵、消息篡改和伪造、通信协议破解等.而且网络协议在代码实现时也有可能引入不规范或者安全问题.因此,对车联网进行测试并发现可能的漏洞非常复杂和困难.
当前已经有各种方法用于软件系统的测试和漏洞发现,如静态分析[9]、动态分析[10]、符号执行[11]、模糊测试[12]等.在上述各种方法中,P.Miller[12]提出模糊测试(Fuzzing),通过发送非预期的输入并监视异常结果实现漏洞发现,具有如下优点:不必对目标程序源码有深入了解、自动化程度高、可用性好、并且可以容易地扩展到对大型目标程序.当前,模糊测试已成为最常用的自动软件测试技术,也广泛应用于网络协议的安全测试[13,14].但是,目前仍缺少针对发展迅速的车联网的模糊测试的综述性研究.
为此,本文对现有的车联网模糊测试文献进行综述,第1部分介绍了车联网的架构,第2部分简单描述了模糊测试,特别是网络协议模糊测试的分类,第3部分总结了近年来与车联网网络协议模糊测试相关的文献,最后第4部分在此基础上,展望了模糊测试在车联网上的研究方向,针对如何加速网络协议模糊测试,提高模糊测试的真实性提出合理建议.
车联网利用既定的网络通信协议,实现车辆智能动态地与周围的车、路、人以及通信网络之间进行信息共享交换,从而提升汽车自动驾驶能力,提高交通效率等.车联网的基本架构如图1所示,主要可以分为车载总线网络和无线通信技术.
图1 车联网基本架构
车载总线网络实现了大量电子控制元件ECU(Electronic Control Units)通信,从而完成了对发动机、安全气囊、制动器等电子系统的控制,构成了车内网络架构.不同的ECU节点通过不同的总线协议通信.常见的车载总线协议有CAN(Controller Area Network)、CAN-FD(CAN with Flexible Data-Rate)、LIN(Local Interconnect Network)、FlexRay、MOST(Media Oriented System Transport)和Automotive Ethernet,如表2所示.
表2 车内有线网络协议
CAN总线是一种能有效支持分布式实时控制的串行通讯网络,具有无损位仲裁机制、多主结构等优点,且已被标准化.因此,CAN总线被广泛用于车内通信.CAN成本低,可靠性高,可用于安全应用,动力控制和传感器连接等.
CAN-FD[15]是CAN总线的替代总线,在继承了CAN总线的大部分特性的同时,提高了总线带宽和数据长度,显著提高了通信速率,有效弥补了CAN总线的不足.
LIN[16]主要用于ECU和传感器之间的串行通信,采用单主多从的组网方式,保证了网络的可靠性,同时提高了网络的开发速度.
FlexRay[17]专为车联网而设计,是一种具备故障容错的高速可确定性车载总线系统,采用了基于时间触发的机制且具有高带宽、容错性好等特点,在实时性和可靠性方面具有一定优势.
MOST[18]是面向媒体的系统传输总线,是工业界合作的成果.MOST总线基于环形拓扑,允许共享多个发送和接收器的数据,同时可支持多个主拓扑结构,专用于高速数据传输和同步.
车载以太网Automotive Ethernet[19]使用以太网连接车内电子单元的局域网技术,包含DoIP(Diagnostic communication over Internet Protocol)、SOME/IP(Scalableservice-Oriented Middleware over IP)和TCP(Transport Control Protocol)等协议,如表3所示.其不仅可以满足汽车行业对高可靠性、低电磁辐射、低功耗、低延迟的要求,还能保持高速联通.车载以太网跟传统以太网最大的区别在于电缆,传统以太网使用两根双绞线,一根用于传输数据,另一根用于接收数据;而车载以太网只使用一根同时发送和接受的双绞线,在单对非屏蔽双绞线上即可可实现100Mbit/s甚至1Gbit/s的数据传输速率.
表3 车载以太网
但随着汽车功能的丰富,ECU数量不断增加,智能网联汽车对ECU元件进行了集成,将ECU功能集中化为域控制器.如图1所示,域控制器按汽车的功能分为车辆控制域、座舱域和自动驾驶域.集中式网关通过车载以太网集中接入各个域控制器以及远程信息处理盒子TBOX(Telematics Box).各个域控制器负责域内ECU的通信,通过上述各总线协议进行报文转发和管理.TBOX为整车提供远程通信接口,用于整车的通信管理.
无线通信是一种利用电磁波信号在自由介质中进行信息交换的通信方式.无线通信技术需要满足车辆与车辆、路边基础设备、云端和移动终端等的数据交互要求.V2X(Vehicle to Everything)通信可以与环境交换信息,如当前的交通拥堵情况、交通事故等,从而改善交通状况,提高交通效率以及减少事故发生率.
车辆与车辆之间通过专用短程通信DSRC(Dedicated Short Range Communications)、基于4G的LTE-V2X(Long Term Evolution-V2X)以及基于5G的5G-V2X进行数据传输,如前方的车辆速度.车辆与路边基础设备通过LTE-V2X、DSRC等进行数据交互,如前方是否发生事故以及车辆所处位置.车辆与移动终端通过Wi-Fi(Wireless-Fidelity)、蓝牙、NFC(Near Field Communication)、3G、4G、5G等进行数据交互,如用户的语音信息以及驾驶员的生物数据,从而支持无钥匙启动、语音交互等功能,满足驾驶员的合理需求,提高驾驶员的驾车体验.
当前主流的V2X通信技术规范为DSRC-V2X和基于蜂窝网络的C-V2X(Cellular-V2X)[20].其中,DSRC由物理层标准IEEE 802.11p提供车载环境下的无线接入,网络层标准IEEE 1609提供网络和安全服务.DSRC还支持IPv6和TCP/UDP,用于连接Internet.其协议信息内容和结构由SAE的SAEJ2735、SAE2945标准规范构成.C-V2X是基于4G/5G等蜂窝网通信技术演进形成的车用无线通信技术,包含LTE-V2X和5G-V2X.相比于DSRC-V2X,C-V2X的通信范围更广,部署成本更低.同时,随着5G技术的发展,C-V2X有更为清晰的技术发展路线.
在上述通信技术规范中应用最广泛的车载无线通信协议为Wi-Fi、蓝牙和ZigBee 3种无线短距通信协议,如表4所示.
表4 车载无线通信技术
Wi-Fi遵循IEEE 802.11标准,使用无线电波发送信号,具有低成本、兼容性好、稳定性差、高功耗、安全性较差等特点.
蓝牙遵循IEEE 802.15标准,可实现车辆与移动设备的数据交互,具有低功耗、低成本、支持复杂网络、较高安全性(支持数据包加密和认证)、各版本不兼容等特点.
Zigbee是基于IEEE 802.15.4标准的LAN协议,其特点是短距,低复杂性,低速低功耗,网络容量大,抗干扰性差.
随着汽车功能的不断升级,其内部组件变得越来越复杂,有线网络的部署受到限制且车内空间也变得更加拥挤,无线通信技术也被提出可用于车内传感器和ECU的连接,从而减少对车内连接线的需求和汽车车身的重量,节省能源的同时能提高汽车的续航能力和车内通信的灵活性.其中,Mirza等人[21]提出了一种基于BLE(Bluetooth low energy)的连接传感器和ECU的低成本通信方案,相较于CAN总线网络,带来了更少的电流消耗、更高的通信效率和更低的成本.Parthasarathy等人[22]提出了一种基于Zigbee的车载无线传感器网络设计方法.因为Wi-Fi会干扰蓝牙和Zigbee信号,稳定性很差,所以暂时没有研究人员用于车内传感器和ECU的连接与控制.但上述三种方法均没有满足车内数据传输在传输时延、数据可靠性和安全性方面的需求:传感器数据传输需要低时延和超高的可靠性,且车内电子设备众多,通信环境复杂,需要高抗干扰性和高稳定性.基于这些需求,2021年,华为提出了“星闪技术”[23],重新定义车载无线短距通信,具有超低时延、超高可靠、精准同步等优势.
结合多种无线通信技术,车辆不再是一个独立的电子系统,而是车联网中的一个移动终端,从而能够满足人、车、路和云服务平台的全方位连接.
汽车功能的不断升级导致车内通信协议规模和复杂度不断增加,正如图1所示:各域控制器负责域内ECU的通信,域间通信通过集中式网关,无线通信技术正逐渐取代有线网络连接.技术的创新不仅带来了功能的便利,对安全性也提出了更高的要求,使得安全测试要求越来越高.相比于其他漏洞发现方法,模糊测试的优势越发明显,已经成为车联网安全测试领域最常见也是最有效的方法[24].车联网模糊测试基本流程和分类与传统网络协议一致.网络协议模糊测试的基本原则是通过生成或者变异的方法生成畸变的数据包,畸变数据包可能引起被测协议在处理畸变数据包的时候出错或崩溃,从而发现被测协议中的漏洞.网络协议模糊测试的难点在于在遵循协议规范的同时,构造合法的畸变数据包.本节将简要介绍网络协议模糊测试的流程和分类.
网络协议模糊测试框架基本上由测试用例生成器、被测协议、监测器和异常分析器4部分组成.
网络协议模糊测试的流程如图2所示.车联网网络协议模糊测试的流程:①根据对被测协议的了解程度和测试目的选择不同的生成策略以生成测试用例;②将生成的测试用例发送给被测协议实体作为输入;③根据协议实体中测试用例的执行情况,监测器观察协议是否行为异常或崩溃,同时收集被测协议在模糊测试过程中产生的崩溃或异常信息;④收集到的异常信息被测试人员用于分析协议的漏洞.
图2 网络协议的模糊测试流程
网络协议模糊测试的方法可以有多种不同的分类方法,下面从测试用例的生成策略、对被测协议的了解程度以及模糊测试的目的进行分类.
3.2.1 测试用例的生成策略
根据测试用例的生成策略,网络协议的模糊测试可分为两种:基于生成和基于变异[25].
基于生成的模糊测试需要分析被测的网络协议使用的协议规范,了解字段支持的数据结构和字段接受的值的范围,定义可修改字段和不可修改字段.例如,Zuo等人[26]分析不同状态下的RTPS数据包,抓取可用特征生成符合协议规范的模糊数据.Bayer等人[27]在了解基础协议结构以及数据包字段含义之后修正模糊消息包使其符合协议规范.
基于变异的模糊测试通过截取网络通信流量,捕获正常的通信协议消息,根据设计的变异策略(如,位翻转)将正常消息中的数据转换为非法值.例如,Patki等人[28]提出基于变异的模糊测试框架,检查8字节UDS协议的所有组合,然后改变字段产生无效数据包.
3.2.2 对被测协议的了解程度
根据测试者对被测协议的了解,车联网网络协议的模糊测试可分为3种:黑盒测试、灰盒测试以及白盒测试[29].
针对传统网络协议的黑盒测试是指测试者完全不了解被测协议的状态、功能等内部信息,通过预定义的规则对数据包进行变异生成新数据包来测试协议,也称为功能测试.黑盒测试的缺点很明显:难以定义测试终止的标准,只能提供较低的测试覆盖率.测试覆盖率是对测试完成程度的度量.它通常依据某种覆盖准则来对测试用例执行情况进行衡量,以判断测试执行得是否充分.
车联网中的网络协议大部分是有状态的网络协议,针对有状态的网络协议,黑盒模糊测试[13,14]通过有限状态机FSM(Finite State Machine)和图遍历协议状态模型,生成符合语法的消息序列.FSM是表示有限状态以及在这些状态之间的转换的数学模型,如图3所示,其中,S={S1,S2,S3}为有限状态集,具体而言,S1是断开状态,S2是等待连接状态,S3是连接状态.T={Tr1,Tr2,Tr3,Tr4}为状态转换条件.例如,Zhao等人[30]手动生成ZigBee协议MAC层的全状态覆盖图并对其优化.图3的状态图意味着S1状态必须要满足条件Tr1,譬如接收到特定的数据包,才能进入状态S2.在模糊测试中,如果不能在状态S1后不能生成特定的数据包,那么将始终不能到达状态S2.
图3 FSM状态图
白盒测试是指测试者通过阅读被测协议的源代码以及协议规范,完全了解被测协议的运行方式、功能和状态转换等内部信息,并使用这些信息来指导测试数据包的生成,通过使用动态符号执行和启发式搜索快速实现测试覆盖率最大化.理论上,白盒模糊测试可以生成覆盖所有协议状态的测试用例.但是,考虑到程序的复杂度,白盒测试往往并不能实现100%的覆盖.
灰盒测试介于黑盒测试和白盒测试之间,是指测试者对被测协议内部细节存在有限认知,但是缺乏对内部功能和运作的详细了解.灰盒模糊器可通过代码插桩获得目标程序的测试覆盖率,然后利用这些信息调整变异策略以覆盖更多的状态或者更快地发现失败的测试用例.例如,Pham等人[31]首次提出有状态的灰盒模糊测试AFLNET,使用服务器的响应码识别服务器状态,构建动态的状态模型,同时使用状态模型和代码覆盖率指导模糊测试过程.
白盒测试和灰盒测试都在一定程度上利用了目标程序的信息来减轻黑盒模糊测试的盲目性,即缺少指导测试终止和优化的覆盖度指标.相比于黑盒模糊测试的盲目性,以及白盒测试在测试大型网络协议时的低效,灰盒测试实现了较好的平衡,因此受到了更多的关注.
3.2.3 模糊测试的目的
模糊测试早期被当作一种攻击手段,研究者不需要对被测协议有较深的了解,也不需要系统的分析协议运行数据.例如,Koscher等人[32]通过CarsHark(1)https://carshark.net.au/嗅探CAN总线,构建简单的CAN数据包,即对随机字段进行模糊用于攻击ECU.
但这种方法对CAN数据包的处理很简单,不能控制测试的细粒度.随后,Lee等人[33]对嗅探得到的CAN数据包中数据字段的部分字节进行模糊,其他部分填充为0,模糊后的数据包可经过无线通道进入汽车系统实施攻击.上述文献均验证了模糊测试可用于攻击.
另外,模糊测试的攻击可用于辅助车辆功能的逆向分析.例如,Fowler等人[34]利用模糊测试作为攻击的手段,实现车辆远程开锁,证实了模糊测试可用于车联网的安全性验证.随后,该团队[35]通过发送CAN数据包,揭示了汽车显示屏显示不同信息以及其他隐藏的功能所需的数据,发现了车辆系统的缺陷,从而可以提高汽车安全性.Werquin等人[36]对CAN数据包中的特定字段进行模糊测试,成功挖掘了ECU中未记录的功能除此之外,模糊测试最主要的功能是针对车联网漏洞进行诊断和分析.其中,Bayer等人[27]针对CAN总线上的UDS(Unified Diagnostic Service)协议进行模糊测试发现了3种服务器崩溃类型.UDS协议是诊断服务的规范化标准,诊断过程为:诊断仪发送诊断服务请求给ECU,然后ECU按照标准回复给诊断仪.Patki等人[28]也对UDS协议进行了模糊,但是该方法只针对特定的第三方ECU,存在一定的局限性.
随着车联网模糊测试的发展,多种方法被提出,本节详细分析现有文献在模糊测试时的测试用例生成、异常信息监测以及测试评估标准3方面所做的工作.
模糊测试的本质即使用测试数据包引起程序出错,因此模糊测试工具的性能很大程度上取决于测试用例的生成.
4.1.1 模糊测试的基础框架
现存在部分已开源的模糊测试框架,如AFL(2)https://github.com/google/AFL、Sulley(3)https://github. com/OpenRCE/sulley和beSTORM(4)https://www.capterra.com/p/107198/beSTORM/等.在已有框架上进行扩展,从而对车联网网络协议进行模糊测试是一个合理的选择例如,Lee等人[37]在Sulley的数据库中加入CAN消息数据生成文件,随机生成CAN帧并发送至CAN总线.基于beSTORM的良好扩展性,即可用XML定义测试协议模块,Nishimura等人[38]引入一个自定义的测试模块,以连接beSTORM与车载控制系统,从而可针对CAN-FD协议进行模糊测试.此外,一些文献针对协议本身提出自定义的模糊测试框架.例如,BSS通过简单改变数据包的一个字段来实现模糊测试.Fowler等人[34]手动分析标准的CAN数据包后,试图约束模糊范围,只针对部分指定字段进行随机变异.但该方法降低了模糊测试的有效性,不能探索更多状态下的CAN协议.随后,该团队[35]对CAN数据字段的每一位都产生变异来探索车辆系统的缺陷.类似地,Patki等人[28]检查UDS协议的所有组合,然后改变其字段使其无效化.以上方法均未考虑车联网网络协议的状态.因此BFuzz和WiFi-Fuzzer[39]宣称会针对协议状态进行智能模糊,即对静态分析时确定为易受攻击的数据包进行变异.但是该方法几乎改变了数据包的每个字段.
4.1.2 模糊测试的优化
模糊生成器在模糊测试的循环开始时,会反复从种子池中选择种子进行突变,而上述方法对于种子的选择较为随意,未考虑测试的效率,会导致数据爆炸,使模糊测试效率降低.因此,不少文献针对模糊测试的种子调度(即种子选择和能量调度)进行优化,试图在提高模糊测试效率的情况下,同时提高模糊测试的深度.种子的选择会极大地影响模糊测试结果,有针对性的选择比随机选择的测试结果更为完善;种子被选中后,变异的次数或模糊时间的权重均被定义为能量,调整种子能量有一定概率能减少模糊测试的成本.
部分文献提出根据可监测的物理变量,如ECU状态变化、日志文件等进行分析,指导测试种子的选择.可监测的物理变量跟车内状态密切相关,CAN协议在车内应用广泛,因此大部分状态都受CAN协议的影响,此类文献大多针对CAN协议.其中,Werquin等人[36]根据目标ECU的状态变化指导测试生成器选择不同的生成策略以缩小模糊输入空间,同时提出名为遗漏模糊测试的方法,发送部分消息以识别导致特定状态更改的消息,并对其优先变异.McShane等人[40]分析日志文件,优先变异与与被测协议崩溃的原因相关的特定字段.Zhang等人[41]根据相同ID的不同消息的位翻转率BFR(Bit Flip Rate)生成有针对性的测试用例.BFR是同一个ID的不同CAN报文中的数据字段中某一位在一段时间内发生变化的的频率,即CAN报文的变化率.CAN报文有不同分段,不同分段的BFR值类型不同,根据BFR的值可标记不同分段的类型,以及该分段在数据字段中的作用,从而消息生成器可针对每个分段的特征采用不同的变异策略,优先选择高BFR的字段进行变异.
部分文献分析各字段对覆盖度的影响,优先选择能带来高覆盖度的种子,并赋予其较高的种子能量.其中,Li等人[42]提出了一个针对车载以太网中SOME/IP协议的灰盒模糊测试框架Ori.Ori提出两个策略:附加模糊测试和结构突变.附加模糊测试使Ori可以并行运行模糊测试,从而保证测试效率.结构突变允许Ori针对SOME/IP协议数据包的不同部分采用不同的变异算子(如位翻转突变),而不是将数据包作为整体进行变异.Ori不改变某些不能提高逻辑覆盖的头部字段(如协议版本、接口版本),从而可以生成能覆盖更深层次逻辑的数据包.Frankenstein[43]是基于固件仿真的模糊测试框架,修改蓝牙的固件系统,以快速注入蓝牙数据帧.输入单个数据包或者数据包序列,并对其分别进行变异,即可通过重新排序数据包增加代码覆盖率.在接受到数据帧后,重启设备的物理状态快照并进行固件仿真.
车联网网络协议的覆盖度不仅仅包括传统代码覆盖度,也有部分文献结合抽象状态模型提供的状态覆盖度.例如,Zuo等人[26]对RTPS协议的数据包结构进行建模,模拟真实的通信过程.在遍历所有状态的数据模型后,学习并量化相邻状态数据包中各个字段之间的关系,确定每个字段的变异权重.能导致覆盖度提高的字段会被赋予较高的变异权重,即更容易被突变.之后根据不同的状态选择特定的突变.动态变异权重避免了有限的时间成本和计算资源的浪费.
Zhao等人[30]提出了基于FSM的模糊测试算法,该算法首先手动生成状态转换的全状态覆盖图并对其优化得到模糊测试序列,从而可生成有效的异常数据.该方法在蓝牙协议和Wi-Fi协议应用颇为广泛.SweynTooth[44]根据蓝牙协议的核心规范构建了低功耗蓝牙协议的状态模型,从而保证生成格式上正确的数据包,同时其采用粒子群优化[45]启发式地细化每个协议层和层中的每个字段的变异概率分布,从而提高状态覆盖率.该团队之后提出了BrakTooth[46],通过编写一组简单的规则来识别协议消息,动态地构建抽象的协议状态机.在模糊测试期间,数据包可以实时地映射到该状态机中的状态以计算状态覆盖率.同时,BrakTooth采用动态模糊测试,也即拦截数据包,并按照规则修改或者注入数据包,从而使得模糊测试能够到达协议的深层状态的概率.
GREYHOUND[47]在网络接入点运行,将Wi-Fi协议建模为状态机模型,基于该模型预测数据包的状态.针对协议字段,GREYHOUND随机选择不同的变异算子(随机字节、零填充和位设置)获得变异后的数据包.随后,根据状态转换次数、发现两个异常之间的时间、发现的异常次数和迭代时间通过自定义的分代粒子群优化算法优化变异概率,将较高的突变概率分配给与攻击状态相关的协议层.
L2Fuzz[48]首先获得L2CAP(logical link control and adaptation protocol 逻辑链路控制与适配协议)的状态转换图,然后针对每个L2CAP状态,将事件、功能和动作分类,根据分类设定了针对状态的有效命令边界.这些命令可用于实现状态转换或测试针对特定状态的攻击,以提高模糊测试的状态覆盖度.L2Fuzz对参考VFuzz[49]将L2CAP数据包分割成需要变异的部分和不变的需要维护的部分,通过静态分析仅对L2CAP数据包关键字段进行变异,也即负责端口和通道设置的字段,这样可以更有效地生成测试包.
部分文献针对状态机手动创建的缺点——不仅要耗费大量人力,也容易出错,还需要不断更新——提出了优化措施.Tappler等人[50]提出基于主动学习[51]的测试,即使用Mealy有限状态机根据观察到的数据对同一系统的不同行为自动建模.随后,Aichernig等人[52]针对MQTT协议的特点,自动推断出一种通用的状态模型,并通过随机遍历该模型来生成测试序列,然后将随机生成的输入序列通过模糊测试生成器具体化.之后,该团队[53]根据蓝牙低功耗协议中每个BLE设备的不同行为分别自动建模.
4.1.3 测试用例的真实性
此外,基于生成的模糊测试通常会对网络协议结构进行分析,从而提高数据的可用性.例如,Kim等人[54]基于CAN结构生成测试用例,更快地进行测试.该文章先分析CAN报文之间的关系,定义导致车辆不良行为的模糊规则,然后生成并注入CAN模糊报文.同时,该文章会监测是否有无效的CAN ID、CAN字段的BFR是否超过设定门槛,有效减少了数据爆炸.通过少量的CAN消息包,即可达到暴力模糊的测试范围.
与基于生成的模糊测试相比,基于变异的模糊测试生成的测试数据可用性较低,与真实数据存在严重偏差,可能会被汽车的入侵检测系统IDS(Intrusion detection system)截获.因此,为了提高模糊数据的真实性,部分文献将深度学习与模糊测试相结合.例如,McShane等人[40]从之前模糊测试运行的数据集中手动识别成功和失败的测试用例,并对其进行归一化处理.数据预处理之后,构建并训练AI模型以预测测试用例.之后将该模型集成到现有的模糊测试框架中,在运行时动态生成能通过AI模型鉴别的近乎真实的模糊数据.Zhang等人[41]利用GAN(Generative Adversarial Networkd)生成符合协议规范的测试用例.GAN是一种深度学习算法,由生成器和分辨器构成.生成器采用随机CAN数据包作为训练的输入,分辨器采用真实数据和来自生成器的模糊数据作为训练的数据,利用分辨器对模糊数据的反馈来调整生成器和分辨器的参数.最后消息生成器生成的模糊消息会逐渐接近真实数据,从而符合协议规范.但是,GAN存在模型不收敛、模式崩溃、梯度消失、梯度爆炸等问题,因此该文章选择WGAN-GP(Wasserstein GANwith gradient penalty)[55]用于改善模型.
4.1.4 总 结
如表5所示,车联网中的模糊测试用例可通过扩展开源软件进行生成,也可通过优化模糊测试框架进行生成,从而实现高效率和高覆盖度.模糊测试的优化主要从种子选择和能量调度入手,根据观测到的物理量和测试覆盖度对种子选择进行排序,同时根据种子对覆盖度的影响分配能量.考虑网络协议的覆盖度不仅仅包括代码覆盖度,因此也有部分文献针对覆盖度的计算,即状态模型的建立提出优化.
表5 车联网的模糊测试用例生成
车联网包含总线网络协议和无线通信协议,因此面临的安全漏洞可分为两类,一是网络崩溃引发的车载系统故障,如,缓冲区溢出漏洞[56],分配内存失败,从而导致ECU表现异常;二是网络通信故障,如,拒绝服务(DoS)或分布式拒绝服务(DDoS),从而导致网络的安全属性受到威胁.
网络崩溃引发的车载系统故障通常体现在汽车内部组件的功能异常上.其中,Fowler等人[35]和Werquin等人[36]根据仪表板上的常见指示器(如速度指针、转向显示器等)的状态变化感应车载系统的故障.Zhang等人[41]实现了基于AdaBoost(Adaptive Boosting)[57]算法的异常监控.AdaBoost是一种迭代算法,在每一轮中加入一个新的弱分类器,根据其分类错误率确定分类器的权重,最后根据分类器的权重,组合成为一个强分类器.该异常监控可以识别CAN总线中的异常状态,并且标记异常消息,将其重播到CAN总线中以验证漏洞.该方法发现了车辆总线的漏洞,如发动机转速表异常、转向灯异常、雨刷异常、指示灯异常等.SweynTooth[44]根据蓝牙设备的运行情况判断异常,从而发现栈溢出和死锁现象.GREYHOUND[47]通过监控网络接入点的状态发现缓冲区溢出导致的系统崩溃.Kim等人[54]通过监视车辆IMU传感器的值,自动发现由注入消息引发的车辆不当行为.
网络通信故障通常根据服务器的回复或是否产生难以解决的通信延迟来判断.例如,Bayer等人[27]通过ECU的回复判断测试用例是否导致服务器崩溃,即发送测试用例后服务器是否回复超时、解析回复后该消息包是否有效、服务器是否持续回复.Werquin等人[36]根据CAN总线故障发现注入的信息会导致触发不完整拒绝条件,从而无需通过真实性验证,即CAN消息身份验证的漏洞.SweynTooth[44]根据每个协议状态中的预期响应,来检验外围设备的回复是否正常,从而发现DoS漏洞.GREYHOUND[47]监控Wi-Fi客户端接收到的数据包与协议当前状态的预期数据包类型是否匹配,从而发现Dragonslayer握手[58]漏洞(EAP-PWD身份验证漏洞).
L2Fuzz[48]检查目标设备上收到的数据包是否包含错误消息,是否成功执行Ping测试以及是否会生成故障转储来检测是否发生故障.最后,L2Fuzz成功发现因为空指针引用带来的DoS漏洞.
如表6所示,车联网的异常检测主要针对设备、总线或服务器的回复和状态,检测到异常后,经过分析可分为两类:ECU故障和通信故障(如消息验证漏洞、DoS漏洞).
表6 车联网的异常检测手段与漏洞类型
模糊测试的一个难题是如何评估测试的有效性,即如何定义评估测试的指标.部分文献通过对比相同时间发现的错误数量或者发现漏洞的严重程度进行验证.其中,Bayer等人[27]根据每分钟生成的测试用例数、规定时间内发现的服务器崩溃数以及服务器崩溃的可用比评估测试的有效性.Nishimura等人[38]根据生成一份测试用例所需的时间以及上传规定数量的测试用例所需时间评估测试的有效性.Zhang等人[41]根据不用的模糊测试方法产生的相同数量的测试用例中导致异常消息的数量来评估测试的有效性.如表7所示,Bayer等人[27]每分钟生成的测试用例远超过其他人,但是该测试方法不仅没有考虑测试用例的有效性,也没有考虑测试效率,因此实际效果并不如Nishimura等人[38]和Zhang等人[41]的测试方法.
表7 车联网模糊测试评估指标
灰盒模糊测试和白盒模糊测试利用测试覆盖率来指导测试的优化和停止.测试覆盖率是对测试完成程度的度量.它通常依据某种覆盖准则来对测试用例执行情况进行衡量,以判断测试执行得是否充分.例如,Ori[42]收集运行时开源SOME/IP协议框架中的代码覆盖率和运行结束状态用于评估测试有效性.
因为黑盒模糊测试的特点—即完全不了解被测协议的状态、功能等内部信息,黑盒模糊测试更为盲目,缺少覆盖率指导.部分文献通过基于模型的测试扩展了模糊的范围,以获得协议模糊测试的状态覆盖率.状态覆盖度是指测试用例生成器生成的测试用例能测试到的协议状态数量.其中,Zuo等人[26]量化了RTPS协议所有状态的数据模型.BrakTooth[46]将数据包动态映射到状态模型中以计算状态覆盖率.除了状态覆盖率,L2Fuzz[48]还设计了另一个覆盖度指标—突变效率,即模糊生成器可以生成的容易出错的测试包的数量以及被目标拒绝的测试包的数量.
除了覆盖度,部分文献定义了一种区分期望的正确行为和潜在的不正确行为的判断机制(即测试oracle),用于确定测试是否通过.
通过一致性测试预言即可检验协议实现与协议标准的一致性程度,即发送特定数据包是否能使协议按照特定的序列转换.例如,Zhao等人[30]将模糊测试与一致性测试结合在一起,通过检查输入错误数据后,正常的状态转换能否发生,以发现异常情况.Tappler等人[50]通过一致性的交叉关系检测异常,模型之间的不一致表示可能存在的错误.Aichernig团队[52,53]通过模糊测试实现测试用例的具体化,执行具体输入后,检查程序行为是否符合状态模型.
综上,表7中列出了车联网模糊测试中不同论文使用的评估指标以及测试的结果,评估指标主要分为4类:1)发现漏洞数量;2)代码覆盖度;3)状态覆盖度;4)一致性测试.
随着车联网的快速发展,其安全问题也引起了工业界和学术界的广泛关注.结合前文所述的车联网模糊测试的难点问题以及相关文献,本文提出一些针对车联网模糊测试的展望.
车联网协议是网络协议的分支,同样需要针对网络协议的状态空间进行模糊测试.
但是车联网协议较多,且较为复杂,需要测试者深入研究被测协议的协议规范,了解其语法和语义,同时根据协议建立状态模型.若是手动分析,需要大量的时间和人力.因此,实现协议模糊测试的自动化分析是个亟需解决的问题.
近年来,许多研究人员已经着手自动化协议分析的研究,用于降低时间成本,提高测试效率.但该方向仍存在巨大的提升空间.
此外,部分文献[42]针对某些协议不需要维护协议状态机模型的特点,提出并行执行模糊测试,即在特定条件下会分裂一个或多个模糊测试器,对被测协议中的某些目标进行模糊测试.但该方法目前只能针对单一协议,需要扩展该算法使其能够兼容不同的车联网协议.其次,因为在多线程程序上执行灰盒模糊测试会导致代码覆盖率失效,所以该算法在多线程程序上的执行效率得不到保证.这些问题都有待解决.
针对车联网的模糊测试,如何快速生成有效且更能触发高覆盖率的测试用例是一个关键难点问题.
首先,解决测试用例的有效性是成功检测漏洞的关键,有效的测试用例具有较高的通过率和异常率,即又能通过系统的验证,又能引起大量的系统异常.基于突变的模糊测试往往会盲目的对协议消息的字段部分进行突变,生成的测试用例数量级十分夸张,但同时也会带来大量无效模糊数据,即不能符合协议规范的模糊数据.这些无效模糊数据不能通过汽车系统的验证,在运行早期就会被拒绝.在车联网发展初期,车载系统的安全措施不够,该方法仍能进行攻击,随着车联网安全性的不断提高,大量无效数据只会降低测试效率,带来不必要的时间成本.因此,有不少研究人员针对模糊测试时的种子筛选进行优化,有针对性地变异字段.部分文献[36,40]收集日志文件或总线状态,选择与异常高度相关地字段进行变异.
另一方面,基于生成的模糊测试根据网络协议的特征生成测试用例.尽管测试用例可以通过验证,但异常率不高,很难触发被测协议中的不安全功能.除了对协议的分析需要消耗不少人力成本,被测协议也需要执行大量无效的测试用例.为了优化数据,现有文献将深度学习与模糊测试相结合,但仍存在改进的空间.Zhang等人[41]选取的WGAN-GP模型仍然存在一些不足:训练困难,收敛速度慢.将来,可尝试修改模型提高测试效率.其次,该模型只针对特定的协议,缺少普适性,可以尝试将其应用在不同的车联网协议以验证其有效性.
在模糊测试中,目标协议或程序被重复执行,执行人员提取状态信息,用于改进测试的执行.在此过程中,存在一个关键问题:如何定义测试的停止标准.大部分车联网协议是有状态且各状态间存在一定转换关系.单个协议消息的突变只能触发较少的安全漏洞,一系列按照指定顺序执行的消息才能触发大部分安全漏洞,导致协议处于异常状态.因此,部分文献[30]通过FSM或图遍历模型将黑盒的协议测试转换成灰盒协议测试,利用该状态下接受的消息类型来生成消息序列,从而确定测试的进度以及何时结束测试.但是,该方法的有效程度取决于给定的状态模型和数据模型的有效程度,但这些模型通常都是测试人员对协议规范手动分析得来,不仅容易出错,还需要更新.因此,有部分文献[52,53]在此基础上提出自动构建状态模型,并保留相关的状态覆盖信息用于指导测试用例的生成.确定停止标准后,部分文献[47,48]动态构建状态模型,同时结合协议的特点指导测试的进行.但是上述评估标准种类单一,缺少更为有效的停止标准.
近年来,车联网的安全性要求逐渐提高,关于模糊测试在车联网中的应用也成为了研究热点话题.本文从测试用例的生成、异常检测手段和测试评估标准等方面阐述目前车联网模糊测试的研究现状,重点关注了测试用例的生成和优化,最后,给出车联网模糊测试的研究展望,为将来的研究工作指明了方向.