欢迎您访问工业控制系统信息安全产业联盟网!
官方微信
用户名:
密码:
登录 注册
工业控制系统安全分析及渗透测试经验分享

点击数:3257 发布时间:2021-01-28 17:13

工业控制系统是承载国家经济发展的重要基础设施,随着信息化和工业化的深度融合,工业控制系统信息安全形势日益严峻。工控系统渗透测试作为一种了解工业控制系统安全情况的重要手段,受到越来越多的关注。本文以工业控制系统安全分析为出发点,从工控资产、工控协议、工控漏洞等方面,分析工控安全现状,分享渗透测试经验。
1 引言
随着信息化和工业化的深度融合,信息安全威胁逐渐向工业领域蔓延,工业控制系统信息安全形势日益严峻。如今的工业控制系统在控制规模、控制技术和信息共享方面都有巨大的变化,由最初简单控制的封闭系统发展成现在复杂或者先进控制的开放系统,针对工业控制系统的网络攻击事件日益增多,工业控制系统正面临前所未有的网络安全威胁。工控系统渗透测试作为一种了解工业控制系统安全威胁的重要手段,受到越来越多人的关注。本文以工业控制系统安全分析为出发点,从工控资产、工控协议、工控漏洞、漏洞利用、风险验证和攻击方法等方面,多角度分析工控安全现状,分享渗透测试经验。

2 工控资产指纹提取及网络发现

2.1 工控资产识别

Shodan是目前最流行的网络空间搜索引擎,它扫描HTTP,FTP,SSH,Telnet,SNMPand SIP等协议,通过分析客户端与服务端交互过程中的信息,识别全网设备。利用Shodan使用特定的语法即可搜索出海量的物联网设备、摄像头、路由器、打印机、SCADA系统、PLC等。还可以用端口扫描工具Nmap。Nmap,即NetworkMapper,是一款开源免费的网络发现(NetworkDiscovery)和安全审计(Security Auditing)工具。Nmap最初是由Fyodor在1997年开始创建的。随后在开源社区众多的志愿者参与下,该工具逐渐成为非常受欢迎的安全必备工具之一。此外,还可以用网络嗅探工具wireshark抓取并分析工业协议。

2.2 工控资产指纹提取

ICT,即信息与通信技术(informationandcommunicationstechnology)。在该领域,指纹识别是一种使用不同信息来描述网络上运行的设备或软件的技术,大多用于远程识别设备的硬件、操作系统、正在运行的软件和其他信息。ICT技术已被广泛用于指纹识别系统。攻击者扫描网络获取设备指纹来关联漏洞入侵系统,而防御者则使用设备指纹来发现系统漏洞并检测系统网络异常。在工业控制系统(ICS)中,指纹识别技术还用于查找ICS系统中的漏洞并检测攻击行为。

指纹提取有主动和被动两种方法。主动指纹提取需要工具主动扫描网络系统以获得信息。主动扫描识别是指收集生成指纹所需的所有信息,但是主动识别不是在任何时候都起作用,主动扫描更有可能使网络繁忙并且容易被检测出来。

由于被动识别方法对ICS的干扰小且自动化程度高,在工业控制领域更容易被接受。研究人员还加大了对被动识别的投入。虽然有一些成熟的基于TCP /IP协议栈的被动识别工具,但是为了避免干扰正常的工业生产,研究人员更倾向于使用网络流量特征分析方法。就目前的研究环境而言,基于网络流量特征的被动识别方法在通用性和准确性方面还有待提高。

3 工控协议分析及模糊测试

3.1 Modbus协议

Modbus常见的类型包括:ASCII、RTU、TCP标准的Modicon控制器使用RS232C实现串行的Modbus。Modbus的ASCII、RTU协议规定了消息、数据的结构、命令和就答的方式,数据通讯采用Master/Slave方式,Master端发出数据请求消息,Slave端接收到正确消息后就可以发送数据到Master端以响应请求;Master端也可以直接发消息修改Slave端的数据,实现双向读写。Modbus是一种应用层协议,它定义了与基础网络无关的数据单元(ADU),可以在以太网(TCP/IP)或串行链路上(RS232、RS485等)进行通信(以太网ADU和串行ADU略有不同)。在串行链路的主从通信中,Modbus主设备可以连接一个或N(最大为247)个从设备,主从设备之间的通信包括单播模式和广播模式。

