Quantcast
Channel: CodeSection,代码区,网络安全 - CodeSec
Viewing all articles
Browse latest Browse all 12749

【技术分享】勒索软件加密方法总结

$
0
0
【技术分享】勒索软件加密方法总结

2017-01-19 09:59:44
来源:infosecinstitute.com 作者:pwn_361

阅读:344次
点赞(0)
收藏





【技术分享】勒索软件加密方法总结

翻译:pwn_361

预估稿费:300RMB

投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿


一、介绍

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进行解密。

2.8 TeslaCrypt--(生成ECDH密钥+ECDH+AES)

TeslaCrypt勒索软件在2015年2月被探测到,到现在,已经发展了4个主要的版本,不同版本的TeslaCrypt勒索软件使用了不同的加密文件扩展名,如‘.ecc’、‘.ezz’、‘.zzz’、‘.vvv’和‘.abc’。在这里我们只讨论第4个版本的TeslaCrypt勒索软件,这个版本没有使用扩展名,如下图所示:


【技术分享】勒索软件加密方法总结

不同版本的TeslaCrypt使用了不同的算法,在我们即将要讨论的这个样本中,它使用了ECDH算法和AES算法,ECDH中用的椭圆曲线算法是secp192k1算法。

完整的加密过程和CTB_Locker的很相似。TeslaCrypt的加密过程有3层,首先,会产生一个随机的ECDH密钥,然后利用程序中内嵌的一个ECDH密钥,通过ECDH算法对随机生成的ECDH密钥进行编码,第二步,生成一个AES密钥,利用刚才随机生成的ECDH密钥,通过ECDH算法对AES密钥进行编码。


【技术分享】勒索软件加密方法总结

第三步,利用AES密钥和AES算法对受害人文件进行加密。


【技术分享】勒索软件加密方法总结

最后,用密文和一些需要的信息,如编码过的ECDH公钥,覆盖原始明文文件。

解密过程和CTB_Locker的有点相似,我们无法得到ECDH的私钥,因此,解密过程需要2步。首先,从C&C服务器取回ECDH私钥,并用ECDH算法解码AES密钥,然后用AES算法解密受害人的文件。

2.9 TorrentLocker--(RSA+AES)

TorrentLocker是另一个臭名昭著的的勒索软件,发现于2014年,大多数TorrentLocker勒索软件会给加密文件添加“.encrypted”扩展名,并且大多数版本的TorrentLocker勒索软件会伪装成CryptoLocker勒索软件。在这部分,我们重点讨论该勒索软件的一个早期版本,它将文件加密后不会改变文件的大小。


【技术分享】勒索软件加密方法总结

上图中,“PLEASE_READ.txt”文件是勒索软件的勒索信件。

TorrentLocker勒索软件采用了RSA算法和AES算法,RSA算法用于加密一个随机生成的AES密钥,然后,用这个AES密钥和AES算法加密受害人的文件。实际上,在本文中,我们没有讨论到的大部分勒索软件都采用了RSA-AES的模式。

不同的是,该勒索软件使用yarrow算法作为AES随机密钥的生成算法。

Yarrow算法的随机因素包含了以下函数的返回值:


【技术分享】勒索软件加密方法总结

请注意:上图并不是相关函数的完整列表。下一步,受害人的个人文件将会按16字节分组,进行AES加密。

当加密完成后,原始文件会被加密的数据覆盖,没有其它额外的数据。

在对文件进行解密时,AES密钥是用RSA算法加密的,我们无法取回RSA私钥。为了对文件进行解密,我们需要从C&C服务器取回AES密钥,然后用AES密钥对文件进行解密。

2.10 Unlock92--(生成RSA密钥+RSA+RSA)

Unlock92勒索软件是我们讨论的最后一款,在2016年6月首次被发现,目前已经发现了它的第二个版本。Unlock92运行在.net框架下。和第一个版本相比,第二个版本更加复杂一些,因此,在这里我们主要讨论第二个版本。


【技术分享】勒索软件加密方法总结

上图中的FBDX.jpg是勒索软件的勒索信件。

Unlock92勒索软件在加密过程中使用了两次RSA算法,每个Unlock92样本中,都存在一个用base64编码的内嵌RSA公钥,这个RSA公钥的作用是加密另一个随机生成的RSA密钥:


【技术分享】勒索软件加密方法总结

并使用这个随机生成的RSA密钥对受害人的文件进行加密。


【技术分享】勒索软件加密方法总结

为了使加密过程的效率最大化,Unlock92勒索软件只加密文件的前0x300个字节,并不会加密整个文件。

在对文件进行解密时,首先需要从远程C&C服务器上取回随机生成的RSA私钥,然后用这个私钥对文件进行解密。


三、勒索软件的弱点

3.1 加密方法总结

在第二部分,我们描述了10款勒索软件的加密方法,每一个都代表了一种加密过程,在这里我们没有列出来的其它勒索软件有可能就属于其中的一类。

现在,我们对勒索软件中的加密方法总结如下:

1) 自定义的加密方法,如Apocalypse勒索软件。

2) 使用1层加密算法,如Jigsaw勒索软件。

