人工智能驱动的网络攻击:如何检测、预防和抵御智能威胁

立即阅读
我们利用人工智能进行网站翻译,虽然我们力求准确,但不一定总是 100%精确。感谢您的理解。

保护 OT 系统免受远程攻击:MetaDefender OT Security™ 如何保护 Micrologix™ 1400 控制器免受 CVE-2021-22659 的攻击

OPSWAT
分享此贴
OPSWAT 研究金计划参与者

保护工业控制系统和 OT 环境免受远程攻击比以往任何时候都更为重要,尤其是CVE-2017-14469和现在的 CVE-2021-22659 等漏洞都是针对罗克韦尔自动化公司广泛使用的 Micrologix 1400 控制器。OPSWAT 奖学金项目的学生在受控环境中测试了这一漏洞,凸显了安全的必要性。 

在本博客中,我们将探讨学生们如何演示攻击者如何利用该漏洞导致系统崩溃,以及如何利用缺乏适当的输入验证来破坏 PLC 的运行。 

什么是 PLC?罗克韦尔自动化 Micrologix 1400 解读

PLC (可编程逻辑控制器)是一种工业计算机,旨在通过控制机械和其他工业操作实现流程自动化。它可在恶劣环境中工作,并根据传感器输入执行特定任务。罗克韦尔自动化的 MicroLogix 1400 控制器是一种紧凑型模块化 PLC,通常用于中小型应用。它以成本效益和灵活性著称,支持各种通信协议,并提供数字和模拟输入/输出选项,用于与设备连接。

用于工业控制系统监控的OPSWAT 设备图像

编程通常通过梯形图逻辑使用罗克韦尔自动化的软件完成,用户可以创建控制序列。MicroLogix 1400 用途广泛,适用于机器控制和过程自动化等任务。其模块化设计使用户可以根据具体应用要求扩展和定制系统。

CVE-2021-22659 简介

2021 年 1 月,罗克韦尔自动化收到印度 Veermata Jijabai 技术学院 (VJTI) COE-CNDS 的 Parul Sindhwad 和 Faruk Kazi 博士关于 MicroLogix™ 1400 控制器漏洞的报告。他们在 21.6 及更早版本中发现了一个安全漏洞,允许未经认证的远程攻击者发送特制的 Modbus 数据包,使攻击者能够检索或修改寄存器中的随机值。如果被成功利用,可能会导致缓冲区溢出,造成拒绝服务。故障 LED 灯将闪烁红色,通信可能中断。从拒绝服务状态恢复需要用户清除故障。 

NVD 将此安全漏洞评估为 "高度严重"。 

CVSS 3.x 指标显示 NIST NVD 的严重性得分高达 8.6 分

攻击阶段

PLC MicroLogix 网络攻击各阶段示意图

未通过身份验证的远程攻击者通过网络访问存在漏洞的 MicroLogix 1400 PLC,可以发送特制数据包来修改寄存器中的值。这可能会导致设备出现拒绝服务情况,造成系统损坏和停机。此类事件会严重扰乱企业的生产运营和其他业务活动。

Modbus 协议

Modbus 协议由 Modicon 于 1979 年开发,是一种消息传递结构,旨在建立智能设备之间的客户端-服务器通信。该协议最初设计用于 Modicon 的 PLC,后来成为工业电子设备之间的标准通信协议。 

Modbus 协议有以太网(Modbus TCP)和串行线路(Modbus RTU 和 Modbus ASCII)两种。Modbus RTU(远程终端设备)通过串行通信以二进制形式直接传输数据,而Modbus TCP(传输控制协议)则将 Modbus 协议数据嵌入 TCP 数据包,通过 TCP/IP 网络传输。 

Modbus 协议栈与 OSI 通信协议层比较图

Modbus 报文结构

Modbus 是一种请求-响应协议,客户端向 Modbus 设备发送请求,设备随后作出响应。

客户端与服务器之间 Modbus 事务通信示意图

从主站发送到副站的 Modbus 报文包含副站地址、"命令"(如 "读寄存器 "或 "写寄存器")、数据和校验和(LRC 或 CRC)。

