-
-
[原创]HMI固件解密思路
-
发表于:
2020-12-10 10:26
20940
-
HMI作为工业控制系统的一个重要组成部分,其安全性是非常重要的,一旦攻击者成功攻破了HMI设备,就可以读取甚至恶意修改工业现场中的数据变量(温度,压力,阀门开关等),严重危害生产安全。所以一些HMI生产厂商为了保护HMI的固件不被逆向分析,一般都会对提供下载的固件进行加密,本篇文章以一个HMI设备作为例子,介绍了如何不拆机直接解密固件文件。
HMI(Human Machine Interface)人机界面是系统和用户交货信息的媒介,在工控系统中将具有触摸输入的HMI叫做触摸屏。HMI用来连接可编程序控制器(PLC)、变频器、直流调速器、仪表等工业控制设备,通过采集工控现场的数据使之呈现出来,同时也可以让用户直接完成一些设备的控制。
下面是一个典型的场景,HMI作为SCADA系统中的一个部分,提供可视化和控制设备的能力,PLC控制不同的传感器和执行器,每个PLC都配有一个HMI(当然多个PLC也可以连接一个HMI设备)。
HMI设备固件可以从官网上很容易获取到,这里直接下载它最新版的固件:
同时我们需要下载与之配套的SCADA软件,如下:
使用十六进制编辑软件打开HMI固件文件,可以看到很明显的“PK”头,说明是zip压缩包:
将该文件加个“.zip”后缀,再用解压缩软件尝试解压,不出所料,该压缩包有密码保护:
经过分析知道了固件是一个压缩包,需要密码才能解开,那如何找到密码呢?一般而言,SCADA软件中可能存在固件解密逻辑,所以可以先在SCADA的代码中查找看有没有解密的密钥。
该SCADA软件主要由两大部分组成,一个是用C#编写的开发工具,可以使用dnspy进行反编译和调试,另一部分是运行时(runtime),这部分负责执行HMI逻辑,显示相关数据,runtime部分是nodejs编写的,对于这部分可以用vscode进行动态调试,这些技巧很基础,这里就不展开写了。
简单搜索一些关键字,例如“pwd”便可快速定位到固件解压的代码,下图框起来的地方就是解压密码。
使用该密码解压之后,得到一个压缩包文件hmis.tar.gz。
使用十六进制打开hmis.tar.gz,发现该文件不是gz压缩包,很明显也被加密了,接下来就需要找到加密的算法以及加密的密钥。
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)