一种基于协议状态图深度遍历的工控漏洞挖掘方法与流程

文档序号:12730806阅读:348来源:国知局
一种基于协议状态图深度遍历的工控漏洞挖掘方法与流程

本发明涉及网络协议安全、物联网/工业控制系统安全及安全测试技术领域,尤其涉及一种基于协议状态图深度遍历的安全漏洞挖掘方法。



背景技术:

随着物联网、智慧城市、智能电网的普及,近年来针对物联网及工业控制系统设备的各种网络攻击事件日益增多,暴露出物联网及工业控制系统设备中存在大量的安全漏洞。主动发现物联网及工业控制系统设备中存在的安全漏洞并进行修复成为了一项重要的安全防护措施。

由于物联网设备及工业控制系统设备具有封闭性、难以调试、系统实时性高、难以仿真等特点,传统的漏洞挖掘方法,比如逆向分析、符号执行、污点跟踪等方法很难取得较好的效果。为了能有效地发现物联网及工业控制系统设备中存在的安全漏洞,需要一套专门针对物联网及工业控制系统设备的漏洞挖掘系统。

本发明提出一种基于协议状态图深度遍历的的工控漏洞挖掘方法,通过远程fuzz测试来实现,主要用来有效发现物联网及工业控制系统设备中存在的安全漏洞。Fuzz测试也叫“模糊测试”,是一种挖掘软件安全漏洞、检测软件健壮性的黑盒测试,它通过向软件输入非法的字段,观测被测试软件是否异常而实现。



技术实现要素:

本发明解决的问题是针对物联网及工业控制系统中使用的网络通信协议,提出一种基于协议状态图深度遍历的工控漏洞挖掘方法,根据数据包内协议基础块间的约束关联关系及数据包间的状态转移关联关系构造协议状态图,基于协议状态图进行远程fuzz测试,达到有效发现物联网及工业控制系统设备中存在的安全缺陷的目的。

本发明解决上述问题的技术方案如下:

一种基于协议状态图深度遍历的工控漏洞挖掘方法,首先获取目标设备的网络数据包,对网络数据包进行预处理得到待分析数据包集合;对待分析数据包集合中的数据包进行分块处理得到大量协议基础块,提取单数据包内基础块间的约束关联关系及多数据包间的状态转移关联关系,并以此为基础构造协议状态图;按深度优先方式对协议状态图进行遍历,生成并向目标设备发送相应的畸形数据包;同时探测目标设备是否存活,若目标设备崩溃则可根据畸形数据包编写POC(漏洞验证)脚本进行漏洞验证从而发现目标设备中存在的安全漏洞;重复畸形数据包的发送与目标存活探测的过程,直到协议状态图遍历完毕。

上述方法的具体步骤包括:

步骤1,通过与目标设备进行交互,利用数据包嗅探器抓取目标设备的网络数据包;

步骤2,对捕获的网络数据包进行预处理,得到待分析数据包集合;

步骤3,利用协议自动化分析方法,对集合中的网络数据包进行分块处理,得到大量的协议基础块;

步骤4,结合自动化分析及人工分析的方式,对网络数据包内的协议基础块进行函数关联,获得约束关系,对网络数据包之间的转移关系进行关联,获得状态转移关联关系;

步骤5,以协议基础块、块与块之间的约束关联关系及数据包之间的状态转移关联关系为基础构造协议状态图,其中,每个节点为协议的一个状态,节点属性为协议基础块及其约束关联关系,每条边为协议状态间的状态转移关联关系;

步骤6,按深度优先方式对协议状态图进行遍历,并设置最大遍历深度max_depth,依据节点内的约束关联关系及节点之间的状态转移关联关系生成畸形数据包并发送;所述畸形数据包是指正常的工控数据包的部分字段经过随机变化之后所产生的工控数据包;

步骤7,向目标系统发送探测数据包,探测目标是否存活,若目标崩溃,则可根据畸形数据包编写POC脚本进行漏洞验证,从而发现目标设备中存在的安全漏洞;

步骤8,若达到最大遍历深度max_depth,则向上回溯,跳转到步骤6,继续对协议状态图进行遍历,若整个协议状态图遍历完毕,则停止。

在上述技术方案的基础上,本发明还可以做如下改进。