3.2 S7协议

西门子设备使用多种不同现场总线协议,例如:MPI、Profibus、IE、Profinet等。Profinet用于将PLC连接到I/O模块,而不是设备的管理协议。S7以太网通信协议,主要用于将PLC连接到PC站(PG/PC - PLC 通信)。

S7通信支持两种方式,一是基于客户端(Client)/服务器(Server)的单边通信,二是基于伙伴(Partner)/伙伴(Partner)的双边通信。客户端(Client)/服务器(Server)模式是最常用的通信方式,也称作S7单边通信。在该模式中,只需要在客户端一侧进行配置和编程;服务器一侧只需要准备好需要被访问的数据,不需要任何编程(服务器的“服务”功能是硬件提供的,不需要用户软件的任何设置)。在S7通信中客户端是是资源的索取者,而服务器则是资源的提供者。服务器(Server)通常是S7-PLC的CPU,它的资源就是其内部的变量/数据等。客户端通过S7通信协议,对服务器的数据进行读取或写入的操作。

3.3 工业协议模糊测试

模糊测试(Fuzzing)的定义:向目标系统提供非预期的输入并监视异常结果来发现软件漏洞的方法。工控协议模糊测试思想如图1所示,模糊测试方法如图2所示。

图1 工控协议Fuzzing思想


图2 模糊测试方法分类

工业控制网络协议的模糊测试通过构造畸形数据包,并将畸形数据包发送给被测工控目标,从而测试工业控制网络协议的安全性。流程图如图3所示。

图3 工业控制网络协议安全分析方法流程图

4 PLC常见漏洞挖掘方法

1)端口动态测试

首先,使用Nmap进行端口扫描,确定端口服务。其次,开始端口动态测试-FTP:使用自己常用的TOP字典对服务进行弱口令尝试。部分工控厂商会使用自己的公司名、协议、官网地址等作为ICS设备的密码。最后,进行端口动态测试-Telnet:在获取到Telnet密码信息后,结合刚才获取的FTP账号信息,提取RTU设备固件信息,进行RTU固件设备分析。

(2)通信协议重放攻击

重放攻击(Replay Attacks)又称重播攻击、回放攻击,是指攻击者发送一个目的主机已接收过的包,来达到欺骗系统的目的,主要用于身份认证过程,破坏认证的正确性。重放攻击可以由发起者,也可以由拦截并重发该数据的敌方进行。攻击者利用网络监听或者其他方式盗取认证凭据,之后再把它重新发给认证服务器。

针对工控软硬件协议重放关注重点:数据写入命令(Write Var)、程序块的删除与下载(Download/Delet Block)、CPU停止与冷热启动(PLC Control)、数据恢复出厂设置(PLCControl)。重放攻击成功与否在于是否存在时序、是否有校验、是否有加密。

(3)工控协议模糊测试

工控协议模糊测试的目的是测试工业控制网络协议实现的健壮性,它是采用构造畸形数据包,将畸形数据包发送给被测工控目标,从而测试被测工业控制网络协议的安全性,是寻找服务端漏洞和远程利用漏洞的必要手段,也是挖掘PLC、SCADA漏洞的必要手段。

4)文件格式模糊测试

文件格式模糊测试是针对文件处理软件进行模糊安全测试,根据处理文件类型,文件处理软件被区分为:图文处理软件——Microsoft Office、媒体处理软件——音乐视频播放软件、其它文件处理型软件——专用文件处理软件如WinRAR。无论哪种类型的文件处理软件,都将软件处理的文件类型称为文档文件,即待处理的文件。例如:Word程序处理的文档文件就是doc类型的文件,doc文档中包含各种各样的文字或者图片信息。它是寻找本地利用漏洞的必要手段。

文档文件在保存数据信息时,往往采用特殊的编码格式,这些编码格式一般都采用非文本形式,即文档保存的数据不是明文格式,以doc文档文件为例,用记事本打开一个doc文档,会发现全部是乱码。

(5)文件劫持——DLL劫持

