在工业自动化控制领域,组态软件是数据采集与过程控制的专用软件,是实现人机交互必不可少的工具。工程设计人员使用组态软件在PC机上进行工程画面组态的编辑,然后把编译后的组态逻辑通过以太网或串口下载到PLC或其它连接设备中运行,并进行相应的控制和监视。组态软件广泛应用于机械、汽车、石油、化工、造纸、水处理以及过程控制等诸多领域。
本次研究的组态软件是一家取得国内市场领先地位厂商的产品,该产品广泛应用与工业控制领域,如轻工业、电力、交通、能源等通用装备控制行业。
天弓实验室研究员发现,该品牌组态软件的最新版本中工程文件加密机制比较脆弱,攻击者可在不知道文件密码的情况下获取密码,从而修改工程文件,改变生产流程,给工业生产过程带来损失。
打开软件,新建一个工程文件,添加一个组件,先保存为无密码项目,然后添加文件保护密码,另存为有密码文件。
使用分析工具打开这两个项目文件,查看数据统计结果。通过比对发现两个文件中都存在大量的16进制“4D”数据,在整个文件数据中占比都高于58%。在正常情况下该文件中占比最多的数据是“00”,所以推测工程文件无论是否设置文件保护密码,都要使用16进制“4D”进行异或加密。
下面进行比对分析
无密码分析
有密码分析
所以使用“4D”分别对这两个文件进行异或运算,结果在两个文件中都发现了一些可读字符,说明思路是对的,当异或运算之后的文件就是明文文件。
无密码
有密码
经过对比两个文件的异同,发现无论是否加密,文件头是一样的。继续往下查看,在加密密码存储区域有明显的差异。可看到加密文件的密码为“aaaaaa”,未加密文件没有密码。
通过上述分析明白原理后我们就可以编写解密脚本以实现自动化获取工程文件的加密密码,而不用每次进行分析。本次编写的脚本可以获取到工程文件是否有密码保护、密码长度及密码。
攻击人员通过控制生产网的工程师站后,打开工控组态软件查看工程文件时需要输入口令才可继续。攻击人员可以利用该解密脚本把工程文件进行解密获得密码,从而进入组态工程进行修改组态逻辑,以改变工业正常生产流程。
工程文件加密是应对网络攻击的最后一道防护措施,能够在生产网被攻陷时保证生产流程不被篡改。通过以上内容可以看出,部分组态软件在工程文件加密方面不够重视。文件加密应使用完善的加密算法,由加密密码参与运算来生成足够长的子密钥,再用子密钥来加密文件,而不是使用简单的固定值来对文件加密。