摘要

随着计算机网络技术的飞速发展和广泛应用以及工业生产对ICS要求的不断提高,独立环境下的ICS已经不能满足工业生产的需求,网络化的ICS被越来越多的应用到工业生产中来,工业过程与信息化系统的连接越来越紧密。这种紧密的连接使得原本物理隔绝的ICS失去了免遭网络攻击的天然屏障,面临着遭受网络病毒攻击的可能性。作为关系到国计民生的工业控制系统,工业控制系统相关软件在设计过程中主要注重功能的实现,而在安全方面考虑得不多,并且很多工控软件(比如说组态软件)在其开发初期并没有依照严格的软件安全开发规范进行,导致存在不安全的漏洞,这些缺陷被攻击者利用后能够造成系统宕机、敏感数据泄露甚至直接获取系统的操控权。文章着重介绍了工业控制系统组态软件安全性研究,针对组态软件存在的漏洞和隐患的提出相关研究和分析方法,分析软件中存在的预置性后门漏洞、高可利用漏洞等重大安全隐患,为保障工业控制系统的安全提供了保障。

1 研究目的及意义

工业控制系统由各种自动化控制组件和实时数据采集、监测的过程控制组件共同构成。其组件包括数据采集与监控系统(SCADA)、分布式控制系统(DCS)、可编程逻辑控制器(PLC)、远程终端(RTU)、智能电子设备(IED),以及确保各组件通信的接口技术。已经广泛运用于核设施、钢铁、有色、化工、石油石化、电力、天然气、先进制造、水利枢纽、环境保护、铁路、城市轨道交通、民航、城市供水供气供热以及其他与国计民生紧密相关的领域。

传统的工业控制系统通常以厂区为单位,是相对孤立的,与外界有较少通信甚至是没有通信的,似乎从来不会有遭受网络攻击的可能性。但是随着计算机网络技术的飞速发展和广泛应用以及工业生产对ICS要求的不断提高,独立环境下的ICS已经不能满足工业生产的需求,网络化的ICS被越来越多地应用到工业生产中来,工业过程与信息化系统的连接越来越紧密。这种紧密的连接使得原本物理隔绝的ICS失去了免遭网络攻击的天然屏障,面临着遭受网络病毒攻击的可能性。2010年“震网”病毒事件为世人敲响了工业控制系统网络安全的警钟。短短几年内,全球范围内针对工控系统攻击事件的数量大幅提升,并且相继发现了Duqu病毒、火焰病毒等同样针对工控系统的病毒。2014年春,Havex病毒在能源行业大规模爆发,呈现出强烈的行业横向蔓延趋势。Havex病毒相较之前的震网等病毒,其攻击手段更隐蔽、病毒变种更多、网络传播更迅速,工控网络特点针对性强、可造成的危害也更巨大。Havex病毒以及之后出现的Sandworm病毒标志着工业控制网络安全已进入了APT2.0时代 。

以美国为首的西方国家在本世纪初就将工控网络安全这一问题提升到国家战略高度,并积极推动在政策、标准、技术、方案等方面引导措施。而在我国,工信部于2011年10月下发了协〔2011〕451号文“关于加强工业控制系统信息安全管理的通知”,要求各级政府和国有大型企业切实加强工业控制系统安全管理。国家于2014年成立了以习近平总书记为组长的中央网络安全和信息化领导小组,从国家层面,全面统筹、规划与管理我国信息化与信息安全建设。并相继出台《信息安全产业“十二五”发展规划》和《2006-2020年国家信息化发展战略》,为行业信息化发展以及信息安全体系化建设提供政策支撑。

与传统的IT信息系统软件不同的是,作为关系到国计民生的工业控制系统,工业控制系统相关软件在设计过程中主要注重功能的实现,而在安全方面考虑得不多,并且很多工控软件(比如说组态软件)在其开发初期并没有依照严格的软件安全开发规范进行,导致存在不安全的漏洞。为了确保国家关键基础设施工控系统安全稳定运行,避免工控软件漏洞被利用攻击,展开针对工业控制系统软件的安全漏洞研究工作迫在眉睫。

2 研究的主要内容

研究主流工控组态软件的安全性,主要是针对主流PLC组态软件、DCS系统组态软件,或者轨道交通、石油化工等重要行业应用的工控软件开展安全分析,研究软件中存在的预置性后门漏洞、高可利用漏洞等重大安全隐患。

研究过程中需要搭建上位机组态软件运行的模拟工控环境,如图1所示,它模拟了工业控制系统中的一个单元,包括了上位机的监控站与工程师站,还有现场控制设备PLC等,它们都通过一个工业交换机连接在一起。

