工业“军刀”出鞘 警惕“软战争”外挂

一、背景

2022年4月13日,美国CISA、DOE、NSA和FBI多个机构发布了一份联合安全公告,披露了一个专门针对工业控制系统的攻击工具。Mandiant公司将其命名为“INCONTROLLER”,Dragos公司将其命名为“PIPEDREAM”,下文中会统一使用“INCONTROLLER”。INCONTROLLER可以降低攻击者对工业知识的依赖,对多个行业的特定工业控制设备进行攻击,截止目前暂未发现任何组织被攻击或者感染。但是由于INCONTROLLER具备干扰、破坏或者潜在破坏工业过程的能力,所以还是会对拥有目标设备的工业组织构成严重的威胁。

二、工具简介

INCONTROLLER由多个模块组成,并不利用特定的漏洞,而是使用CodeSys、Modbus和OPC UA等协议的本身功能实现的一个伪造客户端来连接和攻击目标设备,本质原因是由于目前工业设备与组态软件或者SCADA软件的连接过程没有做安全的双向鉴权认证。目前INCONTROLLER包含的攻击目标有施耐德和欧姆龙PLC产品,以及OPC-UA服务,但是从本质原因来讲不排除其他厂商或者产品也会被开发出对应的伪造客户端,从而存在遭受自动化精密化攻击的风险。

根据INCONTROLLER利用的功能和PLC设备上的相关配置,攻击者可以进行如下操作:

  • 进行网络扫描发现目标设备。
  • 改变IP地址以与攻击工具通信或使设备原有链接无法到达。
  • 发送Modbus协议报文(标准或私有)。
  • 自动连接到目标PLC,使用标准的编程协议进行密码暴力破解。
  • 上传和下载文件(包括但不限于配置、固件、应用、配方等)。
  • 执行拒绝服务攻击,迫使用户再次验证,或使设备无法被访问。
  • 对OPC-UA服务器进行读/写。

三、工具架构

INCONTROLLER攻击工具组成如图1及表1所示:

图1 INCONTROLLER工具架构

工具 用途
TAGRUN 一种扫描、枚举OPC服务器结构/标签、暴力破解凭据以及读取/写入OPC标签值的工具。
CODECALL 使用Modbus(最常见的工业协议之一)和CodeSys进行通信的框架。CODECALL包含与至少三款施耐德可编程逻辑控制器(PLC)交互、扫描和攻击的模块。
OMSHELL 一个能够通过HTTP、Telnet和FINS协议与Omron某些类型的PLC交互和扫描的框架。OMSHELL还可以与欧姆龙的伺服驱动器交互。
表1 INCONTROLLER工具架构

第一节:TAGRUN

TAGRUN具有扫描和枚举OPC UA服务器的能力,OPC作为工业系统的通信协议,用于从工业环境的资产中采集和存储数据。通过访问这些数据可以为攻击者提供生产系统和控制过程的详细描述。

TAGRUN具有的功能如下:

  • 扫描网络上的OPC UA服务器。
  • 读取OPC UA服务器的结构。
  • 读取/写入OPC UA服务器上的数据。
  • 暴力破解凭据。
  • 输出日志文件。

第二节:CODECALL

CODECALL使用Modbus协议与ICS设备进行通信,因为大多数ICS设备都支持Modbus,所以这使其能够与来自不同制造商的设备进行交互。但是,CODECALL同时包含一个特定模块,这个特定模块使用CodeSys V3协议与施耐德电气的Modicon M251/M241 PLC交互,可能发起扫描和攻击,同时M221/TM258/TM238等PLC模块也可能被扫描和攻击。

CODECALL具有的功能如下:

  • 识别网络上的施耐德电气和支持Modbus的设备。
  • 通过Modbus或CodeSys V3协议连接到特定设备。
  • 通过Modbus读/写设备寄存器。
  • 从Modbus的会话中请求设备ID。
  • 定义、转储或加载宏命令文件。
  • 通过CodeSys V3协议执行设备特定的命令,例如:
  1. 尝试使用用户名/密码登录,并使用提供的字典文件暴力破解凭据。
  2. 下载/上传文件到PLC设备。
  3. 查找文件/目录列表。
  4. 删除文件。
  5. 从PLC设备断开会话。
  6. 尝试DDoS攻击。
  7. 使用特制数据包使设备崩溃。
  8. 如果设备网关IP存在于不同的接口上,则添加路由。
  9. 发送自定义原始数据包。

第三节:OMSHELL