3) 使用2层加密算法,比如RSA-AES模型,采用2层算法例子有CryptoWall,Locky,Petya,Unlock92。

4) 使用3层加密算法,比如ECDH+ECDH+AES模型。例子有Cerber,CTB_Locker,TeslaCrypt。

5) 利用其它正常软件的加密模块。例如,CryptoHost勒索软件加密过程利用了WINRAR的加密模块来对受害人的文件进行加密,Vault勒索软件使用 了GNUPG的加密模块。

正如我们看到的,勒索软件大量使用了标准的加密算法。除了Apocalypse勒索软件使用了自定义的算法,在所有加密算法中,AES算法被使用的最多,其次是RSA算法,部分勒索软件也使用了ECDH算法。由于这些标准加密算法被认为是无法破解的,而部分勒索软件可以被破解的最大原因是因为标准加密算法使用不当。

3.2 解密方法总结

如果所有勒索软件都是精心设计的,换句话说,如果所有的勒索软件都不可能破解,那么解密受害人文件的方法可以总结为以下几点(正常的解密途径):

1) 对于自定义的加密算法,我们需要知道解密密钥和解密算法(标准加密算法的解密算法是已知的)。

2) 对于1层加密算法,我们需要获得解密密钥,并用这个密钥解密受害人的文件。

3) 对于2层加密算法(第二层密钥才是真正的文件加密密钥),我们需要知道第一层密钥、或第二层密钥。如果我们有第一层密钥,我们可以用第一层密钥还原出第二层密钥,再用第二层密钥解密受害人的文件。

4) 对于3层加密算法(第三层密钥才是真正的文件加密密钥),我们需要知道其中任何一层的密钥,如果我们知道第一层密钥,我们就可以还原出第二层密钥,然后用第二层密钥还原出第三层密钥,最后用第三层密钥解密文件。

5) 加密算法使用了其它软件的加密模块时,我们需要知道解密密钥,然后用解密密钥和相应的解密模块解密文件。

从勒索软件作者的角度看,上面的这些解密方法,是解密受害人文件的唯一正确途径。然而,在某些种类的勒索软件中存在或多或少的漏洞,这使得破解它们成为了可能(不用经过上面的正常方法)。

3.3 勒索软件漏洞总结

实际上,少数勒索软件是可以被破解的,原因是它们没有正确使用标准加密算法,根据我们的经验,为什么少数勒索软件可以被破解,总结如下:

1) 由于自定义的解密算法。通常这种自定义的算法和标准加密算法相比,强度都不大,而且存在漏洞。

2) 错误的密钥存储方法。个别勒索软件直接将密钥(加密和解密是一个密钥)内嵌在程序代码中。

3) 密码强度太小。部分勒索软件使用了RSA算法,但是密钥强度不大,导致可以因式分解,从而被破解。

4) 不科学的伪随机数发生器。如果伪随机数发生器不随机,那么产生的密钥就有可能被预测到,如早期的Unlock92勒索软件就存在这样的问题。

5) C&C服务器存在漏洞。部分勒索软件的C&C服务器存在漏洞,这使得从C&C服务器上取回密钥成为了可能。如早期版本的Cerber勒索软件。

6) 其它原因,如CoinVault勒索软件的作者被逮捕,TeslaCrypt勒索软件的作者主动释放出了ECDH私钥,等等。

还有其它我们没有总结到的原因。

3.4 样本总结

下图是我们刚才总结到的所有样本:


【技术分享】勒索软件加密方法总结

此外,早期版本的Unlock92已经被破解,因为它的伪随机数发生器存在漏洞,因此,存在漏洞的2层加密算法是有可能被猜解的。


四、趋势和建议

根据我们的经验,勒索软件的数量和类型正在增长,此外,勒索软件的源代码和生成工具已经在暗网市场上出售,这使得产生一个新的勒索软件变得更容易,如果没有有效的应对措施,那将很难评估我们要面对的结局到底有多糟。

好消息是反勒索软件阵营已经变得强大起来了。很多反病毒公司已经发布了他们的反勒索产品,用于帮助用户远离勒索软件。我们相信会有更多的受害者因此受益。

到目前为止,在勒索软件中仍然或多或少的存在标准加密算法使用上的漏洞,但是,随着勒索软件的不断发展,这种问题会越来越少。一旦勒索软件作者能正确的使用标准加密算法时,恢复受害人的数据将会真的很难。因此,我们建议要把防御放在优先位置。一方面,计算机用户要经常备份个人文件,另一方面,反病毒公司需要设计出专门的算法来识别出勒索软件,并根据勒索软件的特征,能主动停止勒索软件的加密进程。此外,不要向勒索软件屈服,即使你已经感染了勒索软件,咨询一些专家可能是一个很好的处理这种情况的方法。


【技术分享】勒索软件加密方法总结
【技术分享】勒索软件加密方法总结
本文由 安全客 翻译,转载请注明“转自安全客”,并附上链接。
原文链接:http://resources.infosecinstitute.com/a-brief-summary-of-encryption-method-used-in-widespread-ransomware

Viewing all articles
Browse latest Browse all 12749

Trending Articles