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)主机安全防护
8 结语
工业控制系统信息安全事关国计民生,保障系统信息安全是开展工业建设的坚实基础。针对不同的工业控制系统,采取适当的渗透测试方案,实行恰当的安全防护措施,才能确保各行业网络的安全可靠。
作者简介
李林枫(1996-),男,湖南常德人,工程师,现就职于中国电子技术标准化研究院网络安全研究中心,主要研究方向为工业信息安全。
黄晶晶(1985- ),女,安徽合肥人,高级工程师,博士,现就职于中国电子技术标准化研究院网络安全研究中心,主要研究方向为工业信息安全。
李 琳(1983- ),男,山东济南人,高级工程师,博士,现就职于中国电子技术标准化研究院网络安全研究中心,任工业控制系统安全标准和测评工业和信息化部重点实验室技术总监,主要研究方向为工业信息安全、物联网安全、社交网络数据分析等。
参考文献:
[1] 周伟平, 等. 面向工业控制系统的渗透测试工具研究[J]. 计算机工程, 2019, (08) : 92 - 101.
[2] 夏冀, 等. 工业控制系统信息安全风险评估方法研究[J]. 自动化博览, 2019, (S2) : 58 - 60.
[3] 甘俊杰, 等. 石化、冶金、电力、轨交等行业工业控制系统信息安全隐患分析[J]. 自动化博览, 2018, (S2) : 50 - 53
摘自《工业控制系统信息安全专刊(第七辑)》