本文是一篇工程硕士论文,本文针对工控协议特征,提出新的自动化逆向方法并在此基础上提出新的高效的漏洞挖掘方法。
1 绪论
1.1 研究背景及意义
工业控制系统(Industrial Control Systems)是通过各种自动化设备对整个工业生产过程进行实时的数据采集和监控并进行及时调整的过程控制系统。其主要有保证工业生产过程自动化进行并且对所涉及的业务进行过程监控与控制的作用[1]。现代工业控制系统的结构如图1.1所示,其中可编程逻辑控制器(Programmable Logic Controller, PLC), 分布式控制系统(Distributed Control Systems, DCS)以及远程终端(Remote Terminal Unit, RTU)等处于现场控制层的设备构成了整个工业控制系统的核心部分。整个工业控制系统被大规模的应用在化工、电力等关键行业和领域,是整个国家和社会赖以生存的基础工业的支柱。
1.2 相关研究现状
1.2.1 PLC漏洞挖掘方法
一般而言现有的针对PLC等工控设备的漏洞挖掘方法主要有三类,一是基于固件分析的漏洞挖掘方法,二是基于软件程序分析的漏洞挖掘方法,三是基于协议模糊测试的漏洞挖掘方法。
基于固件分析的漏洞挖掘方法主要通过IDA等程序逆向分析工具,人工的对取得的固件进行分析以达到漏洞挖掘的目的。这种挖掘方法受限于固件的获取难度高和人工参与程度高的问题,普适性和效率均不是很理想。随着信息技术与硬件技术的发展,自动化的漏洞挖掘技术已经更多的引入到固件分析当中。
Chen等人[13]提出了一种名为FIRMADYNE的系统性框架,其专门用于识别运行在Linux操作系统上的固件漏洞。在解压固件并提取嵌入式文件系统后,它能够利用全系统仿真的方式运行固件,并在此基础上进行大规模的动态分析二进制文件,从而达到漏洞挖掘的目的。在文中,作者从42家不同的供应商处下载了23035个固件,成功提取了其中的9486个固件信息并在此基础上发现了74个漏洞。
Liang等人[14]提出了一种新的针对工控固件的漏洞挖掘方法FIT。它首先利用神经网络进行二进制代码中的语义学习并筛选出潜在的漏洞函数,然后根据两个二进制函数见的三级特征使用二分图匹配的方法,以达到识别固件中的漏洞目的。
2 相关理论与技术
2.2 工业控制系统
整个工业控制系统一般可以分为三个大的层级:从顶至底分别是管理层,监控层和控制层。如图2.1所示,管理层主要包含外部的Web服务器,数据服务器等部件,属于是最高级的调度中心,负责协调和控制整个工控系统的生产流程并与外部网络实现通信。监控层主要包含工程师站和操作员站等,其能够对下层的设备进行直接的命令下达和数据监控。控制层是整个系统的最底层,主要包含现场的传感器,控制器等,负责整个底层现场的逻辑控制和生产执行。
2.3 统计学习
统计学习也可以称为统计机器学习,其主要通过信息论和统计学进行问题的解决。相较于深度学习,统计学习的可解释性强,其假设问题服从某个分布,然后在这一强假设下,进行进一步的推理和处理实现问题的解决。
本文涉及的统计学习算法是Latent Dirichlet Allocation(LDA)算法[47]。LDA算法是一类生成型主题模型,其主要假设研究的问题服从狄利克雷分布(Dirichlet Distribution),其概率密度如式2-1所示。在该算法下,同一个字或词以不同的概率出现在不同的主题背景之下,而同一主题在不同的文章中其出现的概率也是不同的。因此可以通过概率假设进一步的推断文章的生成过程或者进行文本的分类。
事实上很多的LDA算法问题是无法通过数学推理得到合理的有限封闭解的,因此诞生了很多近似解的解答方法,例如变异贝叶斯,期望传播,马尔科夫链蒙特卡罗法等。其中吉布斯采样(Gibbs sampling)是一种极具效果的近似解求法[48]。其使用马尔科夫链读取样本,它假设该马尔科夫链的平稳分布也是采用采样的目标分布p(x)。具体来说,假定x= 𝑥𝑥1,𝑥𝑥2,…𝑥𝑥𝑛𝑛, 目标分布为p(x), 在初始化x的取值后,通过循环执行以下步骤来完成采样:1. 随机或以某个次序选取某变量𝑥𝑥𝑖𝑖;2.根据x中𝑥𝑥𝑖𝑖除外的变量的现有取值,计算条件概率p(𝑥𝑥𝑖𝑖|𝑋𝑋𝑖𝑖), 其中𝑋𝑋𝑖𝑖=𝑥𝑥1,𝑥𝑥2,…,𝑥𝑥𝑖𝑖−1,𝑥𝑥𝑖𝑖+1,…𝑥𝑥𝑛𝑛−1,𝑥𝑥𝑛𝑛;根据p(𝑥𝑥𝑖𝑖|𝑋𝑋𝑖𝑖)对变量𝑥𝑥𝑖𝑖进行采样,用采样值替代原值。
3 基于统计学习的字段划分算法 ......................... 25
3.1 引言 ........................................ 25
3.2 总体设计方案 ....................................... 25
3.3 字段划分算法设计与实现 ...................... 26
4 基于深度学习的协议逆向算法 ...................... 45
4.1 引言 .......................... 45
4.2 字段语义定义 ................................. 45
4.3 模型算法设计 ................................ 48
5 PLC漏洞挖掘系统实现与实验验证 .......................... 59
5.1 引言 ...................................... 59
5.2 模糊测试整体框架 ................................... 59
5.3 协议字段与语义格式解析模块 .......................... 60
5 PLC漏洞挖掘系统实现与实验验证
5.2 模糊测试整体框架
本文提出的整体框架如图5.1所示。整个方法是在开源模糊测试器Peach上进行进一步的改进和增加模块实现的。整个方法与原始的Peach模糊测试器相比,有两个最大的不同点,也是本方法实现针对未知协议实现高效模糊测试的关键点所在。一是引入了协议字段与语义的解析模块解决了针对未知协议效果不佳的问题,并且根据解析得到的字段分段和语义指导测试样例生成大大提高了有效用例的占比,提高了测试的效率降低了整个测试方法的冗余性;二是引入了结果反馈,将PLC的反馈报文信息做了处理,通过选取与上次反馈报文差距最大的种子增大整个模糊测试方法的覆盖率,提升整个方法的效率。
在模糊测试框架中变异器模块主要包括变异策略,其主要用于不同数据类型的变异策略不同;数据模型模块包含数据类型、变异器接口等;状态模型模块包含数据模型接口、状态、动作—输入输出等;测试引擎包含代理器接口、状态模型接口、发布器、日志记录器等;代理器包括本地调试器如WindowsDebugger和网络监视器如PcapMonitor等。上述模块与普通的Peach模糊测试器并无过多的该多,因此本章剩下的部分将重点对关键部分进行说明。
6 总结与展望
6.1 本文工作总结
近年来工业互联网的发展十分迅速,越来越多的工业控制设备接入互联网,工业控制系统也不再是所谓的数据孤岛。随着越来越多的工控设备接入,工业互联网应运而生,信息技术与传统工控结合的越发紧密。这种发展极大的提高了工业生产力,但同时也埋下了许多安全隐患。过去由于存在强大的物理隔离,工控设备只运行在内部的网络中,设计工控系统时并不需要过多的考虑其被攻击的问题,但随着工业控制系统越来越开放,越来越多的针对工业控制设备的安全事件发生,因此提升针对工控系统的漏洞挖掘能力迫在眉睫。由于工控系统的私有特殊性,不论是从固件分析出发还是从程序端的角度分析,这些方法都需要大量的专家知识且很难具有普适性,而现有的基于模糊测试的漏洞挖掘方法存在着不能对未知协议使用且效率十分低下这两个严重的缺陷。本文针对工控协议特征,提出新的自动化逆向方法并在此基础上提出新的高效的漏洞挖掘方法。本文具体的研究内容如下:
第一,对工业控制系统中的各类常见设备和概念进行了精简的介绍,总结了目前主流的漏洞挖掘方法及其技术特点和缺陷。同时又对目前主流的协议逆向方法做了介绍,总结了基于程序分析和基于数据流量的两大类协议逆向方法的特点和局限。
第二,提出了基于统计学习的字段划分算法并完成了该算法的设计与实现。首先通过n-gram生成模块处理原始的数据