论文部分内容阅读
工业可编程逻辑控制器广泛应用于工业生产中,一旦攻击者利用其存在的漏洞攻击成功,轻则会造成生产中断给企业带来经济损失,严重地还会造成人员伤亡。因此,如何快速挖掘工业可编程逻辑控制器存在的漏洞,提高其安全性,正逐渐成为安全研究人员的研究热点。为了更加快速的挖掘工业可编程逻辑控制器存在的漏洞,本文提出了一种基于工控协议模糊测试的工控漏洞挖掘方法,通过向被测PLC发送经过专门构造的畸形数据包来挖掘PLC存在的漏洞。具体内容包括:(1)构建了工控协议描述模型。为了统一描述工控协议,以便于之后对私有协议结构解析的研究,本文构建了一个五元组来描述工控协议中各字段的属性以及相邻字节间的关系等。(2)设计了基于遗传算法的公有协议模糊测试方法。在进行公有协议模糊测试时,本文以Modbus TCP协议为例,针对协议模糊测试存在生成测试用例冗余度高和无法根据被测PLC的反馈来调整模糊测试用例生成等问题,本文通过深入解析Modbus TCP协议结构,提出了Modbus TCP协议字段取值规则,用以在遗传算法生成测试用例时指导各字段取值范围,从而减少生成无效测试用例的数量,达到降低冗余度的目的。其次,建立了测试用例队列,用以保存已经发送的模糊测试用例和在收到该测试用例后被测PLC响应报文中的异常码,并在遗传算法中计算个体适应度时,从个体与种子队列中种子的相似度以及该种子的异常码两方面来进行计算,从而实现根据被测PLC的反馈来调整模糊测试用例生成的目标。(3)设计了基于信息论的私有协议结构解析方法。针对现有工具无法对未知结构的私有协议进行结构解析这一问题,本文从信息论的角度出发,通过引入信息论中信息熵、互信息和联合熵,结合本文提出的互信息率和相邻两个字节不属于同一个字段的三个判定条件来进行私有协议的结构解析,从而提高了协议模糊测试系统的适用性。(4)设计了基于遗传算法的私有协议模糊测试方法。在完成私有协议结构解析的基础上,通过遗传算法来生成私有协议模糊测试用例。通过计算生成测试用例和初始种群中各数据包的相似度,再根据构造的适应度函数来计算该测试用例的适应度值,以挑选出尽可能满足私有协议格式且变异程度高的测试用例。(5)设计与实现提出的工控协议模糊测试方法,并进行实验验证。在进行公有协议模糊测试实验中,本文使用所提出的方法对支持Modbus TCP协议的两款PLC进行模糊测试,最后挖掘到了两个0-day的拒绝服务漏洞;在进行私有协议结构解析实验中,本文使用所提出方法首先分别对Modbus TCP协议数据集和S7Comm协议数据集进行结构解析,通过解析结果验证了方法的有效性,之后再对一种未知结构的私有协议进行结构解析。在进行私有协议模糊测试实验中,基于对该私有协议结构解析的结果,本文对支持该私有协议的两款PLC进行模糊测试,最后挖掘到两个拒绝服务漏洞,其中一个是0-day漏洞。实验结果证明了本文所提出的方法可有效提高对支持公有协议或未知结构的私有协议的PLC的漏洞挖掘效率。