李中伟,谭 凯,关亚东,姜文淇,叶 麟
(1.哈尔滨工业大学电气工程及自动化学院,哈尔滨 150001;2.哈尔滨工业大学网络空间安全学院,哈尔滨 150001;3.哈尔滨工业大学计算机科学与技术学院,哈尔滨 150001)
(∗通信作者电子邮箱lzw@hit.edu.cn)
网联化、智能化成为未来汽车发展的主流方向[1]。汽车的网联化将提高用户出行的安全性与舒适程度,是实现无人驾驶技术的核心技术;然而,网联化汽车也将面临着更严峻的安全风险,黑客可以通过多种途径进入到车内网络进行攻击。近年来,车联网、无人驾驶和汽车通信技术的不断发展,给汽车带来了更多的安全隐患。360 公司在《2019 智能网联汽车信息安全年度报告》中指出,智能网联汽车开始面对针对自动驾驶及V2X(Vehicle-to-Everything)系统的攻击挑战,对以往发现的安全漏洞也缺乏相应的异常检测和主动防御机制。
作为车内网络通信的关键技术,CAN(Controller Area Network)总线由于其检错能力强、通信方式灵活、传输速度快等优点,被广泛应用于车内的电子控制单元(Electronic Control Unit,ECU)间的通信。然而,CAN 总线设计之初并未考虑认证等问题,同时智能网联汽车需要不断增加通信外部接口以满足与外界信息交互的要求,黑客对汽车进行攻击、入侵事件逐渐增多。2015年,Charlie Miller和Chris Balasek 通过远程无线通信入侵Jeep Cherokee 的CAN 总线,成功控制了刹车、方向盘和其他关键系统[2]。德国汽车协会曾指出了宝马等豪车的一处安全漏洞,黑客能在几分钟内远程打开车门[3]。
为了检测和防止车辆网络攻击,人们提出了各种类型的安全解决方案,如用于车内网络的消息认证码(Message Authentication Code,MAC)和入侵检测系统(Intrusion Detection System,IDS)[4-5]。这些解决方案提供了一定程度的安全性,但仍然存在较多的安全漏洞。
CAN总线具有严格的错误诊断机制,当检测到位错误、填充错误、ACK(Acknowledge Character)错误、格式错误或循环冗余校验(Cyclic Redundancy Check,CRC)错误时,数据帧传送过程立即停止,发送方ECU 将会发送错误帧。当ECU 的CAN 控制器错误计数器(Transmit Error Counter,TEC)错误累计达到一定数值时,ECU 进行总线脱离操作[6]。理论表明,正常使用的CAN总线存在漏检错误的概率极低。
然而国外学者利用上述CAN 总线错误处理机制提出了一种新型的车载CAN 总线攻击方法——CAN 总线脱离攻击。攻击者周期性地向车内网络注入攻击信息,使被攻击的ECU认为自己产生了错误,并最终迫使自己脱离总线甚至整个网络关闭[7-8]。除了上述的严重的后果之外,和以往针对车内CAN总线的攻击不同,总线脱离攻击具有独特的特征。
目前国内外学者对此类攻击的入侵检测方法的研究相对较少,且由于总线脱离攻击很难和一般的通信错误进行区分,传统的入侵检测方法无法有效对此类攻击进行检测[9]。为此,本文在分析总线脱离攻击特点和实现过程的基础上,提出一种基于该攻击特征的入侵检测算法。该算法通过累计错误帧的发送数量,并根据该攻击所引起的报文发送频率的变化实现入侵检测。检测算法可以根据总线脱离攻击的特征,有效地对此类攻击进行识别,保证车载CAN总线网络的安全。
由CAN 总线技术规范ISO 11898 和STM32F407ZGT6 内部集成CAN 控制器器件说明可知,当ECU 的TEC 的错误计算大于255 时,ECU 将会从总线脱离。总线脱离攻击是指通过注入攻击,使ECU 的发送错误计数器TEC 的计数值异常地增加,从而使ECU从总线上脱离。
设攻击节点为A,正常节点为B,A 发送的报文为J,B 发送的报文为Z。则总线脱离攻击需要满足:
1)J与Z均为周期性报文,且ID相同;
2)J与Z同步发送;
3)J 与Z 仲裁场后的数据场中至少有一位不同(J 中该位为0),且在该位之前J与Z的数据位相同。
在上述实现条件中,条件2)是实现的难点。总线脱离攻击原理如图1 所示,当J 与Z 同步发送时,由于报文ID 相同,J与Z 同时在总线上存在。由于满足条件3),节点B 会监听到一个与其发送位极性相反的位,从而触发位错误,使其TEC的错误计算增加8。节点A 以此种方式不断发动攻击,当节点B的TEC大于255时,该ECU从总线脱离。
图1 总线脱离攻击原理示意图Fig.1 Schematic diagram of bus-off attack principle
1)黑客无需通过逆向工程的方式发动攻击[10-11],可以对任何车辆发起攻击,而无需受到生产厂商和型号的限制。
2)总线脱离攻击利用了CAN 总线错误处理机制,例如帧格式错误[12]、位错误[13]和位丢失[14]等,使得入侵检测系统对异常攻击和通信错误的判断混淆,难以区分。
3)此类攻击可通过将攻击节点接入车内CAN 总线网络实现。
4)发送的攻击报文要与被攻击报文同步发送[15]。
本文将分析在CAN 控制器自动重发模式下的总线脱离攻击。当发送节点出现通信错误时,发送节点会发送错误帧,同时还会立即发送出现错误的报文。
1)攻击第一阶段。黑客利用节点A 与节点B 同步发送报文,使得节点B 发生位错误,其TEC 错误计算增加8。节点B向总线发送激活错误标志(由六个显性位组成)。此时,节点A也会触发发送错误标志,并使其TEC错误计算加8。在经过11个隐性位后,节点A和B会同时发送之前的报文。因此,相同的位错误重复出现。当TEC 错误计算值大于等于128 时,两节点同时进入错误认可状态。在第一阶段攻击节点A只需注入一条报文即可实现。总线脱离攻击第一阶段报文示意图如图2所示。
图2 总线脱离攻击第一阶段示意图Fig.2 Schematic diagram of the first phase of bus-off attack
2)总线脱离攻击第二阶段。总线脱离攻击第二阶段示意图如图3所示。
图3 总线脱离攻击攻击第二阶段示意图Fig.3 Schematic diagram of the second phase of bus-off attack
当节点A 与B 的TEC 等于128 时,当B 再次触发位错误时,节点B 向总线发送认可错误标志,该认可错误标志由6 个连续的隐性位(111111)组成。因此,攻击节点A 不会发生通信错误,同时节点B 会触发位错误直到攻击节点A 发送EOF为止。在第二阶段,节点A 始终能够发送成功,但是节点B 的TEC 会不断增加,每次发送失败时TEC 将增加8,重发成功后减少1。当最终TEC大于255时,节点B将从总线上脱离。
要实现总线脱离攻击,须满足1.2 节所述的条件。本节将对其实现方法进行分析。设报文J 与Z 分别为恶意报文和正常报文。
对于条件1),黑客可以通过嗅探报文进行实现。黑客需要确定目标报文的ID,并确保目标报文为周期性报文。
对于条件3),黑客可以在嗅探到该ID 报文后,获取数据长度码(Date Length Code,DLC),发送DLC 值为0 的报文即可满足条件。
条件2)是总线脱离攻击的关键,即要求报文J 和Z 完全同步发送。若J和Z之间的开始发送时刻差别大于一位,则攻击失败。由于报文的发送周期在车内CAN 总线中存在波动,通过预设周期发送报文的方式实现同步是不合理的,也是难以实现的。可以考虑一种利用前置报文的方式进行攻击。
对于周期性报文M,定义M 在上一个发送周期内发送的其他报文为M的前置报文。
在图4中,设节点C 发送的报文为M1、M2。节点B 发送的报文为M3。报文M1、M2的优先级高于M3。由于仲裁与缓存机制,M3需要等到其前置报文M2在总线上发送完成后才能发送。由于CAN 报文的优先级不变,虽然报文周期会出现抖动,但M3与前置报文发送的相对时间固定,即M2发送成功后再经过3个位的传输时间后,M3开始发送。
在图4中,黑客可在接收到M1或M2中任意一条时缓存一条攻击报文。当M2发送成功后,M3与M3'将会同步发送,从而满足条件2)。
总线脱离攻击最显著的特征为:1)正常节点被攻击后TEC 的计算将大于255 而溢出;2)错误帧数量明显升高。本文利用一个检测节点用于监听总线上的报文,发现此类攻击。由于错误帧中的激活错误标志更易被检测到,且总线脱离攻击第一阶段将会发送16个错误帧,每个错误帧有6~12个激活错误标志,因此可将这16 个错误帧作为检测特征。然而,未发生总线脱离攻击也可能会出现上述特征,还需根据特征1)、2)以外的条件来判断总线脱离攻击。
由于在图3 中,具有相同报文ID 的M3和M3'将会被连续发送,且最终M3将会停止发送,即总线脱离攻击独有特征为:在出现大量错误帧后,某ID 的报文频率增加,最后变为零。本文据此提出总线脱离攻击检测方法如图5 所示。首先进行初始化,并获取报文周期,判断是否有大量错误帧(16 个以上)。若是则进行下一步。首先判断是否存在注入攻击,当发送频率超过原来的1.5 倍时,判断为注入攻击,并设置注入攻击标记L=1;而后若当发送频率为0 时,判断为中断攻击。此时CAN 总线中先后发生了注入攻击和中断攻击,则检测节点发出总线脱离攻击警报。
车载CAN 总线脱离攻击检测的代码如下所示。检测算法每次从总线上读取一条报文,每一条报文的检测不包含循环过程,算法的执行操作数固定,且注入攻击和中断攻击的检测时间固定,因此算法的时间复杂度为O(1)。
图5 总线脱离攻击检测方法流程Fig.5 Flowchart of bus-off attack detection method
代码1 车载CAN总线脱离攻击检测的代码描述。
本文利用STM32F407ZGT6 作为CAN 通信网络中的4 个节点(包括3 个模拟ECU 的通信节点,1 个检测节点),并将CAN节点波特率设置为500 Kb/s。如图6为其网络的结构。
图6 中ECU1 发送报文周期报文T1、T2。ECU2 接收T1、T2报文。T2是T1的前置报文。攻击者通过ECU3 缓存报文T2',使报文T2与T2'同步发送来攻击ECU1节点。
采用示波器Tektronix MSO5104 观察总线上的电压信号波形,通过LCD 显示ECU 节点的错误计数(TEC)以及报文的传输情况。在ECU1 和ECU2 正常通信后,利用ECU3 进行攻击。最后加入检测节点,按图5方法进行检测。
图6 CAN通信网络结构Fig.6 Structure of CAN communication network
实验结果为节点ECU1 的TEC 逐渐增加,最终脱离总线。而恶意节点ECU3成功完成了总线脱离攻击,与第2章的分析一致。图7 为攻击发生时总线上电压的波形图。图8 为图7的部分放大图。在图7中总线上出现了16个错误帧。另外根据上述分析可知,由于ECU1 和ECU3 先后发送错误激活标志并进入错误激活状态,图8中出现了总线高低电平的叠加。
图7 总线脱离攻击发生第一阶段电压波形图Fig.7 Voltage waveform of the first stage of bus-off attack
图8 总线脱离攻击发生第一阶段错误帧电压波形叠加图Fig.8 Voltage waveform overlay of wrong frames in the first stage of bus-off attack
图9 为攻击第二阶段的总线电压波形图,即发生在第一阶段产生的16 个错误帧之后,ECU1 与ECU3 同步发送,恶意报文始终可以发送成功,而被攻击报文发送失败后,进行了自动重发。
图9 总线脱离攻击第二阶段电压波形图Fig.9 Voltage waveform of the second stage of bus-off attack
ECU1 与ECU3 的TEC 变化如图10 所示。在0.3 s 时,为总线脱离攻击开始,在0.35 s 时第一阶段攻击结束。该阶段结束时ECU3的TEC为127,ECU1 的TEC为135。在0.35 s至1.3 s 时为总线脱离攻击的第二阶段,该阶段内ECU1 的TEC的计算超过255 并溢出,而ECU3 的TEC 的计算开始减少,最后减少到90。当成功使ECU1 脱离总线后,ECU3 停止接收和发送报文,因此之后其TEC的计算不再下降。
图10 总线脱离攻击中正常节点与恶意节点的TEC变化图Fig.10 TEC change diagram of normal nodes and malicious nodes in bus-off attack
检测节点利用图5 所示的入侵检测算法进行入侵检测,检测过程中对错误帧进行计数,并通过检测报文M2的发送频率判断是否存在注入攻击及中断攻击。当发生总线脱离攻击后,若检测节点发出警报,则表示检测成功。为分析算法的检测准确率和误检率,首先本文将ECU1 的发送周期设为恒定值50 ms,进行多次实验后,得到算法的检测准确率为100%,误检率为0%。然而在实际的汽车CAN 总线中,报文的发送周期会存在波动。因此,本文将ECU3 发送的报文周期施加一个随机的0~35 ms 的时间抖动。检测算法的检测率变为73.5%,漏检率变为26.5%。由于发送周期幅值发生了变化,报文的注入攻击会发生一定的漏检,因此也将导致算法的检测准确率下降。由以上分析可知,周期波动的大小将会影响检测算法的准确性。在汽车CAN 总线中,报文ID 越小,其优先级越高,重要性的程度越高,而周期变化的幅值越小,算法的检测准确率也越高[15]。对于一些优先级较高的报文,其幅值变化范围不超过其周期的15%,而算法的检测率可达到95%以上,因此可以满足实际的需求。
本文主要研究工作包括:1)针对车载CAN 总线脱离攻击,分析了其攻击原理和发生条件,给出了总线脱离攻击的实现方法。2)模拟车内ECU 通信网络实现了CAN 总线脱离攻击。在分析总线脱离攻击第一阶段、第二阶段电压波形和正常节点、恶意节点TEC 变化基础上,提取了总线脱离攻击特征,提出了一种基于该攻击特征的入侵检测算法。3)基于STM32F407ZGT6,验证了车载CAN 总线脱离攻击实现的可行性以及入侵检测算法的有效性。
下一步工作是在实际车内CAN 总线网络中应用并验证本文所提入侵检测算法的准确性。