当前位置: 首页 > 科技观察

工控系统安全配置工程保护技术的实现

时间:2023-03-20 01:22:18 科技观察

在工控系统中,为了防止核心流程代码泄露,技术人员往往会在配置工程文件中添加密码。打开受密码保护的配置项目文件时,需要输入安全密码。但是,由于组态软件的设计问题,组态工程的加密措施并不安全,有些是无用的。不法操作者甚至可以绕过要求的密码直接打开配置工程文件。不安全设计前段时间,在对市面上常见的组态软件(包括三菱、组态王、施耐德、西门子等上位机软件)进行安全测试时,发现不仅国产组态软件存在组态工程密码绕过问题,国外一些大厂商也存在类似的问题,包括密码硬编码、配置工程密码没有作为密钥加密配置工程文件、算法实现不安全等。对于硬编码密码的漏洞(如CNVD-2019-30119),厂商很快完成修复,去除了硬编码密码,但配置工程文件并没有得到“真正”的保护。大多数存在漏洞的配置软件只是将用户输入的密码与真实密码(或密码哈希值)进行比较,而不会使用输入的密码对配置工程文件进行加密和解密。reverse方法找到关键的跳转语句,修改指令,使验证过程始终导向正确的分支(如下图)。对于这种安全问题,解决办法只能是花费大量的时间和精力重新设计加密机制,并且需要督促用户使用更新的补丁。这导致很多厂商认为此类问题无关紧要,不愿意在漏洞修复上花费更多的资源。更安全的工程加密机制毫无疑问,配置工程文件加密算法的实现必须让配置工程密码参与数据加解密操作,否则使用密码的任何加密存储形式(sha1、md5、sha256等hash)算法)是无用的。在设计配置工程的加密机制时应考虑以下原则:必须保证加密算法非常可靠,可以防止攻击者从加密的密文中反向推导出明文或密钥。在这里,你可以选择AES(高级加密标准)等非常成熟的加密算法。需要足够长度的salt,将salt值作为加解密密钥附加到密码中,保证密钥强度,可以有效抵御字典暴力破解攻击。考虑到如果用户忘记了密码,软件厂商必须能够从用户的配置工程文件中找回密码(当然留下后门密码是绝对不可取的),所以必须通过正确的加密密钥非对称算法(如RSA2048)被加密并存储在项目文件中。一旦证明配置工程文件为用户所有,软件厂商就可以使用私钥解密密文来恢复密码。算法选择应尽量选择OpenSSL等现成加密库的算法,以减少开发者编写代码的成本。加密过程如下图所示:一旦一些粗心的用户忘记了自己的配置工程密码,只要能够证明配置工程文件是自己的,用户就可以通过开发者找回密码。找回密码的具体过程如下图所示:工程密码保护对于配置工程密码,当用户输入正确的配置工程密码后,上位机软件将使用该密码对配置工程文件进行解密,密码需要保存在内存中,直到用户关闭配置工程文件,保存在内存中的工程密码(用户在此期间可以修改密码)将作为加密配置工程的密钥文件并保存。整个生命周期如下图所示:可以看出,正确的密码一直保存在内存中,直到项目关闭。因此,对于内存中的密钥也需要采取一定的保护措施,防止其他恶意软件在打开配置工程文件时,通过读取进程内存空间窃取敏感密钥信息。Windows系统已经内置了一些保护敏感内存信息的功能(如CryptProtectMemory/CryptUnProtectMemory)。Linux平台的开发者也可以选择开源的第三方安全组件来实现内存敏感信息的加密。小结在配置工程中实现加解密的方法有很多种。本文提供的方法只是一个简单的例子。读者可举一反三,探索适合自己的加解密方法。工控系统安全不仅需要用户提高安全意识,更需要软硬件厂商高度重视,为用户提供更好的服务。【本文为专栏作者《NSFO科技博客》原创稿件,转载请联系原作者获得授权】点此查看该作者更多好文