原文始发于技术博客(格物实验室):工业“军刀”出鞘 警惕“软战争”外挂
一、背景
二、工具简介
根据INCONTROLLER利用的功能和PLC设备上的相关配置,攻击者可以进行如下操作:
- 进行网络扫描发现目标设备。
- 改变IP地址以与攻击工具通信或使设备原有链接无法到达。
- 发送Modbus协议报文(标准或私有)。
- 自动连接到目标PLC,使用标准的编程协议进行密码暴力破解。
- 上传和下载文件(包括但不限于配置、固件、应用、配方等)。
- 执行拒绝服务攻击,迫使用户再次验证,或使设备无法被访问。
- 对OPC-UA服务器进行读/写。
三、工具架构
工具 | 用途 |
TAGRUN | 一种扫描、枚举OPC服务器结构/标签、暴力破解凭据以及读取/写入OPC标签值的工具。 |
CODECALL | 使用Modbus(最常见的工业协议之一)和CodeSys进行通信的框架。CODECALL包含与至少三款施耐德可编程逻辑控制器(PLC)交互、扫描和攻击的模块。 |
OMSHELL | 一个能够通过HTTP、Telnet和FINS协议与Omron某些类型的PLC交互和扫描的框架。OMSHELL还可以与欧姆龙的伺服驱动器交互。 |
第一节:TAGRUN
TAGRUN具有的功能如下:
- 扫描网络上的OPC UA服务器。
- 读取OPC UA服务器的结构。
- 读取/写入OPC UA服务器上的数据。
- 暴力破解凭据。
- 输出日志文件。
第二节:CODECALL
CODECALL具有的功能如下:
- 识别网络上的施耐德电气和支持Modbus的设备。
- 通过Modbus或CodeSys V3协议连接到特定设备。
- 通过Modbus读/写设备寄存器。
- 从Modbus的会话中请求设备ID。
- 定义、转储或加载宏命令文件。
- 通过CodeSys V3协议执行设备特定的命令,例如:
- 尝试使用用户名/密码登录,并使用提供的字典文件暴力破解凭据。
- 下载/上传文件到PLC设备。
- 查找文件/目录列表。
- 删除文件。
- 从PLC设备断开会话。
- 尝试DDoS攻击。
- 使用特制数据包使设备崩溃。
- 如果设备网关IP存在于不同的接口上,则添加路由。
- 发送自定义原始数据包。
第三节:OMSHELL
OMSHELL具有的功能如下:
- 扫描并识别网络上的欧姆龙设备。
- 擦除设备的程序存储器并重置设备。
- 从设备加载备份配置和备份数据或将数据恢复到设备。
- 在设备上激活Telnet守护进程。
- 通过Telnet守护程序连接到设备,上传和执行任意有效负载或命令。
- 连接到设备上的后门并可执行任意命令。
- 捕获网络流量。
- 结束设备上运行的任何进程。
- 将文件传输到设备。
- 与网络内的伺服驱动器连接和通信。
四、工具的攻击场景及影响
INCONTROLLER中的三个工具可以独立使用,也可以组合使用。INCONTROLLER还具备另外两个可用于Windows系统的工具,一个是利用Windows华擎主板驱动漏洞,删除华擎主板驱动程序来加载带签名的恶意驱动程序;另一个是可提供侦察、指挥和控制功能的后门程序。
攻击场景:
1、扰乱控制器关闭操作
攻击者利用OMSHELL或CODECALL能使PLC崩溃,破坏其性能或以其他方式影响其可用性。在大型生产企业、流程工业企业,关键PLC可用性的丧失会导致停工停产,再次启动浪费大量原材料,造成财产损失。
在对工业系统的控制器进行安全测试时,利用Syn Flood对控制器Modbus 502端口发起拒绝服务攻击,发现能直接造成上位机的数据采集中断,如果在真实场景下影响难以想象。
2、重新编程控制器破坏工业流程
攻击者重新编程或向PLC发送未经授权的命令,改变现场设备和物理执行器(如电机)的状态。非预期的PLC命令可能会导致现场设备或物理执行器故障。
2010年发生的“震网”事件是篡改控制器导致物理设备故障的典型案例。主要借助USB摆渡和漏洞的横向移动,借助高度复杂的恶意代码和多个零日漏洞作为攻击武器在网络中传播,以铀离心机为攻击目标,重新编程控制器,改变离心机转子的频率造成离心机批量损坏,延缓了伊朗核项目进程。
3、禁用控制器安全保护功能造成物理破坏
攻击者可以禁用PLC的安全保护功能,然后重新编程或破坏其他ICS资产。安全保护功能的丧失可能会对人身安全、环境或设备造成影响。
2014年土耳其输油管道的爆炸,因为黑客关闭了警报、切断了通信联系、破坏了安全保护功能,最终因原油大幅增压导致爆炸。
结合上述可能的攻击场景和图2所示的INCONTROLLER攻击路径,并映射到具体的行业应用中做出如下研判:
- 考虑到石油化工、冶金、火电、核电等行业流程工艺的特点,中断运行造成的经济损失大,可能产生环境污染,发生人员伤亡。
- 交通、电网、水利设施、长输油气管线、矿山等行业会分布大量无人、有人值守站,位置分布广泛,部分公网传输和无线传输易遭受攻击,这些行业会影响民生。
- 由于施耐德小型PLC和欧姆龙PLC在我国的机械自动化设备中使用较为广泛,因此离散制造业遭受攻击的可能性也较高,攻击可能会导致工厂停产以及废品率升高,部分核心工艺、参数泄露,这些会造成经济损失。
- 对于危险、安全性要求高的工业设施,会有手动、安全仪表或一些备用系统保护,这些保护装置遭受攻击可能会发生恶性事故。
五、受影响的工业产品
第一节:施耐德PLC
产品 | 版本 |
TM221 | 所有版本 |
TM241/TM251 | 所有版本 |
TM258/LMC058 | 所有版本 |
LMC078 | 所有版本 |
TM238 | 所有版本 |
PacDrive LMC | 所有版本 |
端口类型 | 端口号 | 服务 |
TCP | 502 | modbus |
UDP | 27127/27216 | Machine Expect Discovery |
UDP | 1740/1743 | CodeSys V3 |
TCP | 1105/11740 | CodeSys V3 |
Modbus是一种串行通信协议,是目前使用最多的工控通信协议之一,通过Modbu协议可以读取并修改PLC中的变量值,例如操作阀门开关,温度,压力等值。由于Modbu协议在设计之初并没有考虑安全性,缺乏授权机制。INCONTROLLER使用Modbus协议可以无需认证直接连接到PLC中,读取PLC版本,改写寄存器值,这会导致PLC控制的代码逻辑以及输出发生异常,危害工控生产安全。
(2)Machine Expect Discovery
Machine Expect Discovery是用于施耐德PLC的发现协议,INCONTROLLER通过Machine Expect Discovery协议能探测发现工控网络中存活的施耐德PLC,使用Machine Expect组态软件连接PLC也会使用Machine Expect Discovery协议扫描PLC,该协议的使用并不意味着存在恶意活动。
当Machine Expect组态软件连接网络内的PLC时,会以组播的形式发送加密的广播字段寻找匹配的施耐德PLC,如图3所示:
CodeSys是全球最著名的PLC软件研发厂家德国3S(SMART,SOFTWARE,SOLUTIONS)公司发布的一款与制造商无关编程软件及工控设备内核(Runtime SDK),其所使用的通信协议也从V2来到了更加现代化更加安全的V3版本。施耐德的部分TM系列PLC使用了CodeSys V3协议和编程软件Machine Expect进行通信。CodeSys V3协议与V2协议完全不同,CodeSys V3协议的架构如图8所示,CodeSys V3数据报文单元可以抽象为一个协议栈,包括四层,分别为块驱动层(Block Driver layer)、数据报文层(Datagram layer)、通道层(Channel layer)、服务层(Services layer)。
第二节:欧姆龙PLC
端口类型 | 端口号 | 服务 |
UDP | 9600 | Omron-Fins |
TCP | 80 | HTTP |
TCP | 23 | Telnet |
Fins协议是欧姆龙公司开发的一种用于工业自动化网络协议,使用Fins协议可以实现各种网络的无缝通信。INCONTROLLER不仅可以通过Fins协议扫描发现欧姆龙PLC设备,还可以直接读写欧姆龙PLC中的变量值,同样严重危害工业生产安全。
(2)HTTP
INCONTROLLER利用PLC提供的HTTP接口,可以直接操作PLC的模式,包括切换运行、停止。
(3)Telnet
PLC中存在内置的Telnet服务,INCONTROLLER可以通过激活PLC的Telnet服务然后进行连接执行任意命令。一旦攻击者成功连上Telnet,相当于已经完全控制PLC,这时候攻击者可以上传一个代理模块,用于持久化渗透。
第三节:基于CodeSys V3内核的PLC
- CODESYS Control for BeagleBone SL
- CODESYS Control for Beckhoff CX9020 SL
- CODESYS Control for emPC-A/iMX6 SL
- CODESYS Control for IOT2000 SL
- CODESYS Control for Linux SL
- CODESYS Control for PFC100 SL
- CODESYS Control for PFC200 SL
- CODESYS Control for PLCnext SL
- CODESYS Control for Raspberry Pi SL
- CODESYS Control for WAGO Touch Panels 600 SL
- CODESYS Control RTE (SL)
- CODESYS Control RTE (for Beckhoff CX) SL
- CODESYS Control Win (SL)
- CODESYS Gateway
- CODESYS Edge Gateway for Windows
- CODESYS Edge Gateway for Linux
- CODESYS HMI (SL)
上述只是3S公司官方给出的受影响产品,譬如倍福CX9020 SL、WAGO的PFC系列等,还有很多应用CodeSys V3内核但没有被提及的PLC也在受影响的范围中,如图10是使用CodeSys内核的一些工控厂商,还有很多未列举出,比如汇川、禾川、英威腾、新华、固高等厂商的一些产品中也使用了CodeSys V3内核,目前国产化的工控设备应用越来越广泛,应该引起重视以应对INCONTROLLER。
CodeSys V3通过subcmd 0xc202获取CodeSys V3节点的信息,如图11所示:
在前面部分已经提到,CodeSys V3从设计之初就考虑了安全,包括授权认证相关的特性。授权流程如图13所示:
3、客户端通过challenge和密码计算出认证信息,并和用户名一起下发到PLC中,PLC通过认证信息判断密码是否正确,并返回对应的会话ID。
第四节:OPC-UA服务
六、安全检查
1、将如上描述的资产识别,以及登录请求报文特征录入到工控IDS/IPS中,对相关敏感操作发出警告。
2、检查windows系统上的可执行文件是否包含“AsrDrv_exploit.pdb”字符串,如果是的话本系统可能受到INCONTROLLER的恶意入侵。
3、查看OPC UA审计记录是否存在暴力破解凭据、恶意证书使用、不规则连接尝试、配置更改和OPC标签更改的行为记录。
4、查看近期的流量记录中是否存在ARP、ping扫描活动,是否存在不同于安全基线的Telnet流量、HTTP流量、Modbus流量、CodeSys V3协议流量。
5、检查PLC上的日志,检查异常的凭证暴力破解、与异常设备崩溃/重启相关的错误代码、上传或下载的文件、文件删除、未经授权更改设备配置和执行命令的日志记录。
七、缓解措施
1、在防火墙上针对目标TCP 502以及UDP 1740进行访问控制配置,严格限制对控制端口的访问权限。
2、使用对应编程软件对施耐德PLC进行设置,启用PLC中的安全保护策略,并设置强访问口令。
欧姆龙PLC
在防火墙上针对目标TCP/UDP 9600、TCP 80以及TCP 23进行访问控制配置,严格限制控制端口的访问权限。
基于CodeSys的通用PLC
1、在防火墙上针对目标UDP 1740行访问控制配置,严格限制控制端口的访问权限。
2、使用PLC编程软件设置强密码,保证PLC不被未授权访问。
3、启用PLC中的TLS设置,保证通信安全。
OPC-UA服务器
在OPC-UA服务端开启访问密码,并设置强口令,以防止暴力破解攻击。
网络类的隔离和防护遵循以下原则:
1、将ICS/SCADA系统与企业网络、互联网进行网络隔离,并限制任何进入或离开ICS/SCADA边界的通信。
2、尽可能为所有对ICS网络和设备的远程访问执行多因素身份验证。
3、提前备份工程文件,并对固件和控制器配置文件进行完整性检查,以确保这些备份的有效性。
4、将ICS/SCADA系统的网络链接限制为仅允许的管理和工程工作站访问。
5、制定网络事件应急响应计划,并定期开展可落地可实施的演练。
八、总结
从攻击工具的成熟度来说,虽然INCONTROLLER比不上“震网”病毒具有高度的隐蔽性和先进性,但是可以看出,INCONTROLLER内置了PLC资产识别功能,能够自动化识别和串接后续的攻击,这需要工具开发者对私有协议CodeSys和Fins协议有大量的逆向工程经验。从INCONTROLLER的功能和覆盖面来看,INCONTROLLER目标范围广、功能相互依赖性较弱,可称之为进阶性的攻击工具,以此来看针对工控系统的攻击工具在逐步演进而且会越来越成熟和易用。