CN115065623A - 一种主被动相结合的私有工控协议逆向分析方法 - Google Patents
一种主被动相结合的私有工控协议逆向分析方法 Download PDFInfo
- Publication number
- CN115065623A CN115065623A CN202210971580.3A CN202210971580A CN115065623A CN 115065623 A CN115065623 A CN 115065623A CN 202210971580 A CN202210971580 A CN 202210971580A CN 115065623 A CN115065623 A CN 115065623A
- Authority
- CN
- China
- Prior art keywords
- message
- industrial control
- field
- format
- control equipment
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L43/00—Arrangements for monitoring or testing data switching networks
- H04L43/18—Protocol analysers
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02P—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN THE PRODUCTION OR PROCESSING OF GOODS
- Y02P90/00—Enabling technologies with a potential contribution to greenhouse gas [GHG] emissions mitigation
- Y02P90/02—Total factory control, e.g. smart factories, flexible manufacturing systems [FMS] or integrated manufacturing systems [IMS]
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Communication Control (AREA)
Abstract
本发明公开了一种主被动相结合的私有工控协议逆向分析方法,包括采集工控设备正常通信过程中的报文,对所述报文进行逆向分析,获得逆向分析结果;构造错误的报文格式,产生报文与工控设备进行通信交互;确定接收到错误数据后工控设备的响应方式;对所述逆向分析结果中的字段属性进行验证;构建待验证报文结构格式集合,构造报文并发送至工控设备,根据与工控设备通信交互的响应结果确定该报文结构是否为符合所述工控协议规范的正确报文格式;对逆向分析结果中的状态机信息进行扩展分析,获得最终的逆向分析结果。该方法能够对协议格式、字段属性和状态机的分析结果进行更深入的挖掘,归纳出能够更加真实反映出工控协议全局信息的逆向结果。
Description
技术领域
本发明涉及工控协议安全技术领域,具体涉及一种主被动相结合的私有工控协议逆向分析方法。
背景技术
工业控制系统是由计算机设备与工业过程控制部件组成的自动控制系统,广泛应用于电力、水处理、石油与天然气、化工、交通运输、制造业等行业,是国家关键基础设施运行的“大脑”和“中枢”。随着工业互联网的发展,越来越多的工控系统开始连接到网络中,并通过网络实现工控设备的远程操控,这种运行方式在极大推动工业生产效率的同时,也给网络攻击者带来了可乘之机。近年来,有很多起网络安全事件都是攻击者利用协议的漏洞,从而实现对工控设施的入侵和破坏。因此,需要针对工控设备进行相应的协议测试,从而挖掘出设备自身潜在的安全漏洞。
目前典型的协议测试方法是模糊测试技术,该技术使用大量半有效的数据作为目标程序的输入,通过监控程序出现的异常来发现潜在的漏洞。然而,许多工控设备采用了非公开的协议进行通信,这就对模糊测试带来了技术挑战,因为协议中的部分关键字段如果填充错误,输入会被设备作为错误报文直接丢弃,降低模糊测试的效果。为了避免输入数据中有特殊语义的部分错误导致测试用例失效,需要提前得到工控机和客户机之间的通信协议知识,并利用这一知识来提高输入数据的正确性和测试用例的有效性,而推断工控协议的具体规范需要依靠协议逆向技术,因此,协议逆向技术对于工控设备的模糊测试和漏洞挖掘具有基础性作用。
协议逆向分析技术的主要目标是获取未知协议的协议规范,包括协议语法、语义以及同步信息,其中协议语法体现为数据报文中的控制信息和控制报文的结构、格式,定义了协议中每一个字段的关键词、数据类型、长度等,协议语义则描述了各个字段所代表的含义及作用,并对字段内容进行了相应的约束,同步信息则反映了在报文在交互过程中应当如何进行交互和反馈。当前较为常用的协议逆向分析方法是基于网络流量的,该方法通过对通信双方交互的流量信息进行分析,从而推断出协议的格式、状态机等信息,具有较强的通用性。
然而,这种方法也有明显的缺点,最典型的就是对流量样本的依赖性较强,如果流量样本无法充分表现出各个字段的特征或涵盖所定义的各个状态,会导致许多字段无法准确解析出其语义特征,甚至会出现字段划分错误的情况。此外,工控系统在运行过程中,一些不常用的功能在很长时间可能都不会执行,因此流量样本往往无法包括工控协议所有的状态。在这种情况下,仅仅对流量样本进行分析,往往无法实现完整和准确的协议逆向结果。
发明内容
本发明的目的是提供一种主被动相结合的私有工控协议逆向分析方法,其能有效解决单纯依靠对流量进行逆向分析得到的结果不够准确和完善的问题,并且可以通过与工控设备的交互,实现对逆向分析结果的验证和扩展。
为解决上述技术问题,本发明提出了一种主被动相结合的私有工控协议逆向分析方法,包括以下步骤。
步骤1,采集工控设备正常通信过程中的报文,基于静态分析对所述报文进行逆向分析,获得逆向分析结果,所述逆向分析结果包括所述工控协议的报文格式、字段属性和状态机信息。
步骤2,构造错误的报文格式,并产生相应的报文与工控设备进行通信交互;根据是否响应以及响应报文的内容,确定接收到错误数据后工控设备的响应方式。
步骤3,对所述逆向分析结果中的字段属性进行验证。
步骤4,构建待验证报文结构格式集合,根据所述待验证报文结构格式集合中的报文结构格式构造报文,将构造的报文发送至工控设备,根据与工控设备通信交互的响应结果确定该报文结构是否为符合所述工控协议规范的正确报文格式。
步骤5,对所述逆向分析结果中的状态机信息进行扩展分析,获得最终的逆向分析结果。
进一步地,步骤1所述逆向分析结果中的每种报文格式都是由若干不同类型的字段按序组成,具体的表达形式为Q={f 1, f 2,..., f n },其中f i 表示报文格式Q中的第i个字段,n为报文格式所包含的字段数,n ≥ 1,1 ≤ i ≤ n。
每个字段的属性信息包括字段类型、最大长度、最小长度、字段语义、字段取值和字段关联的其他字段,具体的表达形式为F=<type, maxlen, minlen, semantic, value,reference>,其中:type表示字段的类型,字段类型包括定长定值、定长变值、变长变值3种;maxlen表示字段的最大长度,minlen表示字段的最小长度,当字段类型为定长定值或定长变值时,maxlen和minlen相等;semantic表示字段的语义,包含了在工控协议中的典型语义字段,包括协议标识、序号、长度、CRC(Cyclic redundancy check,循环冗余校验)、分隔、时间戳、功能码、报文结构、设备标识、协议代码等;value表示字段可能的取值,当字段类型为定长定值或定长变值时有效;reference表示字段所关联的其他字段,当字段语义为长度或CRC等形式时,该字段的值根据所关联的其他字段计算得到。
进一步地,状态机表示状态与状态之间的转移过程,包含状态和状态转移两类元素,具体的表达形式为S={<s i , q i , q o , s o >},其中s i 表示输入的状态,在初始状态下,工控协议的状态为s 0,q i 表示在状态s i 时接收到的输入报文格式,q o 表示在状态s i 接收到输入报文q i 后所产生的响应报文格式,s o 表示在状态s i 接收到输入报文q i 后工控协议的输出状态,为了对状态机进行简化,当两个输出状态的输入报文格式相同,且输出报文也相同时,这两个输出状态为等价状态,对这两个输出状态进行合并。
进一步地,步骤2包括:在静态分析结果的基础上,根据报文格式、字段属性和状态机信息构造完全错误的数据报文,并将产生的报文发送给工控设备,然后对工控设备的响应情况进行监视,如果工控设备没有返回任何报文,则该工控协议在应对错误报文时,采用丢弃的方式来处理,否则记录相应的报文,并与步骤1中通过静态分析获得的所有报文格式进行匹配。
进一步地,步骤2中所述与步骤1中通过静态分析获得的所有报文格式进行匹配,包括:如果响应报文与某种报文格式Q相匹配,则查询响应报文格式{f 1, f 2,..., f n }中语义为协议代码的字段,如果存在,则与正确的响应报文协议代码进行比对,若正确的响应报文协议代码为0,则协议代码非0时,表示构造并发送给工控设备的报文为错误报文或者报文格式违反了协议的状态机,若正确的响应报文协议代码不为0,则协议代码为0时,表示构造并发送给工控设备的报文为错误报文或者报文格式违反了协议的状态机。
如果响应报文格式中不存在语义为协议代码的字段,则查询响应报文格式中语义为功能码的字段,并记录该功能码字段值,该字段值表示构造并发送给工控设备的报文为错误报文或者报文格式违反了协议的状态机。
如果响应报文格式中即不存在协议代码字段,也不存在功能码字段,则记录响应报文全部内容,在后续收到该报文时,表示构造并发送给工控设备的报文为错误报文或者报文格式违反了协议的状态机。
如果响应报文与所有报文格式都不匹配,则记录响应报文全部内容,在后续收到该报文时,表示构造并发送给工控设备的报文为错误报文或者报文格式违反了协议的状态机。
步骤2提供了一种工控设备错误响应处置判定方式,基于上述过程可以确定工控设备在响应错误报文时所发送的报文格式和内容,从而对后续的主动学习过程进行判定,即本步骤的判断结果可以有效指导步骤3、步骤4和步骤5中工控协议字段属性的验证结果、工控协议报文格式的主动学习结果、工控协议状态机的主动学习结果。
进一步地,步骤3包括:在确定工控设备响应错误报文方式的基础上,对步骤1中逆向分析结果所划分出的字段属性进行验证。
在字段类型为定长变值,且字段可能的取值value完全随机时,例如序号字段、长度字段、校验字段等,验证方式主要针对字段的内容采用随机变异的方式来填充数据内容,构造报文并发送给工控设备,然后根据工控设备的响应情况来确定该字段是否为静态分析所推断的语义,如果响应错误报文的结果,则可以验证出通过静态分析得到的该字段属性结果是正确的,否则该字段属性分析结果是错误的,并将字段的语义信息清除。
在字段类型为定长变值,且字段可能的取值value仅为若干可选的值时,例如功能码字段、报文结构字段等,验证方式主要针对字段的内容从0开始按序变异,构造报文并发送给工控设备,然后根据工控设备的响应情况来确定该字段是否为静态分析所推断的语义,如果工控设备的响应正确,则将该变异后的值加入到该字段的value属性中。
在字段类型为定长定值时,验证方式主要采用随机变异的方式来填充数据内容,构造报文并发送给工控设备,然后根据工控设备的响应情况来确定该字段是否为静态分析所推断的语义,如果工控设备的响应正确,则将该字段的类型修改为定长变值,同时在字段的value属性中增加变异后的值。
步骤3提供了一种工控协议字段属性验证和修正方式,本步骤通过与工控设备的主动交互式学习方式,可有效实现对被动分析得到的工控协议的报文格式逆向分析结果进行验证,并对某些错误的字段属性进行修正。
进一步地,步骤4中构建待验证报文结构格式集合
在字段属性分析验证结果的基础上,对报文的结构格式进行变异,报文结构格式变异方式通过计算平均条件概率,并判断其是否大于预先设定阈值的方法来完成,包括以下步骤。
步骤4.1,创建一个待验证报文结构格式集合,在初始情况下,该集合包含静态分析得到的所有字段独立构成的报文结构格式。
步骤4.2,从待验证报文结构格式集合中逐个挑选新加入的报文结构格式,并与新字段组装成新的报文结构格式,假定该报文结构格式已经包含的字段为f 1、f 2、...、f n ,新增的字段为f j ,统计在各个字段存在的条件下,字段f j 也存在概率的均值p(f j |f 1, f 2,...,f n ),计算公式如下。
p(f j |f 1, f 2,..., f n )=(p(f j |f 1)+p(f j |f 2)+...+p(f j |f n ))/n。
步骤4.3,对p(f j |f 1, f 2,..., f n )的结果进行判定,如果p(f j |f 1, f 2,..., f n )的计算结果大于预设的阈值,则将该组装的新报文结构格式加入到待验证报文结构格式集合中。
步骤4.4,重复步骤4.2至4.3,直至没有新增的报文结构格式为止。
在完成待验证报文结构格式集合的构建后,开始根据集合中的报文结构格式逐个构造报文,并发送给工控设备,通过工控设备的响应结果,来确定该报文结构是否为符合协议规范的正确报文格式,如果工控设备响应正常,则该报文结构是正确的,否则该报文结构是错误的。
步骤4提供了一种工控协议报文格式主动学习方式,本步骤通过对不同协议格式变异后的存在概率评估,极大增加了主动学习过程中协议报文格式变异的成功率,从而提高主动学习的效率。
进一步地,步骤5包括:在报文格式和字段属性验证分析结果的基础上,根据静态分析得到的状态机,对协议的通信过程进行变异,变异方式为在不同的状态下,选择状态机中不存在的报文格式,按照格式填充相应的数据内容,然后发送给工控设备,并根据工控设备的响应情况来判断状态机中是否存在新的状态转移,如果存在新的状态转移,则对静态分析获得的初步状态机结果进行扩展。
进一步地,步骤5还包括:对静态分析结果得到的功能码字段内容的先后次序进行变异,生成相应的报文后发送给工控设备,并根据相应结果来判定功能码内容之间是否存在先后次序的依赖性,如果工控设备响应正常,则说明各个功能码之间不存在状态依赖,否则说明各个功能码之间存在状态依赖,并需要按照相应的顺序进行状态转移,从而进一步实现对工控协议状态机的扩展分析。
步骤5提供了一种工控协议状态机主动学习方式,本步骤可以通过对功能码之间依赖关系的主动挖掘,可以有效增强工控协议状态机的分析效果,提高状态机分析的完整性。
进一步地,步骤1中采用Wireshark等抓包工具,在工控设备正常通信过程中采集工控设备所产生的交互报文,然后采用Needleman-Wunsch序列比对算法等基于网络流量的静态分析方法对这些通信报文进行逆向分析,从而挖掘出工控协议的报文格式、字段属性和状态机信息。
有益效果:上述技术方案中提供的基于主被动相结合的私有工控协议逆向分析方法,该方法可以在流量分析结果的基础上,与工控设备进行交互式测量,重点对协议中存在的多字节静态字段、报文结构和状态机中的上下文进行变异,并根据设备的响应报文来确定变异结果是否有效,从而对协议格式、字段属性和状态机的分析结果进行更深入的挖掘,归纳出能够更加真实反映出工控协议全局信息的逆向结果。
附图说明
下面结合附图和具体实施方式对本发明做更进一步的具体说明,本发明的上述和/或其他方面的优点将会变得更加清楚。
图1为本申请实施例提供的一种主被动相结合的私有工控协议逆向分析方法中采集工控设备中报文并进行分析的流程示意图。
图2为本申请实施例提供的一种主被动相结合的私有工控协议逆向分析方法中工控设备错误响应处置判定流程示意图。
图3为本申请实施例提供的一种主被动相结合的私有工控协议逆向分析方法中工控协议字段属性验证和修正流程示意图。
图4为本申请实施例提供的一种主被动相结合的私有工控协议逆向分析方法中工控协议报文格式主动学习流程示意图。
图5为本申请实施例提供的一种主被动相结合的私有工控协议逆向分析方法中工控协议状态机主动学习流程示意图。
图6为本申请实施例提供的一种主被动相结合的私有工控协议逆向分析方法的流程示意图。
具体实施方式
下面将结合附图,对本发明的实施例进行描述。
本发明实施例所述的一种主被动相结合的私有工控协议逆向分析方法,运行环境为Intel-Windows架构的PC机,其硬件的主频2.5GHz及以上的Core八核CPU的PC机,内存≥8GB,硬盘500GB,运行Windows 7操作系统,可以应用于对工控设备进行工业协议逆向分析、工控协议漏洞检测和工控设备安全测试场景中,所述工控设备覆盖主流厂商的工业互联网现场设备、无线接入设备、边缘终端设备、工业通信设备和安全防护设备等。
本申请实施例提供的一种主被动相结合的私有工控协议逆向分析方法,如图6所示,包括以下步骤。
步骤1,采集工控设备正常通信过程中的报文,基于静态分析对所述报文进行逆向分析,获得逆向分析结果,所述逆向分析结果包括所述工控协议的报文格式、字段属性和状态机信息;所有报文格式、字段属性和状态机信息均采用形式化的方式进行描述。
如图1所示,步骤1开始于步骤S101,采用Wireshark等抓包工具,对工控设备正常通信过程中的报文进行采集,然后转步骤S102。
在步骤S102中,采用Needleman-Wunsch序列比对算法等静态分析方法,对通信报文进行协议逆向分析,然后转步骤S103。
在步骤S103中,对分析得到的报文格式、字段属性和状态机信息进行记录保存,并完成此次分析。
每种报文格式都是由不同类型的字段按序组成,记所述报文格式的表达形式为Q={f 1, f 2,..., f n },其中f i 表示报文格式Q中的第i个字段,该报文格式总共由n个字段组成,n ≥ 1,1 ≤ i ≤ n。
每个字段属性信息包括字段类型、最大长度、最小长度、字段语义、字段取值和字段关联的其他字段,记字段属性的表达形式为F=<type, maxlen, minlen, semantic,value, reference>,其中:type表示字段类型,包括定长定值、定长变值和变长变值3种;maxlen表示字段的最大长度,minlen表示字段的最小长度,当字段类型为定长定值或定长变值时,maxlen和minlen相等;semantic表示字段语义,包含了在工控协议中的典型语义字段,包括协议标识、序号、长度、CRC、分隔、时间戳、功能码、报文结构、设备标识和协议代码;value表示字段取值,当字段类型为定长定值或定长变值时有效;reference表示字段所关联的其他字段,当字段语义为长度或CRC形式时,该字段的值根据所关联的其他字段计算得到。
状态机表示状态与状态之间的转移过程,包含状态和状态转移两类元素,记状态机的表达形式为S={<s i , q i , q o , s o >},其中s i 表示输入的状态,在初始状态下,工控协议的状态为s 0,q i 表示在状态s i 时接收到的输入报文格式,q o 表示在状态s i 接收到输入报文q i 后所产生的响应报文格式,s o 表示在状态s i 接收到输入报文q i 后工控协议的输出状态,为了对状态机进行简化,当两个输出状态的输入报文格式相同,且输出报文也相同时,这两个输出状态为等价状态,对这两个输出状态进行合并。
步骤2,构造错误的报文格式,并产生相应的报文与工控设备进行通信交互;根据是否响应以及响应报文的内容,确定接收到错误数据后工控设备的响应方式。
如图2所示,步骤2开始于步骤S201,根据静态分析获得的协议逆向结果,构造错误数据报文,并将其发送给工控设备,然后转步骤S202。
在步骤S202中,对工控设备的响应情况进行监视,然后转步骤S203。
在步骤S203中,判断工控设备是否对错误报文进行响应,如果是转步骤S204,否则转S205。
在步骤S204中,将响应报文与静态分析的报文格式进行匹配,然后转步骤S206。
在步骤S205中,确定工控设备在接收到错误报文时不产生响应,然后转步骤S214。
在步骤S206中,判断响应报文是否与静态分析推断的某种报文格式相匹配,如果是转步骤S207,否则转S208。
在步骤S207中,判断响应报文的格式中是否存在协议代码字段,如果是转步骤S209,否则转S210。
在步骤S208中,记录响应报文的内容,并判定在接收到该内容的报文时,表示工控设备收到的为错误报文,然后转步骤S214。
在步骤S209中,判断正确报文的协议代码字段内容是否为0,如果是转步骤S211,否则转S212。
在步骤S210中,判读响应报文的格式中是否存在功能码字段,如果是转步骤S213,否则转S208。
在步骤S211中,判定在接收协议代码字段值非0时,工控设备受到的为错误报文,然后转步骤S214。
在步骤S212中,判定在接收协议代码字段值为0时,工控设备收到的为错误报文。
在步骤S213中,记录功能码字段值,并判定在接收到该功能码字段值的报文时,表示工控设备收到的为错误报文。
在步骤S214中,结束此次分析。
步骤3,对所述逆向分析结果中的字段属性进行验证。
如图3所示,步骤3开始于步骤S301,开始针对工控协议逆向分析得到的字段属性逐一进行验证分析,然后转步骤S302。
在步骤S302中,判断字段类型是否为定长变值类型,如果是转步骤S303,否则转S304。
在步骤S303中,判断字段的取值是否仅为若干可选项,如果是转步骤S305,否则转S306。
在步骤S304中,判断字段类型是否为定长定值类型,如果是转步骤S307,否则转S314。
在步骤S305中,对该字段值从0开始按序变异,并判断工控设备的响应情况,然后转步骤S308。
在步骤S306中,采用随机变异方式填充字段的内容,并判断工控设备的响应情况,然后转步骤S309。
在步骤S307中,采用随机变异方式填充字段的内容,并判断工控设备的响应情况,然后转步骤S310。
在步骤S308中,判断工控设备是否正确响应,如果是转步骤S311,否则转S314。
在步骤S309中,判断工控设备是否正确响应,如果是转步骤S312,否则转S314。
在步骤S310中,判断工控设备是否正确响应,如果是转步骤S313,否则转S314。
在步骤S311中,将该变异值加入到字段的可选值属性value中,然后转步骤S314。
在步骤S312中,清除该字段的语义信息,然后转步骤S314。
在步骤S313中,将该字段类型修改为定长变值,并将该变异值加入到字段可选值属性value中。
在步骤S314中,保存分析结果,完成此次分析。
步骤4,构建待验证报文结构格式集合,根据所述待验证报文结构格式集合中的报文结构格式构造报文,将构造的报文发送至工控设备,根据与工控设备通信交互的响应结果确定该报文结构是否为符合所述工控协议规范的正确报文格式。
如图4所示,步骤4开始于步骤S401,创建一个待验证报文结构格式集合,用于存储所有变异生成的报文结构格式,然后转步骤S402。
在步骤S402中,将静态分析得到的所有字段分别独立构建报文结构格式,并加入到待验证报文结构格式集合中,然后转步骤S403。
在步骤S403中,判断待验证报文结构格式集合是否增加了新的元素,如果是转步骤S404,否则转S406。
在步骤S404中,从集合中逐个选择一个报文结构格式,与未包含在格式中的其他字段组装成新的报文结构格式,并计算该未包含在格式中的其他字段也存在的平均条件概率,然后转步骤S405。
假定该报文结构格式已经包含的字段为f 1、f 2、...、f n ,新增的字段为f j ,统计在各个字段存在的条件下,字段f j 也存在概率的均值p(f j |f 1, f 2,..., f n ),计算公式如下。
p(f j |f 1, f 2,..., f n )=(p(f j |f 1)+p(f j |f 2)+...+p(f j |f n ))/n。
在步骤S405中,如果平均条件概率超过预设的阈值,将该新组装的报文结构格式加入到待验证报文结构格式集合中,然后转步骤S403;所述预设的阈值可以设置为5%。
在步骤S406中,根据集合中的报文结构格式逐个构造报文,并发送给工控设备,通过工控设备的响应结果,来确定该报文结构是否为符合协议规范的正确报文结构格式,然后转不是S407。
在步骤S407中,完成此次分析。
步骤5,对所述逆向分析结果中的状态机信息进行扩展分析,获得最终的逆向分析结果。
如图5所示,步骤5开始于步骤S501,对静态分析得到的状态机进行验证分析,根据当前状态所包含的状态迁移进行变异,然后转步骤S502。
在步骤S502中,对当前状态所包含的状态迁移中输入报文是否包含功能码字段进行判断,如果是转步骤S503,否则转步骤S507。
在步骤S503中,对输入报文的功能码字段内容进行变异,生成其他可选的功能码值,并产生相应的报文,发送给工控设备,然后转步骤S504。
在步骤S504中,判定工控设备是否产生异常响应,如果是转步骤S505,否则转步骤S506。
在步骤S505中,判定原始功能码与当前状态存在依赖关系,并将其保存到分析结果中,然后转步骤S507。
在步骤S506中,判定原始功能码与当前状态不存在依赖关系,并将其保存到分析结果中,然后转步骤S507。
在步骤S507中,从当前状态所包含的状态迁移中选择一种新的协议格式作为输入报文,生成相应的数据后,发送给工控设备,然后转步骤S508。
在步骤S508中,判定工控设备是否产生异常响应,如果是转步骤S509,否则转步骤S510。
在步骤S509中,判定该新产生的状态迁移不符合协议状态机规范,然后转步骤S511。
在步骤S510中,判定该新产生的状态迁移及新的状态符合协议状态机规范,将其加入到原始状态机中,然后转步骤S511。
在步骤S511中,将所有结果进行保存,并完成此次分析。
综上所述,本发明提供的主被动相结合的私有工控协议逆向分析方法,可以在流量分析结果的基础上,与工控设备进行交互式测量,重点对协议中存在的多字节静态字段、报文结构和状态机中的上下文进行变异,并根据设备的响应报文来确定变异结果是否有效,从而对协议格式、字段属性和状态机的分析结果进行更深入的挖掘,归纳出能够更加真实反映出工控协议全局信息的逆向结果。其能有效解决单纯依靠对流量进行逆向分析得到的结果不够准确和完善的问题,并且可以通过与工控设备的交互,实现对静态分析结果的验证和扩展。
具体实现中,本申请提供计算机存储介质以及对应的数据处理单元,其中,该计算机存储介质能够存储计算机程序,所述计算机程序通过数据处理单元执行时可运行本发明提供的一种主被动相结合的私有工控协议逆向分析方法的发明内容以及各实施例中的部分或全部步骤。所述的存储介质可为磁碟、光盘、只读存储记忆体(read-only memory,ROM)或随机存储记忆体(random access memory,RAM)等。
本领域的技术人员可以清楚地了解到本发明实施例中的技术方案可借助计算机程序以及其对应的通用硬件平台的方式来实现。基于这样的理解,本发明实施例中的技术方案本质上或者说对现有技术做出贡献的部分可以以计算机程序即软件产品的形式体现出来,该计算机程序软件产品可以存储在存储介质中,包括若干指令用以使得一台包含数据处理单元的设备(可以是个人计算机,服务器,单片机,MUU或者网络设备等)执行本发明各个实施例或者实施例的某些部分所述的方法。
本发明提供了一种主被动相结合的私有工控协议逆向分析方法,具体实现该技术方案的方法和途径很多,以上所述仅是本发明的具体实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。本实施例中未明确的各组成部分均可用现有技术加以实现。
Claims (10)
1.一种主被动相结合的私有工控协议逆向分析方法,其特征在于,包括:
步骤1,采集工控设备正常通信过程中的报文,基于静态分析对所述报文进行逆向分析,获得逆向分析结果,所述逆向分析结果包括所述工控协议的报文格式、字段属性和状态机信息;
步骤2,构造错误的报文格式,并产生相应的报文与工控设备进行通信交互;根据是否响应以及响应报文的内容,确定接收到错误数据后工控设备的响应方式;
步骤3,对所述逆向分析结果中的字段属性进行验证;
步骤4,构建待验证报文结构格式集合,根据所述待验证报文结构格式集合中的报文结构格式构造报文,将构造的报文发送至工控设备,根据与工控设备通信交互的响应结果确定该报文结构是否为符合所述工控协议规范的正确报文格式;
步骤5,对所述逆向分析结果中的状态机信息进行扩展分析,获得最终的逆向分析结果。
2.根据权利要求1所述的一种主被动相结合的私有工控协议逆向分析方法,其特征在于,步骤1所述逆向分析结果中的每种报文格式都是由不同类型的字段按序组成,记所述报文格式的表达形式为Q={f 1, f 2,..., f n },其中f i 表示报文格式Q中的第i个字段,n为报文格式所包含的字段数,n ≥ 1,1 ≤ i ≤ n;
每个字段属性信息包括字段类型、最大长度、最小长度、字段语义、字段取值和字段关联的其他字段,记字段属性的表达形式为F=<type, maxlen, minlen, semantic, value,reference>,其中:type表示字段类型,包括定长定值、定长变值和变长变值3种;maxlen表示字段的最大长度,minlen表示字段的最小长度,当字段类型为定长定值或定长变值时,maxlen和minlen相等;semantic表示字段语义,包含了在工控协议中的典型语义字段,包括协议标识、序号、长度、CRC、分隔、时间戳、功能码、报文结构、设备标识和协议代码;value表示字段取值,当字段类型为定长定值或定长变值时有效;reference表示字段所关联的其他字段,当字段语义为长度或CRC形式时,该字段的值根据所关联的其他字段计算得到。
3.根据权利要求2所述的一种主被动相结合的私有工控协议逆向分析方法,其特征在于,步骤1所述逆向分析结果中的状态机表示状态与状态之间的转移过程,包含状态和状态转移两类元素,记状态机的表达形式为S={<s i , q i , q o , s o >},其中s i 表示输入的状态,在初始状态下,工控协议的状态为s 0,q i 表示在状态s i 时接收到的输入报文格式,q o 表示在状态s i 接收到输入报文q i 后所产生的响应报文格式,s o 表示在状态s i 接收到输入报文q i 后工控协议的输出状态,为了对状态机进行简化,当两个输出状态的输入报文格式相同,且输出报文也相同时,这两个输出状态为等价状态,对这两个输出状态进行合并。
4.根据权利要求3所述的一种主被动相结合的私有工控协议逆向分析方法,其特征在于,步骤2包括:根据所述报文格式、字段属性和状态机信息构造错误的数据报文,并将产生的报文发送给工控设备,然后对工控设备的响应情况进行监视,如果工控设备没有返回任何报文,则该工控协议在应对错误报文时,采用丢弃的方式来处理,否则记录相应的报文,并与步骤1中通过静态分析获得的所有报文格式进行匹配。
5.根据权利要求4所述的一种主被动相结合的私有工控协议逆向分析方法,其特征在于,步骤2中所述与步骤1中通过静态分析获得的所有报文格式进行匹配,包括:
如果响应报文与某种报文格式Q相匹配,则查询响应报文格式{f 1, f 2,..., f n }中语义为协议代码的字段,如果存在,则与正确的响应报文协议代码进行比对,若正确的响应报文协议代码为0,则协议代码非0时,表示构造并发送给工控设备的报文为错误报文或者报文格式违反了协议的状态机,若正确的响应报文协议代码不为0,则协议代码为0时,表示构造并发送给工控设备的报文为错误报文或者报文格式违反了协议的状态机;
如果响应报文格式中不存在语义为协议代码的字段,则查询响应报文格式中语义为功能码的字段,并记录该功能码字段值,该字段值表示构造并发送给工控设备的报文为错误报文或者报文格式违反了协议的状态机;
如果响应报文格式中即不存在协议代码字段,也不存在功能码字段,则记录响应报文全部内容,在后续收到该报文时,表示构造并发送给工控设备的报文为错误报文或者报文格式违反了协议的状态机;
如果响应报文与所有报文格式都不匹配,则记录响应报文全部内容,在后续收到该报文时,表示构造并发送给工控设备的报文为错误报文或者报文格式违反了协议的状态机。
6.根据权利要求5所述的一种主被动相结合的私有工控协议逆向分析方法,其特征在于,步骤3包括:
在步骤2确定工控设备响应错误报文方式的基础上,对所述逆向分析结果中的字段属性进行验证,
在字段类型为定长变值,且字段取值value完全随机时,针对字段的内容采用随机变异的方式来填充数据内容,构造报文并发送给工控设备,然后根据工控设备的响应情况来确定该字段是否为步骤1获得的所述逆向分析结果中字段属性所推断的语义,如果响应情况符合步骤2中响应错误报文的结果,则判定步骤1通过静态分析得到的该字段属性结果是正确的,否则该字段属性分析结果是错误的,并将字段的语义信息清除;
在字段类型为定长变值,且字段取值value仅为可选的值时,针对字段的内容从0开始按序变异,构造报文并发送给工控设备,然后根据工控设备的响应情况来确定该字段是否为步骤1静态分析所推断的语义,如果工控设备的响应正确,则将该变异后的值加入到该字段的value属性中;
在字段类型为定长定值时,采用随机变异的方式来填充数据内容,构造报文并发送给工控设备,然后根据工控设备的响应情况来确定该字段是否为步骤1静态分析所推断的语义,如果工控设备的响应正确,则将该字段的类型修改为定长变值,同时在字段的value属性中增加变异后的值。
7.根据权利要求6所述的一种主被动相结合的私有工控协议逆向分析方法,其特征在于,步骤4中构建待验证报文结构格式集合包括:
步骤4.1,创建一个待验证报文结构格式集合,在初始情况下,该集合包含步骤1获得的所述逆向分析结果中报文格式的所有字段独立构成的报文结构格式;
步骤4.2,从待验证报文结构格式集合中逐个挑选新加入的报文结构格式,并与未包含在格式中的其他字段组装成新的报文结构格式,假定该报文结构格式已经包含的字段为f 1、f 2、...、f n ,新增的字段为f j ,统计在各个字段存在的条件下,字段f j 也存在概率的均值p(f j |f 1, f 2,..., f n ),计算公式如下:
p(f j |f 1 , f 2 ,..., f n )=(p(f j |f 1 )+p(f j |f 2 )+...+p(f j |f n ))/n
步骤4.3,对p(f j |f 1, f 2,..., f n )的结果进行判定,如果p(f j |f 1, f 2,..., f n )的计算结果大于预设的阈值,则将该组装的新报文结构格式加入到待验证报文结构格式集合中;
步骤4.4,重复步骤4.2至4.3,直至没有新增的报文结构格式为止;
在完成待验证报文结构格式集合的构建后,开始根据集合中的报文结构格式逐个构造报文,并发送给工控设备,通过工控设备的响应结果,确定该报文结构是否为符合协议规范的正确报文格式,如果工控设备响应正常,则该报文结构是正确的,否则该报文结构是错误的。
8.根据权利要求7所述的一种主被动相结合的私有工控协议逆向分析方法,其特征在于,步骤5包括:
在报文格式和字段属性验证分析结果的基础上,根据步骤1获得的所述逆向分析结果中的状态机,对协议的通信过程进行变异,变异方式为在不同的状态下,选择状态机中不存在的报文格式,按照格式填充相应的数据内容,然后发送给工控设备,并根据工控设备的响应情况来判断状态机中是否存在新的状态转移,如果存在新的状态转移,则对步骤1获得的所述逆向分析结果中的初步状态机结果进行扩展。
9.根据权利要求8所述的一种主被动相结合的私有工控协议逆向分析方法,其特征在于,步骤5还包括:对步骤1获得的所述逆向分析结果中的功能码字段内容的先后次序进行变异,生成相应的报文后发送给工控设备,并根据相应结果来判定功能码内容之间是否存在先后次序的依赖性,如果工控设备响应正常,则说明各个功能码之间不存在状态依赖,否则说明各个功能码之间存在状态依赖,并需要按照相应的顺序进行状态转移,从而实现对工控协议状态机的扩展分析。
10.根据权利要求9所述的一种主被动相结合的私有工控协议逆向分析方法,其特征在于,步骤1中采用Wireshark抓包工具,在工控设备正常通信过程中采集工控设备所产生的交互报文;采用Needleman-Wunsch序列比对算法对所述报文进行逆向分析。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210971580.3A CN115065623B (zh) | 2022-08-15 | 2022-08-15 | 一种主被动相结合的私有工控协议逆向分析方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210971580.3A CN115065623B (zh) | 2022-08-15 | 2022-08-15 | 一种主被动相结合的私有工控协议逆向分析方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN115065623A true CN115065623A (zh) | 2022-09-16 |
CN115065623B CN115065623B (zh) | 2022-11-01 |
Family
ID=83208033
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210971580.3A Active CN115065623B (zh) | 2022-08-15 | 2022-08-15 | 一种主被动相结合的私有工控协议逆向分析方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115065623B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115883398A (zh) * | 2022-11-25 | 2023-03-31 | 电子科技大学 | 一种针对私有网络协议格式和状态的逆向分析方法及装置 |
CN117041362A (zh) * | 2023-08-17 | 2023-11-10 | 浙江大学 | 一种针对工控协议语义逆向结果的校验方法及系统 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104168288A (zh) * | 2014-08-27 | 2014-11-26 | 中国科学院软件研究所 | 一种基于协议逆向解析的自动化漏洞挖掘系统及方法 |
CN110213130A (zh) * | 2019-06-03 | 2019-09-06 | 南京莱克贝尔信息技术有限公司 | 一种基于迭代优化的工控协议格式分析方法 |
CN111723181A (zh) * | 2020-06-17 | 2020-09-29 | 国家计算机网络与信息安全管理中心 | 一种基于主动学习的工控协议逆向分析方法 |
CN114281676A (zh) * | 2021-11-27 | 2022-04-05 | 中国人民解放军战略支援部队信息工程大学 | 针对工控私有协议的黑盒模糊测试方法及系统 |
-
2022
- 2022-08-15 CN CN202210971580.3A patent/CN115065623B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104168288A (zh) * | 2014-08-27 | 2014-11-26 | 中国科学院软件研究所 | 一种基于协议逆向解析的自动化漏洞挖掘系统及方法 |
CN110213130A (zh) * | 2019-06-03 | 2019-09-06 | 南京莱克贝尔信息技术有限公司 | 一种基于迭代优化的工控协议格式分析方法 |
CN111723181A (zh) * | 2020-06-17 | 2020-09-29 | 国家计算机网络与信息安全管理中心 | 一种基于主动学习的工控协议逆向分析方法 |
CN114281676A (zh) * | 2021-11-27 | 2022-04-05 | 中国人民解放军战略支援部队信息工程大学 | 针对工控私有协议的黑盒模糊测试方法及系统 |
Non-Patent Citations (1)
Title |
---|
程必成 等: "非标工业控制协议格式逆向方法研究", 《电子技术应用》 * |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115883398A (zh) * | 2022-11-25 | 2023-03-31 | 电子科技大学 | 一种针对私有网络协议格式和状态的逆向分析方法及装置 |
CN115883398B (zh) * | 2022-11-25 | 2024-03-22 | 电子科技大学 | 一种针对私有网络协议格式和状态的逆向分析方法及装置 |
CN117041362A (zh) * | 2023-08-17 | 2023-11-10 | 浙江大学 | 一种针对工控协议语义逆向结果的校验方法及系统 |
CN117041362B (zh) * | 2023-08-17 | 2024-04-23 | 浙江大学 | 一种针对工控协议语义逆向结果的校验方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN115065623B (zh) | 2022-11-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN115065623B (zh) | 一种主被动相结合的私有工控协议逆向分析方法 | |
US20210344578A1 (en) | Method and system for classifying a protocol message in a data communication network | |
US20210279644A1 (en) | Modification of Machine Learning Model Ensembles Based on User Feedback | |
CN111447227B (zh) | 物联网设备的协议解析方法及装置 | |
CN111866016B (zh) | 日志的分析方法及系统 | |
US7802009B2 (en) | Automatic reverse engineering of message formats from network traces | |
US20200351191A1 (en) | Automatic protocol test method by reverse engineering from packet traces to extended finite state machine | |
CN111123888A (zh) | 一种工控协议测试方法、系统及电子设备和存储介质 | |
CN112055003B (zh) | 一种基于字节长度分类的私有协议模糊测试用例生成方法 | |
CN102123058A (zh) | 一种对网络协议解码器进行测试的测试设备和方法 | |
CN112702235A (zh) | 一种对未知协议自动化逆向分析的方法 | |
CN113704328B (zh) | 基于人工智能的用户行为大数据挖掘方法及系统 | |
EP4072066A1 (en) | Method for automatic derivation of attack paths in a network | |
CN113114680A (zh) | 用于文件上传漏洞的检测方法和检测装置 | |
CN113704772A (zh) | 基于用户行为大数据挖掘的安全防护处理方法及系统 | |
CN117749535B (zh) | 一种网络流量异常检测方法及装置 | |
KR102069142B1 (ko) | 명확한 프로토콜 사양 자동 추출을 위한 장치 및 방법 | |
CN117201188B (zh) | 基于大数据的it安全运行风险预测方法、系统和介质 | |
CN111625448A (zh) | 协议包生成方法、装置、设备及存储介质 | |
CN117201601A (zh) | 物联网设备接入方法、装置、设备及存储介质 | |
Whalen et al. | Hidden markov models for automated protocol learning | |
CN112799956B (zh) | 资产识别能力测试方法、装置及系统装置 | |
CN112541548B (zh) | 关系网络的生成方法、装置、计算机设备及存储介质 | |
CN112543186B (zh) | 一种网络行为检测方法、装置、存储介质及电子设备 | |
CN111901310A (zh) | 一种网站安全测试方法、装置、电子设备及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |