一种基于相对熵的车载CAN总线异常检测方法与流程

文档序号:16007418发布日期:2018-11-20 20:14阅读:621来源:国知局

本发明涉及一种CAN总线异常检测方法,具体涉及一种基于相对熵的车载CAN总线异常检测方法。



背景技术:

现在的汽车具有非常复杂的功能,车辆内部配备有大量的ECU(Electronic Control Unit,电子控制单元),这些ECU模块通过总线的方式进行数据通信,从而实现车辆内部网络系统各个组成单元之间的协作运行。CAN(Controller Area Network,控制器局域网)总线是应用最为广泛的车载通信总线。

然而,CAN总线在设计之初就没有考虑到信息安全的问题,容易遭到黑客的攻击。在当前车联网和智能网联汽车技术飞速发展的阶段,研究如何提高车载网络的安全性显得尤为重要。这既是实现车联网安全的重要组成部分,也是保证车联网和智能网联汽车走向进一步大规模应用的重要前提和保障。

在车载网络的安全技术中,入侵和异常检测是其中重要的一部分。入侵检测技术通过对入侵行为和入侵企图的识别,从而可以尽早采取有效的措施修复和升级系统漏洞。在车载CAN总线网络中,入侵检测通过主动检测CAN总线工作状态,识别异常状态,发现攻击行为,对用户进行报警提示。该技术也可以作为车载CAN总线网络的加密认证等安全技术的辅助措施。

对于车载CAN总线网络系统而言,在车载总线中,各种CAN消息以周期性广播的方式进行传输。在车辆正常工作,没有发生入侵行为的时候,车载CAN总线的数据交互是一个相对稳定的过程,因此一个时间窗口中,每种报文所出现的概率是相对恒定的,计算每种报文的相对熵,其相对熵是基本趋近于0的。如果存在入侵和攻击行为,CAN总线上出现了多的非法的攻击报文,则必然打破系统原先的稳定状态,相对熵的值就会发生变化。但现有的检测方法检测精度和粒度都较低,检测效果并不理想。



技术实现要素:

发明目的:为了克服现有技术的不足,本发明提供一种基于相对熵的车载CAN总线异常检测方法,该方法解决了车载CAN总线网络的入侵检测精度和粒度较低和检测效果差的问题。

技术方案:本发明所述的基于相对熵的车载CAN总线异常检测方法,该方法包括:

在中断处理程序中,车辆上电后,检测节点开启定时中断,定时触发,在中断处理程序中实现对过去的一段时间窗口上的报文相对熵的计算,若计算的所述相对熵结果超出设定的阈值,则触发报警;所述计算报文相对熵时,当时间窗口长度增加到设定的最大长度值T时,执行计数数据清零、窗口切换的操作,交替使用两个变长的时间窗口,分别记为窗口1和窗口2,两个窗口上使用两组独立的计数器进行计数;

在主程序中,开启定时中断,所述检测节点每收到一条报文,首先进行基于白名单的异常检测,判断是否发生异常行为;

定义Ee为异常累计次数,若检测出报文类型不正常,则根据该类型报文的异常权重,增加所述异常累计次数Ee的值;当所述异常累计次数超过所述设定的阈值时,触发报警,否则,继续进行下一步的检测;

若检测出报文类型正常,则进行基于时间间隔的异常检测,所述检测节点计算当前报文与上一条同类型报文的时间间隔,并计算所述时间间隔相对于正常时间间隔的偏移度,

若所述偏移度处于正常范围,所述异常累计次数Ee减1,并接收下一条报文;

若所述偏移度超出正常范围,则根据该类型报文的异常权重,增加异常累计次数Ee的值;当所述异常累计次数超过所述设定的阈值,触发报警,否则,继续接收下一条报文。

优选的,所述正常时间间隔是指车辆生产完毕后,在正常使用过程中每种类型的CAN报文的时间间隔参考值,并将所述参考值置入CAN总线上的检测节点中。

优选的,所述相对熵的计算公式为:

n为车载CAN总线上报文的种类,mi为当前观测的时间窗口上第i种报文出现的数量;Mi为正常工作过程中第i种报文出现的数量;xi为车载CAN总线上的第i种报文;Q(xi)为所观测的时间窗口上报文xi出现的概率,P(xi)为正常工作的时间段上报文xi出现的概率。

优选的,所述执行计数数据清零、窗口切换的操作,具体过程包括:

(1)设T=2N×T0,能观测的时间窗口的最小长度为最大长度为T,在时刻t=0时,窗口1开始增长,开始计数,此后每隔时间T0中断程序触发一次;

(2)在时刻时,窗口1长度增长到此时根据窗口1内各报文的计数结果{m1,m2,...,mn},计算第一个相对熵值;窗口2从此时刻开始增长,开始计数;

(3)在时刻t=T时,窗口1的长度增加到T,若整个长为T的所述窗口1内都被判定为不存在异常情况,则将{m1,m2,...,mn}累加到{M1,M2,...,Mn}中;窗口1的数据清零,其长度重新从零开始增长,重新开始计数,并将程序切换到窗口2,使用窗口2的计数结果进行计算。

优选的,在主程序中使用基于白名单和时间间隔的检测。所述若检测出报文类型不正常,则根据该类型报文的异常权重,调整异常累计次数的值,即将所述异常累计次数Ee加上该类型报文的异常权重。

