一种未知工控协议的自动标识与分类方法-开云(中国)Kaiyun·官方网站 -APP下载

文档序号:34131600发布日期:2023-11-28阅读:969来源:国知局


1.本发明涉及工业控制网络领域,种未知工自动尤其是控协涉及到一种未知工控协议的自动标识与分类方法。


背景技术:

2.工业控制网络作为工业控制系统的标识中枢神经,负责联通大量的分类方法传感器、控制器和执行器,种未知工自动以实现工业控制系统的控协自感知、自优化和自运行。标识然而,分类方法工业设备数量繁多,种未知工自动制造商也不尽相同,控协故而开发了大量的标识公有、私有工控协议。分类方法这些协议由于没有统一的种未知工自动标准规范,故各类协议互不解析,控协形成了大量孤岛,标识造成了工控协议“七国八制”的乱象。特别是在开放的工业互联网环境下,由于私有协议规范未知,难于进行分类与识别,对工业控制系统的安全造成了极大的影响。因此,未知工控协议的分类是实现工控协议互联互通的基础,也是保障工业控制系统安全的前提。
3.针对此状况,常见的做法是,利用协议逆向工程,结合自然语言处理、无监督学习、深度学习等技术、推测出协议的语法、语义、时序,实现未知协议的分类与识别。协议逆向工程主要基于程序指令或报文序列实现。基于程序指令的逆向方法具有较强的分析能力和准确的分析结果,但是工控程序一般处于不同的运行环境,很难获取协议的应用程序源码。相比之下,基于报文序列的逆向方法在协议获取上相对更容易,可以直接获取到大部分工控协议的报文序列并处理相似的协议。
4.基于报文序列的工控协议逆向方法主要包括:分类、格式推断、语义分析、状态机重构等步骤。其中,分类作为逆向分析过程中最为关键的一步,其准确率直接影响格式、语义以及状态的识别效果。然而,多样的协议类型、复杂的协议格式以及多变的攻击方式,都会使分类难度加大。而且现有方法过于依赖性先验知识,分类的结构过于复杂,资源消耗过大。因此,亟需一种高效、准确的未知工控协议分类方法。


技术实现要素:

