一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种反序列化攻击的检测方法、装置及可读存储介质与流程

2022-06-01 08:02:34 来源:中国专利 TAG:


1.本技术涉及信息安全技术领域,尤其涉及一种反序列化攻击的检测方法、装置及可读存储介质。


背景技术:

2.为方便技术人员对复杂数据的传输需求,java提供了“对象序列化(object serialization)”机制,用于将数据序列化。通常把java对象序列化到持久化存储(本地硬盘)或在网络中传输java对象时,会将java对象序列化成二进制字节序列来存储和传输,这种将java对象转变为二进制的行为称之为序列化。
3.反序列化作为序列化的逆过程,用于将二进制字节序列恢复为序列化之前的java对象。而针对java应用中的关键问题:对于java反序列化攻击,目前多见的方法是采用黑名单进行匹配,用以发现java数据中执行反序列化攻击的数据内容,达到阻断反序列化攻击的目的。然而,这种方法存在因为黑名单更新不及时,或者更新黑名单的同时还要更新匹配规则库引起匹配性能下降,导致准确率低,进一步导致java反序列化攻击检测准确率低。


技术实现要素:

4.本发申请提供了一种反序列化攻击的检测方法、装置及可读存储介质,用以解决java反序列化攻击检测准确率低的问题。
5.第一方面,本技术提供一种反序列化攻击的检测方法,所述方法包括:
6.确定序列化数据的数据格式;其中,所述数据格式包括原生字节流、对象简谱json格式、可扩展标记语言xml格式中的一种格式;
7.基于所述数据格式,解析所述序列化数据得到所述数据格式对应的解析数据;其中,所述解析数据中包括类,所述类指示创建java实体的策略;
8.基于所述数据格式,确定所述序列化数据的检测策略,并利用所述检测策略针对所述解析数据中的所述类进行反序列化攻击检测,确定所述序列化数据中是否存在反序列化攻击。
9.上述方法针对不同数据格式的解析数据,确定相对应的检测策略;即根据序列化数据的数据格式,细化反序列化攻击的检测策略,使反序列化攻击的检测更加有针对性,从而提升了检测反序列化攻击的准确率。
10.一种可能的实施方式,所述基于所述数据格式,解析所述序列化数据得到所述数据格式对应的解析数据,包括:
11.当所述数据格式为原生字节流格式时,所述解析数据包括数组、对象;其中,所述数组为相同类型字段的集合,所述对象指示java实体,所述字段包括字段名和字段值;
12.当所述数据格式为json格式时,所述解析数据包括指定字段,且所述指定字段与所述指定字段的字段值形成键值对;
13.当所述数据格式为xml格式时,确定所述序列化数据中是否为xml encoder格式;
若是,则所述解析数据中包括object节点和void节点,且所述object节点中包括class字段,所述void节点中包括method字段;若否,则所述解析数据为x stream格式,所述解析数据中包括class节点或者class字段;其中,所述节点为xml格式的序列化数据的起始标识。
14.一种可能的实施方式,所述基于所述数据格式,确定所述序列化数据的检测策略,包括:
15.当所述数据格式为原生字节流,所述检测策略为,检测所述解析数据中包含序列化对象的数目;和/或
16.包含序列化数组的数目;和/或
17.包含第一黑名单中类名的数目;和/或
18.当所述引用对象的嵌套深度超过设定深度时,所述引用对象的嵌套深度;和/或
19.是否存在协议格式错误导致的解析异常;
20.其中,所述第一黑名单指示原生字节流格式的序列化数据中包括反序列化攻击时的记录,所述记录包括承载反序列化攻击的类,所述引用对象的嵌套深度指示所述对象被引用的次数。
21.一种可能的实施方式,所述基于所述数据格式,确定所述序列化数据的检测策略,包括:
22.当所述数据格式为json格式时,所述检测策略为,检测所述键值对中所述指定字段的字段值符合java类的命名特征的数目;和/或
23.所述java类名为第二黑名单中的类名的数目;
24.其中,所述第二黑名单为json格式序列化数据包括反序列化攻击时的记录,所述记录包括承载反序列化攻击的类。
25.一种可能的实施方式,所述基于所述数据格式,确定所述序列化数据的检测策略,包括:
26.当所述数据格式为xml encoder格式时,检测策略为,检测所述object节点中所述class字段的字段值为类名的节点数目;和/或
27.所述void节点中所述method字段的字段值为第三黑名单中method字段的字段值的节点数目;其中,所述第三黑名单指示包括xml encoder格式的序列化数据包括反序列化攻击时的记录;
28.当所述数据格式为x stream格式时,检测策略为,检测所述解析数据包括第四黑名单中节点数目或者类名称相同的节点数目;和/或
29.所述class节点的字段值为第四黑名单中的类名的数目;其中,所述第四黑名单指示x stream格式的序列化数据包括反序列化攻击时的记录,所述记录包括承载反序列化攻击的类。
30.一种可能的实施方式,所述利用所述检测策略针对所述解析数据进行反序列化攻击检测,确定所述序列化数据中是否存在反序列化攻击,包括:
31.确定所述数据格式对应的检测策略中每一项内容的分值、设定权重;
32.基于所述每一项内容的分值、设定权重,确定所述每一项内容的分数;
33.将所述每一项内容的分数累加,得到所述序列化数据的置信值;其中,所述置信值指示所述序列化数据包括反序列化攻击的概率;
34.将所述置信值与告警值进行对比,当所述置信值大于所述告警值时,确定所述序列化数据中存在反序列化攻击;其中,所述告警值根据所述序列化数据的使用场景设置。
35.上述方法通过不同反序列化场景灵活设置告警值,使反序列攻击的检测更加灵活,避免误判,更进一步提高了检测反序列化攻击的准确率。
36.第二方面,本技术提供一种反序列化攻击的检测装置,所述装置包括:
37.确定单元:用于确定序列化数据的数据格式;其中,所述数据格式包括原生字节流、对象简谱json格式、可扩展标记语言xml格式中的一种格式;
38.解析单元:用于基于所述数据格式,解析所述序列化数据得到所述数据格式对应的解析数据;其中,所述解析数据中包括类,所述类指示创建java实体的策略;
39.检测单元:用于基于所述数据格式,确定所述序列化数据的检测策略,并利用所述检测策略针对所述解析数据中的所述类进行反序列化攻击检测,确定所述序列化数据中是否存在反序列化攻击。
40.一种可能的实施方式,所述解析单元具体用于,当所述数据格式为原生字节流格式时,所述解析数据包括数组、对象;其中,所述数组为相同类型字段的集合,所述对象指示java实体,所述字段包括字段名和字段值;当所述数据格式为json格式时,所述解析数据包括指定字段,且所述指定字段与所述指定字段的字段值形成键值对;当所述数据格式为xml格式时,确定所述序列化数据中是否为xml encoder格式;若是,则所述解析数据中包括object节点和void节点,且所述object节点中包括class字段,所述void节点中包括method字段;若否,则所述解析数据为x stream格式,所述解析数据中包括class节点或者class字段;其中,所述节点为xml格式的序列化数据的起始标识。
41.一种可能的实施方式,所述检测单元具体用于确定所述数据格式对应的检测策略中每一项内容的分值、设定权重;基于所述每一项内容的分值、设定权重,确定所述每一项内容的分数;将所述每一项内容的分数累加,得到所述序列化数据的置信值;其中,所述置信值指示所述序列化数据包括反序列化攻击的概率;将所述置信值与告警值进行对比,当所述置信值大于所述告警值时,确定所述序列化数据中存在反序列化攻击;其中,所述告警值根据所述序列化数据的使用场景设置。
42.一种可能的实施方式,当所述数据格式为原生字节流,所述检测策略为,检测所述解析数据中包含序列化对象的数目;和/或
43.包含序列化数组的数目;和/或
44.包含第一黑名单中类名的数目;和/或
45.当所述引用对象的嵌套深度超过设定深度时,所述引用对象的嵌套深度;和/或
46.是否存在协议格式错误导致的解析异常;
47.其中,所述第一黑名单指示原生字节流格式的序列化数据中包括反序列化攻击时的记录,所述记录包括承载反序列化攻击的类,所述引用对象的嵌套深度指示所述对象被引用的次数。
48.一种可能的实施方式,所述基于所述数据格式,确定所述序列化数据的检测策略,包括:
49.当所述数据格式为json格式时,所述检测策略为,检测所述键值对中所述指定字段的字段值符合java类的命名特征的数目;和/或
50.所述java类名为第二黑名单中的类名的数目;
51.其中,所述第二黑名单为json格式序列化数据包括反序列化攻击时的记录,所述记录包括承载反序列化攻击的类。
52.一种可能的实施方式,所述基于所述数据格式,确定所述序列化数据的检测策略,包括:
53.当所述数据格式为xml encoder格式时,检测策略为,检测所述object节点中所述class字段的字段值为类名的节点数目;和/或
54.所述void节点中所述method字段的字段值为第三黑名单中method字段的字段值的节点数目;其中,所述第三黑名单指示包括xml encoder格式的序列化数据包括反序列化攻击时的记录;
55.当所述数据格式为x stream格式时,检测策略为,检测所述解析数据包括第四黑名单中节点数目或者类名称相同的节点数目;和/或
56.所述class节点的字段值为第四黑名单中的类名的数目;其中,所述第四黑名单指示x stream格式的序列化数据包括反序列化攻击时的记录,所述记录包括承载反序列化攻击的类。
57.第三方面,本技术提供一种可读存储介质,包括,
58.存储器,
59.所述存储器用于存储指令,当所述指令被处理器执行时,使得包括所述可读存储介质的装置完成如第一方面及任一种可能的实施方式所述的方法。
附图说明
60.图1为本技术提供的一种反序列化攻击的检测方法的流程图;
61.图2为本技术提供的针对序列化数据进行反序列化攻击检测的示意图;
62.图3为本技术提供的一种java反序列化攻击的检测装置的结构示意图。
具体实施方式
63.针对现有技术中存在的检测反序列化攻击准确率低的问题,本技术提出一种反序列化攻击的检测方法:首先对不同格式的序列化数据进行解析,并针对不同格式序列化数据的解析结果,进行相应的反序列化攻击检测,通过细化不同格式的反序列化攻击的判断方法,达到提高检测反序列化攻击准确率的目的。
64.以下针对本技术实施例中所使用的技术术语进行解释:
65.序列化:指将对象转换为容易传输的格式的过程。
66.反序列化攻击:攻击者通过序列函数将恶意对象(代码)序列化,冒充正常数据发送到目标服务器的反序列化接口,如果服务器没有对序列化数据进行安全验证,直接对恶意对象的序列化数据进行反序列化处理,则服务器会执行恶意对象中的代码,造成对服务器的攻击。
67.java原生字节流:指一种在java程序中,通过writeobject方法将对象序列化成二进制字节流的数据。
68.fast json(快速对象简谱):一种基于java开发的一款json(对象简谱)解析器和
生成器;可用于将java对象转换为其json表示形式,还可以将json字符串转换为对应的java对象。
69.xml encoder(可扩展标记语言编码器):指java.bean包中将java对象和xml格式数据进行转换的一个序列化类;只有确定类实现serializable接口才能实现序列化;其中包括《java version="1.8.0_131"class="java.beans.xmldecoder"》。
70.x stream:指将java对象和xml格式数据进行转换的java库(一种序列化类)。
71.置信值:用于表示一个数据执行反序列化攻击的可信程度,该值通过最终打分计算后所得,其区间大小为0~10,值越大则表示可信程度越高,等价于威胁得分。
72.dos反序列化攻击:指攻击者在序列化数据中构造n层对象引用,使目标服务器在接收该序列化数据后,进行反序列化解析时,服务器必须消耗大量cpu资源,导致无法处理正常业务的一种攻击手段。
73.为了更好的理解上述技术方案,下面通过附图以及具体实施例对本技术技术方案做详细的说明,应当理解本技术实施例以及实施例中的具体特征是对本技术技术方案的详细的说明,而不是对本技术的技术方案的限定,在不冲突的情况下,本技术实施例以及实施例中的技术特征可以相互组合。
74.请参考图1,本技术实施例提供一种反序列化攻击的检测方法,用以解决现有技术中java反序列化攻击检测准确率低的问题,该方法具体包括以下实现步骤:
75.步骤101:确定序列化数据的数据格式。
76.其中,所述数据格式包括原生字节流、对象简谱json格式、可扩展标记语言xml格式中的一种格式。
77.具体地,针对序列化数据的数据头进行识别。若数据头包括“aced0005”,则该序列化数据的格式为原生字节流;若数据头开头为“{”或“[”,则该序列化数据的格式为json格式;若数据头开头为“《”,则该序列化数据的格式为xml格式。
[0078]
上述序列化数据可以是url,querystring,cookie,body等中的至少一种。其中,url是统一资源定位器,指示地址;querystring为url中的查询字符串;cookie是http头部中的cookie字段;body是指http请求中的请求体。例如,在java数据中:post/1.php?q=123http/1.1
[0079]
host:1.1.1.1
[0080]
cookie:aaa=bbb
[0081]
yyyyyyyy。
[0082]
其中,querystring是q=123;cookie是aaa=bbb;body是yyyyyyyy。针对querystring,cookie,body中的一种进行解析,确定对应序列化数据的数据格式。
[0083]
步骤102:基于所述数据格式,解析所述序列化数据得到所述数据格式对应的解析数据。
[0084]
其中,所述解析数据中包括类,所述类指示创建java实体的策略。
[0085]
具体地,针对java原生字节流格式的序列化数据,可以按照java标准序列化协议格式进行解析,其中,序列化协议是数据载体的标准定义,使装载的数据可以在不同平台使用不同语言与具体数据进行有效的无损转化,协议本身与平台和语言无关。因此,当所述数据格式为原生字节流格式时,所述解析数据包括数组、对象;其中,所述数组为相同类型字
段的集合,所述对象指示java实体,所述字段包括字段名和字段值,并且,数组中也可以是对象的集合。也就是说,类为对象和数组的抽象和概括,且对象为java实体。
[0086]
当所述数据格式为json格式时,所述解析数据包括指定字段,且所述指定字段与所述指定字段的字段值形成键值对。键值对形式由key,value键值对形式构成。其中,key为字段名,value为字段值。json格式数据中的反序列化攻击只存在于fast json框架中。在fast json序列化数据中,指定字段可以是@type字段,且@type字段的字段值为java类名;否则,该json格式的序列化数据不用于反序列化处理,即其中不存在反序列化攻击的威胁。
[0087]
针对xml格式的序列化数据进行解析,得到的解析结果可以包括:节点名、字段名和字段值。其中,所述节点为xml格式的序列化数据的起始标识。例如,针对xml格式的序列化数据《java version="1.8.0_131"class="java.beans.xml decoder"》进行解析,得到的解析结果包括,节点名为“java”,字段名分别为“version”和“class”的字段值分别为,“1.8.0_131”和“java.beans.xml decoder”。
[0088]
当所述数据格式为xml格式时,确定所述序列化数据中是否为xml encoder格式;若是,则所述解析数据中包括object节点和void节点,且所述object节点中包括class字段,所述void节点中包括method字段;若否,则所述解析数据为x stream格式,所述解析数据中包括class节点或者class字段。其中,class作为节点时对应于该序列化数据中不包括成员变量的情况,则class作为节点直接表示类;而class作为字段时对应于该序列化数据包括成员变量的情况,则class字段作为成员变量之一表示类。值得说明的是,在序列化数据中,class作为属性表示类所具备的特征,method作为函数方法表示类所具备的行为。
[0089]
特别地,若解析过程中出现错误导致不能得到正常的解析数据;对于json格式的序列化数据以及xml格式的序列化数据,可以确定为不存在反序列化攻击的威胁。但是,由于针对java原生字节流格式的序列化数据使用的是,java标准序列化协议格式进行解析,因此存在协议格式差异导致解析错误的可能性。也就是说,对于原生字节流格式的序列化数据,当出现解析错误时,不能直接确定为不包含反序列化攻击的序列化数据;若解析错误的数据中不包含对象,方可确定不是由协议格式差异导致的解析错误,则可以确定该原生字节流格式的序列化数据中不包含反序列化攻击。也就是说,若解析错误的数据中包含对象,则该原生字节流格式的序列化数据中仍然有存在反序列化攻击的可能性,所以需要继续使用相对应的解析测略进行解析。
[0090]
步骤103:基于所述数据格式,确定所述序列化数据的检测策略,并利用所述检测策略针对所述解析数据中的所述类进行反序列化攻击检测,确定所述序列化数据中是否存在反序列化攻击。
[0091]
具体地,当数据格式为原生字节流时,检测策略为:检测解析数据中包含序列化对象的数目;和/或包含序列化数组的数目;和/或包含第一黑名单中类名的数目;和/或当所述引用对象的嵌套深度超过设定深度时,所述引用对象的嵌套深度;和/或是否存在协议格式错误导致的解析异常。其中,第一黑名单指示原生字节流格式的序列化数据中包括反序列化攻击时的记录,该记录包括承载反序列化攻击的类,该引用对象的嵌套深度指示对象被引用的次数。
[0092]
由此可见,对于原生字节流格式的序列化数据,可以根据解析结果中所包括的对象数目、数组数目、与第一黑名单中类名重合的数目、引用对象的嵌套深度的至少一项,进
行反序列化攻击的检测;即通过将检测策略细化,使得反序列化攻击的检测更加具有针对性,从而提高了反序列化攻击检测的准确率。
[0093]
当数据格式为json格式时,检测策略为:检测解析数据中的键值对中指定字段的字段值符合java类的命名特征的数目;和/或所述java类名为第二黑名单中的类名的数目;也可以判断指定字段的字段值为黑名单中定义的包名的数目,该包名为多个类名打包组合形成的数据包的名称。其中,第二黑名单为json格式序列化数据包括反序列化攻击时的记录,该记录包括承载反序列化攻击的类。在json格式对应的解析数据中,前述指定字段可以是@type字段。
[0094]
由此可见,对于json格式的序列化数据,可以通过检测解析数据中@type字段的字段值为类且符合java类的命名特征的数目以及与第二黑名单中类名重合的数目,进行反序列化攻击的检测;即通过将检测策略细化,使得反序列化攻击的检测更加具有针对性,从而提高了反序列化攻击检测的准确率。
[0095]
当数据格式为xml encoder格式时,检测object节点中class字段的字段值为类名的节点数目;和/或void节点中method字段的字段值为第三黑名单中method字段的字段值的节点数目。其中,所述第三黑名单指示包括xml encoder格式的序列化数据包括反序列化攻击时的记录。
[0096]
当所述数据格式为x stream格式时,检测策略为,检测解析数据包括第四黑名单中节点数目或者类名称相同的节点数目;和/或class节点的字段值为第四黑名单中的类名的数目;其中,所述第四黑名单指示x stream格式的序列化数据包括反序列化攻击时的记录,所述记录包括承载反序列化攻击的类。
[0097]
由此可见,对于xml格式的序列化数据,可以进一步细化为xml encoder格式和x stream格式,并对应于不同格式的解析数据特点进行反序列化攻击的检测。同理,通过将检测策略细化,使得反序列化攻击的检测更加具有针对性,从而提高了反序列化攻击检测的准确率。
[0098]
进一步地,基于上述不同格式下对应的反序列化攻击检测方式,可以根据攻击的检测结果对序列化数据进行评分,并根据不同的反序列化场景设置相应的告警阈值,从而达到准确拦截反序列化攻击的目的。以下针对评分方法的设置进行具体描述。
[0099]
在评分阶段,每一个项目的分值计算方法相同,且每一个项目包括至少一个标签,每个标签对应一个设定权重值。评分方法可以表示为:《i,t,score,weight》。其中,i指示项目;t指示项目的标签;score指示标签对应分值;weight指示标签对应的设定权重值;则任一标签(项目)的得分为:f(t)=min(score
×
weight,max score)。其中,max score表示该标签能给出的最大分值,如果该项目包括多个标签,则最终的得分为f(t1) f(t2);最终将所有项目的分值累加,得到对应序列化数据的置信值。即,首先确定所述数据格式对应的检测策略中每一项内容的分值、设定权重。然后,基于所述每一项内容的分值、设定权重,确定所述每一项内容的分数。接着,将所述每一项内容的分数累加,得到所述序列化数据的置信值。其中,置信值指示序列化数据包括反序列化攻击的概率。最后,将所述置信值与告警值进行对比,当该置信值大于所述告警值时,就可以确定序列化数据中存在反序列化攻击。其中,告警值可以根据序列化数据的使用场景设置。
[0100]
对于原生字节流格式序列化数据检测策略的第一项:解析数据中包含的序列化对
象的数目。由于不包含反序列化攻击的,正常序列化数据中序列化对象的数目较少,一般只有一个。因此,针对第一项内容可以设置两个标签,分别为:序列化对象的数目为1;序列化对象的数目超过1个。针对第一类标签,可以设置分值为1或0,设定权重值为2;针对第二类标签,分值为具体的序列化对象的数量减1,设定权重值为0.5。需要说明的是,序列化对象的数目通过遍历解析结果中所有类获取,并且为了防止单一特征评分过高导致最终得分过高,致使不能通过最终分值进行关于反序列化攻击的综合、全面的判断,针对第一项内容设置最大分值为4。例如,确定序列化数据的解析结果中包括的序列化对象数目为4,则该项目的得分为:1
×
2 3
×
0.5=3.5。
[0101]
同理,对于原生字节流格式序列化数据检测策略的第二项:解析数据中包含序列化数组的数目;由于不包含反序列化攻击的,正常序列化数据中序列化数组的数目较少,一般只有一个。因此同样可以设置两个标签,分别为:序列化数组的数目为1;序列化数组超过1个。相应的评分方式与上述第一项的评分方式相同,此处不再赘述。
[0102]
对于原生字节流格式序列化数据检测项目的第三项:包含第一黑名单中类名的数目。可以设置标签为“存在第一黑名单中的类”,该标签对应的分值为存在的序列化黑名单中的类的数目,设定权重值为1.5。需要说明的是,本项检测内容的特征强度高于第一项以及第二项,因此可以设置最大分值为10。
[0103]
对于原生字节流格式序列化数据检测策略的第四项内容:当所述引用对象的嵌套深度超过设定深度时,所述引用对象的嵌套深度;由于存在一种消耗cpu的“dos(denial of service,拒绝服务)反序列化攻击”,其特点是采用深度嵌套的方式插入正常数据中,可以设置标签为“引用对象的嵌套深度是否超过设定深度”。可以将设定深度设置为5,那么,如果引用对象的嵌套深度没有超过设定深度,该项目分值为0。如果引用对象的嵌套深度超过设定深度,则该标签对应分值的确定方式为:嵌套深度减5,对应的设定权重值为0.5;同理,为避免单项对序列化数据的不合理影响,该项目的最大分值可以设置为2.5。
[0104]
对于原生字节流格式序列化数据检测项目的第五项:是否存在由于协议格式错误导致的解析异常;需要判断是否为协议格式差异(数据不规范或者协议升级引起的无法兼容)所导致的解析错误。可以判断是否解析出序列化对象。若否,则确定解析错误不是协议格式差异导致的,则本项目评分为0,且对应的序列化数据可以确定不存在反序列化攻击的威胁。若是,则进行评分,该标签对应分值为1,设定权重值为-2。本项目中设置权重值为负数的原因是,解析异常可以导致对序列化数据进行反序列化处理时,即便其中包括反序列化攻击,其中的反序列化攻击也由于解析异常危害性有所降低。
[0105]
在对上述原生字节流格式序列化数据的检测项目分别评分以后,可以将分值累加得到总分,该分数可以作为java原生字节流格式序列化数据的置信值。且可以设置告警值为2。
[0106]
对于json格式序列化数据检测策略的第一项内容:指定字段的字段值符合java中类的命名特征的数目。本技术实施例中将指定字段设置为@type,那么就可以确定对应的解析数据中所包括的@type字段的字段值符合java中类的命名特征的个数,将该个数作为项目得分值与对应的设定权重值相乘得到对应的分值。
[0107]
对于json格式序列化数据检测策略的第二项内容:第一项检测内容中检测到的类名为第二黑名单中定义的类名(或包名)的数目;将该个数作为项目得分值与对应的设定权
重值相乘得到对应的分值。进一步地,可以将第一项和第二项分值相加得到json格式序列化数据的总分值。
[0108]
针对xml格式序列化数据,同样可以根据检测项目与对应的设定权重值相乘,得到对应序列化数据的分值。具体地。对于xml encoder格式,可以对检测策略中的第一项内容:检测所述object节点中所述class字段的字段值为类名的节点数目。以及第二项:所述void节点中所述method字段的字段值为第三黑名单中method字段的字段值的节点数目;即所述void节点中所述method字段的字段值是否为第三黑名单中method字段的字段值。分别确定满足第一项要求的object节点个数,以及满足第二项要求的void节点个数为对应项目的得分值,分别设置对应权重数为0.5。同理,每一项检测项目的评分设置最大值,对于xml encoder格式中的两项检测内容,可以分别设置分值不超过2。将检测策略中每一项内容的得分值累加得到xml encoder格式的序列化数据的总分值,即为对应的置信值。
[0109]
同理,对于x stream中的两项检测内容,可以分别设置特征数目为得分数,对应的设定权重数为1,每一项的最高分值不超过2。将检测策略中每一项内容的得分值累加得到x stream格式的序列化数据的总分值,即为对应的置信值。
[0110]
值得注意的是,上述所有格式序列化数据对应的置信值区间需位于设定区间,该设定区间可以是[0,10]。即当各格式序列化数据下的项目分值累加的总分超过10时,对应的置信值均10。由于反序列化攻击的实施所对应的序列化数据中,解析后至少包括一个反序列化类,对应的分值大于2。因此,该告警值的设置可以根据序列的使用场景或者反序列化场景适当进行调整。
[0111]
上述方法针对不同数据格式的解析数据,确定相对应的检测策略;即根据序列化数据的数据格式,细化反序列化攻击的检测策略,使反序列化攻击的检测更加有针对性,从而提升了检测反序列化攻击的准确率。
[0112]
基于上述步骤101~103,以下针对某一序列化数据中是否包含反序列化攻击的检测进行完整描述,请参考图2。
[0113]
首先可以进行数据预识别,即通过数据头确定序列化数据的格式。确定数据格式以后,就可以使用对应的解析方式进行解析,得到解析数据。若解析不成功,则确定序列化数据中不包含反序列化攻击,即可放行该数据进行后续处理。特别地,对于原生字节流格式的序列化数据,若解析错误的结果数据中包括对象,则不能直接确定不包含反序列化攻击,仍然需要后续检测。进一步地对于解析成功的解析数据,使用相应的检测策略进行检测,并打分;并将打分结果与当前告警值进行对比。若打分结果高于告警值,可以确定该序列化数据中存在反序列化攻击,则对该数据进行阻断。若打分结果不高于告警值,可以确定该序列化数据中不存在反序列化攻击,则对该数据进行放行。根据上述方法就可以完成,针对任一序列化数据中是否包含反序列化攻击的检测。本技术实施例中所提供的技术方案可以用于waf等安全防护设备在接收到用户发送的请求后,使用java反序列化防护装置对于序列化数据的分析中。
[0114]
通过上述操作就可以确定任一序列化数据中是否包含反序列化攻击;并且根据使用场景灵活调整告警值的方法检测反序列化攻击,可以进一步提高反序列化攻击检测的准确率。
[0115]
基于同一发明构思,本技术实施例中提供一种反序列化攻击的检测装置,该装置
与前述图1所示反序列化攻击的检测方法对应,该装置的具体实施方式可参见前述方法实施例部分的描述,重复之处不再赘述,参见图3,该装置包括:
[0116]
确定单元301:用于确定序列化数据的数据格式。
[0117]
其中,数据格式包括原生字节流、对象简谱json格式、可扩展标记语言xml格式中的一种格式。
[0118]
具体地,针对序列化数据的数据头进行识别。若数据头包括“aced0005”,则该序列化数据的格式为原生字节流;若数据头开头为“{”或“[”,则该序列化数据的格式为json格式;若数据头开头为“《”,则该序列化数据的格式为xml格式。
[0119]
解析单元302:用于基于所述数据格式,解析所述序列化数据得到所述数据格式对应的解析数据。
[0120]
其中,所述解析数据中包括类,所述类指示创建java实体的策略。
[0121]
当所述数据格式为原生字节流格式时,所述解析数据包括数组、对象;其中,所述数组为相同类型字段的集合,所述对象指示java实体,所述字段包括字段名和字段值;
[0122]
当所述数据格式为json格式时,所述解析数据包括指定字段,且所述指定字段与所述指定字段的字段值形成键值对;
[0123]
当所述数据格式为xml格式时,确定所述序列化数据中是否为xml encoder格式;若是,则所述解析数据中包括object节点和void节点,且所述object节点中包括class字段,所述void节点中包括method字段;若否,则所述解析数据为x stream格式,所述解析数据中包括class节点或者class字段;其中,所述节点为xml格式的序列化数据的起始标识。
[0124]
检测单元303:用于基于所述数据格式,确定所述序列化数据的检测策略,并利用所述检测策略针对所述解析数据中的所述类进行反序列化攻击检测,确定所述序列化数据中是否存在反序列化攻击。
[0125]
具体用于当所述数据格式为原生字节流,所述检测策略为,检测所述解析数据中包含序列化对象的数目;和/或包含序列化数组的数目;和/或包含第一黑名单中类名的数目;和/或当所述引用对象的嵌套深度超过设定深度时,所述引用对象的嵌套深度;和/或是否存在协议格式错误导致的解析异常;其中,所述第一黑名单指示原生字节流格式的序列化数据中包括反序列化攻击时的记录,所述记录包括承载反序列化攻击的类,所述引用对象的嵌套深度指示所述对象被引用的次数。
[0126]
检测单元303还可以用于,当所述数据格式为json格式时,所述检测策略为,检测所述键值对中所述指定字段的字段值符合java命名特征的数目;和/或所述java类名为第二黑名单中的类名的数目;其中,所述第二黑名单为json格式序列化数据包括反序列化攻击时的记录,所述记录包括承载反序列化攻击的类。
[0127]
检测单元303还可以用于,当所述数据格式为xml encoder格式时,检测策略为,检测所述object节点中所述class字段的字段值为类名的节点数目;和/或所述void节点中所述method字段的字段值为第三黑名单中method字段的字段值的节点数目;其中,所述第三黑名单指示包括xml encoder格式的序列化数据包括反序列化攻击时的记录;当所述数据格式为x stream格式时,检测策略为,检测所述解析数据包括第四黑名单中节点数目或者类名称相同的节点数目;和/或所述class节点的字段值为第四黑名单中的类名的数目;其中,所述第四黑名单指示x stream格式的序列化数据包括反序列化攻击时的记录,所述记
录包括承载反序列化攻击的类。
[0128]
所述检测单元303还可以用于,确定所述数据格式对应的检测策略中每一项内容的分值、设定权重;基于所述每一项内容的分值、设定权重,确定所述每一项内容的分数;将所述每一项内容的分数累加,得到所述序列化数据的置信值;其中,所述置信值指示所述序列化数据包括反序列化攻击的概率;将所述置信值与告警值进行对比,当所述置信值大于所述告警值时,确定所述序列化数据中存在反序列化攻击;其中,所述告警值根据所述序列化数据的使用场景设置。
[0129]
基于同一发明构思,本技术实施例还提供一种可读存储介质,包括:
[0130]
存储器,
[0131]
所述存储器用于存储指令,当所述指令被处理器执行时,使得包括所述可读存储介质的装置完成如上所述的反序列化攻击的检测方法。
[0132]
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
[0133]
在本发明所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
[0134]
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
[0135]
另外,在本技术各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
[0136]
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本技术的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(processor)执行本技术各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:通用串行总线闪存盘(universal serial bus flash disk)、移动硬盘、只读存储器(read-only memory,rom)、随机存取存储器(random access memory,ram)、磁碟或者光盘等各种可以存储程序代码的介质。
[0137]
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精
神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献