首页
社区
课程
招聘
[原创]HMI固件解密思路
2020-12-10 10:26 19648

[原创]HMI固件解密思路

2020-12-10 10:26
19648

背景

HMI作为工业控制系统的一个重要组成部分,其安全性是非常重要的,一旦攻击者成功攻破了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分析

该SCADA软件主要由两大部分组成,一个是用C#编写的开发工具,可以使用dnspy进行反编译和调试,另一部分是运行时(runtime),这部分负责执行HMI逻辑,显示相关数据,runtime部分是nodejs编写的,对于这部分可以用vscode进行动态调试,这些技巧很基础,这里就不展开写了。

压缩包密码

简单搜索一些关键字,例如“pwd”便可快速定位到固件解压的代码,下图框起来的地方就是解压密码。

使用该密码解压之后,得到一个压缩包文件hmis.tar.gz。

使用十六进制打开hmis.tar.gz,发现该文件不是gz压缩包,很明显也被加密了,接下来就需要找到加密的算法以及加密的密钥。

AES密钥

使用binwalk来识别文件中包含的一些特殊文件头(如下图),binwalk在偏移0x22的地方识别到了一个openssl的salt。

通过简单搜索,发现文件是使用openssl命令直接加密的文件:

通过在SCADA软件的安装目录下搜索包含“openssl”字符串的文件,找到了一个可执行文件ba*ge.exe。

密钥如下所示:

删除前0x22字节,直接从“Salted”部分进行解密:

运行如下openssl命令进行解密:

1
openssl  enc -d -k "1DqhR7#xvUD@qU2F" -aes256 -in "hmi.tar.gz" -md md5 -salt | tar xz -C hmi/

最后成功解密出固件:

总结

解密固件往往是分析固件安全性的第一步,在解密固件之后,通过研究发现了该固件中的几十个安全缺陷,目前已经申请下来十几个CNVD编号,有些甚至能远程代码执行。当然这些漏洞从技术上来说都非常简单,这里就不细讲了。


[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

收藏
点赞5
打赏
分享
最新回复 (18)
雪    币: 4889
活跃值: (2265)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
lionnnn 2020-12-10 10:39
2
0
雪    币: 3674
活跃值: (3853)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
caolinkai 2020-12-10 11:14
3
0
雪    币: 2115
活跃值: (5657)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
微启宇 2020-12-10 12:00
4
0
雪    币: 1261
活跃值: (2524)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
AEVE 2020-12-10 14:28
5
0
雪    币: 961
活跃值: (4967)
能力值: ( LV12,RANK:297 )
在线值:
发帖
回帖
粉丝
L0x1c 3 2020-12-10 18:44
6
0
雪    币: 1699
活跃值: (760)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
wx_Dispa1r 2020-12-10 21:18
7
0
强大
雪    币: 417
活跃值: (201)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
naux 2020-12-11 08:56
8
0
strong!!!
雪    币: 7250
活跃值: (3231)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
十年后 2020-12-11 09:09
9
0
雪    币: 477
活跃值: (1412)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
mb_foyotena 2020-12-11 09:49
10
0
如果代码被混淆加密了呢,怎么动态调试
雪    币: 5249
活跃值: (1807)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
wanttobeno 2020-12-11 13:55
11
0
高手 感谢分享
雪    币: 1507
活跃值: (853)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
guangzisam 2020-12-12 13:27
12
0
最喜欢这种内容。伊朗核设施被美国的病毒破坏
雪    币: 989
活跃值: (718)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
komawangs 2020-12-12 13:52
13
0
分析思路赞一个!海为的HMI做得挺好的!
雪    币: 12605
活跃值: (14315)
能力值: ( LV13,RANK:400 )
在线值:
发帖
回帖
粉丝
wmsuper 7 2020-12-12 15:48
14
0
komawangs 分析思路赞一个!海为的HMI做得挺好的!
厉害,这都能看出来!
雪    币: 388
活跃值: (847)
能力值: ( LV3,RANK:32 )
在线值:
发帖
回帖
粉丝
Licae0 2020-12-15 17:32
15
0
太强了
雪    币: 1699
活跃值: (760)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
wx_Dispa1r 2020-12-15 20:37
16
0
Tql,学到了
雪    币: 630
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
文生 2020-12-16 15:42
17
0
学到了
雪    币: 47
活跃值: (356)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
xuha 2023-3-29 12:00
18
0
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
mb_qmtzgzzj 2023-4-7 15:49
19
0
游客
登录 | 注册 方可回帖
返回