图1 工业控制系统模拟平台

同时,还需要构建完整、可扩展的动态随机分析测试框架,监控测试目标,管理测试结果,并支持多目标(例如,PLC组态软件、DCS组态软件),多种协议(Modbus、OPCDA、IEC104、DNP3、MMS、GOOSE、PROFINET、Siemens S7、艾默生DeltaV协议),多线程(加速测试进度),如图2所示。

图2 动态随机分析测试框架

该框架提供了操作、监视、管理整个漏洞测试过程的功能。测试过程中,基于高效的智能模糊测试和攻击测试等自动化测试方法,自动生成测试用例列表,并在测试列表运行时可以实时监控和进行管理,能够高效完成复杂测试。

主要开展研究内容如下:

2.1 工控组态软件的已知漏洞分布情况研究

经过对已公开的大量工控组态软件漏洞的调查研究发现,其漏洞类型主要分布在:文件格式解析类漏洞、ActiveX控件类漏洞、专有工控通讯协议类漏洞和Web服务类漏洞。

多数工控组态软件都会用文件作为程序的输入,而畸形的文件格式往往会引发诸如整数溢出、缓冲区溢出等文件格式解析类漏洞。

工控组态软件在安装时经常会注册一些ActiveX控件,这些控件往往封装着一些逻辑较为复杂的方法,这些方法对参数输入检查不严格会引发严重的缓冲区溢出漏洞。

不少工控软件都存在着一些专有工控通讯协议,而畸形的协议报文会触发拒绝服务或缓冲区溢出漏洞,这些从协议触发的漏洞归为专有工控通讯协议类。该类漏洞的分析,需要收集并详细分析工控通讯协议的格式,若协议格式不公开可通过逆向分析或分析数据包之间的规律获得。

一些工控软件本身也带有Web服务,可能存在SQL注入、路径遍历、后台密码弱口令等常见的Web漏洞。

2.2 工控组态软件的漏洞分析技术

研究的漏洞分析技术是对已公开但信息量较少的漏洞(如仅含有POC无漏洞利用脚本)进行定位与根源分析的技术,它包括动态调试、静态分析与二进制逆向分析等技术。

动态调试是指利用调试器跟踪软件的运行,通过动态调试能够清楚地了解到软件的运行步骤,包括各类寄存器的数据及内存数据。通过利用该技术能够跟踪调试漏洞触发的整个执行过程,从而发现哪个环节是真正引发漏洞的根源。静态分析是与动态调试相对应的代码分析技术,它不运行代码只是通过对代码的自动静态扫描发现隐含的程序问题。而二进制逆向分析是在软件不开源的情况下分析定位漏洞的一种有效方法。这三种技术相结合,可以准确地定位组态软件漏洞触发时的行为及函数,清晰地分析出漏洞机理。

2.3 工控组态软件的漏洞利用技术

漏洞机理研究清楚后,下一步就是研究漏洞利用并编写exploit验证代码。拒绝服务类的漏洞利用较为简单,直接构造exploit打死目标服务即可,本项目中更关注整数溢出、栈缓冲区溢出、堆缓冲区溢出和基于ActiveX控件的缓冲区溢出的漏洞利用技术。若在Windows平台下进行漏洞利用,需要掌握各种常见的攻击缓解技术及绕过方法。

3 研究主要技术路线

3.1 Windows下常见攻击缓解技术及绕过方法

工控组态软件多数安装在Windows平台,工控网络中最常见的Windows平台为Windows XP和Windows 7。自从Windows成为主流操作系统以后,针对Windows平台的漏洞利用技术不断发展,而微软也不断运用新的攻击缓解技术来封堵漏洞利用技术。根据被引入Windows的时间顺序,先后引入的攻击缓解技术有:GS(Control Stack CheckingCalls)、SafeSEH(Safe Structured Exception Handler)、Heap Protection、DEP(Data Execution Prevention)、ASLR(Address SpaceLayout Randomization)等。在Windows平台下编写漏洞利用脚本需要深入理解这几种保护机制,并需要掌握其绕过方法。

3.2 基于ActiveX控件的漏洞分析和利用技术

ActiveX是以微软COM(Component Object Model)模型为理论基础建立起来的技术,通过建立带有接口的对象,ActiveX控件能被其他COM组件或者程序调用,IE里面经常用到这样的技术。COM组件被广泛用于浏览器的第三方应用程序,工控组态软件也经常使用基于COM组件的ActiveX控件技术。但由于第三方开发人员编程方面的原因,ActiveX控件出现越来越多的漏洞。

