文章总结: 本文详细解析工业控制系统过程控制层的漏洞利用技术,涵盖Modbus/TCP、OPCClassic、DNP3等协议的功能码滥用、未授权访问、主站伪装攻击,以及西门子S7、罗克韦尔Controllogix等PLC的停止CPU、恶意代码下载、标签篡改等特定攻击手法,并结合实例说明攻击路径与物理影响,同时提供工业防火墙部署、协议白名单、访问控制等防御建议。 综合评分: 85 文章分类: 漏洞分析,工控安全,渗透测试,应急响应,解决方案
【工业控制系统网络安全系列课程】第2课-工业控制系统的网络安全风险-过程控制漏洞利用(三)漏洞利用技术详解
原创
老付话安全 老付话安全
老付话安全
2026年4月11日 20:26 山东
在小说阅读器读本章
去阅读
点击蓝字
关注我们
关注我,带给你不一样的精彩
世界因你的沉淀而出彩
始于理论,源于实践,终于实战
老付话安全,每天一点点
激情永无限,进步看得见
严正声明
本号所写文章方法和工具只用于学习和交流,严禁使用文章所述内容中的方法未经许可的情况下对生产系统进行方法验证实施,发生一切问题由相关个人承担法律责任,其与本号无关。
特此声明!!!
本文字数:
7720字
阅读时间:
20分钟
本课重点讲解ICS环境中过程控制层的漏洞类型、利用方式及实际影响
目标
- 理解ICS过程控制层常见漏洞原理
- 掌握漏洞利用的基本路径与方法
- 能够识别漏洞可能引发的物理过程影响
- 了解典型攻击案例与防御思路
#
2.5 协议级攻击
- Modbus/TCP:功能码滥用、寄存器覆盖
- OPC Classic:未授权访问、内存破坏
- DNP3:主站伪装、冻结对象攻击
协议级攻击是指攻击者利用工控协议在设计或实现上的缺陷,直接对通信过程进行操纵,以达到窃取信息、篡改指令或破坏系统可用性的目的。以下是针对三种常见工控协议的攻击详解。
1. Modbus/TCP 协议攻击
协议简介:Modbus/TCP 是将 Modbus 协议封装在 TCP/IP 中的应用层协议,广泛应用于工业自动化领域。其设计简单,无认证、无加密,攻击者可轻易实施以下攻击:
-
功能码滥用
-
读功能码滥用:使用功能码 01(读线圈)、02(读离散输入)、03(读保持寄存器)、04(读输入寄存器)等,可大量读取设备内部数据,收集工艺参数、设备状态、密码哈希(如果存储在寄存器中)等敏感信息。
-
写功能码滥用:使用功能码 05(写单线圈)、06(写单寄存器)、15(写多线圈)、16(写多寄存器)等,直接修改设备参数或控制物理输出。
-
诊断功能码滥用:功能码 08(诊断)可进行各种测试,如重启通信、清除计数器等,可能导致设备行为异常。
-
原理:Modbus 定义了多种功能码,用于读写不同类型的寄存器或线圈。攻击者无需任何认证,即可发送任意功能码报文给目标设备,设备会无条件执行。
-
攻击方式:
-
实例:攻击者通过扫描发现一台 Modbus PLC 暴露在内部网络中,使用功能码 03 读取保持寄存器,获得当前压力值;然后使用功能码 06 将压力设定值改为极大值,导致安全阀起跳,工艺中断。
-
防御:部署工业防火墙,对 Modbus/TCP 流量进行深度检测,建立白名单策略(仅允许特定功能码、特定地址范围),对异常读写行为进行告警或阻断。
-
寄存器覆盖
-
关键参数篡改:如修改 PID 控制器的比例带、积分时间,导致系统振荡失控;修改报警阈值,使真实报警被忽略。
-
控制逻辑破坏:如果 PLC 程序将某些寄存器的值作为跳转条件,覆盖这些寄存器可导致程序执行路径改变,甚至进入死循环。
-
数据区填充:向大量寄存器写入随机数据,消耗 PLC 的内存和处理时间,造成拒绝服务。
-
原理:这是功能码滥用的具体形式之一,指攻击者通过连续写入操作,覆盖 PLC 中关键寄存器的值,从而彻底改变设备的行为或状态。
-
攻击方式:
-
实例:在针对水处理系统的攻击中,攻击者不断向加药泵的速率寄存器写入 0,使加药停止,同时篡改流量反馈寄存器,使 HMI 显示正常流量,导致操作员未能及时发现水质恶化。
-
防御:实施寄存器写保护机制,对关键寄存器设置权限;采用异常检测系统监控寄存器值的突变频率和幅度。
2. OPC Classic 协议攻击
协议简介:OPC Classic 基于微软的 COM/DCOM 技术,用于不同厂商的自动化软件之间交换数据。它广泛应用于 SCADA 系统与现场设备之间。由于 DCOM 配置复杂且安全性较弱,OPC 成为攻击者的重要目标。
-
未授权访问
-
空会话连接:利用 Windows 的 IPC$ 空会话,攻击者可以匿名连接到 OPC 服务器,枚举 OPC 服务器列表和其中的标签(Tags)。
-
凭据窃取:从已攻陷的主机中提取 OPC 客户端存储的凭据,或使用工具(如 Mimikatz)抓取内存中的明文密码。
-
直接访问:一旦获得有效凭据或利用匿名访问,攻击者可以像合法客户端一样连接 OPC 服务器,读取或写入任意标签,从而获取过程数据或下发指令。
-
匿名访问:DCOM 权限配置允许匿名用户连接。
-
弱口令:OPC 服务账户使用弱密码,或密码被硬编码在客户端配置文件中。
-
默认权限过高:Everyone 组拥有访问权限。
-
原理:OPC 服务器通常以 Windows 用户身份运行,客户端访问需要提供有效的 Windows 凭据。但在实际部署中,由于配置不当,常存在以下问题:
-
攻击方式:
-
实例:2014 年的 Havex 恶意软件专门扫描 OPC 服务器,通过 OPC 枚举功能收集工控系统的标签信息,为后续攻击提供情报。
-
防御:严格配置 DCOM 安全策略,禁止匿名访问,使用最小权限原则,对 OPC 通信进行加密和身份验证(如使用 OPC UA 替代 OPC Classic)。
-
内存破坏
-
畸形报文:构造过长的标签名、属性值等,触发缓冲区溢出。
-
恶意 COM 对象:利用 OPC 客户端向服务器请求特定的 COM 对象,而服务器在实例化该对象时可能加载恶意 DLL。
-
RPC 漏洞:OPC 依赖的 DCOM/RPC 协议历史上存在大量远程代码执行漏洞(如 MS03-026、MS08-067),攻击者可利用这些漏洞直接控制 OPC 服务器主机。
-
原理:OPC 服务器和客户端软件在实现 OPC 规范时,可能存在缓冲区溢出、空指针解引用等内存破坏漏洞。攻击者可以通过向 OPC 服务器发送特制的请求,触发漏洞,导致服务器崩溃或执行任意代码。
-
攻击方式:
-
实例:2011 年,研究人员公布了一个针对 OPC 服务器的漏洞(CVE-2011-1564),攻击者通过发送特制的 RPC 请求,可在目标系统上执行任意代码。
-
防御:及时更新 OPC 软件和操作系统补丁;使用应用白名单限制 OPC 服务器主机上可运行的程序;部署主机入侵防御系统(HIPS)监控异常进程行为。
3. DNP3 协议攻击
协议简介:DNP3 广泛应用于电力、水务等公用事业,支持主站与多个从站之间的通信。它比 Modbus 更复杂,但同样缺乏足够的安全机制(除非启用可选的 Secure Authentication)。
-
主站伪装
-
IP 地址欺骗:攻击者伪造合法主站的 IP 地址,向子站发送 DNP3 请求。如果网络层没有反欺骗措施,子站将接受这些命令。
-
会话劫持:攻击者监听并截获合法主站与子站之间的通信,获取当前的序列号等状态信息,然后注入伪造的请求,利用正确的序列号通过子站的验证。
-
重放攻击:截获并重放先前合法的控制命令(如“闭合断路器”),导致设备重复执行该操作。
-
原理:DNP3 协议中,主站(控制中心)与子站(RTU、IED)之间的通信没有强相互认证。攻击者可以伪装成合法主站,向子站发送恶意控制命令。
-
攻击方式:
-
实例:2015 年乌克兰电网攻击中,攻击者利用恶意软件从 HMI 端下发 DNP3 指令,这些指令被变电站的 RTU 接收并执行,相当于攻击者伪装成了主站。
-
防御:启用 DNP3 Secure Authentication(如果设备支持),对关键命令进行数字签名;在网络层部署访问控制列表,限制只有特定 IP 可以访问子站;使用深度包检测技术识别并拦截异常的命令序列。
-
冻结对象攻击
-
冻结数据篡改:攻击者发送冻结请求,将当前的真实数据冻结到一个寄存器,然后修改该寄存器的值。当主站读取冻结数据时,将获得虚假信息。
-
冻结死锁:反复发送冻结命令,消耗 RTU 的存储空间和处理资源,使其无法及时响应正常的请求。
-
清除冻结数据:使用清除冻结数据的命令,删除已经保存的重要历史数据,影响故障分析。
-
原理:DNP3 支持“冻结”功能,用于将当前的测量值(模拟量输入)保存到另一个寄存器中,以便后续读取。攻击者可利用此功能干扰数据采集或造成 DoS。
-
攻击方式:
-
实例:在电力系统中,攻击者可能冻结某个线路的电流值,使其显示为正常,而实际线路已过载,导致保护装置未能及时动作。
-
防御:限制对冻结功能的访问,仅允许授权主站执行此类操作;监控异常的冻结命令频率;对冻结数据区进行完整性校验。
2.6 PLC特定攻击
- 西门子S7协议:停止CPU、下载恶意代码块
- 罗克韦尔ControlLogix:标签篡改、程序上传/下载
- 施耐德Modicon:绕过口令保护
不同厂商的 PLC 采用各自的通信协议和编程环境,因此存在针对特定品牌 PLC 的攻击手法。这些攻击通常需要攻击者了解特定 PLC 的指令集、存储结构和工程软件。
1. 西门子 S7 协议攻击
协议简介:西门子 S7 PLC 使用 S7comm(S7 通信)协议,通常承载在 ISO-on-TCP(端口 102)之上。该协议支持丰富的功能,如读取/写入数据块、上传/下载程序、启停 CPU 等。
-
停止 CPU
-
原理:S7comm 协议中包含“停止 CPU”的命令(功能码 0x29)。攻击者无需认证即可发送此命令,导致 PLC 停止运行,所有输出进入预设的安全状态(可能全部关闭或保持),生产中断。
-
攻击方式:使用现成的工具(如 Metasploit 的
auxiliary/admin/scada/siemens_cpu_stop模块)或自行构造 S7comm 报文,向目标 PLC 的 102 端口发送停止命令。 -
实例:在多次工业安全演练中,攻击者通过已攻陷的工程站向 S7-300 PLC 发送 STOP 命令,导致模拟产线瞬间停机,HMI 显示 PLC 通信故障。
-
防御:在网络层限制对 PLC 102 端口的访问,仅允许特定的工程站 IP 进行写操作;部署工业防火墙检测并拦截 STOP 命令;在 PLC 侧启用密码保护(尽管早期版本可绕过)。
-
下载恶意代码块
-
在线修改:使用 Step 7 或 TIA Portal 连接到 PLC,下载修改后的程序。如果 PLC 未设置下载密码,攻击者可直接操作。
-
中间人攻击:在工程站与 PLC 之间拦截并篡改下载的程序,在用户不知情的情况下植入恶意代码。
-
利用 PLC 作为跳板:一旦一个 PLC 被感染,它可向网络中的其他 PLC 发起 S7comm 攻击,下载恶意代码,实现蠕虫式传播(如 PLC-Blaster 概念验证)。
-
原理:攻击者可以通过 S7comm 协议向 PLC 上传新的代码块(组织块 OB、功能块 FB、功能 FC)或覆盖原有的代码块,从而植入恶意逻辑。
-
攻击方式:
-
实例:震网病毒正是利用 S7comm 协议向 S7-300 PLC 下载恶意功能块(FB),修改离心机控制逻辑,同时向 HMI 报告虚假数据。
-
防御:对 PLC 程序进行版本控制和完整性校验;限制对 PLC 的编程访问,使用强密码并定期更换;部署网络监控系统检测异常的代码下载行为(如短时间内大量写入数据块)。
2. 罗克韦尔 ControlLogix 攻击
协议简介:罗克韦尔自动化 ControlLogix 系列 PLC 使用 CIP(Common Industrial Protocol)协议,通常封装在 EtherNet/IP 中。CIP 支持丰富的对象和服务,包括对标签的直接读写。
-
标签篡改
-
枚举标签:使用工具(如
pycomm3、cpppo)或编写脚本,通过 CIP 的“列出标签”服务获取 PLC 中所有标签的名称和类型。 -
直接写入:构造 CIP 写请求,将恶意值写入目标标签。例如,写入一个布尔标签强制启动电机,或写入一个实数标签修改 PID 设定值。
-
原理:CIP 协议中,标签(Tag)是变量名,代表了 PLC 内存中的数据。攻击者可以通过 CIP 的“读标签”和“写标签”服务,直接访问任何已知名称的标签,而无需经过 PLC 程序的逻辑处理。
-
攻击方式:
-
实例:研究人员演示了如何通过 Python 脚本向 ControlLogix PLC 的某个电机控制标签写入 1,直接启动电机,绕过了 HMI 和 PLC 程序中的任何联锁逻辑。
-
防御:在 ControlLogix PLC 中启用“安全套接”(Secure Socket)功能,限制未授权的 CIP 连接;使用工业防火墙对 EtherNet/IP 流量进行深度解析,建立标签读写白名单;对关键标签进行访问控制配置(如使用 CIP Security)。
-
程序上传/下载
-
程序下载(恶意植入):使用 RSLogix 5000 或 Studio 5000 软件,通过网络连接到 PLC,选择“下载”覆盖原有程序。如果 PLC 未设置密码或密码泄露,即可完成。
-
程序上传(情报窃取):将 PLC 中的程序文件上传到攻击者控制的计算机,分析其中的控制逻辑、密码(可能硬编码)、工艺参数等。
-
原理:CIP 协议支持将整个 PLC 项目文件(程序、配置)上传或下载。攻击者可以上传恶意程序替换原有程序,或下载(窃取)现有程序用于逆向分析和寻找弱点。
-
攻击方式:
-
实例:在针对制造企业的 APT 攻击中,攻击者上传了 PLC 程序,提取了关键工艺参数和配方,用于商业间谍或后续破坏。
-
防御:严格保护工程站的安全,防止恶意软件窃取程序;对 PLC 设置强下载密码,并启用日志审计;在网络层监控对 PLC 的编程连接,检测异常的下载/上传流量。
3. 施耐德 Modicon 攻击
协议简介:施耐德电气 Modicon 系列 PLC 使用多种协议,包括 Modbus、Unity Pro(基于 Modbus 的扩展)以及 FTP、HTTP 等。其早期版本存在较为简单的口令保护机制。
-
绕过口令保护
-
直接读取口令:使用 Modbus 功能码读取特定寄存器,这些寄存器中存储了明文或简单哈希的口令。攻击者从互联网上公开的文档或逆向工程中获知这些地址。
-
认证绕过:某些型号的 PLC 在进行编程连接时,会先发送一个“请求访问”命令,如果 PLC 未设置密码或密码验证存在漏洞,攻击者可能直接通过。
-
固件漏洞利用:利用已知的漏洞(如 CVE-2013-0679),攻击者可以发送特制的 Modbus 请求,使 PLC 跳过口令检查,直接获得编程权限。
-
原理:早期 Modicon PLC(如 Quantum、Premium 系列)的口令保护机制存在缺陷。口令可能存储在 PLC 的固定内存区域,且可以被未授权读取;或者认证过程可以绕过。
-
攻击方式:
-
实例:安全研究人员曾披露,某些 Modicon PLC 的口令存储在保持寄存器 0x7000 开始的区域,通过功能码 03 即可读取明文密码(如果密码设置不当)。
-
防御:升级到支持更强认证机制的 PLC 型号;使用外部防火墙限制对 PLC 的 Modbus 访问;对 PLC 进行网络分段,使攻击者无法直接访问;及时应用厂商发布的安全补丁。
2.7 固件攻击
- 固件提取与逆向
- 植入恶意固件
- 利用调试接口(JTAG, UART)
固件是嵌入在硬件设备(如 PLC、RTU、IED)中的底层软件,负责硬件初始化、操作系统核心功能以及上层应用程序的运行。固件攻击是最隐蔽、最难检测的攻击方式之一,因为固件位于操作系统和应用程序之下,传统的杀毒软件和主机防护往往无法触及。
1. 固件提取与逆向
-
原理:攻击者获取目标设备的固件映像,然后使用逆向工程工具分析其中可能存在的漏洞、硬编码凭据、未文档化的功能码或后门。
-
攻击方式:
-
binwalk:用于扫描固件文件,提取文件系统(如 SquashFS、CramFS)、内核、引导加载程序等。
-
IDA Pro / Ghidra:反汇编固件中的机器码,分析控制逻辑、协议处理函数、密码验证函数等。
-
Firmadyne / FirmAE:模拟运行固件,进行动态分析,观察其行为。
-
从厂商网站下载:许多厂商会公开提供固件更新文件,攻击者可直接下载进行分析。
-
从设备中读取:通过调试接口(JTAG、UART)或利用已知漏洞,从设备的闪存芯片中读取固件。如果设备支持固件上传功能(如通过 TFTP、HTTP),也可能被利用。
-
网络嗅探:在设备进行固件更新时,嗅探网络流量,捕获传输中的固件包(通常不加密或弱加密)。
-
逆向分析工具:
-
实例:安全研究人员在分析某品牌 PLC 固件时,使用 binwalk 提取出文件系统,发现其中包含一个硬编码的 SSH 私钥,可用于远程登录设备。
-
防御:厂商应避免在固件中硬编码敏感信息;对固件进行加密和签名,防止未授权提取和篡改;设备用户应仅从官方渠道获取固件,并验证其签名。
2. 植入恶意固件
-
原理:攻击者修改固件,在其中植入恶意代码(如后门、数据窃听模块、破坏逻辑),然后将修改后的固件刷入目标设备。由于固件在设备启动时最先运行,恶意代码可以隐藏在操作系统和应用程序之下,极难被发现。
-
攻击方式:
-
伪造固件更新:利用不安全的更新机制(无签名校验),将恶意固件伪装成官方更新,诱骗用户安装。
-
物理接触:通过 JTAG 或编程器直接写入。
-
远程利用:如果设备存在漏洞,攻击者可远程写入固件(如利用某些 PLC 的固件更新功能码)。
-
修改引导加载程序:植入代码,在操作系统加载前执行,可实现持久化,即使重装系统也无法清除。
-
修改内核或驱动程序:在内核级别植入后门,可拦截或篡改所有系统调用,例如拦截所有网络通信,对特定指令做出响应。
-
修改应用程序:篡改 PLC 运行时的固件中的控制程序(如梯形图解释器),使其在某些条件下执行恶意操作。
-
植入方式:
-
实例:安全研究项目“PLC-Blaster”展示了如何将恶意固件植入西门子 S7-1200 PLC,使其成为一个能够扫描和攻击其他 PLC 的蠕虫。该固件修改了 PLC 的通信堆栈,使其在正常功能之外执行恶意代码。
-
防御:厂商必须对固件更新包进行强数字签名,设备在更新前应验证签名;设备应具备安全启动机制,确保只有经过签名的固件才能运行;定期审计固件完整性(如计算哈希并与已知良好值对比)。
3. 利用调试接口(JTAG, UART)
-
原理:工业设备在开发和调试阶段会保留物理调试接口,如 JTAG(用于边界扫描和芯片调试)和 UART(串行控制台)。在产品部署后,这些接口若未禁用或未加物理保护,攻击者可通过物理接触利用它们获取高级权限。
-
攻击方式:
-
获取控制台访问:连接 UART 引脚,通常可以获得一个 root shell(如果系统未做限制)。许多设备在 UART 上默认提供无需密码的 root 访问。
-
引导参数篡改:在引导过程中通过 UART 中断,修改内核启动参数,例如指定
init=/bin/sh来获得 shell。 -
读取内存/固件:连接 JTAG 调试器,可以读取设备上的所有内存内容,包括固件、密钥、配置数据。
-
单步调试:可以暂停 CPU 运行,逐条执行指令,分析程序逻辑或绕过认证。
-
修改内存:可以在运行中修改内存值,例如修改密码检查的结果,直接获得 shell 访问。
-
JTAG 利用:
-
UART 利用:
-
所需设备:攻击者需要物理接触目标设备,使用 JTAG 调试器(如 J-Link、OpenOCD)或 USB 转 TTL 串口适配器。
-
实例:在对某款工业路由器的安全评估中,研究人员打开外壳,找到板上的 UART 引脚,连接后获得 root 权限的控制台,进而提取了整个固件和配置文件。
-
防御:
-
物理安全:将设备放置在可上锁的机柜中,限制未经授权的人员物理接触。
-
禁用接口:在产品发布时,通过熔断保险丝或配置选项永久禁用 JTAG/UART 接口。
-
认证:即使保留 UART,也应要求输入用户名和密码,并禁用 root 直接登录。
-
外壳防拆:使用防拆螺丝或密封贴,一旦被打开会留下明显痕迹。
end
往期内容回顾****
| | | — | | 【工业控制系统网络安全系列课程】第2课-工业控制系统的网络安全风险-过程控制漏洞利用过程 | | 【工业控制系统网络安全系列课程】第2课-工业控制系统的网络安全风险-过程控制漏洞利用(一)ICS过程控制漏洞概述 | | 【工业控制系统网络安全系列课程】第2课-工业控制系统的网络安全风险-过程控制漏洞利用过程 |
@请赐予我力量,关注和转发是最大的支持@
+VX:TCMAFNS119 欢迎进群交流
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:老付话安全 老付话安全 老付话安全《【工业控制系统网络安全系列课程】第2课-工业控制系统的网络安全风险-过程控制漏洞利用(三)漏洞利用技术详解》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。










评论