本文中从厂商后门,设计缺陷,算法缺陷三个方面来介绍组态工程文件加密存在的安全问题,同时在最后总结了正确的组态工程文件加密的设计机制。
0x01 背景
在工业控制系统中,为了防止其他人员对组态工程文件进行修改,很多组态软件都支持对组态工程文件进行加密。当打开一个有密码的组态工程文件时,必须输入正确的密码方可查看和编辑该组态工程文件,否则不能打开,从而实现了工业控制系统中组态工程文件的安全管理。
本文中从厂商后门,设计缺陷,算法缺陷三个方面来介绍组态工程文件加密存在的安全问题,同时在最后总结了正确的组态工程文件加密的设计机制。
0x02 厂商后门
厂商在设计组态工程文件加密机制的时候,会考虑到用户忘记密码这个需求,即用户在不输入密码的情况下绕过验证直接打开工程文件。用户只需要证明该组态工程文件属于自己,之后将组态工程文件发给厂商,厂商通过预留的后门(绕过密码)将用户的组态工程文件解密后再发回给用户。这样的设计虽然方便了用户,但是也为不法分子大开方便之门。攻击者只需要找到组态软件中的组态工程后门密码,也能在不输入密码的情况下编辑组态工程文件。
下面是某个国产的组态软件存在的后门问题,当配置文件的pass字段为1时,就能直接绕过组态工程密码保护机制打开组态工程文件。
0x03 设计缺陷
当然,很多厂商设计之初并不会预留后门。但是在设计加密组态工程文件的时候考虑不够周全,采用了下面的组态工程密码验证机制。
初看之下好像没有问题,但是仔细分析下来,输入密码并没有参与组态工程文件的加密,只是简单的对比了密码的哈希值,这就导致了可以通过修改组态工程文件中的密码哈希或者通过补丁的方式将本来应该走向错误的处理分支修改为走向正确的处理分支。通过这类方式也可以在不知道组态工程文件密码的情况下强行绕过组态工程文件密码保护机制而编辑组态工程文件。
这种安全问题不仅出现在国内的工控厂商,国外的工控厂商也会出现类似的问题。下图为日本某个工控厂商的组态软件中存在的组态工程文件密码保护机制绕过问题:
0x04 算法缺陷
组态工程文件密码需要作为加密密钥参与到组态工程文件的加密运算才能保证组态工程文件的安全。但是在算法选择一定要注意,选择弱加密算法也会存在组态工程文件密码保护绕过问题。
下面是一个存在安全问题的加密算法:
可以看到,这个组态工程文件的加密算法选择了循环异或加密,但是众所周知,这个加密算法是非常容易被攻破的。在知道足够长度的明文情况下,可以把组态工程文件的密码key算出来。
通过上面的分析可以知道,在设计加密算法的时候,需要考虑到算法被突破的时间成本。在算法的选择上,可以选择一些高强度的AES,也可以选择实现相对简单的XTEA算法。根据具体的需求,也可以使用RSA证书机制与现有的对称加密算法相结合方法,来实现组态工程文件安全保护的最大化。
0x05 总结
组态工程文件保护机制在设计之初应该保证不留任何后门,用户应该自觉管理好自己的组态工程密码,防止将密码遗忘或丢失。组态工程文件密码应作为加密密钥对组态工程文件进行加密,结合业内高强度的加密算法,那么“密码绕过”这类安全问题自然就不复存在了。