Modbus协议身份验证绕过漏洞CVE-2021-22779分析

一、漏洞背景​

CVE-2021-22779 漏洞于 2021 年被曝光,存在于施耐德电气的 Modicon 可编程逻辑控制器(PLC)中。PLC 作为工业控制系统(ICS)的核心组件,广泛应用于能源、制造业、建筑自动化等关键领域,负责控制和监测各种工业过程。Modicon 系列 PLC 在全球范围内被大量使用,其安全性直接关系到众多工业设施的稳定运行。​

该漏洞由企业物联网安全公司 Armis 发现,它属于 Modicon 统一消息应用服务(UMAS)协议的身份验证绕过漏洞。UMAS 协议用于工程工作站与 PLC 之间的通信,负责配置和监控 PLC,然而其设计和实现存在缺陷,为攻击者提供了可乘之机。此外,此漏洞并非孤立存在,在 Armis 演示的利用链中,还涉及之前发现的多个其它漏洞,如 CVE-2018-7852、CVE-2019-6829 和 CVE-2020-7537,这些漏洞共同构成了对 Modicon PLC 的严重安全威胁。​

二、影响范围​

CVE-2021-22779 漏洞影响了 Modicon M340、M580 以及 Modicon 系列的其他部分型号的 PLC。由于这些 PLC 在工业领域的广泛应用,受影响的行业众多。在能源公用事业中,可能影响电力生产、输送和分配系统,导致停电、设备损坏或能源泄漏等严重后果;在建筑服务和 HVAC 系统中,可能使建筑物的环境控制系统失控,影响建筑物内人员的舒适度和安全性,甚至可能对建筑物的结构造成损害;在制造业中,可能导致生产线停滞、产品质量下降,给企业带来巨大的经济损失。​

从攻击者的角度来看,只要对目标 PLC 具有网络访问权限,就有可能利用该漏洞。这意味着,无论是内部网络攻击者,还是通过网络边界渗透进来的外部攻击者,都可以尝试利用此漏洞对 PLC 进行攻击。而且,一旦攻击者成功利用该漏洞,就可以绕过认证机制,进而利用未认证命令执行多种危险操作,对工业系统的安全运行构成极大挑战。​

三、技术原理​

(一)相关协议基础​
  1. Modbus 协议:Modbus 是工业控制系统中控制 PLC 的实际标准,于 1979 年由 Modicon(现为施耐德电气)首次发布。它设计时间较早,缺少现代系统所需的一些功能,如二进制对象与 PLC 之间的高效传输。Modbus 可以通过串行通信或 IP 通信运行,其中广泛使用的 Modbus/TCP 标准是其基于 IP 的版本。Modicon 在保留的 Modbus 功能码下扩展了 Modbus 实现,扩展后的协议即为 UMAS。​
  2. UMAS 协议:UMAS 在 Modbus 协议的基础上增加了身份验证、二进制数据传输、固件更新等特性,被 Modicon PLC(如 M340、M580 等)所实现。它重新实现了标准 Modbus 命令,并补充了一些 Modbus 缺少的必要功能。例如,UMAS 专有的 memoryblockwrite 命令(功能码 0x21),不需要身份验证即可将一组二进制数据写入特定 id 块内的偏移量,但写入只读块时会返回错误响应。​
(二)预定机制​

对 PLC 的某些更改需要多个相互依赖的命令,为确保此类情况下的正常运行,Modicon 实现了预定机制,用于同步 PLC 程序的修改,可视为一种针对某些关键更改的全局锁定机制。​

  1. 初始版本(basicreservation):通过功能代码为 0x10 的 UMAS 命令工作,该命令不需要身份验证或询问 - 响应(challenge - response)握手,依赖于 PLC 和工程师工作站上施耐德电气管理软件之间的硬编码共享密钥。此硬编码密钥可在未加密的 UMAS 流量中观察到,或通过对 Modicon PLC 固件进行逆向工程获取。​
  2. 增强版本:基于对共享密码(应用程序密码)进行验证的询问 - 响应握手。共享密码在项目文件上传到 PLC 时动态设置。增强预定机制使用功能码为 0x6e 的 UMAS 命令,工作站和 PLC 交换随机生成的 0x20 字节缓冲区,这些缓冲区的散列值与应用程序密码的散列值相结合完成预定。成功预定后,工作站会收到一个 1 字节令牌,用于后续对 PLC 进行需要身份验证的修改操作,而不修改 PLC 的 UMAS 命令不需要此令牌,可在无工作站身份验证情况下执行。​
(三)漏洞利用过程​
  1. 通过未公开命令泄露密码哈希(CVE-2020-7537 相关):对 M340 PLC 最新固件的静态分析发现,存在一个可疑的 UMAS 命令 pu_readphysicaladdress,它可从输入命令选择地址的存储块拷贝数据到响应缓冲区。该函数除简单验证缓冲区大小外,对从内存读取的地址无限制,本质上允许攻击者泄漏 PLC 地址空间内的数据。通过此命令,攻击者可以尝试获取应用程序密码(或其哈希值)。​
  2. 利用 memoryblockread 命令绕过认证(CVE-2021-22779):研究人员发现名为 memoryblockread 的未记录命令,工程工作站的 ecostruxure 软件会使用该命令在预身份验证阶段从 PLC 读取密码哈希值,并与用户输入的密码哈希值进行比较。由于此机制存在缺陷,密码哈希值既通过未加密协议传递,又能被未经身份验证的攻击者读取(执行 memoryblockread 命令)。同一网络上的攻击者可利用此命令从 PLC 内存读取密码哈希值,完成质询响应过程,进而获取启用经过身份验证命令所需的密码令牌,实现身份验证绕过。​
  3. 利用已绕过认证执行危险操作:在成功绕过认证后,攻击者可以利用之前因安全问题被施耐德电气禁用或限制的未记录 UMAS 命令。例如 writephysicaladdress(功能代码 0x29)和 privatemessage(功能代码 0x6d),尽管施耐德对这些命令进行了修复(设置应用程序密码时禁用),但当 PLC 上未设置应用程序密码时(可能为向后兼容旧工具),这些命令仍可访问。攻击者利用 CVE-2021-22779 漏洞绕过认证后,可执行降级攻击,如上传无密码的项目文件,完全禁用对 PLC 的身份验证,进而利用这些命令实现远程代码执行(RCE),完全掌控设备。攻击者还可利用新获得的权限上传恶意软件,改变 PLC 的操作,并对管理 PLC 的工程工作站隐藏攻击痕迹。​