通常当一个可执行文件运行时,加载器将可执行模块映射到进程的地址空间中,加载器分析可执行模块的输入表,并设法找出任何需要的DLL,将它们映射到进程的地址空间中。由于输入表中只包含DLL名而没有它的路径名,因此加载程序必须在磁盘上搜索DLL文件。首先会尝试从当前程序所在的目录加载DLL,如果未找到,则在Windows系统目录中查找,最后是在环境变量中列出的各个目录下查找。利用这个特点,先伪造一个系统同名的DLL,提供同样的输出表,每个输出函数转向真正的系统DLL。程序调用系统DLL时会先调用当前目录下伪造的DLL,完成相关功能后,再跳到系统DLL同名函数里执行。这个过程形象地描述就是系统DLL被“劫持”了。

5 漏洞利用脚本编写

编程语言可选用Python,Python是一种解释型的、面向对象的、带有动态语义的高级程序设计语言。

在IDE方面可选择PyCharm。它是一种PythonIDE,带有一整套可以帮助用户在使用Python语言开发时提高效率的工具,比如调试、语法高亮、Project管理、代码跳转、智能提示、自动完成、单元测试、版本控制。此外,该IDE提供了一些高级功能,以支持Django框架下的专业Web开发。

通讯库可选择低级别的网络服务支持基本的Socket,它提供了标准的BSD Sockets API,可以访问底层操作系统Socket接口的全部方法。图4为程序实现S7通信,图5为Pyshark分析流量。

图4 程序实现S7通讯


图5 Pyshark分析流量

6 工业网络风险验证以及工业控制系统安全攻防技巧

6.1 风险验证

风险验证工具分为五个类别:信息收集工具如Shodan、Zmap、Nmap;安全测试工具如系统漏洞评估Nessus/OpenVAS、Web漏洞评估AWVS、开源模糊测试框架Peach Fuzzer;安全分析工具Wireshark;漏洞利用工具如渗透测试框架Metasploit Framework;其他工具如TCP/UDP调试工具、TCP/UDP数据包发送工具、Hping-TCP/IP数据包生成工具等。

那么如何使用这些工具?比如在信息收集中,利用Shodan使用特定的语法即可搜索出海量的物联网设备、摄像头、路由器、打印机、SCADA系统、PLC等。Shodan主要收集Web服务器以及FTP、SSH、Telnet、SNMP、IMAP、SIP、实时流协议等常见应用服务超过300个TCP/UDP网络端口的服务Banner标识,使用者通过匹配端口和服务的特征关键字即可搜索到和特征相似的全球联网设备。

在什么情况下会用ZMap?当在172.16.0.0/16,192.168.0.0/16,甚至是10.0.0.0/8这种较大规模网络进行安全评估时,使用Nmap的速率将极大降低测试效率,使用ZMap将可以快速在大中规模网络环境内评估指定工控端口的开放情况。

其他工具的使用也同样需要因事制宜,灵活运用。

6.2 测试方法思路

在工业控制系统中,渗透测试主要分为以下几步:渗透应用业务系统、内网整体资产搜集、内网Web服务渗透攻击、内网工控系统识别、内网工控系统风险分析、内网工控系统权限获取。如图6所示。

图6 工控渗透测试流程

6.3 防护手段 

(1)《工业控制系统信息安全防护指南》中涉及的防护技术

指南中涉及的技术大致可分为四个方面:主机安全防护技术、网络安全防护技术、设备安全防护技术、数据安全防护技术。如表1所示。

表1 《指南》中涉及的防护技术

(2)主机安全防护

