勒索软件加密方法总结
一、介绍
1.1 勒索软件
勒索软件是计算机恶意软件的一种类型,它可以绑架用户的文件,使用户无法访问到文件,并向用户要求赎金,用于恢复文件。勒索软件的目标通常是用户的个人数据,包括文档、数据库、源代码、图片、视频等等,赎金货币通常是比特币。
勒索软件最早出现于1989年,但是在2012年开始大规模爆发,直到现在,已经有数百万人成为了勒索软件的受害者,这也使得勒索软件更加猖獗。
1.2 本文内容
因为勒索软件已经严重影响了我们的生活,我们决定为非技术人员和技术人员写点东西。我们对我们在勒索软件上的工作进行了总结,并选取了10款有代表性的勒索软件在这里进行讨论。
通过本文,人们可以理解勒索软件工作的基本思路,以及用于加密受害人文件的准确算法。此外,我们真诚的希望这篇文章能帮助那些想进一步分析勒索软件的人。
再有,需要注意的是,我们在这里重点关注的是加密方式和解密方式。其它的内容,如打包、反沙箱、提权、DLL注入等,在这里我们没有涉及。
最后,由于作者水平有限,本文内容如有不妥之处,期待您的意见。
1.3 本文结构
本文共有以下几个部分。第一部分,我们对勒索软件和本文的主要内容进行了介绍。在第二部分,我们主要讨论了每个勒索软件的加密过程。第三部分中,我们主要讨论勒索软件存在的漏洞,利用这些漏洞可以有效的破解勒索软件。然而,还存在大量的勒索软件没有被破解。此外,在最后一部分,我们对勒索软件的发展趋势进行了总结,并提出了一些如何保护自己的建议。
二、样本分析
在这一部分中,我们选取了10款有代表性的勒索软件,下面我们将逐个研究它们用到的加密方法。
需要注意的是,为了使每个人都能理解它们的加密方法,我们使用了更容易理解,但有可能不够科学的描述方法。这意味着我们在本文中描述的内容和勒索软件实际发生的内容可能有一点不同,但是,最核心的思想必须是一样的。此外,我们忽略了所有的HASH算法,因为这会给读者理解勒索软件增加额外的负担。
2.1 Apocalypse--(内嵌密钥+自定义加密算法)
Apocalypse勒索软件在2016年6月被发现,不过,在它被广泛传播前就已经被完全遏制了。尽管如此,我们还是要讨论一下,因为Apocalypse勒索软件可以作为一类勒索软件的代表,它并没有使用标准的加密算法,而是使用了一个专门设计的加密算法。
当受害人感染Apocalypse后,个人文件会被加密,看起来是这样的:
如图所示,所有的个人文件会被加密,并添加“.encrypted”后缀名,并为每个加密文件生成一个相对应的付款说明。
与其它后面要讨论的勒索软件不同,Apocalypse勒索软件使用了一个专门设计的加密算法,并且将密钥存储在勒索软件代码中。
如图所示,算法的密钥存储在DL寄存器中,CL寄存器作为一个计数器,当加密过程结束时,密文会覆盖明文,并加添“.encrypted”后缀名。
由于这个自定义加密算法属于对称密钥加密算法,因此,找到它的解密算法并不难,并且我们可以用加密算法的密钥,解密受感染的文件。
更多对称密钥加密算法可以从WIKI中找到:
https://en.wikipedia.org/wiki/Symmetric-key_algorithm
2.2 Cerber--(生成RSA密钥+RSA+RC4)
Cerber勒索软件在2016年3月被释放出来,直到2016年9月份,探测到了第二个版本的Cerber勒索软件。在这一部分中,我们主要讨论原始版本的Cerber勒索软件。将文件加密后会添加“.cerber”后缀名。
下图是受害人被加密的个人数据:
Cerber采用了是RSA和RC4加密算法。关于RSA和RC4加密算法的详细信息可以从以WIKI中找到:
RSA:https://en.wikipedia.org/wiki/RSA_(cryptosystem)
RC4:https://en.wikipedia.org/wiki/RC4
和Apocalypse勒索软件相比, Cerber更加复杂和缜密。为了能更容易理解,我们主要讨论Cerber加密过程的主要思想,过程有所简化,但更容易让大家理解。
Cerber勒索软件加密过程共有三级。第一步:利用程序中内嵌的RSA公钥,通过RSA算法加密一个随机生成的RSA密钥。第二步:利用随机生成的RSA密钥,通过RSA算法加密一个随机生成的RC4密钥。第三步:利用随机生成的RC4密钥,通过RC4算法加密受害人的个人文件。
对于每一个Cerber样本,都有一个加密的配置文件,该配置文件存储在程序的资源段中。将它解密后,会发现一个内嵌的、并用base64编码过的RSA公钥。
对于每一个受害者的文件,都会产生一个唯一的RC4密钥。然后用这个密钥通过RC4算法加密文件。下面是RC4算法:
此外,需要注意的是,Cerber勒索软件只加密一部分文件,并不会加密全部文件,同时,一些在解密过程中需要的信息也会存储在加密的文件中。
如果你能理解上面的加密过程,那么理解Cerber的解密过程其实并不难,难的是你无法得到完整的RSA私钥,除非Cerber的作者主动把它释放出来。因此,为了解密文件,首先需要从Cerber的C&C服务器中取得那个随机产生的RSA私钥,然后用这个私钥解密随机产生的RC4密钥,最后用这个密钥解密文件。
2.3 CryptoWall--(申请RSA公钥+RSA+AES)
CryptoWall勒索软件发现于2014年,到现在已经出现了4个版本,在这里我们对CryptoWall的第三个版本进行讨论。
当感染了CryptoWall勒索软件后,受害人的文件被加密,如下图:
如上图,将文件加密后会用3个随机的字符作为文件的后缀名,并产生3个勒索信件“HELP_DECRYPT.HTML”、“HELP_DECRYPT.PNG”和“HELP_DECRYPT.TXT”。
CryptoWall勒索软件采用了RSA和AES算法,更多AES的信息可以从这里查到。在程序实现中,使用了微软的CryptoAPI库。
CryptoWall在加密时需要从C&C服务器申请一个RSA公钥,因此,如果CryptoWall连接C&C服务器失败,它就不会加密任何文件。如果成功连接,取回RSA公钥,并产生一个随机的AES密钥,并用RSA算法加密。
然后,用AES密钥和AES算法加密受害人的文件。
最后,用密文覆盖明文文件。
CryptoWall的解密过程和加密过程相似,首先需要从C&C服务器取回RSA私钥,然后利用RSA私钥解密随机生成的AES密钥。最后,用AES密钥解密受害人的文件。
2.4 CTB_Locker--(生成ECDH密钥+ECDH+AES)
CTB_Locker是一个在2014年传播的老牌勒索软件,但是它采用了一个复杂的算法替代了RSA算法。受害人的文件被加密后,会随机产生7个字符作为文件的后缀名。
在上图中,前两个文件是该勒索软件产生的勒索信件。
CTB_Locker也非常复杂和缜密。它采用了AES算法和ECDH算法。在ECDH中用的椭圆曲线算法是curve25519算法,更多ECDH算法和curve25519算法的信息可以从WIKI中找到。
ECDH:https://en.wikipedia.org/wiki/Elliptic_curve_Diffie%E2%80%93Hellman
Curve25519:https://en.wikipedia.org/wiki/Curve25519
CTB_Locker勒索软件加密过程共有3层。首先,产生一个随机的ECDH密钥,利用程序中内嵌的ECDH公钥,通过ECDH算法将刚生成的密钥进行编码(在这里我们使用了“编码”这个词,因为ECDH是一个密钥交换协议,不是加密算法)。
如上图,“Pblkey”产生一个随机的ECDH密钥。第二步是产生一个AES密钥,用刚才随机生成的ECDH密钥对AES密钥进行编码。
第三步用AES密钥和AES算法加密受害人的文件。
最后,利用生成的密文和解密过程中需要的信息覆盖原始的明文文件。
在对文件解密时,由于我们无法得到和内嵌ECDH公钥相对应的ECDH私钥,因此CTB_Locker的解密过程需要2步,首先从远程C&C服务器取回ECDH私钥,并用私钥解码AES密钥,然后用AES密钥对文件进行解密。
2.5 Jigsaw--(内嵌密钥+AES)
Jigsaw勒索软件在2016年四月被首次释放出来,到2016年9月时,发现了Jigsaw的第二个版本。Jigsaw是一种运行在“.net”框架上的勒索软件,在这里我们重点讨论原始版本的Jigsaw勒索软件。受害人的文件被下密后,会被添加“.fun”后缀名:
此外,Jigsaw勒索软件在发布后不久就被安全界打败,然后又产生了一个更新版本。
Jigsaw勒索软件采用了AES算法对文件进行加密,密钥可以在Jigsaw的样本中直接找到。
而且,加密过程也很清晰(难怪它被打败了):
加密完成后,添加“.fun”扩展,并结束加密过程。
解密文件时,我们只需要使用相同的密钥和IV值就可以,解密过程也可以在Jigsaw样本中找到。
2.6 Locky--(申请RSA公钥+RSA+AES+Intel的AES指令集)
Locky是另一个勒索软件,需要向C&C服务器申请一个公钥。Locky的第一个版本在2016年二月被发现,如果Locky无法连接到它的C&C服务器,任何文件都不会被加密。
Locky将文件加密后,会添加“.locky”扩展名。
如上图,_HELP_instructions.bmp和_HELP_instructions.html是Locky产生的勒索信件。
Locky在加密过程中采用了RSA算法和AES算法,但是在不同版本的Locky中实现方法有所不同。
在我们要讨论的Locky样本中,RSA算法通过CryptoAPI实现,和CryptoWall的一样。
RSA算法用于加密随机产生的AES密钥,并且RSA公钥是从远程C&C服务器中取得的。随机产生的AES密钥用于加密受害人的文件。此外,AES算法在实现过程中使用了Intel的AES指令集,包含“aesenc”指令等等。
加密过程结束后,原始明文文件会被密文和一些需要的信息所覆盖。
解密过程和CryptoWall的很相似,首先需要从C&C服务器取回私钥,然后解密AES密钥,然后用AES密钥和其它存储在加密文件中的额外信息解密受害人的文件。
2.7 Petya--(ECDH+SALSA20)
Petya是一个特殊的软件,发现于2016年3月,和其它勒索软件相比,Petya是完全不同的。一方面,Petya会覆盖主引导记录(MBR)中的引导代码,并会停止windows正常的初始化进程。另一方面,Petya会加密NTFS的MFT文件,并不会加密受害人的个人文件。
MBR和NTFS MFT的详细信息可以从WIKI中找到。
被Petya感染以后,计算机会停止引导过程,并显示以下信息:
在上面的图中,所有的勒索信件会以白色字符写在血红色背景上。
Petya的加密过程并不复杂,采用了ECDH算法和SALSA20算法。ECDH中用的椭圆曲线算法是secp192k1算法。更多secp192k1和SALSA20算法的信息可以从WIKI中找到。
首先用ECDH算法对一个随机产生的SALSA20密钥进行编码:
然后,SALSA20算法在一个16-bit-环境中运行。
解密时需要先从远程C&C服务器中取回SALSA20算法的密钥,然后对MBR和MFT进行解密。
上一篇: 部署Nginx网站服务的步骤
下一篇: 图游走算法