Modbus RTU 报文结构(含报文头和功能代码

读取或修改数据时,数据地址用于 Modbus 查询报文。Modbus 定义了四种数据类型:线圈、输入状态、输入寄存器和保持寄存器。其中两种数据类型存储开关(1 位)值,称为线圈和离散输入;另两种数据类型以 16 位字存储数值,称为寄存器。每个寄存器都可以只读或读写。

数据类型访问说明
线圈读写器单比特输出。
离散输入只读单比特输入
输入寄存器只读16 位输入寄存器
保持寄存器读写器16 位输出寄存器。

Modbus 功能代码分为三类:

  • 公共功能代码 - 从 1 到 127,用户自定义代码除外。 
  • 用户自定义功能代码 - 分为 65 至 72 和 100 至 110 两个范围。 
  • 保留功能代码 - 某些公司用于传统产品,不对外公开使用。
功能类型功能名称功能代码
数据访问位访问物理离散输入读取离散输入2
内部位或物理线圈

读取线圈

写入单线圈

写入多个线圈

1

5

15

16 位访问物理输入寄存器读取输入寄存器4
内部寄存器或物理输出寄存器

读取多个保持寄存器

写入单个保持寄存器

写入多个保持寄存器

读/写多个寄存器

屏蔽写寄存器

读取 FIFO 队列

3

6

16

23

22

24

文件记录访问

读取文件记录

写入文件记录

20

21

诊断

读取异常状态

诊断

获取 Com 事件计数器 

获取通信事件日志 

报告从属设备 ID 

读取设备标识 

7

8

11

12

17

43

其他封装接口传输43
功能类型:数据访问
子类型:位访问
类别:物理离散输入
功能名称:读取离散输入端
功能代码:2
功能类型:数据访问
子类型:位访问
类别:内部位或物理线圈
功能名称:读取线圈
功能代码:1
功能类型:数据访问
子类型:位访问
类别:内部位或物理线圈
功能名称:写入单线圈
功能代码:5
功能类型:数据访问
子类型:位访问
类别:内部位或物理线圈
功能名称:写入多个线圈
功能代码:15
功能类型:数据访问
子类型:16 位访问
类别:物理输入寄存器
功能名称:读取输入寄存器
功能代码:4
功能类型:数据访问
子类型:16 位访问
类别:内部寄存器或物理输出寄存器
功能名称:读取多个保持寄存器
功能代码:3
功能类型:数据访问
子类型:16 位访问
类别:内部寄存器或物理输出寄存器
功能名称:写入单个保持寄存器
功能代码:6
功能类型:数据访问
子类型:16 位访问
类别:内部寄存器或物理输出寄存器
功能名称:写多个保持寄存器
功能代码:16
功能类型:数据访问
子类型:16 位访问
类别:内部寄存器或物理输出寄存器
功能名称:读/写多个寄存器
功能代码:23
功能类型:数据访问
子类型:16 位访问
类别:内部寄存器或物理输出寄存器
功能名称:掩码写寄存器
功能代码:22
功能类型:数据访问
子类型:16 位访问
类别:内部寄存器或物理输出寄存器
功能名称:读取 FIFO 队列
功能代码:24
功能类型:数据访问
子类型:文件记录访问
功能名称:读取文件记录
功能代码:20
功能类型:数据访问
子类型:文件记录访问
功能名称:写文件记录
功能代码:21
功能类型:
功能名称:读取异常状态
功能代码:7
功能类型:
功能名称:诊断
功能代码:8
功能类型:
功能名称:获取通信事件计数器
功能代码:11
功能类型:
功能名称:获取通信事件日志
功能代码:12
功能类型:
功能名称:报告从属设备 ID
功能代码:17
功能类型:
功能名称:读取设备标识
功能代码:43
功能类型:
功能名称:封装接口传输
功能代码:43

剥削

脆弱性分析

通过分析,我们的OPSWAT 研究生研究员发现,在 Modbus TCP 通信过程中,协议缺乏对传输数据包的验证和加密。此外,MicroLogix 1400 PLC 的输入验证也没有正确实施。因此,远程攻击者可以通过数据包嗅探分析 Modbus TCP 数据包,并通过 Modbus TCP 协议向 PLC 发送任何未经验证的请求。由于 MicroLogix 1400 PLC 设备缺乏输入验证,远程验证攻击者可以发送大量带有随机值的数据包,从而可能导致 PLC 崩溃。

重写寄存器

最初,我们试图捕获用于读写 PLC 上寄存器的 Modbus TCP 数据包。为此,我们检查了一个名为 Modbus Poll 的应用程序生成的数据包,该应用程序可帮助读写 MicroLogix 1400 PLC 上的寄存器。

显示用于写入单个寄存器的 Modbus Poll 工具界面的截图

通过使用 Wireshark 捕获网络接口的所有数据包,我们可以识别出用于写入单个寄存器的 Modbus TCP 数据包:

数据包截图显示了一个带写入单个寄存器功能代码的 Modbus 事务
Modbus TCP 有效载荷的详细分类,包括事务和协议标识符

根据嗅探数据包的结构,我们开发了一个简单的 Python 脚本来发送 TCP 数据包,请求写入目标 PLC 上的寄存器。在这种情况下,PLC 的 IP 地址为192.168.93.89

启动 Modbus TCP 连接并发送有效载荷的 Python 代码示例

PLC 的寄存器在收到我们的恶意未验证数据包后被更改。 

显示带有写入多个寄存器功能代码的 Modbus/TCP 协议的数据包截图
带有 ADD 功能块的梯形逻辑图截图,用于添加源值

在 Micro Logix 1400 中,大多数数学指令使用三个参数:源 A、源 B 和目的地

源 A 和源 B 的值可以来自两个名为 N13:3 和 N13:4 的 16 位寄存器。此外,这些 16 位寄存器(如 N13:3 和 N13:4)中的值被限制在 -32,768 至 +32,767 的范围内。如果 N13:3 和 N13:4 的值很大,匹配指令的结果可能会超出数据类型的最大范围,从而可能导致 PLC 崩溃。因此,要导致 PLC 崩溃,就必须向所有寄存器(包括 N13:3 和 N13:4)写入较大的随机值。为此,我们对 Python 脚本进行了如下修改: 

显示创建用于写入多个寄存器的 Modbus TCP 有效载荷的 Python 脚本

模拟攻击

为了模拟真实世界中的攻击,我们的OPSWAT 研究生研究员尝试诱导位于OPSWAT CIP 实验室的 MicroLogix 1400 PLC 崩溃,前提是攻击者和 PLC 位于同一个网络中,并且能够相互通信。 

在OPSWAT 实验室的 MicroLogix 1400 PLC 的正常运行状态下,当 PLC 处于远程运行模式时,所有寄存器的值都是有效的,并在其数据类型的指定范围内,表明用户程序运行正常。 

RSLogix 500 数据文件截图,显示十进制格式的 N13 数据值

在执行我们的 Python 脚本后,将向 PLC 发送大量 Modbus TCP 数据包,要求在未经验证的情况下向所有寄存器写入大量随机值:

数据包捕获显示重复的 Modbus TCP 写入多个寄存器请求

收到这些恶意数据包请求后,包括 N13:3 和 N13:4 在内的所有寄存器的值都被设置为 16990。对 N13:3 和 N13:4 寄存器进行 ADD 操作的结果超出了 16 位寄存器的有效范围。这个问题会导致整数溢出,从而引发故障并中断 PLC 的运行,如 FAULTED 状态所示。

RSLogix 500 显示 N13 地址的故障条件和数据值

我们的OPSWAT 研究生研究员利用 CVE-2021-22659 成功破解了 MicroLogix 1400 PLC。

补救措施

显示 CVE 详情和 Rockwell Automation MicroLogix 关键漏洞的 PLC 漏洞仪表板截图

面对 CVE-2021-22659 这样的漏洞,全面的补救措施对于保护 OT 和网络物理系统至关重要。以下是一些可用于防止攻击扩散的关键策略:

  1. 检测已知的 CVE:定期扫描网络,查找 CVE-2021-22659 等漏洞。
  2. 监控异常行为:标记与 Micrologix 1400 PLC 通信频率的异常增加,这可能表明正在发生未经授权的数据传输攻击。
  3. 识别新设备连接:当有新设备连接到 PLC 时,系统应进行检测。 
  4. 网络隔离:隔离受影响的设备有助于防止攻击横向扩散,从而将影响降至最低。

OPSWAT的MetaDefender OT Security 通过检测 CVE、持续监控网络异常行为和识别未经授权的连接来满足这些需求。它利用人工智能学习正常的流量模式,建立基准行为,并实施策略来提醒异常情况。这样就能对潜在威胁做出即时、明智的反应。 

在发生利用 CVE-2021-22659 的攻击时,MetaDefender OT Security 可与MetaDefender Industrial Firewall 集成,根据设定的规则阻止可疑通信。防火墙使用人工智能学习常规流量模式并执行策略,以防止未经授权的连接。 

MetaDefender OT Security 将这些检测、警报和网络分段功能结合在一起,成为工业环境的理想防御机制,大大降低了操作技术环境中网络威胁的风险和影响。

了解OPSWAT的深度防御网络安全平台如何增强和完善您的态势。立即与专家联系,获取免费演示。

通过OPSWAT 了解最新信息!

立即注册,即可收到公司的最新动态、 故事、活动信息等。