5.本发明提供了一种未知工控协议的自动标识与分类方法,充分利用工控协议所具有独特性、稳定性和周期性的特征字段,在不借助先验知识的条件下,仅利用未知工控协议自身特点实现未知工协议分类。可以高速、精准地实现协议分类,满足工业控制的要求。
6.本发明提供了一种未知工控协议的自动标识与分类方法,包括如下步骤:
7.(1)提取未知工控协议应用层数据;
8.(2)构建头部序列二元组集合;
9.(3)比较二元组序列间对应字节,计算字节比对得分;
10.(4)比较二元组序列间对应半字节和非对应半字节,计算半字节比对得分;
11.(5)根据字节比对得分和半字节比对得分,筛选特征序列;
12.(6)根据特征序列,自动标记未知工控协议头部序列;
13.(7)利用门控循环单元增强的一维卷积神经网络为带有标签的未知工控协议进行
分类。
14.所述提取未知工控协议应用层数据,包括如下步骤:
15.(1-1)捕获原始数据:从工控设备中捕获n个二进制未知工控协议的原始数据;
16.(1-2)转换进制:将所捕获的n个二进制未知工控协议的原始数据转换成十六进制数据;
17.(1-3)提取应用层数据:提取n个十六进制未知工控协议的应用层数据。
18.根据权利要求1所述一种未知工控协议的自动标识与分类方法,其特征在于,所述构建头部序列二元组集合,包括如下步骤:
19.(2-1)截取头部序列:逐一计算应用层数据的长度,以最短长度为基准长度,从数据起始位开始,将应用层数据的长度截取到和基准长度一致,得到每个未知工控协议应用层数据的头部序列,所有头部序列构成头部序列集合;
20.(2-2)构建二元组集合:从头部序列集合中依次选取任意两个头部序列进行组合,构成二元组序列,记所有二元组序列构成的集合为a={ (a1,a2)1,...,(am,an)n};其中,n表示二元组序列的个数,am表示第m个头部序列,an表示第n个头部序列。
21.所述比较二元组序列间对应字节,计算字节比对得分,包括如下步骤:
22.(3-1)计算头部序列的字节长度:头部序列的字节长度计算为l表示头部序列长度;
23.(3-2)计算字节比对得分:从数据起始位开始,依次比对每个二元组序列中aa和ab对应位置上的字节a
ai
和a
bi
,a,b=1,...,n,a≠b,其中i表示序列的第i位;
24.计算第i位的得分,过程如下:
[0025][0026]
将每次比对后的得分f(i)进行累加,即得到比对一个二元组序列后的总得分再对fc求平均值得到字节比对得分n表示二元组序列的个数。
[0027]
所述比较二元组序列间对应半字节和非对应半字节,计算半字节比对得分,包括如下步骤:
[0028]
(4-1)计算头部序列的半字节长度:头部序列的半字节长度计算为l2=2
×
l1=l;
[0029]
(4-2)计算匹配窗口大小:设置一个动态比对范围,其中,匹配窗口计算为
[0030]
(4-3)统计匹配半字节个数:从数据起始位开始,遍历序列aa中的每个半字节a
aj
,在ab中找到匹配窗口范围内的半字节a
bj
;其中,j表示序列的第j位,j=1,...,l2;
[0031]
若a
aj
=a
bj
,则a
aj
和a
bj
记作匹配半字节,统计匹配窗口范围内的匹配半字节的个数,记作e;
[0032]
(4-4)统计换位半字节个数:将匹配的半字节从其所在头部序列中提取出来,得到
了一个新序列集合,新序列集合中的序列长度为l3,从新序列集合中依次选取任意两个序列进行组合,构成一个新的二元组序列集合b={ (b1,b2)1,...,(bm,bn)n};
[0033]
若新的二元组序列中ba和bb对应位置上的半字节b
ak
≠b
bk
,a,b=1,...,n,a≠b,k=1,...,l3,则认定相同位置上的两个半字节b
ak
和b
bk
发生了换位操作,发生换位的半节字个数为发生换位操作的一半,记作t;
[0034]
(4-5)计算半字节比对得分:半字节比对得分hd计算为:
[0035]
hd=hc+0.1
×
ε
×
(1-hc),d=1,...,n
[0036]
其中,ε表示两个头部序列中连续相同的半字节个数,表示不考虑两个头部序列中连续相同半字节时的半字节比对得分,n表示二元组序列的个数。
[0037]
所述根据字节比对得分和半字节比对得分,筛选特征序列,包括如下步骤:
[0038]
(5-1)构建字节比对得分矩阵:所有的fd构成字节比对得分矩阵f1;
[0039]
(5-2)构建半字节比对得分矩阵:所有的hd构成半字节比对得分矩阵f2;
[0040]
(5-3)构建综合比对得分矩阵:对两个得分矩阵f1和f2内对应元素求平均值,得到平均得分矩阵f3,过程如下:
[0041][0042]
其中,每个元素的数值取值范围为[0,1];
[0043]
(5-4)过滤二元组序列:设置得分阈值β,过滤f3,将超过阈值的二元组序列保留,得出得分高的二元组序列;反之则去除;
[0044]
(5-5)筛选特征序列:若保留下来的二元组序列中aa和ab对应位置上的字节a
ai
=a
bi
,则将字节保留;若a
ai
≠a
bi
,则用符号
“‑‑”
占位;遍历所有二元组序列,筛选得到了序列集合c=(c1,...,cn);
[0045]
返回步骤(5-1)循环多次,当c中每个序列仅有一个字节时停止筛选,即得到特征序列集合d=(d1,...,dn),dn表示第n个特征序列。
[0046]
所述根据特征序列,自动标记未知工控协议头部序列,包括如下步骤:
[0047]
(6-1)复制特征序列集合:将特征序列集合d中的每个元素,按顺序一一对应地复制为新特征集合e=(e1,...,en);
[0048]
(6-2)自动标记序列:从e中取出一个特征序列e
p
,将其与d中的特征序列dq逐个进行比对,根据比对结果标记头部序列标签,过程如下:
[0049]
[0050]
其中,s表示具有相同特征的头部序列被标记的标签,取值范围为非负整数,u表示占位标签;
[0051]
(6-3)构建标签矩阵:当e
p
与d中所有特征序列比对分析完成后,将e
p
从e中过滤掉;
[0052]
返回步骤(6-1),直到e中所有的特征序列被过滤掉时,表示头部序列标记完成,得到标签矩阵:
[0053][0054]
(6-4)动态调整标签矩阵:对标签矩阵中的元素进行动态调整,过滤掉u,并将余下的s合并为一列,得到含有多个标签的标签矩阵:
[0055][0056]
所述利用门控循环单元增强的一维卷积神经网络为带有标签的未知工控协议进行分类,包括如下步骤:
[0057]
(7-1)数值化头部序列:利用标签编码将离散型的头部序列进行数值化,转换为连续型序列;
[0058]
(7-2)归一化头部序列:将数值化后的头部序列使用min-max进行归一化,即将头部序列中的字节数值映射到[0,1]区间内;
[0059]
(7-3)学习头部序列内部特征:在x个一维卷积神经网络的卷积层中利用卷积核与输入序列进行卷积操作来学习头部序列内部特征,过程如下:
[0060][0061]
其中,x
conv
表示卷积层的输出特征,x
conv-1
表示卷积层的输入特征,首个卷积层的输入特征为归一化后的头部序列,和分别表示卷积层中卷积核的权重因子和偏置因子,λ表示卷积核中的位置,*表示卷积运算,θ表示卷积核总数,g(
·
)表示激活函数;
[0062]
(7-4)进行非线性变换:使用relu激活函数将卷积层输出特征进行非线性变换,将输出值y
conv
限定在固定范围内,过程如下:
[0063]yconv
=relu(x)=max(x
conv
,0)
[0064]
(7-5)降低头部序列维度:在y个一维卷积神经网络的池化层中,使用最大池化突出头部序列中重要特征,过程如下:
[0065]
x
pool
=max(y
conv
)
[0066]
其中,y
conv
表示经过relu激活函数转换的输出值,x
pool
表示经过最大池化的输出;
[0067]
(7-6)学习头部序列间特征:将z个门控循环单元按顺序叠加在一起,添加到一维卷积神经网络的卷积层和池化层之后,以学习头部序列间的特征;
[0068]
(7-7)输出预测值:使用归一化指数函数,计算各类别标签的概率,即预测值;
[0069]
(7-8)计算损失值:使用多分类交叉熵损失函数,计算头部序列预测值和真实值之间的差,即损失值,过程如下:
[0070][0071]
其中,n表示输入一维卷积神经网络的头部序列的个数,v表示输出预测向量维度,z表示以0或1形式表示的(6-4)得到的头部序列的各类别标签,即真实值,r表示预测值,取值范围是[0,1];
[0072]
(7-9)反向更新参数:通过损失徝去反向更新(7-3)中卷积层的参数,直到损失值小于设定值时,停止更新参数;
[0073]
(7-10)分类未知工控协议:根据头部序列的分类结果,对相应的未知工控协议原始数据进行分类。
[0074]
一种未知工控协议的自动标识与分类装置,包括存储器和处理器;所述存储器,用于存储计算机程序;所述处理器,用于当执行所述计算机程序时,实现所述的一种未知工控协议的自动标识与分类方法。
[0075]
一种计算机可读存储介质,所述存储介质上存储有计算机程序,当所述计算机程序被处理器执行时,实现一种未知工控协议的自动标识与分类方法
[0076]
借由上述技术方案,本发明提供的一种未知工控协议的自动标识与分类方法,首先提取未知工控协议应用层数据;构建头部序列二元组集合;其次比较二元组序列间对应字节,计算字节比对得分;比较二元组序列间对应半字节和非对应半字节,计算半字节比对得分;然后根据字节比对得分和半字节比对得分,筛选特征序列;根据特征序列,自动标记未知工控协议头部序列;最后利用门控循环单元增强的一维卷积神经网络为带有标签的未知工控协议进行分类。本发明通过多粒度特征提取和自动标记,能够高效率、高精度地实现未知工控协议分类。为未知工控协议识别奠定基础,支持入侵检测,保障工控信息安全。
[0077]
本发明具有以下有益效果及优点:
[0078]
1.充分考虑工控协议头部字段特定位置、固定取值的特性,提出了字节与半字节相结合的多粒度工控协议特征提取方法,打破了现有方法对已知工控协议特征或专家经验的依赖性和主观性,满足了大规模未知工控协议数据的分类需求。
[0079]
2.针对现有未知工控协议分类时数据集缺少特征标签的问题,基于工控协议头部字段中特征字节的不一致性,提出特征自动标记方法,通过分析特征集中特征的变化情况,自动标记具有相同特征字节的头部序列,并动态调整标签,解决了人工标记速度慢、时间长、准确性低的问题。
[0080]
3.进一步,考虑工业控制系统设备计算资源受限,而现有深度学习方法结构复杂、参数多、资源需求大问题,提出基于门控循环单元增强的一维卷积神经网络协议分类方法,减少了参数量和计算量,在整体结构上提高了分类的效率和实时性。
[0081]
4.本发明所实现的未知工控协议分类,可以为未知工控协议识别奠定基础,支持入侵检测,保障工控信息安全。
附图说明
[0082]
此处所说明的附图用来提供对本发明的进一步理解,构成本发明的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
[0083]
图1一种未知工控协议的自动标识与分类方法流程示意图;
[0084]
图2提取未知工控协议应用层数据流程示意图;
[0085]
图3构建头部序列二元组集合流程示意图;
[0086]
图4计算字节比对得分流程示意图;
[0087]
图5计算半字节比对得分流程示意图;
[0088]
图6筛选特征序列流程示意图;
[0089]
图7自动标记未知工控协议的头部序列流程示意图;
[0090]
图8未知工控协议分类流程示意图。
具体实施方式
[0091]
在本实施例中提供了一种未知工控协议的自动标识与分类方法,如图1所示,该方法包括:
[0092]
步骤(1),提取未知工控协议应用层数据。
[0093]
在本发明实施例提供的一种未知工控协议的自动标识与分类方法可以应用在工业控制系统中,用于对未知工控协议进行分类。首先,如图2所示,从工控设备中捕获n个二进制未知工控协议原始数据,并将所捕获的n个二进制未知工控协议原始数据转换成十六进制数据,提取n个十六进制未知工控协议的应用层数据。
[0094]
步骤(2),构建头部序列二元组集合。
[0095]
如图3所示,逐一计算应用层数据的长度,以最短长度为基准长度,从数据起始位开始,将应用层数据的长度截取到和基准长度一致,得到每个未知工控协议应用层数据的头部序列,所有的头部序列构成了头部序列集合;再从头部序列集合中依次选取任意两个头部序列进行组合,构成二元组序列,记所有的二元组序列构成的集合为a={ (a1,a2)1,...,(am,an)n};其中,n表示二元组序列的个数,am表示第m个头部序列,an表示第n个头部序列。
[0096]
步骤(3),比较二元组序列间对应字节,计算字节比对得分。
[0097]
如图4所示,头部序列的字节长度计算为l表示头部序列长度;再从数据起始位开始,依次比对每个二元组序列中aa和ab对应位置上的字节a
ai
和a
bi
(a,b=1,...,n,a≠b),其中i表示序列的第i位。
[0098]
计算第i位的得分过程如下:
[0099][0100]
接下来,将每次比对后的得分f(i)进行累加,即得到比对一个二元组序列后的总
得分再对fc求平均值得到字节比对得分n表示二元组序列的个数。
[0101]
步骤(4),比较二元组序列间对应半字节和非对应半字节,计算半字节比对得分。
[0102]
如图5所示,头部序列的半字节长度计算为l2=2
×
l1=l,并设置一个动态比对范围,其中,匹配窗口计算为然后从数据起始位开始,遍历序列aa中的每个半字节a
aj
,在ab中找到匹配窗口范围内的半字节a
bj
;其中,j表示序列的第j位,j=1,...,l2;若a
aj
=a
bj
,则a
aj
和a
bj
记作匹配半字节,并统计在匹配窗口范围内的匹配半字节的个数,记作e;
[0103]
接下来,将匹配的半字节从其所在头部序列中提取出来,得到了一个新序列集合,新序列集合中的序列长度为l3,从新序列集合中依次选取任意两个序列进行组合,构成一个新的二元组序列集合b={ (b1,b2)1,...,(bm,bn)n};若新的二元组序列中ba和bb对应位置上的半字节b
ak
≠b
bk
(a,b=1,...,n,a≠b,k=1,...,l3),则认定相同位置上的两个半字节b
ak
和b
bk
发生了换位操作,发生换位的半节字个数为发生换位操作的一半,记作t;最后半字节比对得分hd,计算为:
[0104]
hd=hc+0.1
×
ε
×
(1-hc),d=1,...,n
ꢀꢀꢀ
(2)
[0105]
其中,ε表示两个头部序列中连续相同的半字节个数,表示不考虑两个头部序列中连续相同半字节时的半字节比对得分,n表示二元组序列的个数。
[0106]
步骤(5),根据字节比对得分和半字节比对得分,筛选特征序列。
[0107]
如图6所示,将所有的fd构成字节比对得分矩阵f1,再将所有的hd构成半字节比对得分矩阵f2;然后,对两个得分矩阵f1和f2内对应元素求平均值,得到平均得分矩阵f3,过程如下:
[0108][0109]
其中,每个元素的数值取值范围为[0,1];
[0110]
再根据综合比对得分矩阵,设置得分阈值β,过滤f3,将超过阈值的二元组序列保留,得出得分高的二元组序列;反之则去除;若保留下来的二元组序列中aa和ab对应位置上的字节a
ai
=a
bi
,则将字节保留;若a
ai
≠a
bi
,则用符号
“‑‑”
占位;遍历所有二元组序列,筛选得到了序列集合c=(c1,...,cn);
[0111]
返回步骤(5)循环多次,当c中每个序列仅有一个字节时停止筛选,即得到特征序列集合d=(d1,...,dn),dn表示第n个特征序列。
[0112]
步骤(6),根据特征序列,自动标记未知工控协议头部序列。
[0113]
如图7所示,将特征序列集合d中的每个元素按顺序一一对应的复制为新特征集合e=(e1,...,en);然后从e中取出一个特征序列e
p
,将其与d中的特征序列dq逐个进行比对,根据比对结果标记头部序列标签,过程如下:
[0114][0115]
其中,s表示具有相同特征的头部序列被标记的标签,取值范围为非负整数,u表示占位标签;
[0116]
当e
p
与d中所有特征序列比对完成后,将e
p
从e中过滤掉;返回步骤(6),直到e中所有的特征序列被过滤掉时,表示头部序列标记完成,得到标签矩阵:
[0117][0118]
然后,对标签矩阵中的元素进行动态调整,过滤掉u,并将余下的s合并为一列,得到含有多个标签的标签矩阵:
[0119][0120]
步骤(7),根据利用门控循环单元增强的一维卷积神经网络为带有标签的未知工控协议进行分类。
[0121]
如图8所示,利用标签编码将离散型的头部序列进行数值化,转换为连续型序列;将数值化后的头部序列使用min-max进行归一化,即将头部序列中的字节数值映射到[0,1]区间内;在x个一维卷积神经网络的卷积层中利用卷积核与输入序列进行卷积操作来学习头部序列内部特征,过程如下:
[0122][0123]
其中,x
conv
表示卷积层的输出特征,x
conv-1
表示卷积层的输入特征,首个卷积层的输入特征为归一化后的头部序列,和分别表示卷积层中卷积核的权重因子和偏置因子,λ表示卷积核中的位置,*表示卷积运算,θ表示卷积核总数,g(
·
)表示激活函数;
[0124]
接下来,使用relu激活函数将卷积层输出特征进行非线性变换,将输出值y
conv
限定在固定范围内,过程如下:
[0125]yconv
=relu(x)=max(x
conv
,0)
ꢀꢀꢀ
(8)
[0126]
其次,在y个一维卷积神经网络的池化层中,使用最大池化突出头部序列中重要特征,过程如下:
[0127]
x
pool
=max(y
conv
)
ꢀꢀꢀ
(9)
[0128]
其中,y
conv
表示经过relu激活函数转换的输出值,x
pool
表示经过最大池化的输出;
[0129]
然后,将z个门控循环单元按顺序叠加在一起,添加到一维卷积神经网络的卷积层和池化层之后,以学习头部序列间的特征;使用归一化指数函数,计算各类别标签的概率,即预测值;再使用多分类交叉熵损失函数,计算头部序列预测值和真实值之间的差,即损失值,过程如下:
[0130][0131]
其中,n表示输入一维卷积神经网络的头部序列的个数,v表示输出预测向量维度,z表示以0或1形式表示的(6-4)得到的头部序列的各类别标签,即真实值,r表示预测值,取值范围是[0,1];
[0132]
最后通过损失徝去反向更新卷积层的参数和直到损失值小于设定值时,停止更新参数;再根据头部序列的分类结果,对相应的未知工控协议原始数据进行分类,可分类为串行通信协议、现场总线协议、工业以太网协议。
[0133]
通过应用本实施例的技术方案,考虑工控协议头部字段关键信息密集的特点,采用字节与半字节相结合的多粒度工控协议特征提取,实现无先验知识情况下的精准特征提取,避免了特征提取时主观性强的情况。进一步,利用头部字段中特征字节不一致的特性,对特征序列进行自动标记,动态更新协议特征集合,从而解决了未知协议数据标注问题。在此基础上,为保障分类的实时性,提出基于门控循环单元增强的一维卷积神经网络协议分类方法。本发明通过多粒度特征提取和自动标记,能够高效率、高精度地实现未知工控协议分类,为未知工控协议识别奠定基础,支持入侵检测,保障工控信息安全。
网友询问留言已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
技术分类