OBD数据分析(三)——入侵检测(在一定时间范围内的双重检测规则)
- 检测消息的时候我们常会关注消息的频率,所以入侵者往往会试图注入周期性的消息进行攻击,但是当受损节点在总线上注入消息时,原始节点继续发送具有原始频率的相同ID的相同消息,消息频率会有显著变化。
- 通过查阅论文我们知道,在发送ECU(the sending ECU)的时钟偏差等的影响下,可能出现虚警(False alarm),如下图
如图所示,这4000条样本消息中的两条具有小于2毫秒的循环时间
- 所以定义一个双重检测规则,来避免这种虚警。(使用临时计数器来保存超过阈值的连续消息的数量, 然后通过检查该值是否计数多个消息或者否则指定零值来做出最终决定)
- 我们定义了一个时间周期,为0.00015-0.00028,这段时间范围包括了优先级高的消息的抢占导致的时间延迟,和时钟偏差带来的误差。超出这段时间的消息则判断为有入侵攻击。
运行结果如下
具体代码如下
#include <iostream>
#include <string>
#include <fstream>
#include <vector>
#include <sstream>
#include <algorithm>
#include <cmath>
using namespace std;
class message
{
public:
string Timestamp;
string timestamp;
string Id;
string iD;
string id;
string DLc;
string dlc;
string A;
string Aa;
string B