CN108255711A - 一种基于污点分析的plc固件模糊测试***及测试方法 - Google Patents
一种基于污点分析的plc固件模糊测试***及测试方法 Download PDFInfo
- Publication number
- CN108255711A CN108255711A CN201711485758.9A CN201711485758A CN108255711A CN 108255711 A CN108255711 A CN 108255711A CN 201711485758 A CN201711485758 A CN 201711485758A CN 108255711 A CN108255711 A CN 108255711A
- Authority
- CN
- China
- Prior art keywords
- stain
- fuzz testing
- plc
- firmwares
- module
- 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.)
- Pending
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3684—Test management for test design, e.g. generating new test cases
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3688—Test management for test execution, e.g. scheduling of test suites
-
- 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/08—Monitoring or testing based on specific metrics, e.g. QoS, energy consumption or environmental parameters
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Environmental & Geological Engineering (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明涉及工业控制***安全领域,具体涉及一种基于污点分析的PLC固件模糊测试***及测试方法,测试***包括仿真环境端和模糊测试端,模糊测试端可构造正常网络数据包和模糊测试用例,并与仿真环境端建立通信连接;所述仿真环境端包括仿真平台及子模块,所述子模块包括:网卡;控制模块;污点源标记模块;污点跟踪模块;敏感字域确定模块;异常监视记录模块。本发明以PLC固件为研究对象,结合污点分析与模糊测试方法,在仿真模式下对输入到PLC中的网络协议数据包进行污点源标记与污点分析,根据污点分析过程标记出的数据包敏感字域,进行精准的数据变异,构造模糊测试用例,从而提高对PLC固件的模糊测试的针对性和穿透性。
Description
技术领域
本发明涉及工业控制***安全领域,具体涉及一种基于污点分析的PLC固件模糊测试***及测试方法。
背景技术
在“工业4.0”的发展浪潮下,网络化和信息化的融合发展使得工业控制***智能化程度提高,提高生产过程效率的同时,也使得原本封闭的工业控制***暴露了诸多问题。工业控制***设备中结合了诸多IT***中的解决方案:如基于IP地址的网络通信等,这些技术无疑给工控设备带来了传统信息世界中的安全问题。PLC作为工业控制***中连接信息层和物理层的关键现场设备,其安全性在整个***中尤为重要。PLC本质上来说是结合了IT***技术的嵌入式设备,本身较为封闭,处于不设防状态。在震网病毒爆发之前,工业控制***安全主要集中在SCADA的和HMI,这次高规模的攻击,彻底的暴露出了工业控制***中现场设备的安全问题。而目前而言,针对工业控制***嵌入式设备的安全研究与解决方案却较少。
目前,漏洞挖掘方法主要分为白盒测试、黑盒测试和灰盒测试。白盒测试主要为对程序的源代码进行静态分析,可分析出代码中的路径和分支,需要获取漏洞挖掘对象的源代码。黑盒测试是指在被测对象内部完全不可知的情况下进行的模糊测试,通过构造输入,同时监测输出来判断被测对象异常。黑盒测试由于缺乏足够的测试依据,存在一定的盲目性。灰盒测试则是在白盒测试和黑盒测试之间浮动的,它既包含黑盒测试的操作过程,又需要通过逆向工程获得的支持。就目前的大量研究来看,工控***漏洞挖掘相关研究多以工控协议与通信***作为研究对象,选用模糊测试作为漏洞挖掘或检测方法,属于黑盒测试。
现有技术中,申请号为CN201510925607.5的专利公开了一种工业环境漏洞挖掘设备,该方法通过向应用提供非预期的输入并监控外部设备输出中的异常来发现被测设备的故障,本质上而言,是针对被测设备所用网络协议的模糊测试;申请号为CN201510705423.8的专利公开了一种基于模糊测试的电网工控协议漏洞挖掘***和方法,该方法通过采集电网工控协议的数据包流量,从截获的流量中解析出可变域和不可变域,针对可变域进行变异生成模糊测试用例;申请号为CN201610231822.X的专利公开了基于模糊测试的工控协议漏洞挖掘***,该***在基本的模糊测试方法与流程上增加了测试用例反馈机制,通过调整算法提高漏洞挖掘的效率。
但是,这些发明主要依赖模糊测试方法,存在黑盒测试的弊端,仍存在测试用例不精确,测试效率较低等问题。
发明内容
本发明的目的是提供一种可有效提高对PLC固件的模糊测试的针对性和穿透性的PLC固件模糊测试***及测试方法。
上述目的是通过如下技术方案实现:一种基于污点分析的PLC固件模糊测试***,包括仿真环境端和模糊测试端,所述模糊测试端可构造正常网络数据包,以及接收仿真环境端反馈的包括敏感字域的信息后构造精确变异后的模糊测试用例,并与仿真环境端建立通信连接;所述仿真环境端包括仿真平台以及搭建在仿真平台上的子模块,所述子模块包括:
网卡:负责仿真环境端与模糊测试端之间的通信;
控制模块:用于仿真环境端在污点分析状态以及模糊测试执行状态之间的控制切换;
启动污点分析状态时,控制模块从网卡接收模糊测试端发送的正常网络数据包,污点源标记模块、污点跟踪模块和敏感字域确定模块处于工作状态,执行污点分析过程;启动模糊测试执行状态时,网卡接收模糊测试端发送的精确变异后的模糊测试用例数据包,模糊测试用例直接输入至运行状态下被测的PLC固件,异常监视记录模块处于工作状态。
污点源标记模块:接收控制模块发送的来自模糊测试端的正常网络数据包,并对其进行污点源标记;
对于PLC固件而言,外部输入数据主要是网络协议数据包,该模块在虚拟网卡接收模糊测试端发送的输入数据时,对数据包进行以字节为单位的污点源标记。
污点跟踪模块:按照污点传播规则,对仿真平台中执行的每条污点操作指令进行跟踪,记录途径污点操作相关指令的污点源及其危险权值;
优选还记录相关指令信息、指令地址、指令内容、污点传播状态变化等。
敏感字域确定模块:根据污点跟踪模块记录的污点源及其危险权值,筛选出危险值达到阈值的污点源,并将其作为敏感字域反馈至模糊测试端,作为重点变异字域;
异常监视记录模块:仿真环境端在模糊测试执行状态下,异常监视记录模块对接收模糊测试用例输入的PLC固件进行指令级监控,监测与记录PLC固件运行状态,出现异常进行记录并报警。
本发明以PLC固件为研究对象,结合污点分析与模糊测试方法,在仿真模式下对输入到PLC中的网络协议数据包进行污点源标记与污点分析,根据污点分析过程标记出的数据包敏感字域,进行精准的数据变异,构造模糊测试用例,从而提高对PLC固件的模糊测试的针对性和穿透性。
作为优选,进一步的技术方案是:所述模糊测试端包括:
通信协议格式解析模块:针对被测的PLC固件中包含的网络服务器,如FTPServer,Web Server等,对预定的通信协议进行格式解析,形成协议脚本并构造正常网络数据包;
异常元素库:储存异常数据元素;异常数据元素可分为以下几类:超长字符串,如AAA…;格式化字符串,如&、%、\等;数值边界值,如FFFF等。
测试用例生成模块:接收仿真环境端的反馈的包括敏感字域的信息,利用协议脚本,将异常元素库中的异常数据元素数据***仿真环境端的反馈的敏感字域中,并按照协议格式进行封装形成精确变异后的模糊测试用例;
模糊测试执行模块:对模糊测试用例进行管理并控制网络数据收发模块的数据收发速率,记录测试用例执行信息;
具体还包括对模糊测试用例进行编号管理。
网络数据收发模块:与仿真环境端的网卡建立通信连接,进行正常网络数据包以及模糊测试用例的数据包的收发。
作为优选,进一步的技术方案是:所述污点操作指令至少包括函数调用指令、内存读写指令和敏感函数参数传递指令;制定的污点传播规则如下:对于函数调用指令,如果函数目的地址被污染源污染,则对应污染源权值危险递增;如果函数为敏感函数,且敏感函数参数被污点源污染,则对应污点源危险权值递增;对于内存读写指令,如果内存访问的地址被污染源污染,则对应污染源危险权值递增。
对于污点跟踪模块中提到的污点传播规则与污点操作指令,PLC固件一般采用的是Power PC指令集或MIPS指令集,PLC固件漏洞的产生有部分原因是由于固件对外部异常输入数据处理不当,使得函数调用、内存访问、敏感函数参数调用过程中受到污点源的影响,对于函数调用指令,程序在跳转、调用时,目的地址可能依赖于污点源,导致程序内任意代码执行。常见的函数调用指令有:mtctr,mftcr等。对于内存读写指令,访问地址可能依赖于污染源,导致读写访问的内存不存在,引发读写异常或关键数据破坏。常见的内存读写指令有:lwz,lbz,lmw,stw,stb,sth等。对于敏感函数参数传递指令,参数可能依赖于污点源,引发缓冲区溢出等问题。常见的敏感函数有:strcpy,sprintf,malloc,memcpy等。
作为优选,进一步的技术方案是:所述仿真平台由QEMU构造并提供PLC固件运行所需的硬件架构及指令集环境。
在仿真环境端,PLC固件在QEMU提供的仿真环境中运行,借助QEMU动态平台的污点跟踪和指令级跟踪功能,以网络通信数据为输入数据,对其进行污点源标记,并对QEMU中虚拟CPU执行的每条污点操作指令进行跟踪。通过污点分析,对污点源中的敏感字域进行筛选与判定,之后,模糊测试端通过通信协议格式解析模块,将异常元素库中的数据***协议敏感字域,通过测试用例生成模块产生大量有针对性的异常模糊测试用例。通过模糊测试执行模块,控制网络数据收发模块与仿真环境端网卡进行通信,将模糊测试用例发送至运行状态下的PLC固件中,同时通过异常监视与记录模块监测PLC固件运行状态,异常出现时进行报警和记录。
本发明还提供一种基于污点分析的PLC固件模糊测试方法,通过上述任一所述的基于污点分析的PLC固件模糊测试***实现,包括如下步骤:
S1:获取PLC固件;
S2:确定PLC固件依赖的指令集架构;
S3:搭建仿真平台并构建子模块;
S4:控制模块启动仿真环境端执行污点分析状态,进入污点分析流程:
S4.1:模糊测试端构造正常的网络数据包,并以此作为种子文件通过发送至仿真环境端的网卡;
S4.2:污点源标记模块接收控制模块发送种子文件并以字节为单位标记污点源;
S4.3:污点跟踪模块对PLC固件进行指令级监视,根据标定的污点操作指令,跟踪污点源在PLC固件中的传播路径,将最终得到的污点源传播路径,污点源的危险权值的结果传递给敏感字域确定模块;
S4.4:敏感字域确定模块根据污点源的危险权值,筛选出种子文件中危险权值达到阈值的污点源,作为模糊测试的敏感字域;
S5:控制模块启动仿真环境端执行模糊测试执行状态,进入模糊测试流程:
S5.1:模糊测试端接收仿真环境端反馈的敏感字域,将其作为变异字段信息,利用变异字段信息构造多个精确变异后的模糊测试用例;
S5.2:对模糊测试用例按照其危险权值大小进行排序,并编号;
S5.3:将模糊测试用例逐一发送至仿真环境端,网卡将模糊测试用例直接输入至运行中的PLC固件,异常监视记录模块监视固件PLC运行状态,当PLC固件异常时,异常监视记录模块进行记录并保存该模糊测试用例的编号,并报警。
本发明与现有技术相比,有益效果体现在:本发明采用启发式测试用例生成,测试用例准确性高,采用污点分析的方法,从指令级别跟踪外部输入在PLC固件中的运行情况,确定出输入数据中的敏感字域,为模糊用例生成提供了启发,表现出高针对性与高准确性,不仅提高了测试用例的有效性,也提高了模糊测试的效率。同时采用自动化模糊测试,可根据协议脚本生成大量变异的测试用例,并对PLC固件进行自动化的测试,测试效率高。另外测试类型可扩展,根据PLC开放的网络传输服务,协议脚本可生成多种网络数据包,可对PLC中所用的多种网络通信服务器进行漏洞挖掘。
作为优选,进一步的技术方案是:步骤S5.3中优先执行危险权值高的模糊测试用例的测试。
作为优选,进一步的技术方案是:步骤S2中使用IDA工具对PLC固件进行反汇编,再与PLC固件采用的指令架构对比,进而确定PLC固件依赖的指令集架构。
作为优选,进一步的技术方案是:步骤S3中基于QEMU构造仿真平台,进行用户仿真模式并对PLC固件中单个服务或程序进行独立仿真,提供从指令、进程等多个层次的监控,准确跟踪固件运行状态。
由于PLC固件中主要漏洞集中为网络服务器,如HTTP服务、FTP服务,且漏洞存在形式服务相对独立,所以只需进行用户仿真模式对PLC固件中单个服务或程序进行独立仿真。
作为优选,进一步的技术方案是:步骤S4.1中,模糊测试端的通信协议格式解析模块针对被测的PLC固件中包含的网络服务器,对预定的通信协议进行格式解析,形成协议脚本并构造正常网络数据包。
具体的一种实现方式中,所述正常网络数据包为Modbus-TCP通信报文。
作为优选,进一步的技术方案是:步骤S5.1中,测试用例生成模块接收仿真环境端的反馈的包括敏感字域的信息,并将接收敏感字域作为变异字段信息,利用协议脚本,将异常元素库中的异常数据元素数据***仿真环境端的反馈的变异字段信息中,并按照协议格式进行封装形成精确变异后的模糊测试用例。
作为优选,进一步的技术方案是:步骤S1中获取PLC固件的方法包括:直接从PLC调试端口读取;或使用芯片编程器从flash存储器直接读取;或从厂商网页下载固件更新文件;或在固件更新时捕获网络流量。
附图说明
构成本发明的一部分的附图用来提供对本发明的进一步理解,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。
图1为本发明一种实施方式下的入侵检测***安全规则的自动生成方法的工作流程图;
图2为本发明一种实施方式下所涉及的栈式稀疏自编码器的深度学习的流程示意图。
具体实施方式
下面结合附图对本发明进行详细描述,本部分的描述仅是示范性和解释性,不应对本发明的保护范围有任何的限制作用。此外,本领域技术人员根据本文件的描述,可以对本文件中实施例中以及不同实施例中的特征进行相应组合。
本发明实施例如下,参照图1和图2,一种基于污点分析的PLC固件模糊测试***,包括仿真环境端和模糊测试端,所述模糊测试端可构造正常网络数据包,以及接收仿真环境端反馈的包括敏感字域的信息后构造精确变异后的模糊测试用例,并与仿真环境端建立通信连接;所述仿真环境端包括仿真平台以及搭建在仿真平台上的子模块,所述子模块包括:
网卡:负责仿真环境端与模糊测试端之间的通信;
控制模块:用于仿真环境端在污点分析状态以及模糊测试执行状态之间的控制切换;
启动污点分析状态时,控制模块从网卡接收模糊测试端发送的正常网络数据包,污点源标记模块、污点跟踪模块和敏感字域确定模块处于工作状态,执行污点分析过程;启动模糊测试执行状态时,网卡接收模糊测试端发送的精确变异后的模糊测试用例数据包,模糊测试用例直接输入至运行状态下被测的PLC固件,异常监视记录模块处于工作状态。
污点源标记模块:接收控制模块发送的来自模糊测试端的正常网络数据包,并对其进行污点源标记;
对于PLC固件而言,外部输入数据主要是网络协议数据包,该模块在虚拟网卡接收模糊测试端发送的输入数据时,对数据包进行以字节为单位的污点源标记。
污点跟踪模块:按照污点传播规则,对仿真平台中执行的每条污点操作指令进行跟踪,记录途径污点操作相关指令的污点源及其危险权值;
优选还记录相关指令信息、指令地址、指令内容、污点传播状态变化等。
敏感字域确定模块:根据污点跟踪模块记录的污点源及其危险权值,筛选出危险值达到阈值的污点源,并将其作为敏感字域反馈至模糊测试端,作为重点变异字域;
异常监视记录模块:仿真环境端在模糊测试执行状态下,异常监视记录模块对接收模糊测试用例输入的PLC固件进行指令级监控,监测与记录PLC固件运行状态,出现异常进行记录并报警。
本发明以PLC固件为研究对象,结合污点分析与模糊测试方法,在仿真模式下对输入到PLC中的网络协议数据包进行污点源标记与污点分析,根据污点分析过程标记出的数据包敏感字域,进行精准的数据变异,构造模糊测试用例,从而提高对PLC固件的模糊测试的针对性和穿透性。
在上述实施例的基础上,本发明另一实施例中,如图1和图2,所述模糊测试端包括:
通信协议格式解析模块:针对被测的PLC固件中包含的网络服务器,如FTPServer,Web Server等,对预定的通信协议进行格式解析,形成协议脚本并构造正常网络数据包;
异常元素库:储存异常数据元素;异常数据元素可分为以下几类:超长字符串,如AAA…;格式化字符串,如&、%、\等;数值边界值,如FFFF等。
测试用例生成模块:接收仿真环境端的反馈的包括敏感字域的信息,利用协议脚本,将异常元素库中的异常数据元素数据***仿真环境端的反馈的敏感字域中,并按照协议格式进行封装形成精确变异后的模糊测试用例;
模糊测试执行模块:对模糊测试用例进行管理并控制网络数据收发模块的数据收发速率,记录测试用例执行信息;
具体还包括对模糊测试用例进行编号管理。
网络数据收发模块:与仿真环境端的网卡建立通信连接,进行正常网络数据包以及模糊测试用例的数据包的收发。
在上述实施例的基础上,本发明另一实施例中,所述污点操作指令至少包括函数调用指令、内存读写指令和敏感函数参数传递指令;制定的污点传播规则如下:对于函数调用指令,如果函数目的地址被污染源污染,则对应污染源权值危险递增;如果函数为敏感函数,且敏感函数参数被污点源污染,则对应污点源危险权值递增;对于内存读写指令,如果内存访问的地址被污染源污染,则对应污染源危险权值递增。
对于污点跟踪模块中提到的污点传播规则与污点操作指令,PLC固件一般采用的是Power PC指令集或MIPS指令集,PLC固件漏洞的产生有部分原因是由于固件对外部异常输入数据处理不当,使得函数调用、内存访问、敏感函数参数调用过程中受到污点源的影响,对于函数调用指令,程序在跳转、调用时,目的地址可能依赖于污点源,导致程序内任意代码执行。常见的函数调用指令有:mtctr,mftcr等。对于内存读写指令,访问地址可能依赖于污染源,导致读写访问的内存不存在,引发读写异常或关键数据破坏。常见的内存读写指令有:lwz,lbz,lmw,stw,stb,sth等。对于敏感函数参数传递指令,参数可能依赖于污点源,引发缓冲区溢出等问题。常见的敏感函数有:strcpy,sprintf,malloc,memcpy等。
在上述实施例的基础上,本发明另一实施例中,如图1和图2,所述仿真平台由QEMU构造并提供PLC固件运行所需的硬件架构及指令集环境。
在仿真环境端,PLC固件在QEMU提供的仿真环境中运行,借助QEMU动态平台的污点跟踪和指令级跟踪功能,以网络通信数据为输入数据,对其进行污点源标记,并对QEMU中虚拟CPU执行的每条污点操作指令进行跟踪。通过污点分析,对污点源中的敏感字域进行筛选与判定,之后,模糊测试端通过通信协议格式解析模块,将异常元素库中的数据***协议敏感字域,通过测试用例生成模块产生大量有针对性的异常模糊测试用例。通过模糊测试执行模块,控制网络数据收发模块与仿真环境端网卡进行通信,将模糊测试用例发送至运行状态下的PLC固件中,同时通过异常监视与记录模块监测PLC固件运行状态,异常出现时进行报警和记录。
本发明还提供一种基于污点分析的PLC固件模糊测试方法,通过上述任一所述的基于污点分析的PLC固件模糊测试***实现,实施例如下,如图1和图2,包括如下步骤:
S1:获取PLC固件;
S2:确定PLC固件依赖的指令集架构;
S3:搭建仿真平台并构建子模块;
S4:控制模块启动仿真环境端执行污点分析状态,进入污点分析流程:
S4.1:模糊测试端构造正常的网络数据包,并以此作为种子文件通过发送至仿真环境端的网卡;
S4.2:污点源标记模块接收控制模块发送种子文件并以字节为单位标记污点源;
S4.3:污点跟踪模块对PLC固件进行指令级监视,根据标定的污点操作指令,跟踪污点源在PLC固件中的传播路径,将最终得到的污点源传播路径,污点源的危险权值的结果传递给敏感字域确定模块;
S4.4:敏感字域确定模块根据污点源的危险权值,筛选出种子文件中危险权值达到阈值的污点源,作为模糊测试的敏感字域;
S5:控制模块启动仿真环境端执行模糊测试执行状态,进入模糊测试流程:
S5.1:模糊测试端接收仿真环境端反馈的敏感字域,将其作为变异字段信息,利用变异字段信息构造多个精确变异后的模糊测试用例;
S5.2:对模糊测试用例按照其危险权值大小进行排序,并编号;
S5.3:将模糊测试用例逐一发送至仿真环境端,网卡将模糊测试用例直接输入至运行中的PLC固件,异常监视记录模块监视固件PLC运行状态,当PLC固件异常时,异常监视记录模块进行记录并保存该模糊测试用例的编号,并报警。
本发明与现有技术相比,有益效果体现在:本发明采用启发式测试用例生成,测试用例准确性高,采用污点分析的方法,从指令级别跟踪外部输入在PLC固件中的运行情况,确定出输入数据中的敏感字域,为模糊用例生成提供了启发,表现出高针对性与高准确性,不仅提高了测试用例的有效性,也提高了模糊测试的效率。同时采用自动化模糊测试,可根据协议脚本生成大量变异的测试用例,并对PLC固件进行自动化的测试,测试效率高。另外测试类型可扩展,根据PLC开放的网络传输服务,协议脚本可生成多种网络数据包,可对PLC中所用的多种网络通信服务器进行漏洞挖掘。
在上述实施例的基础上,本发明另一实施例中,步骤S5.3中优先执行危险权值高的模糊测试用例的测试。
在上述实施例的基础上,本发明另一实施例中,步骤S2中使用IDA工具对PLC固件进行反汇编,再与PLC固件采用的指令架构对比,进而确定PLC固件依赖的指令集架构。
在上述实施例的基础上,本发明另一实施例中,如图2,步骤S3中基于QEMU构造仿真平台,进行用户仿真模式并对PLC固件中单个服务或程序进行独立仿真,提供从指令、进程等多个层次的监控,准确跟踪固件运行状态。
由于PLC固件中主要漏洞集中为网络服务器,如HTTP服务、FTP服务,且漏洞存在形式服务相对独立,所以只需进行用户仿真模式对PLC固件中单个服务或程序进行独立仿真。
在上述实施例的基础上,本发明另一实施例中,步骤S4.1中,模糊测试端的通信协议格式解析模块针对被测的PLC固件中包含的网络服务器,对预定的通信协议进行格式解析,形成协议脚本并构造正常网络数据包。
具体的一种实现方式中,所述正常网络数据包为Modbus-TCP通信报文。
在上述实施例的基础上,本发明另一实施例中,如图1,步骤S5.1中,测试用例生成模块接收仿真环境端的反馈的包括敏感字域的信息,并将接收敏感字域作为变异字段信息,利用协议脚本,将异常元素库中的异常数据元素数据***仿真环境端的反馈的变异字段信息中,并按照协议格式进行封装形成精确变异后的模糊测试用例。
在上述实施例的基础上,本发明另一实施例中,如图2,步骤S1中获取PLC固件的方法包括:直接从PLC调试端口读取;或使用芯片编程器从flash存储器直接读取;或从厂商网页下载固件更新文件;或在固件更新时捕获网络流量。
对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
Claims (10)
1.一种基于污点分析的PLC固件模糊测试***,其特征在于,包括仿真环境端和模糊测试端,所述模糊测试端可构造正常网络数据包,以及接收仿真环境端反馈的包括敏感字域的信息后构造精确变异后的模糊测试用例,并与仿真环境端建立通信连接;所述仿真环境端包括仿真平台以及搭建在仿真平台上的子模块,所述子模块包括:
网卡:负责仿真环境端与模糊测试端之间的通信;
控制模块:用于仿真环境端在污点分析状态以及模糊测试执行状态之间的控制切换;
启动污点分析状态时,控制模块从网卡接收模糊测试端发送的正常网络数据包,污点源标记模块、污点跟踪模块和敏感字域确定模块处于工作状态,执行污点分析过程;启动模糊测试执行状态时,网卡接收模糊测试端发送的精确变异后的模糊测试用例数据包,模糊测试用例直接输入至运行状态下被测的PLC固件,异常监视记录模块处于工作状态;
污点源标记模块:接收控制模块发送的来自模糊测试端的正常网络数据包,并对其进行污点源标记;
污点跟踪模块:按照污点传播规则,对仿真平台中执行的每条污点操作指令进行跟踪,记录途径污点操作相关指令的污点源及其危险权值;
敏感字域确定模块:根据污点跟踪模块记录的污点源及其危险权值,筛选出危险值达到阈值的污点源,并将其作为敏感字域反馈至模糊测试端,作为重点变异字域;
异常监视记录模块:仿真环境端在模糊测试执行状态下,异常监视记录模块对接收模糊测试用例输入的PLC固件进行指令级监控,监测与记录PLC固件运行状态,出现异常进行记录并报警。
2.根据权利要求1所述的基于污点分析的PLC固件模糊测试***,其特征在于,所述模糊测试端包括:
通信协议格式解析模块:针对被测的PLC固件中包含的网络服务器,对预定的通信协议进行格式解析,形成协议脚本并构造正常网络数据包;
异常元素库:储存异常数据元素;
测试用例生成模块:接收仿真环境端的反馈的包括敏感字域的信息,利用协议脚本,将异常元素库中的异常数据元素数据***仿真环境端的反馈的敏感字域中,并按照协议格式进行封装形成精确变异后的模糊测试用例;
模糊测试执行模块:对模糊测试用例进行管理并控制网络数据收发模块的数据收发速率,记录测试用例执行信息;
网络数据收发模块:与仿真环境端的网卡建立通信连接,进行正常网络数据包以及模糊测试用例的数据包的收发。
3.根据权利要求2所述的基于污点分析的PLC固件模糊测试***,其特征在于,所述污点操作指令至少包括函数调用指令、内存读写指令和敏感函数参数传递指令;制定的污点传播规则如下:对于函数调用指令,如果函数目的地址被污染源污染,则对应污染源权值危险递增;如果函数为敏感函数,且敏感函数参数被污点源污染,则对应污点源危险权值递增;对于内存读写指令,如果内存访问的地址被污染源污染,则对应污染源危险权值递增。
4.根据权利要求1~3任意一项所述的基于污点分析的PLC固件模糊测试***,其特征在于,所述仿真平台由QEMU构造并提供PLC固件运行所需的硬件架构及指令集环境。
5.一种基于污点分析的PLC固件模糊测试方法,其特征在于,所述基于污点分析的PLC固件模糊测试方法通过权利要求1~4任意一项所述的基于污点分析的PLC固件模糊测试***实现,包括如下步骤:
S1:获取PLC固件;
S2:确定PLC固件依赖的指令集架构;
S3:搭建仿真平台并构建子模块;
S4:控制模块启动仿真环境端执行污点分析状态,进入污点分析流程:
S4.1:模糊测试端构造正常的网络数据包,并以此作为种子文件通过发送至仿真环境端的网卡;
S4.2:污点源标记模块接收控制模块发送种子文件并以字节为单位标记污点源;
S4.3:污点跟踪模块对PLC固件进行指令级监视,根据标定的污点操作指令,跟踪污点源在PLC固件中的传播路径,将最终得到的污点源传播路径,污点源的危险权值的结果传递给敏感字域确定模块;
S4.4:敏感字域确定模块根据污点源的危险权值,筛选出种子文件中危险权值达到阈值的污点源,作为模糊测试的敏感字域;
S5:控制模块启动仿真环境端执行模糊测试执行状态,进入模糊测试流程:
S5.1:模糊测试端接收仿真环境端反馈的敏感字域,将其作为变异字段信息,利用变异字段信息构造多个精确变异后的模糊测试用例;
S5.2:对模糊测试用例按照其危险权值大小进行排序,并编号;
S5.3:将模糊测试用例逐一发送至仿真环境端,网卡将模糊测试用例直接输入至运行中的PLC固件,异常监视记录模块监视固件PLC运行状态,当PLC固件异常时,异常监视记录模块进行记录并保存该模糊测试用例的编号,并报警。
6.根据权利要求5所述的基于污点分析的PLC固件模糊测试方法,其特征在于,步骤S2中使用IDA工具对PLC固件进行反汇编,再与PLC固件采用的指令架构对比,进而确定PLC固件依赖的指令集架构。
7.根据权利要求6所述的基于污点分析的PLC固件模糊测试方法,其特征在于,步骤S3中基于QEMU构造仿真平台,进行用户仿真模式并对PLC固件中单个服务或程序进行独立仿真,提供从指令、进程等多个层次的监控,准确跟踪固件运行状态。
8.根据权利要求5~7任意一项所述的基于污点分析的PLC固件模糊测试方法,其特征在于,步骤S4.1中,模糊测试端的通信协议格式解析模块针对被测的PLC固件中包含的网络服务器,对预定的通信协议进行格式解析,形成协议脚本并构造正常网络数据包。
9.根据权利要求8所述的基于污点分析的PLC固件模糊测试方法,其特征在于,步骤S5.1中,测试用例生成模块接收仿真环境端的反馈的包括敏感字域的信息,并将接收敏感字域作为变异字段信息,利用协议脚本,将异常元素库中的异常数据元素数据***仿真环境端的反馈的变异字段信息中,并按照协议格式进行封装形成精确变异后的模糊测试用例。
10.根据权利要求8所述的基于污点分析的PLC固件模糊测试方法,其特征在于,步骤S1中获取PLC固件的方法包括:直接从PLC调试端口读取;或使用芯片编程器从flash存储器直接读取;或从厂商网页下载固件更新文件;或在固件更新时捕获网络流量。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711485758.9A CN108255711A (zh) | 2017-12-29 | 2017-12-29 | 一种基于污点分析的plc固件模糊测试***及测试方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711485758.9A CN108255711A (zh) | 2017-12-29 | 2017-12-29 | 一种基于污点分析的plc固件模糊测试***及测试方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN108255711A true CN108255711A (zh) | 2018-07-06 |
Family
ID=62724441
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201711485758.9A Pending CN108255711A (zh) | 2017-12-29 | 2017-12-29 | 一种基于污点分析的plc固件模糊测试***及测试方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108255711A (zh) |
Cited By (19)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109063486A (zh) * | 2018-08-01 | 2018-12-21 | 杭州安恒信息技术股份有限公司 | 一种基于plc设备指纹识别的安全渗透测试方法与*** |
CN109902024A (zh) * | 2019-03-18 | 2019-06-18 | 中国人民解放军战略支援部队信息工程大学 | 一种程序路径敏感的灰盒测试方法及装置 |
CN110191019A (zh) * | 2019-05-28 | 2019-08-30 | 北京百度网讯科技有限公司 | 车辆can总线的测试方法、装置、计算机设备和存储介质 |
CN110213243A (zh) * | 2019-05-15 | 2019-09-06 | 浙江大学 | 一种基于动态污点分析的工业通信协议逆向分析方法 |
CN111427305A (zh) * | 2020-03-29 | 2020-07-17 | 博智安全科技股份有限公司 | 针对西门子plc漏洞挖掘的方法 |
CN112231687A (zh) * | 2020-10-23 | 2021-01-15 | 中国航天***工程有限公司 | 一种可编程工业控制器的安全验证***及方法 |
CN112260885A (zh) * | 2020-09-22 | 2021-01-22 | 武汉思普崚技术有限公司 | 一种工控协议自动测试方法、***、装置及可读存储介质 |
CN112650189A (zh) * | 2019-10-12 | 2021-04-13 | 中电智能科技有限公司 | 一种嵌入式plc自动化测试***及方法 |
CN112840341A (zh) * | 2018-10-11 | 2021-05-25 | Avl李斯特有限公司 | 用于探测与安全相关的数据流的方法 |
CN112948277A (zh) * | 2021-04-30 | 2021-06-11 | 上海大学 | 一种基于耦合自编码器的模糊测试用例生成***和方法 |
CN113179274A (zh) * | 2021-04-29 | 2021-07-27 | 哈尔滨工程大学 | 一种基于动态污点分析的Modbus协议漏洞挖掘方法 |
CN114024624A (zh) * | 2021-10-28 | 2022-02-08 | 四川启睿克科技有限公司 | 面向蓝牙设备的模糊测试*** |
CN115001829A (zh) * | 2022-06-07 | 2022-09-02 | 中国软件评测中心(工业和信息化部软件与集成电路促进中心) | 协议漏洞挖掘方法、装置、设备及存储介质 |
CN115174441A (zh) * | 2022-09-06 | 2022-10-11 | 中国汽车技术研究中心有限公司 | 基于状态机的tcp模糊测试方法、设备和存储介质 |
CN115167261A (zh) * | 2022-06-24 | 2022-10-11 | 中国民用航空总局第二研究所 | 一种针对罗克韦尔plc的漏洞挖掘方法 |
CN115879115A (zh) * | 2022-12-13 | 2023-03-31 | 北京水木羽林科技有限公司 | 一种Web应用安全漏洞的检测方法及*** |
CN116932416A (zh) * | 2023-09-15 | 2023-10-24 | 北京华云安信息技术有限公司 | 基于敏感函数的模糊测试方法、装置、设备以及存储介质 |
CN117544960A (zh) * | 2024-01-09 | 2024-02-09 | 中国人民解放军61660部队 | 一种基于生成的自动化Wi-Fi协议模糊测试方法 |
CN117648262A (zh) * | 2024-01-29 | 2024-03-05 | 中兴通讯股份有限公司 | 模糊测试方法、存储介质和电子装置 |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8381192B1 (en) * | 2007-08-03 | 2013-02-19 | Google Inc. | Software testing using taint analysis and execution path alteration |
CN103440201A (zh) * | 2013-09-05 | 2013-12-11 | 北京邮电大学 | 动态污点分析装置及其在文件格式逆向解析中的应用 |
US8839203B2 (en) * | 2011-05-25 | 2014-09-16 | Microsoft Corporation | Code coverage-based taint perimeter detection |
CN104598383A (zh) * | 2015-02-06 | 2015-05-06 | 中国科学院软件研究所 | 一种基于模式的动态漏洞挖掘集成***和方法 |
CN105721255A (zh) * | 2016-04-14 | 2016-06-29 | 北京工业大学 | 基于模糊测试的工控协议漏洞挖掘*** |
CN105721230A (zh) * | 2014-11-30 | 2016-06-29 | 中国科学院沈阳自动化研究所 | 一种面向Modbus协议的模糊测试方法 |
CN106155877A (zh) * | 2015-03-23 | 2016-11-23 | Tcl集团股份有限公司 | 一种Android应用的模糊测试方法及*** |
CN107193731A (zh) * | 2017-05-12 | 2017-09-22 | 北京理工大学 | 使用控制变异的模糊测试覆盖率改进方法 |
CN107491387A (zh) * | 2017-07-18 | 2017-12-19 | 中国人民解放军信息工程大学 | 一种文件处理程序的加密点和检查点定位方法及*** |
-
2017
- 2017-12-29 CN CN201711485758.9A patent/CN108255711A/zh active Pending
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8381192B1 (en) * | 2007-08-03 | 2013-02-19 | Google Inc. | Software testing using taint analysis and execution path alteration |
US8839203B2 (en) * | 2011-05-25 | 2014-09-16 | Microsoft Corporation | Code coverage-based taint perimeter detection |
CN103440201A (zh) * | 2013-09-05 | 2013-12-11 | 北京邮电大学 | 动态污点分析装置及其在文件格式逆向解析中的应用 |
CN105721230A (zh) * | 2014-11-30 | 2016-06-29 | 中国科学院沈阳自动化研究所 | 一种面向Modbus协议的模糊测试方法 |
CN104598383A (zh) * | 2015-02-06 | 2015-05-06 | 中国科学院软件研究所 | 一种基于模式的动态漏洞挖掘集成***和方法 |
CN106155877A (zh) * | 2015-03-23 | 2016-11-23 | Tcl集团股份有限公司 | 一种Android应用的模糊测试方法及*** |
CN105721255A (zh) * | 2016-04-14 | 2016-06-29 | 北京工业大学 | 基于模糊测试的工控协议漏洞挖掘*** |
CN107193731A (zh) * | 2017-05-12 | 2017-09-22 | 北京理工大学 | 使用控制变异的模糊测试覆盖率改进方法 |
CN107491387A (zh) * | 2017-07-18 | 2017-12-19 | 中国人民解放军信息工程大学 | 一种文件处理程序的加密点和检查点定位方法及*** |
Non-Patent Citations (2)
Title |
---|
戴忠华、赵波、王婷、邹力: "基于污点分析的嵌入式设备固件模糊测试方法", 《四川大学学报(工程科学版)》 * |
陈立根、刘胜利、肖达、彭飞: "一种Cisco IOS启发式模糊测试方法", 《计算机工程》 * |
Cited By (33)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109063486A (zh) * | 2018-08-01 | 2018-12-21 | 杭州安恒信息技术股份有限公司 | 一种基于plc设备指纹识别的安全渗透测试方法与*** |
CN112840341B (zh) * | 2018-10-11 | 2024-03-15 | Avl李斯特有限公司 | 用于探测与安全相关的数据流的方法 |
CN112840341A (zh) * | 2018-10-11 | 2021-05-25 | Avl李斯特有限公司 | 用于探测与安全相关的数据流的方法 |
CN109902024A (zh) * | 2019-03-18 | 2019-06-18 | 中国人民解放军战略支援部队信息工程大学 | 一种程序路径敏感的灰盒测试方法及装置 |
CN109902024B (zh) * | 2019-03-18 | 2022-04-29 | 中国人民解放军战略支援部队信息工程大学 | 一种程序路径敏感的灰盒测试方法及装置 |
WO2020228160A1 (zh) * | 2019-05-15 | 2020-11-19 | 浙江大学 | 一种基于动态污点分析的工业通信协议逆向分析方法 |
CN110213243B (zh) * | 2019-05-15 | 2020-05-12 | 浙江大学 | 一种基于动态污点分析的工业通信协议逆向分析方法 |
CN110213243A (zh) * | 2019-05-15 | 2019-09-06 | 浙江大学 | 一种基于动态污点分析的工业通信协议逆向分析方法 |
CN110191019B (zh) * | 2019-05-28 | 2021-05-28 | 北京百度网讯科技有限公司 | 车辆can总线的测试方法、装置、计算机设备和存储介质 |
CN110191019A (zh) * | 2019-05-28 | 2019-08-30 | 北京百度网讯科技有限公司 | 车辆can总线的测试方法、装置、计算机设备和存储介质 |
CN112650189A (zh) * | 2019-10-12 | 2021-04-13 | 中电智能科技有限公司 | 一种嵌入式plc自动化测试***及方法 |
CN111427305B (zh) * | 2020-03-29 | 2021-09-24 | 博智安全科技股份有限公司 | 针对西门子plc漏洞挖掘的方法 |
CN111427305A (zh) * | 2020-03-29 | 2020-07-17 | 博智安全科技股份有限公司 | 针对西门子plc漏洞挖掘的方法 |
CN112260885A (zh) * | 2020-09-22 | 2021-01-22 | 武汉思普崚技术有限公司 | 一种工控协议自动测试方法、***、装置及可读存储介质 |
CN112260885B (zh) * | 2020-09-22 | 2022-06-24 | 武汉思普崚技术有限公司 | 一种工控协议自动测试方法、***、装置及可读存储介质 |
CN112231687A (zh) * | 2020-10-23 | 2021-01-15 | 中国航天***工程有限公司 | 一种可编程工业控制器的安全验证***及方法 |
CN113179274B (zh) * | 2021-04-29 | 2022-05-20 | 哈尔滨工程大学 | 一种基于动态污点分析的Modbus协议漏洞挖掘方法 |
CN113179274A (zh) * | 2021-04-29 | 2021-07-27 | 哈尔滨工程大学 | 一种基于动态污点分析的Modbus协议漏洞挖掘方法 |
CN112948277A (zh) * | 2021-04-30 | 2021-06-11 | 上海大学 | 一种基于耦合自编码器的模糊测试用例生成***和方法 |
CN114024624A (zh) * | 2021-10-28 | 2022-02-08 | 四川启睿克科技有限公司 | 面向蓝牙设备的模糊测试*** |
CN115001829A (zh) * | 2022-06-07 | 2022-09-02 | 中国软件评测中心(工业和信息化部软件与集成电路促进中心) | 协议漏洞挖掘方法、装置、设备及存储介质 |
CN115001829B (zh) * | 2022-06-07 | 2024-06-07 | 中国软件评测中心(工业和信息化部软件与集成电路促进中心) | 协议漏洞挖掘方法、装置、设备及存储介质 |
CN115167261B (zh) * | 2022-06-24 | 2024-03-08 | 中国民用航空总局第二研究所 | 一种针对罗克韦尔plc的漏洞挖掘方法 |
CN115167261A (zh) * | 2022-06-24 | 2022-10-11 | 中国民用航空总局第二研究所 | 一种针对罗克韦尔plc的漏洞挖掘方法 |
CN115174441A (zh) * | 2022-09-06 | 2022-10-11 | 中国汽车技术研究中心有限公司 | 基于状态机的tcp模糊测试方法、设备和存储介质 |
CN115879115A (zh) * | 2022-12-13 | 2023-03-31 | 北京水木羽林科技有限公司 | 一种Web应用安全漏洞的检测方法及*** |
CN115879115B (zh) * | 2022-12-13 | 2024-03-29 | 北京水木羽林科技有限公司 | 一种Web应用安全漏洞的检测方法及*** |
CN116932416B (zh) * | 2023-09-15 | 2023-12-22 | 北京华云安信息技术有限公司 | 基于敏感函数的模糊测试方法、装置、设备以及存储介质 |
CN116932416A (zh) * | 2023-09-15 | 2023-10-24 | 北京华云安信息技术有限公司 | 基于敏感函数的模糊测试方法、装置、设备以及存储介质 |
CN117544960A (zh) * | 2024-01-09 | 2024-02-09 | 中国人民解放军61660部队 | 一种基于生成的自动化Wi-Fi协议模糊测试方法 |
CN117544960B (zh) * | 2024-01-09 | 2024-03-19 | 中国人民解放军61660部队 | 一种基于生成的自动化Wi-Fi协议模糊测试方法 |
CN117648262A (zh) * | 2024-01-29 | 2024-03-05 | 中兴通讯股份有限公司 | 模糊测试方法、存储介质和电子装置 |
CN117648262B (zh) * | 2024-01-29 | 2024-06-07 | 中兴通讯股份有限公司 | 模糊测试方法、存储介质和电子装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108255711A (zh) | 一种基于污点分析的plc固件模糊测试***及测试方法 | |
Eckhart et al. | Towards security-aware virtual environments for digital twins | |
CN101853200B (zh) | 一种高效动态软件漏洞挖掘方法 | |
CN105763392A (zh) | 一种基于协议状态的工控协议模糊测试方法 | |
CN105426760A (zh) | 一种安卓恶意应用的检测方法及装置 | |
CN105807631B (zh) | 基于plc仿真的工控入侵检测方法和入侵检测*** | |
CN102123058A (zh) | 一种对网络协议解码器进行测试的测试设备和方法 | |
CN108268371A (zh) | 面向Android应用的智能模糊测试方法 | |
CN104834588B (zh) | 检测常驻式跨站脚本漏洞的方法和装置 | |
CN105589805A (zh) | 一种代码覆盖率报告的生成方法和装置 | |
CN105630670A (zh) | 一种代码覆盖率的测试方法和装置 | |
CN113157385A (zh) | 一种基于图神经网络的智能合约漏洞自动化检测方法 | |
CN109063486A (zh) | 一种基于plc设备指纹识别的安全渗透测试方法与*** | |
Haller et al. | On the practical integration of anomaly detection techniques in industrial control applications | |
CN110677322B (zh) | 一种基于Python语言的工控安全设备自动化测试***及方法 | |
CN116643542A (zh) | 一种基于低代码开发平台的油田站场数字孪生工艺组态方法、***及装置 | |
CN107168760A (zh) | 语言的变量检测方法和装置 | |
CN107426211A (zh) | 网络攻击的检测方法及装置、终端设备和计算机存储介质 | |
US8042024B2 (en) | Method, system, and computer program product for reconstructing a data stream | |
CN101808082A (zh) | 一种支持多协议的设备仿真方法 | |
KR101079036B1 (ko) | 제어망 이상 징후 탐지 장치 및 방법 | |
CN111625448A (zh) | 协议包生成方法、装置、设备及存储介质 | |
CN106354100B (zh) | 一种应用于数控机床的运维审计方法和装置 | |
Mostafa et al. | Netdroid: Summarizing network behavior of android apps for network code maintenance | |
Breza et al. | Failures from the environment, a report on the first FAILSAFE workshop |
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 | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20180706 |