OMSHELL旨在获取对Omron PLC的shell访问权限,包括Omron NX1P2、NJ501、R88D-1SN10F-ECT伺服驱动器,以及可能来自NJ/NX产品线的其他类似设备。OMSHELL主要使用HTTP协议实现对应功能,但它也利用Omron专有的FINS协议进行扫描和设备识别。

OMSHELL具有的功能如下:

  • 扫描并识别网络上的欧姆龙设备。
  • 擦除设备的程序存储器并重置设备。
  • 从设备加载备份配置和备份数据或将数据恢复到设备。
  • 在设备上激活Telnet守护进程。
  • 通过Telnet守护程序连接到设备,上传和执行任意有效负载或命令。
  • 连接到设备上的后门并可执行任意命令。
  • 捕获网络流量。
  • 结束设备上运行的任何进程。
  • 将文件传输到设备。
  • 与网络内的伺服驱动器连接和通信。

四、工具的攻击场景及影响

INCONTROLLER就像一把“多功能瑞士军刀”,它能够扫描、破坏和控制工业系统。由于工业系统非常复杂,需要专业知识,INCONTROLLER在很大程度上降低了攻击者的攻击难度,其存在很可能让更多的人参与到对工业系统的攻击活动中。在工业系统中,采集生产环境中设备的数据并控制设备状态是工业系统的核心业务。使设备进入非预期状态、停机状态或直接损坏,非法控制设备的操作、篡改设备的配置、修改业务流程等行为,均属于对工业业务的攻击。根据攻击目标不同,针对工业业务的攻击可分为传感器攻击、控制器攻击、上位机攻击、服务器攻击四类。由于INCONTROLLER的多功能性,攻击目标可覆盖以上四种类型,若一旦被成功用于能源、化工,尤其是燃气和石油管道设施,后果将不堪设想。

INCONTROLLER中的三个工具可以独立使用,也可以组合使用。INCONTROLLER还具备另外两个可用于Windows系统的工具,一个是利用Windows华擎主板驱动漏洞,删除华擎主板驱动程序来加载带签名的恶意驱动程序;另一个是可提供侦察、指挥和控制功能的后门程序。

攻击场景:

1、扰乱控制器关闭操作

攻击者利用OMSHELL或CODECALL能使PLC崩溃,破坏其性能或以其他方式影响其可用性。在大型生产企业、流程工业企业,关键PLC可用性的丧失会导致停工停产,再次启动浪费大量原材料,造成财产损失。

在对工业系统的控制器进行安全测试时,利用Syn Flood对控制器Modbus 502端口发起拒绝服务攻击,发现能直接造成上位机的数据采集中断,如果在真实场景下影响难以想象。

2、重新编程控制器破坏工业流程

攻击者重新编程或向PLC发送未经授权的命令,改变现场设备和物理执行器(如电机)的状态。非预期的PLC命令可能会导致现场设备或物理执行器故障。

2010年发生的“震网”事件是篡改控制器导致物理设备故障的典型案例。主要借助USB摆渡和漏洞的横向移动,借助高度复杂的恶意代码和多个零日漏洞作为攻击武器在网络中传播,以铀离心机为攻击目标,重新编程控制器,改变离心机转子的频率造成离心机批量损坏,延缓了伊朗核项目进程。

3、禁用控制器安全保护功能造成物理破坏

攻击者可以禁用PLC的安全保护功能,然后重新编程或破坏其他ICS资产。安全保护功能的丧失可能会对人身安全、环境或设备造成影响。

2014年土耳其输油管道的爆炸,因为黑客关闭了警报、切断了通信联系、破坏了安全保护功能,最终因原油大幅增压导致爆炸。

结合上述可能的攻击场景和图2所示的INCONTROLLER攻击路径,并映射到具体的行业应用中做出如下研判:

图2 INCONTROLLER的攻击路径

  • 考虑到石油化工、冶金、火电、核电等行业流程工艺的特点,中断运行造成的经济损失大,可能产生环境污染,发生人员伤亡。
  • 交通、电网、水利设施、长输油气管线、矿山等行业会分布大量无人、有人值守站,位置分布广泛,部分公网传输和无线传输易遭受攻击,这些行业会影响民生。
  • 由于施耐德小型PLC和欧姆龙PLC在我国的机械自动化设备中使用较为广泛,因此离散制造业遭受攻击的可能性也较高,攻击可能会导致工厂停产以及废品率升高,部分核心工艺、参数泄露,这些会造成经济损失。
  • 对于危险、安全性要求高的工业设施,会有手动、安全仪表或一些备用系统保护,这些保护装置遭受攻击可能会发生恶性事故。

五、受影响的工业产品

