在“方程式组织”这样一支封神的专业恶意软件团队中,还是被卡巴斯基发现了一名猪队员,以致于卡巴斯基用“不可原谅”来形容他所犯下的错误。这个错误就是他在将恶意程序代码编译成可执行文件的过程中,竟然保留了完整的路径名:“c:\users\rmgree5”。用rmgree5作为用户名进行搜索,很快就将“方程式组织”和美国国家安全局(NSA)关联起来了。这个错误实在是低级,在我的“专业慎入!CIA对间谍情报技术的开发要求——通用篇”一文中,CIA在第5条中明确地写道:“‘要’去掉最终二进制文件中所有的调试信息、清单文件、编译目录、开发者用户名等内容”。

“方程式组织”的“死星"图标
对此,“Vault 7”的资料显示,CIA在其内部,对该低级错误展开了热烈的讨论,整理总结“方程式组织”做错了哪些事情,并分析自身该如何避免出现类似的问题。恍惚间这仿佛就是一场精彩的技术讨论会,只可惜讨论的目标是怎样做贼:如何让CIA的恶意软件被发现后不会关联到CIA自身!

“方程式组织”
CIA的开发人员们在内网里展开了大讨论。有人说:“‘方程式组织’最大的错误,就是不同工具间共享代码。到处都是定制版本的RC5,Positive ID哈希算法在多个工具的不同代的版本中都被使用了。共享代码是卡巴斯基能够将不同工具串联在一起的首要原因,次要原因是它们获取和使用同样的控制&命令域。”又有人说:“定制的加密算法会带来两个问题,一是在深度检查时会发现很奇怪,二是增加了算法实现错误导致强度降低的风险。PDB字符串必须清除,对于Visual Studio用户模式的程序,不要使用/DEBUG链接开关。”还有人说:“早先的加密算法有一些问题,例如初始向量为0或者错误配置。结果就是NSA做好了一个加密算法之后,大家都会使用。不幸的是,实现过程中使用的是预计算出来的负常数,而不是参考实现中的正常数。”......

“怎么吃羊才安全呢?”
最后CIA对“方程式组织”所犯错误总结出以下结果:
- 使用了某加密算法的特定实现。前文我们说了,指的是RC5算法的实现。特定的加密算法实现就会将“方程式组织”的恶意软件们串到一起。CIA给出的解决办法是使用公开的算法,例如微软的加密算法库、OpenSSL和PolarSSL等。
- 在privlib库里使用了独特的互斥锁(MUTEX)。CIA解释道:这种样子的互斥锁会在编译时产生一个警告,并且互斥锁的使用应该被记录。这应该是说利用互斥锁实现原子操作的代码写得有问题。
- 在二进制文件中有pdb字符串。这里的pdb文件指的是微软Visual Studio开发工具生成的后缀为pdb的符号文件。说的就是rmgree5用户名这个低级错误,CIA给出的解决方案也很简单粗暴:我们需要创建一个字符串扫描工具,用于查询是否存在用户名在内的敏感信息。
- 漏洞的重用。CIA承认这个问题越来越难以避免,可能不得不接受这一现实,然后建立一个数据库来维护哪个漏洞对应哪个工具。
小结
时间有限,文章结构有些不完整请见谅。现在,维基解密的官网似乎已经无法打开了,提示“404 Gateway Error”。有些担心,以后再也看不到“CIA”“NSA”相关的外泄文件了。互联网是有记忆的,但也可能被*力暴**击打后失忆!