有益效果:本发明采用基于相对熵的异常检测算法并进行改进,提高了检测精度和检测粒度,并结合了基于白名单和时间间隔的异常检测,实现更好的检测效果。

附图说明

图1为本发明中基于白名单和时间间隔的异常检测方法流程图;

图2为本发明所述的异常检测方法流程图。

具体实施方式

本发明中,结合两种异常检测算法,克服了在某些特殊情况下相对熵的异常检测失效的缺陷;通过使用变长的时间窗口,将基于相对熵的异常检测方法的检测粒度由时间T缩减到时间T0。算法在实践过程中,计算过程简单,无需采用复杂的循环,属于轻量级算法,分为预处理阶段和异常检测阶段,具体包括:

预处理阶段:

(1)车辆生产完毕,即将出厂之时,对车辆进行测试,从而统计得出各指标的参考值。其中包括:在正常使用过程中每种类型的CAN报文的出现次数,设为{M1,M2,...,Mn}和正常使用过程中每种类型的CAN报文的时间间隔参考值,设为{tref,1,tref,2,...,tref,n},第i条CAN报文的时间间隔参考值为tref,i,第i条CAN报文的出现次数记为Mi。

(2)各指标的正常参考值得出之后,制造商将这些参数置入CAN总线上的检测节点中。制造商需要为异常检测算法设置阈值K,定义出在什么范围内对异常情况可忽略,在什么范围内需要报警。并根据每种类型的报文的关键程度为每种类型报文设置异常权重{α0,α1,α2,…,αn},比如某类型的报文是与汽车的动力系统相关,则异常权重值就需要设定的高一些。

假设车载CAN总线上报文有{x1,x2,…,xn}共n种,每种报文的异常权重对应分别为{α1,α2,…,αn}。攻击者可能在CAN总线上发送的报文类型并不在{x1,x2,…,xn}集合内,将这些所有的具有非法标识符的报文都定义为类型x0,对应的异常权重设定为α0。

异常检测阶段:

(1)车辆上电后,各ECU开始通信。检测节点记录每种类型的第一条报文的到达时刻。检测节点开启定时中断,定时触发,在中断响应程序中实现相对熵的异常检测的定时计算过程,该过程详细内容见步骤(5)。

(2)如图1所示,初始化tref,i,检测节点每收到一条报文,时间值记为Timenow,首先进行白名单检测,判断该报文的类型,即CAN标识符,是否正常,若报文类型不正常,则进入步骤(4);若报文类型正常,进入步骤(3)。

分别使用两组独立的计数器,对每种报文的出现次数进行计数。当到达一条新的报文,在两组计数器中都要进行计数。

(3)检测节点计算当前报文与上一条同类型报文的时间间隔,时间记为Timelast,i,则时间间隔为ti*=Timenow-Timelast,i,计算其时间间隔相对于正常时间间隔的偏移度优选的,设偏移度的阈值为0.3,即认为当偏差小于0.3时,可看作正常情况下的合理波动。

若σi<0.3,偏移度处于正常范围,则如果异常累计次数Ee值大于0,Ee减1,更新tref,i,然后进入步骤(2),继续接收下一条报文;若偏移度超出正常范围0.3,进入步骤(4)。

(4)根据该类型报文的异常权重{α0,α1,α2,…,αn},Ee加上αi。若Ee的值超出设定的阈值,证明有较多的异常报文出现,报警提示用户。然后进入步骤(2),继续接收下一条报文。

(5)在中断服务程序中执行基于相对熵的异常检测算法,每隔时间T0计算一次报文的相对熵。

如图2所示,异常检测阶段步骤(5)中,基于相对熵的异常检测算法交替使用两组变长的时间窗口,具体在计算过程中,取两组独立的计数器,对每种CAN报文的技术次数进行计数。这个过程在主程序中完成。而在定时触发的中断程序中,计算过程为:

①计算报文在当前观测的时间窗口上相对正常工作过程中的相对熵。其中,当前观测的时间窗口上每种报文的出现数量为{m1,m2,...,mn},则在正常工作过程中,每种报文的出现数量为{M1,M2,...,Mn}。后者在预处理阶段已经统计得出。相对熵计算方法为:

②根据相对熵计算的结果是否超出设定的阈值K,决定是否触发警报。

③执行窗口切换的操作。设T=2N×T0,所观测的时间窗口的最小长度为最大长度为T。该窗口从长度为零时开始计数,到增长到长度为开始使用其计数结果进行计算,到增长到长度为T时,数据清零,窗口重新从零开始增长,重新开始计数。其具体过程如下:

1)在时刻t=0时,窗口1开始增长,开始计数。此后每隔时间T0触发一次。

2)在时刻时,窗口1长度增长到此时根据窗口1内的计数结果{m1,m2,...,mn}计算第一个相对熵值。此时,窗口2开始增长,开始计数。

3)在时刻t=T时,窗口1的长度增加到T。若整个长为T的窗口1内都被判定为不存在异常情况,则将{m1,m2,...,mn}累加到{M1,M2,...,Mn}中。然后窗口1的数据清零,其长度重新从零开始增长,重新开始计数。程序切换到窗口2,使用窗口2的计数结果进行计算。

综上,若取n=1,2,3,…,则当t=nT时,窗口1的数据清零,算法切换到窗口2,使用窗口2的统计数据进行计算;当时,窗口2的数据清零,算法切换到窗口1,使用窗口1的统计数据进行计算。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1