INCONTROLLER影响施耐德电气MODICON系列PLC、欧姆龙Sysmac NJ和NX PLC,包括(但可能不限于) NX1P2、NX-SL3300、NX-ECC203、NJ501-1300、S8VK和R88D-1SN10F-ECT, 3S公司也针对INCONTROLLER发布了相应的安全通告,提及到了凡是使用CodeSys V3内核的产品均受到影响,如此一来影响到的将不止施耐德一个厂家的PLC,而是成千上百的PLC产品均逃避不了被攻击的威胁。

第一节:施耐德PLC

INCONTROLLER影响到的施耐德PLC设备如下表2所示:

产品 版本
TM221 所有版本
TM241/TM251 所有版本
TM258/LMC058 所有版本
LMC078 所有版本
TM238 所有版本
PacDrive LMC 所有版本
表2  施耐德受影响的产品

针对施耐德PLC的攻击端口如表3所列举:

端口类型 端口号 服务
TCP 502 modbus
UDP 27127/27216 Machine Expect Discovery
UDP 1740/1743 CodeSys V3
TCP 1105/11740 CodeSys V3
表3  受影响的施耐德PLC端口及服务

(1)Modbus

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所示:

图3 Machine Expect发送的加密报文

经过解密后的请求报文如图4所示:

图4  Machine Expect解密后的报文内容

当同一网段内存在施耐德对应系列的PLC时,PLC也会在网段内组播加密信息的报文,如图5所示:

图5 施耐德PLC发送的加密报文

经过解密后的PLC广播报文明文信息如下所示,其中包含了目标设备MAC地址、IP地址、固件版本、工程文件、设备名称及型号等详细信息,如图6所示:

图6 施耐德PLC解密后的报文内容

当Machine Expect组态软件接收到来自 PLC的消息后就会在设备列表中刷新出该PLC的信息,如图7所示。INCONTROLLER的CODECALL模块中包含实现上述功能的代码,会将网内施耐德该系列的PLC做一枚举,列举出详细信息后再次进行下一步攻击。

图7 Machine Expect组态软件接收PLC后显示的信息

(3)CodeSys V3

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)。

图8 CodeSys V3协议架构

TM241模块使用了CodeSys V3的通讯协议与Machine Expect组态软件进行数据交互,如图9所示,为CodeSys V3协议在TM241中的应用,下图中的报文是建立连接阶段TM241响应客户端请求的资产信息和ID节点信息。

图9  TM241响应客户端请求的报文

CodeSys V3在设计之初就考虑了安全性,当然也包括了授权认证机制,尤其在最新版的内核中已经强制开启了密码验证。所以恶意工具想要利用CodeSys V3协议发起攻击的话,必须通过验证,所以INCONTROLLER会内置常见的字典用于对CodeSys V3进行暴力破解。

当CODECALL工具成功破解PLC密码后,就可以具有和编程软件一样的能力,包括上载和下装工程代码以及配置,创建、读取修改PLC中的文件,启动和停止PLC。该攻击成功的关键是成功破解PLC密码。

第二节:欧姆龙PLC

针对欧姆龙攻击端口如表4所示:

端口类型 端口号 服务
UDP 9600 Omron-Fins
TCP 80 HTTP
TCP 23 Telnet
表4 受影响的欧姆龙PLC端口及服务

(1)Fins

Fins协议是欧姆龙公司开发的一种用于工业自动化网络协议,使用Fins协议可以实现各种网络的无缝通信。INCONTROLLER不仅可以通过Fins协议扫描发现欧姆龙PLC设备,还可以直接读写欧姆龙PLC中的变量值,同样严重危害工业生产安全。

(2)HTTP

INCONTROLLER利用PLC提供的HTTP接口,可以直接操作PLC的模式,包括切换运行、停止。

(3)Telnet

PLC中存在内置的Telnet服务,INCONTROLLER可以通过激活PLC的Telnet服务然后进行连接执行任意命令。一旦攻击者成功连上Telnet,相当于已经完全控制PLC,这时候攻击者可以上传一个代理模块,用于持久化渗透。

第三节:基于CodeSys V3内核的PLC

INCONTROLLER使用了CodeSys V3协议对PLC进行访问操作,所以从理论上来说,所有运行CodeSys V3内核的PLC都会受到影响,CodeSys官方也发布了安全通告,受到潜在影响的产品如下所示:

  • 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。

图10 使用CodeSys内核的厂商

(1)CodeSys V3的资产探测

CodeSys V3通过subcmd 0xc202获取CodeSys V3节点的信息,如图11所示:

图11 获取CodeSys节点的信息

返回的数据节点信息如图12所示,包括版本号、设备名称、节点名称、厂商名称等关键信息,通过该探测数据包可以识别网内的CodeSys V3节点。