进一步,所述步骤1中对网络数据包的获取方法包括但不限于使用Wireshark、Tcpdump、Burpsuite、Fiddler、Scapy、libpcap等工具,针对的目标设备包括但不限于网络摄像头、智能路由器、智能灯泡、PLC等,针对的网络协议包括但不限于TCP协议、UDP协议、FTP协议、Telnet协议、HTTP协议、RTSP协议、S7协议及MODBUS协议等;

进一步,所述步骤2中对网络数据包的预处理过程,包括但不限于过滤掉无关协议的数据包、筛除对fuzz测试无价值的数据包以及对多次出现的重复网络数据包的去重等;

进一步,所述步骤3中对网络数据包的分块包括但不限于协议请求头及请求数据、协议关键字、协议分隔符及协议内容等;

进一步,所述步骤4中协议基础块之间的约束关联关系包括但不限于长度约束、校验和约束、字段取值约束等,网络数据包之间的转移关联关系包括但不限于认证约束、字段取值约束、状态切换约束等;其中,长度约束是指数据包中有一个字段,其值为该数据包的长度大小;校验和约束是指数据包中有一个字段,其值为该数据包的校验和;字段取值约束是指数据包中有一个字段,其值随着协议版本等的类型而取不同的值;认证约束是指,部分协议在交互前,需要相互进行身份认证;状态切换约束是指协议状态机中的某个状态需要发送特定的数据包才能到达该状态。

进一步,所述步骤7中探测目标系统是否存活的方法包括但不限于发送ICMP探测数据包、发送TCP SYN探测数据包、发送TCP FIN数据包、发送TCP探测数据包、发送UDP探测数据包等。

本发明的有益效果是:

本发明构建的系统通过挖掘数据包内基础块之间的约束关联关系及数据包之间的状态转移关联关系,基于协议状态图进行fuzz测试,能够有效地发现物联网及工业控制系统设备中存在的安全漏洞,解决了传统的漏洞挖掘方法有效性较差的问题。

附图说明

图1为本发明实施例中基于协议状态图深度遍历对目标进行fuzz测试的流程图;

图2为本发明所述基于RTSP协议状态图对摄像头进行fuzz测试的流程图;

图3为本发明所述针对RTSP协议构建的协议状态图。

具体实施方式

以下结合附图对本发明的原理和特征进行描述,所举实例只用于解释本发明,并非用于限定本发明的范围。

本实施例涉及一种基于协议状态图深度遍历的工控漏洞挖掘方法,主要是通过获取目标设备的网络数据包并进行预处理得到待分析数据包集合,对集合中的数据包进行分块。结合自动化分析及人工分析的方式获取数据包内基础块之间的约束关联关系及数据包间的状态转移关联关系,并以此为基础构造协议状态图。按深度优先方式遍历协议图进行fuzz测试,并对目标是否存活进行探测,以达到有效发现物联网及工业控制系统设备中存在的安全缺陷的目的。

根据图1给出的fuzz测试流程图,本实施例的方法具体包括以下步骤:

步骤1,通过与目标设备进行交互,利用数据包嗅探器抓取目标设备的网络数据包;

步骤2,对捕获的网络数据包进行预处理操作包括过滤、去重等,得到待分析数据包集合;

步骤3,利用协议自动化分析方法,对网络数据包的协议请求头、请求数据、协议关键字、协议分隔符及协议字段值等进行分块,得到大量的协议基础块;

步骤4,结合自动化分析及人工分析的方式,对网络数据包内的协议基础块进行函数关联,获得约束关系如长度约束、校验和约束、取值约束等,对网络数据包之间的转移关系进行关联,获得状态转移关联关系如认证条件等;

步骤5,以协议基础块、块与块之间的约束关联关系及数据包之间的状态转移关联关系为基础构造协议状态图,其中,每个节点为协议的一个状态,节点属性为协议基础块及其约束关联关系,每条边为协议状态间的状态转移关联关系;

步骤6,按深度优先方式对协议状态图进行遍历,并设置最大遍历深度max_depth,依据节点内的约束关联关系及节点之间的状态转移关联关系生成畸形数据包并发送;

