事实证明,由于犯罪分子的技术水平参差不齐,因此他们在开发恶意软件的过程中经常会犯一些愚蠢的错误。一旦恶意软件的加密过程出现问题,安全研究专家就可以轻易地破解这些恶意软件。
想要编写安全的代码是一件非常具有挑战性的事情,而正确地在软件中使用加密算法则更加需要下苦功夫。即便是经验丰富的开发人员也经常会犯一些愚蠢的错误。如果你的目标是为了在短时间内通过诈骗手段来获取金钱的话,那么你的软件质量可能就不会尽如人意了。如果软件的加密体系设计不当的话,你的代码中绝对会存在非常严重的加密错误。
只为实现自己的目的,完全不考虑其他
实际上,很多恶意软件的开发者在“如何错误使用加密算法”上已经给我们提供了非常丰富的经验和教训了。很多恶意软件的作者通常会直接在他们的恶意代码中加入加密算法,他们不会像合法软件的开发者那样去为自己的软件设计合适的加密算法,因为犯罪分子一般不会去考虑恶意软件的代码质量或者设计规范。他们往往只会关心这款恶意软件是否能够满足他们的犯罪需求,其他的因素并不在他们的考虑范围之内。
实际上,有时可能因为开发时间有限,或者是开发人员并不理解某些加密算法的具体工作机制,所以代码中的漏洞往往是不可避免的。但是,很多恶意软件的作者甚至都不知道如何去正确使用加密工具。无论你是专业的或是业余的恶意软件作者,你都不得不承认加密算法的正确使用在恶意软件的开发过程中是至关重要的一环。
有的恶意软件属于勒索软件,攻击者可以使用勒索软件来从受害人身上勒索钱财。当攻击者需要通过C&C服务器来与受感染设备进行通信时,同样需要使用到恶意软件来实现隐藏通信。除此之外,攻击者有时也会需要使用恶意软件来躲避安全工具的检测。但是安全分析表明,目前有很多恶意软件在使用加密算法时都存在各种各样的问题。
知其然,而不知其所以然
比如说银行木马Zeus和Linux勒索软件Linux.Encoder的开发者就陷入了这种误区,他们其实在采用加密算法之前并没有真正理解这些加密算法内部的运行机制。
银行木马Zeus的开发者在对Zeus与C&C服务器的通信数据进行加密时,虽然选用的是著名的流加密算法RC4,但是他们却对算法进行了一些修改。他们将流数据通过RC4算法加密完成之后,会用数据中的每一个字节与下一个字节进行异或运算,从而生成新的加密数据。虽然RC4算法有其自身的安全缺陷,但是这个算法的安全性对于Zeus来说,已经是绰绰有余了。而开发人员所进行的额外修改看似增加了数据的复杂程度,但实际上却有些画蛇添足的意味。
Linux.Encoder的开发者在为rand()函数选择随机数生成种子的时候使用的是当前的时间戳,并通过这个随机数来生成加密密钥。但是安全研究人员发现,通过这种方式生成的勒索软件密钥是非常容易被破解的。于是乎,该勒索软件的作者又尝试通过对时间戳进行八次哈希计算来生成一个AES密钥。
安全研究专家表示:
“连续使用一个哈希函数来对输出数据进行八次计算的这种行为足以表明,这些开发者其实根本就没有真正理解哈希函数的作用。实际上,这种行为反而会大大降低程序的安全性。”
纯粹的复制粘贴
安全研究专家发现,很多恶意软件的开发者通常会直接将某些看似可用的代码复制到自己的项目中。这些代码块从表面上看似乎的确是一个可行的方案,但是他们却并不了解复制过来的代码块是如何工作的。其实,复制粘贴他人的代码也并不是什么大问题,如果这也成问题的话,那么StackOverflow这个网站也没有存在的必要了。但是,如果开发者无法真正了解代码块的运行机制,那么他们又怎么能够确定这段代码是一个切实可行的解决方案呢?
勒索软件CryptoDefense就是一个很好的例子。这款勒索软件的很多功能都是从勒索软件CryptoLocker身上抄袭过来的,比如说RSA2048加密,通过比特币支付赎金,以及通过Tor网络来与C&C服务器通信等等。除此之外,这款勒索软件在实现RSA加密的过程中还使用了Windows的加密API,而这些加密代码我们都可以在MicrosoftDeveloper Network的开发文档中找到。
安全研究专家表示:
“根据开发文档的描述,如果程序中的flag设置错误的话,那么应用程序将会把密钥保存在本地。而CryptoDefense的作者没有正确设置这个flag,所以安全研究人员就可以直接在受害者的主机中找到解密密钥。”
社会工程学
实际上,这些犯罪分子所犯的错误并不仅仅只有编码错误而已,对于恶意软件的开发者而言,社会工程学技术就是实现攻击的一种捷径。如果目标用户是“傻白甜”的话,那么他们其实根本就不需要去设计什么“完美的加密体系”,因为“欺骗”往往更加的容易。而且对于普通用户而言,勒索软件所采用的加密算法根本就不重要。
Nemucod是一款JavaScript木马,而近期这款木马却转型成了勒索软件。安全研究专家通过分析发现,虽然这款勒索软件声称自己采用了RSA-1024加密,但它实际上使用的只是一种简单的异或密码。除此之外,在用户的文件真正被加密之前,Nemucod会将勒索信息显示给用户。
Nemucod的开发者认为:
“当受害者看见“RSA-1024加密算法”这几个字之后,可能就会被吓到。这样一来,他们就不会去仔细研究我们的勒索软件了,而且有的用户甚至可能会直接向我们支付赎金。”
总结
密码学确实非常的深奥,很多软件开发者在实现加密的过程中或多或少都会犯错误。甚至在目前的十大开源Web应用程序安全项目中,开发人员在实现加密的过程中同样会犯一些很白痴的错误,更何况那些唯利是图的犯罪分子呢?