图12 返回的数据节点信息

(2)CodeSys V3的授权机制

在前面部分已经提到,CodeSys V3从设计之初就考虑了安全,包括授权认证相关的特性。授权流程如图13所示:

图13 CodeSys授权流程

1、如图14所示,CodeSys V3协议的CmpDevice 0x2是请求登录PLC,如果将这一部分协议特征导入到工控防火墙可以识别出登录请求,并结合规则库做出警告或者阻断的行为。如果频繁发现该登录包,说明有可能是攻击者在爆破密码。

图14  登录请求

2、PLC会返回随机生成的challenge给客户端。

3、客户端通过challenge和密码计算出认证信息,并和用户名一起下发到PLC中,PLC通过认证信息判断密码是否正确,并返回对应的会话ID。

第四节:OPC-UA服务

INCONTROLLER除了针对工控PLC设备,还会对OPC-UA服务进行攻击。OPC-UA(OPC Unified Architecture,OPC统一架构)协议由于其跨平台(不受限于架构平台)、面向服务的架构、信息通信安全等强大能力,被广泛应用于工业设备间的通信。一个典型的OPC-UA架构如图15所示,OPC-UA服务器对上层提供统一的访问接口,方便SCADA、MES进行访问。

图15 典型的OPC-UA架构

幸运的是OPC-UA本身就是一个安全协议,支持TLS以及授权验证机制,恶意软件要想链接到OPC-UA服务,就必须对密码进行暴力破解。一旦暴力破解成功,攻击者就可以列出OPC-UA中的标签名称,例如温度,压力标签,让攻击者可以对工控网络有个大概了解,通过读写OPC-UA中的标签值从而破坏工业网络的生产活动。

六、安全检查

虽然在现阶段,调查人员得出结论为没有组织受到INCONTROLLER的影响,但是其调查范围是国外数量有限的工业组织,因此这里提供一套便于自查的方法显得尤为必要,防患于未然。以下提供几种检查方法:

1、将如上描述的资产识别,以及登录请求报文特征录入到工控IDS/IPS中,对相关敏感操作发出警告。

2、检查windows系统上的可执行文件是否包含“AsrDrv_exploit.pdb”字符串,如果是的话本系统可能受到INCONTROLLER的恶意入侵。

3、查看OPC UA审计记录是否存在暴力破解凭据、恶意证书使用、不规则连接尝试、配置更改和OPC标签更改的行为记录。

4、查看近期的流量记录中是否存在ARP、ping扫描活动,是否存在不同于安全基线的Telnet流量、HTTP流量、Modbus流量、CodeSys V3协议流量。

5、检查PLC上的日志,检查异常的凭证暴力破解、与异常设备崩溃/重启相关的错误代码、上传或下载的文件、文件删除、未经授权更改设备配置和执行命令的日志记录。

七、缓解措施

施耐德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、制定网络事件应急响应计划,并定期开展可落地可实施的演练。

八、总结

从披露的报告来看,除了Windows平台的漏洞利用,INCONTROLLER针对设备侧并没有使用任何漏洞,更多的是利用工控协议(公开协议Modbus/OPC-UA,私有协议CodeSys/Fins)来实现的一个伪客户端。如果事先针对有授权保护的协议设置强密码就能够很好的保护设备,但是针对没有授权设计的协议,例如Modbus之类的协议,这就需要借助工控安全设备对不安全的访问进行限制。

从攻击工具的成熟度来说,虽然INCONTROLLER比不上“震网”病毒具有高度的隐蔽性和先进性,但是可以看出,INCONTROLLER内置了PLC资产识别功能,能够自动化识别和串接后续的攻击,这需要工具开发者对私有协议CodeSys和Fins协议有大量的逆向工程经验。从INCONTROLLER的功能和覆盖面来看,INCONTROLLER目标范围广、功能相互依赖性较弱,可称之为进阶性的攻击工具,以此来看针对工控系统的攻击工具在逐步演进而且会越来越成熟和易用。

版权声明
本站“技术博客”所有内容的版权持有者为绿盟科技集团股份有限公司(“绿盟科技”)。作为分享技术资讯的平台,绿盟科技期待与广大用户互动交流,并欢迎在标明出处(绿盟科技-技术博客)及网址的情形下,全文转发。
上述情形之外的任何使用形式,均需提前向绿盟科技(010-68438880-5462)申请版权授权。如擅自使用,绿盟科技保留追责权利。同时,如因擅自使用博客内容引发法律纠纷,由使用者自行承担全部法律责任,与绿盟科技无关。

Spread the word. Share this post!

Meet The Author