在主机安全防护中,主要防护思想是:通过工业主机的安全防护,做好安全配置,避免主机权限被轻易获取、不必要的端口被用于传输恶意程序或指令、高危漏洞被利用等安全风险;做好安全防护设备的应用,避免未授权的程序或服务运行、未授权的外接设备带入恶意程序。
(3)网络安全防护
在网络安全防护中,主要防护思想是:通过互联网、管理网和生产网的安全防护,做好安全配置,避免生产网络完成互联互通、不必要的端口和服务被利用;做好安全防护设备的应用,避免利用边界上的风险从管理网入侵生产网以及病毒或木马在生产网之间的传播,并及时发现网络中的恶意行为,阻止不安全的远程访问。
(4)设备安全防护
在设备安全防护中,主要防护思想是:通过设备的安全防护,做好安全配置,避免设备权限被获取且被植入恶意代码;做好安全防护设备应用,通过DPI技术阻止在工业控制设备上恶意操作指令的实施。
(5)数据安全防护
在数据安全防护中,主要防护思想是:通过重要工业数据、关键业务数据的安全防护,确保静态存储、动态传输上数据不被窃取、篡改、丢失和锁定。
7 工控网络方面的攻击方法
对于工控网络而言,攻击方法多种多样,主流的攻击方法有两种:中间人攻击和Dos攻击。
1)中间人攻击
中间人攻击是一种由来已久的网络入侵手段,并且当今仍然有着广阔的发展空间,如SMB会话劫持、DNS欺骗等都是典型的MITM攻击。简而言之,所谓的MITM攻击就是通过拦截正常的网络通信数据,并进行数据篡改和嗅探,而通信的双方却毫不知情。
中间人攻击可对信息进行篡改。当主机A和主机B通信时,都由主机C来为其“转发”,而A、B之间并没有真正意思上的直接通信,他们之间的信息传递以C作为中介来完成,但是A、B却不会意识到,误认为是在直接通信。这样攻击主机在中间成为了一个转发器,C可以不仅窃听A、B的通信还可以对信息进行篡改再传给对方,C便可以将恶意信息传递给A、B以达到自己的目的。
中间人攻击同样可以做到信息窃取。当A、B通信时,C不主动去为其“转发”,只是把他们传输的数据备份,以获取用户网络的活动,包括账户、密码等敏感信息,这是被动攻击,也是非常难被发现的攻击手段。
在工控系统中,中间人攻击尤为普遍。由于设计中缺乏安全进制,Modbus协议易受中间人攻击的影响,也包括数据包重放攻击。例如对Cybati交通灯系统就可以用中间人攻击。在攻击中,攻击者还可以通过欺骗HMI来使交通灯系统看起来没有异常,导致厂商不能即时发现问题。多种开源或商用的工具可以用于在Modbus网络上执行中间人攻击。Modbus VCR是开源的免费工具,它使用Ettercap记录Modbus流量,然后重放该流量,使系统看起来就像在处理正常的流量。
(2)Dos攻击
DoS攻击是利用TCP协议三次握手的缺陷进行的。当黑客要进行DoS攻击时,他会操纵很多僵尸主机向被攻击的服务器发送SYN数据包,当服务器回复ACK确认包后,僵尸主机不再回应,这样服务器就会保持这个半连接的状态进行等待。每一个这样的半连接都会耗费服务器的资源,如果有数量极大的半连接,服务器就会停止正常工作了。
Dos攻击的危害主要源于三个方面。一是制造大流量无用数据,造成通往被攻击主机的网络拥塞,使被攻击主机无法正常和外界通信。二是利用被攻击主机提供服务或传输协议上处理重复连接的缺陷,反复高频地发出攻击性的重复服务请求,使被攻击主机无法及时处理其它正常的请求。三是利用被攻击主机所提供服务程序或传输协议的本身实现缺陷,反复发送畸形的攻击数据引发系统错误地分配大量系统资源,使主机处于挂起状态甚至死机。

8 结语

工业控制系统信息安全事关国计民生,保障系统信息安全是开展工业建设的坚实基础。针对不同的工业控制系统,采取适当的渗透测试方案,实行恰当的安全防护措施,才能确保各行业网络的安全可靠。

作者简介

李林枫(1996-),男,湖南常德人,工程师,现就职于中国电子技术标准化研究院网络安全研究中心,主要研究方向为工业信息安全。

黄晶晶(1985- ),女,安徽合肥人,高级工程师,博士,现就职于中国电子技术标准化研究院网络安全研究中心,主要研究方向为工业信息安全。

李 琳(1983- ),男,山东济南人,高级工程师,博士,现就职于中国电子技术标准化研究院网络安全研究中心,任工业控制系统安全标准和测评工业和信息化部重点实验室技术总监,主要研究方向为工业信息安全、物联网安全、社交网络数据分析等。

参考文献:

[1] 周伟平, 等. 面向工业控制系统的渗透测试工具研究[J]. 计算机工程, 2019, (08) : 92 - 101.

[2] 夏冀, 等. 工业控制系统信息安全风险评估方法研究[J]. 自动化博览, 2019, (S2) : 58 - 60.

[3] 甘俊杰, 等. 石化、冶金、电力、轨交等行业工业控制系统信息安全隐患分析[J]. 自动化博览, 2018, (S2) : 50 - 53

摘自《工业控制系统信息安全专刊(第七辑)》

成员展示