步骤7,向目标系统发送探测数据包,探测目标是否存活,若目标崩溃,则可根据畸形数据包编写POC脚本进行漏洞验证;

步骤8,若达到最大遍历深度max_depth,则向上回溯,跳转到步骤6,继续对协议状态图进行遍历,若整个协议状态图遍历完毕,则停止。

下面以利用RTSP协议对网络摄像头进行fuzz测试为例详细说明本实施例的测试流程。其具体实现过程如图2所示。

一、网络数据包采集与预处理过程

首先登入到网络摄像头的配置管理界面,进行视频流实时预览,同时利用wireshark工具捕获数据包。之后,退出网络摄像头管理界面,然后停止数据包的捕获。

对Wireshark中捕获的数据包进行预处理操作,设置过滤条件为“rtsp”筛选出RTSP协议的数据包,保存结果得到待分析数据包集合。

二、数据包分块与协议状态图构造过程

对协议数据包进行自动化分析,利用分隔符“\r\n\r\n”分隔开RTSP协议中的请求头与请求数据,再利用分隔符“\r\n”将请求头中的内容进行分块,再利用分隔符“:”进一步划分请求头中的内容。结合自动化分析及人工分析的方法,对数据包内的基础块进行函数关联,获得基础块之间的取值约束、长度约束等关系,如“Conetent-Length”字段的值依赖于请求数据部分的长度,对数据包间的转移关系进行关联,获得状态转移关联关系如认证条件、nc取值约束等。

以RTSP协议中的SETUP请求为例,其原始请求内容如下。

进行分块处理后的结果如下。

其中,name字段为块的名字,data字段为其内容,包含pieces字段及event_handler字段,pieces字段中包含各个基础块的内容如名字、值及处理函数的名称,event_handler字段中包含基础块间的处理函数名称及对应参数。

上例展示了数据包内基础块之间的取值约束关系及数据包间的取值依赖关系。假设describe数据包的索引号为1,setup数据包的基础块中nonce字段的取值依赖于dedcribe的基础块中nonce的值,而setup数据包的基础块中response字段的取值又依赖于基础块中action、username、realm、nonce及uri等字段的值。

以数据包内基础块之间的约束关联关系及数据包间的状态转移关联关系为基础构造协议状态图,RTSP协议的协议状态图如图3所示。根据RTSP协议关键字可区分出OPTIONS、DESCRIBE、SETUP、PLAY、TEARDOWN等状态,对每个状态下的数据包进行分块处理,得到节点的相关属性。当一个状态具有不同的属性时,如包头字段或uri字段不一样时,则对该状态进行区分,如DESCRIBE状态可分为DESCRIBE1(未经认证)和DESCRIBE2(经过认证)两个状态,经过处理后得到协议状态图节点集合;追踪数据包中的数据流如TCP数据流或session会话流,分析状态之间的依赖关系,若存在依赖关系则将其保存为边的属性,如从Describe1状态切换到Describe2状态时需要进行Authorization会话认证,认证成功则切换到Describe2状态,否则继续停留在Describe1状态。图3中,Authorization表示认证;Username or password wrong表示用户名或密码错误;usertoken表示用户令牌;sessions表示会话;Cmd type:get表示命令类型:获取;Cmd type:set表示命令类型:设置;Cmd type:teardown表示命令类型:断开。

三、协议状态图遍历及目标设备存活探测过程

按深度优先方式遍历协议状态图,并设置最大遍历深度max_depth,依据节点的属性及节点间的关联关系生成并发送相应的畸形数据包。若发送畸形数据包后未收到来自目标设备的响应包,则发送TCP SYN探测数据包探测目标设备是否存活,若收到来自目标设备的TCP SYN+ACK数据包,说明目标设备没有崩溃,反之则说明目标已崩溃,形成一条异常记录并保存之前发送的畸形数据包,根据该畸形数据包编写POC脚本对“漏洞”进行验证。探测完毕后,若达到最大遍历深度max_depth时,则向上回溯继续遍历协议状态图,若整个协议状态图遍历完毕,则停止。

以上实施例仅用以说明本发明的技术方案而非对其进行限制,本领域的普通技术人员可以对本发明的技术方案进行修改或者等同替换,而不脱离本发明的精神和范围,本发明的保护范围应以权利要求书所述为准。

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