基于ActiveX控件的安全漏洞,可分为如下几种:

(1)调用的控件可以创建、修改或者删除本地文件,修改注册表等信息;

(2)调用的控件可以获取本地信息,如某文件信息、用户名、密码、IP地址等;

(3)调用的控件可以通过欺骗行为使用户访问恶意网页、下载恶意程序等;

(4)调用的控件存在缓冲区溢出或者格式化字符串等漏洞,导致浏览器或者系统异常。

目前对于ActiveX控件的漏洞分析,可借助一些自动化工具,比较出名的有ComRaider、AxMan、Axfuzz等。ComRaider是一款非常出色的ActiveXFuzz工具。它已将测试ActiveX控件时所需的编写测试模板、获取CLSID、获取用户接口、制定测试参数、测试结果监视等功能全部整合,能够自动区分出当前系统中哪些ActiveX控件可以被浏览器正常调用,并分析出被测控件所有的外部接口,包括函数接口以及属性接口。

对于ActiveX控件的漏洞利用,比较有效的方法是堆喷射(Heap Spray)技术。Heap Spray是在shellcode的前面加上大量的slide code(滑板指令),组成一个注入代码段。然后向系统申请大量内存,并且反复用注入代码段来填充。这样就使得进程的地址空间被大量注入代码所占据。然后结合其他的漏洞攻击技术控制程序流,使得程序执行到堆上,最终将导致shellcode的执行。传统slide code(滑板指令)一般是NOP指令,但是随着一些新的攻击技术的出现,逐渐开始使用更多的类NOP指令,譬如0x0C(0x0C0C代表的x86指令是OR AL 0x0C),0x0D等,不管是NOP还是0C,他们的共同特点是不会影响shellcode的执行。Heap Spray只是一种辅助技术,需要结合其他的栈溢出或堆溢出等等各种溢出技术才能发挥作用。

对于ActiveX控件中函数参数的缓冲区溢出漏洞,常结合堆喷射技术构造漏洞利用代码,效果良好。

3.3 基于工控协议的漏洞分析和利用技术

对于工控协议的漏洞分析需要详细了解协议实现的报文格式,而工控组态软件常用的协议分为两类:公开标准的协议和私有协议。公开标准的协议,如Modbus、OPCDA、IEC104、DNP3、MMS、GOOSE、PROFINET等协议;私有协议,如SiemensS7、艾默生DeltaV协议等,未了解报文格式的工控组态软件的私有协议占绝大多数,因此针对这些私有协议的报文格式解析工作是漏洞分析和利用过程中的研究难点。工控组态软件及产品之间的通讯协议往往使用私有协议,而现在的通讯协议日趋复杂并引入了协议状态机来处理不同的逻辑分支,且在不同的状态下通讯数据的结构也会存在差异。因此,需要分析组态软件及控制设备在不同状态下的通讯数据(例如,认证通过前与通过后等),将这些数据格式与状态机之间进行关联,了解的数据格式越多在漏洞分析过程中起到的作用越大。

4 结语

目前我国工业控制系统安全面临着严峻的挑战,而其主要的安全问题就是工业控制软件、控制设备甚至通讯协议本身存在设计上的缺陷。这些缺陷被攻击者利用后能够造成系统宕机、敏感数据泄露甚至直接获取系统的操控权。因此,开展在工业控制系统中的主流PLC组态软件、DCS系统组态软件或重要行业应用的工控软件的漏洞研究,分析软件中存在的预置性后门漏洞、高可利用漏洞等重大安全隐患,为保障工业控制系统的安全提供漏洞研究支持,提升工业控制系统安全防护能力。

作者简介

梁鼎铭(1985-),男,广东佛山人,本科,4年工控网络安全从业经验,8年电力系统行业资深经验,广东省工业互联网联盟专家委员之一,曾参与多项工业控制系统网络安全标准编制,现任深圳融安网络科技有限公司解决方案总监,主要从事工控系统安全咨询,风险评估,解决方案构建工作。具有丰富的实践经验,直接参与领导过的项目有:南方电网并网发电机组可靠性智能评估与预警大数据优化关键技术研究(科研类),广东省电科学院热工系统信息安全研究,国家电网泛终端一体化管控项目等。

摘自《自动化博览》2018工业控制系统信息安全专刊(第五辑)

声明:本文来自工业安全产业联盟,版权归作者所有。文章内容仅代表作者独立观点,不代表安全内参立场,转载目的在于传递更多信息。如有侵权,请联系 anquanneican@163.com。