勒索软件顾名思义就是对你的电脑或者对个人,公司有危害的软件,近年来勒索软件出现的频率越来越频繁,勒索软件引发的网络事件也越来越多。今天小编就给大家分享一篇关于勒索软件加密方法的总结。
以下信息来源:安全客。
原文地址:http://bobao.360.cn/learning/detail/3433.html
文章只截取了加密方法中的前5个,如需看全部内容,可以点击原文链接地址。
1.1 勒索软件
勒索软件是计算机恶意软件的一种类型,它可以绑架用户的文件,使用户无法访问到文件,并向用户要求赎金,用于恢复文件。
勒索软件的目标通常是用户的个人数据,包括文档、数据库、源代码、图片、视频等等,赎金货币通常是比特币。
勒索软件最早出现于1989年,但是在2012年开始大规模爆发,直到现在,已经有数百万人成为了勒索软件的受害者,这也使得勒索软件更加猖獗。
因为勒索软件已经严重影响了我们的生活,我们决定为非技术人员和技术人员写点东西。我们对我们在勒索软件上的工作进行了总结,并选取了10款有代表性的勒索软件在这里进行讨论。
通过本文,人们可以理解勒索软件工作的基本思路,以及用于加密受害人文件的准确算法。此外,我们真诚的希望这篇文章能帮助那些想进一步分析勒索软件的人。
再有,需要注意的是,我们在这里重点关注的是加密方式和解密方式。其它的内容,如打包、反沙箱、提权、DLL注入等,在这里我们没有涉及。
最后,由于作者水平有限,本文内容如有不妥之处,期待您的意见。
1.3 本文结构
本文共有以下几个部分。第一部分,我们对勒索软件和本文的主要内容进行了介绍。
在第二部分,我们主要讨论了每个勒索软件的加密过程。
第三部分中,我们主要讨论勒索软件存在的漏洞,利用这些漏洞可以有效的破解勒索软件。然而,还存在大量的勒索软件没有被破解。
此外,在最后一部分,我们对勒索软件的发展趋势进行了总结,并提出了一些如何保护自己的建议。
在这一部分中,我们选取了10款有代表性的勒索软件,下面我们将逐个研究它们用到的加密方法。
需要注意的是,为了使每个人都能理解它们的加密方法,我们使用了更容易理解,但有可能不够科学的描述方法。
这意味着我们在本文中描述的内容和勒索软件实际发生的内容可能有一点不同,但是,最核心的思想必须是一样的。
此外,我们忽略了所有的HASH算法,因为这会给读者理解勒索软件增加额外的负担。
Apocalypse勒索软件在2016年6月被发现,不过,在它被广泛传播前就已经被完全遏制了。
尽管如此,我们还是要讨论一下,因为Apocalypse勒索软件可以作为一类勒索软件的代表,它并没有使用标准的加密算法,而是使用了一个专门设计的加密算法。
当受害人感染Apocalypse后,个人文件会被加密,看起来是这样的:
如图所示,所有的个人文件会被加密,并添加“.encrypted”后缀名,并为每个加密文件生成一个相对应的付款说明。
与其它后面要讨论的勒索软件不同,Apocalypse勒索软件使用了一个专门设计的加密算法,并且将密钥存储在勒索软件代码中。
如图所示,算法的密钥存储在DL寄存器中,CL寄存器作为一个计数器,当加密过程结束时,密文会覆盖明文,并加添“.encrypted”后缀名。
由于这个自定义加密算法属于对称密钥加密算法,因此,找到它的解密算法并不难,并且我们可以用加密算法的密钥,解密受感染的文件。
更多对称密钥加密算法可以从WIKI中找到:
https://en.wikipedia.org/wiki/Symmetric-key_algorithm
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密钥,最后用这个密钥解密文件。
CryptoWall勒索软件发现于2014年,到现在已经出现了4个版本,在这里我们对CryptoWall的第三个版本进行讨论。
当感染了CryptoWall勒索软件后,受害人的文件被加密,如下图:
如上图,将文件加密后会用3个随机的字符作为文件的后缀名,并产生3个勒索信件“HELPDECRYPT.HTML”、“HELPDECRYPT.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密钥解密受害人的文件。
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密钥对文件进行解密。
Jigsaw勒索软件在2016年四月被首次释放出来,到2016年9月时,发现了Jigsaw的第二个版本。
Jigsaw是一种运行在“.net”框架上的勒索软件,在这里我们重点讨论原始版本的Jigsaw勒索软件。
受害人的文件被下密后,会被添加“.fun”后缀名:
此外,Jigsaw勒索软件在发布后不久就被安全界打败,然后又产生了一个更新版本。
Jigsaw勒索软件采用了AES算法对文件进行加密,密钥可以在Jigsaw的样本中直接找到。
而且,加密过程也很清晰(难怪它被打败了):
加密完成后,添加“.fun”扩展,并结束加密过程。
解密文件时,我们只需要使用相同的密钥和IV值就可以,解密过程也可以在Jigsaw样本中找到。
实在是太多了,怕大家看到一半就不想看了,所以截取了一部分。后面部分,以后再和大家分享。
在第二部分,我们描述了5款勒索软件的加密方法,每一个都代表了一种加密过程,在这里我们没有列出来的其它勒索软件有可能就属于其中的一类。
现在,我们对勒索软件中的加密方法总结如下:
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算法。
由于这些标准加密算法被认为是无法破解的,而部分勒索软件可以被破解的最大原因是因为标准加密算法使用不当。
如果所有勒索软件都是精心设计的,换句话说,如果所有的勒索软件都不可能破解,那么解密受害人文件的方法可以总结为以下几点(正常的解密途径):
1) 对于自定义的加密算法,我们需要知道解密密钥和解密算法(标准加密算法的解密算法是已知的)。
2) 对于1层加密算法,我们需要获得解密密钥,并用这个密钥解密受害人的文件。
3) 对于2层加密算法(第二层密钥才是真正的文件加密密钥),我们需要知道第一层密钥、或第二层密钥。如果我们有第一层密钥,我们可以用第一层密钥还原出第二层密钥,再用第二层密钥解密受害人的文件。
4) 对于3层加密算法(第三层密钥才是真正的文件加密密钥),我们需要知道其中任何一层的密钥,如果我们知道第一层密钥,我们就可以还原出第二层密钥,然后用第二层密钥还原出第三层密钥,最后用第三层密钥解密文件。
5) 加密算法使用了其它软件的加密模块时,我们需要知道解密密钥,然后用解密密钥和相应的解密模块解密文件。
从勒索软件作者的角度看,上面的这些解密方法,是解密受害人文件的唯一正确途径。
然而,在某些种类的勒索软件中存在或多或少的漏洞,这使得破解它们成为了可能(不用经过上面的正常方法)。
实际上,少数勒索软件是可以被破解的,原因是它们没有正确使用标准加密算法,根据我们的经验,为什么少数勒索软件可以被破解,总结如下:
1) 由于自定义的解密算法。通常这种自定义的算法和标准加密算法相比,强度都不大,而且存在漏洞。
2) 错误的密钥存储方法。个别勒索软件直接将密钥(加密和解密是一个密钥)内嵌在程序代码中。
3) 密码强度太小。部分勒索软件使用了RSA算法,但是密钥强度不大,导致可以因式分解,从而被破解。
4) 不科学的伪随机数发生器。如果伪随机数发生器不随机,那么产生的密钥就有可能被预测到,如早期的Unlock92勒索软件就存在这样的问题。
5) C&C服务器存在漏洞。部分勒索软件的C&C服务器存在漏洞,这使得从C&C服务器上取回密钥成为了可能。如早期版本的Cerber勒索软件。
6) 其它原因,如CoinVault勒索软件的作者被逮捕,TeslaCrypt勒索软件的作者主动释放出了ECDH私钥,等等。
还有其它我们没有总结到的原因。
下图是我们刚才总结到的所有样本:
此外,早期版本的Unlock92已经被破解,因为它的伪随机数发生器存在漏洞,因此,存在漏洞的2层加密算法是有可能被猜解的。
根据我们的经验,勒索软件的数量和类型正在增长,此外,勒索软件的源代码和生成工具已经在暗网市场上出售,这使得产生一个新的勒索软件变得更容易,如果没有有效的应对措施,那将很难评估我们要面对的结局到底有多糟。
好消息是反勒索软件阵营已经变得强大起来了。很多反病毒公司已经发布了他们的反勒索产品,用于帮助用户远离勒索软件。
我们相信会有更多的受害者因此受益。
到目前为止,在勒索软件中仍然或多或少的存在标准加密算法使用上的漏洞,但是,随着勒索软件的不断发展,这种问题会越来越少。
一旦勒索软件作者能正确的使用标准加密算法时,恢复受害人的数据将会真的很难。
因此,我们建议要把防御放在优先位置。
一方面,计算机用户要经常备份个人文件;
另一方面,反病毒公司需要设计出专门的算法来识别出勒索软件,并根据勒索软件的特征,能主动停止勒索软件的加密进程。
此外,不要向勒索软件屈服,即使你已经感染了勒索软件,咨询一些专家可能是一个很好的处理这种情况的方法。
@悬镜安全,悬镜是一款免费Linux服务器安全软件,拥有风险诊断、网站防护、服务器加固、安全运维、云监控、Webshell查杀等功能.
网站安全、服务器安全,首选悬镜!