四、防护策略​

(一)及时更新固件​

密切关注施耐德电气发布的安全公告和固件更新,及时将受影响的 Modicon PLC 更新到最新版本。厂商通常会在更新中修复已知漏洞,增强系统安全性。例如,针对 CVE-2021-22779 漏洞,施耐德电气计划发布补丁解决绕过身份认证的问题,组织应在补丁发布后尽快评估并实施更新。在更新固件前,需对工业系统进行全面备份,以防更新过程中出现意外导致数据丢失或系统故障。同时,要在测试环境中对更新后的固件进行充分测试,确保其与现有系统兼容,不会引入新的问题。​

(二)强化网络安全防护​
  1. 网络分段:采用网络分段技术,将工业网络与企业其他网络以及外部网络隔离开来。通过划分不同的安全区域,限制攻击者对 PLC 所在网络的访问范围,减少攻击面。例如,在工业网络与办公网络之间部署防火墙,阻止未经授权的网络流量穿越不同区域。配置防火墙规则时,应只允许必要的通信流量通过,如工程工作站与 PLC 之间基于 UMAS 协议的通信,且要严格限制源 IP 地址和目标 IP 地址范围。​
  2. 访问控制列表(ACL):在网络设备(如路由器、交换机)上配置 ACL,根据源 IP 地址、目标 IP 地址、端口号等条件,对访问 PLC 的网络流量进行精细控制。只允许授权的设备和用户访问 PLC,禁止未知或可疑的流量接近 PLC。比如,只允许特定的工程工作站 IP 地址访问 PLC 的 UMAS 端口,其他 IP 地址的访问请求将被拒绝。定期审查和更新 ACL 规则,以适应网络环境的变化和新的安全需求。​
  3. 监测异常流量:部署入侵检测系统(IDS)或入侵防御系统(IPS),实时监测工业网络中的流量,及时发现异常流量行为。对于与 UMAS 协议相关的异常流量,如大量的未授权的 memoryblockread 命令请求、异常的密码哈希值读取尝试等,系统应及时发出警报。IPS 还可自动采取措施阻断可疑流量,防止攻击进一步发展。持续更新 IDS/IPS 的规则库,以识别新出现的攻击模式和恶意流量特征。​
(三)加强身份验证与访问管理​
  1. 强密码策略:在工程工作站和 PLC 上设置强密码,避免使用默认密码或简单易猜的密码。鼓励用户使用复杂的密码组合,包括字母、数字、特殊字符,并定期更换密码。例如,要求密码长度至少为 12 位,且每 90 天更换一次。同时,在 ecostruxure 软件中加强密码强度检测,当用户设置不符合要求的密码时给予提示和限制。​
  2. 多因素身份验证(MFA):引入多因素身份验证机制,除了密码外,还要求用户提供其他形式的身份验证信息,如短信验证码、硬件令牌生成的一次性密码等。这增加了攻击者破解身份验证的难度,即使密码被泄露,攻击者也难以绕过其他验证因素访问 PLC。例如,在工程工作站登录访问 PLC 时,系统在用户输入密码后,向用户绑定的手机发送验证码,用户需输入正确的验证码才能完成登录。​
  3. 最小权限原则:遵循最小权限原则分配用户权限,只授予用户完成其工作任务所需的最小权限。对于工程工作站的用户,根据其工作职责,精确设置对 PLC 的操作权限,如只允许特定用户进行特定类型的配置更改,禁止普通用户执行可能影响系统安全的高级操作,如修改 PLC 的核心控制逻辑、上传新的程序等。定期审查用户权限,确保权限分配的合理性和安全性。​
(四)定期安全评估与培训​
  1. 安全评估:定期对工业控制系统进行全面的安全评估,包括漏洞扫描、渗透测试等。通过漏洞扫描工具检测 PLC 及相关系统是否存在已知漏洞,如 CVE-2021-22779 及其他潜在的安全隐患。渗透测试则模拟真实的攻击场景,尝试利用系统中的漏洞获取访问权限或执行恶意操作,以发现系统中可能存在的深层次安全问题。根据评估结果,及时采取措施修复漏洞,完善安全防护措施。​
  2. 人员培训:对涉及工业控制系统操作和维护的人员进行安全培训,提高其安全意识和技能。培训内容包括安全基础知识、常见攻击手段及防范方法、安全策略和操作规程等。使员工了解 CVE-2021-22779 等漏洞的危害,掌握如何正确配置和使用 PLC 以降低安全风险,以及在发现异常情况时如何及时响应和报告。定期组织安全培训和演练,确保员工能够熟练应对各种安全事件。​

你可能感兴趣的:(Modbus协议身份验证绕过漏洞CVE-2021-22779分析)