-
-
[原创]某SCADA工程文件代码执行漏洞挖掘和利用
-
发表于:
2020-12-8 12:57
18444
-
[原创]某SCADA工程文件代码执行漏洞挖掘和利用
在工控系统中,工程师会将编写好的组态程序或者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是弹出一个计算器来验证是否执行成功。并将修改后的工程文件重新加密回去,这样一个恶意的工程就做好了。
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)