首页
论坛
课程
招聘
[原创]某SCADA工程文件代码执行漏洞挖掘和利用
2020-12-8 12:57 4984

[原创]某SCADA工程文件代码执行漏洞挖掘和利用

2020-12-8 12:57
4984

前言

在工控系统中,工程师会将编写好的组态程序或者HMI画面保存到工程文件中,方便下次打开进行查看或者编辑。然而,开发人员在打开工程文件时,会发生什么呢?正常来说,组态软件负责解析对应的工程文件,在这过程中,如果组态软件的开发人员如果缺乏安全开发的意识,那么就可能导致一些常见的堆栈溢出甚至是命令注入的漏洞出现。攻击者可以引诱工程师打开恶意工程文件,利用代码执行漏洞在工程师站执行任意代码。本文以某个国产的SCADA软件的工程文件作为例子,分析在解析工程文件中存在的漏洞和利用的思路。

尝试插入代码

由于该工程文件支持js语言编写,而且runtime是nodejs编写的,所以在开始设想的时候是直接插入nodejs代码,看是否能触发恶意代码。但是事实证明,直接插入恶意代码的方法并不行,该组态软件有语法检查,只能调用指定的模块函数。

于是想到直接绕过语法检测器对工程文件直接插入恶意代码。

工程文件格式

使用十六进制编辑器打开该SCADA对应的工程文件,可以看到并没有很明显的magic number,所以文件应该是被加密的。

由于该SCADA组态软件是C#/nodejs共同实现的,所以通过dnspy很快就找到了该工程文件的解密算法,如下所示,可以看出这是一个被密码保护的SQLite的数据库文件。密码为SSProject.dbpassword的值。

在分析出算法后,我使用C#快速实现了一个加解密该工程文件的程序。该程序参数-e是加密,-d为解密。

最后,成功解密出该数据库文件,这时可以看到SQLite3数据库的header。

漏洞利用

通过SQLite编辑器对数据库文件进行查看和编辑,定位到代码执行的地方,这部分可以插入nodejs语法的代码。

 

使用nodejs编写一个payload插入到该字段中,这里的payload是弹出一个计算器来验证是否执行成功。并将修改后的工程文件重新加密回去,这样一个恶意的工程就做好了。

 


双击打开该工程文件,立即被SCADA runtime执行,计算器成功弹出,该漏洞可以在Windows10上稳定利用。

利用场景

1.使用钓鱼邮件将恶意工程文件作为附件对工程师进行钓鱼攻击,引诱工程师打开,由于传统的邮件WAF只对一些zip/office/pe等文件进行扫描,工程文件可以很容易绕过防火墙的检测成功进行投递。
2.在拿到主机控制权后,直接修改工程师保存好的工程文件,进行渗透持久化,甚至能达到在工程师之间进行传播的效果,这样可以对工控系统进行隐蔽性更高的渗透。
3.结合其他代码执行漏洞,比如WinExec代码执行类漏洞,可以绕过windows系统中MOTW,达到远程代码执行的目的。

总结

通过分析可以看出,现代化的SCADA软件开始尝试使用一些比较新兴的开发语言(在文中是nodejs)进行开发。开发人员虽然有较强的开发技术,但是缺少安全开发意识,导致在解析执行工程文件时出现了代码执行问题。本文是为数不多的分析并利用SCADA软件漏洞的文章,希望大家喜欢。


第五届安全开发者峰会(SDC 2021)议题征集正式开启!

收藏
点赞2
打赏
分享
最新回复 (1)
雪    币: 1756
活跃值: 活跃值 (677)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
caolinkai 活跃值 2021-5-10 16:48
2
0
这思路 很66666
游客
登录 | 注册 方可回帖
返回