首页
论坛
专栏
课程

[原创]通俗易懂讲解-GandCrab勒索病毒加密原理

2019-7-14 11:43 3197

[原创]通俗易懂讲解-GandCrab勒索病毒加密原理

2019-7-14 11:43
3197
        笔者根据对“侠盗”勒索病毒V5.3新变种全面剖析 https://paper.seebug.org/911/"这篇文章的自我理解,隐掉一些细节之后,以大白话的方式来阐述GandCrab勒索病毒的加密原理,以及数据为什么无法解密。
       笔者的理解可能有错漏之处,欢迎各位大佬多多指正。

算法简介

1、RSA加密算法是一种非对称加密算法。所谓非对称,就是指该算法需要一对密钥(公私钥),使用其中一个加密(公钥),则需要用另一个才能解密(私钥)。

2、Salsa加密算法是一种对称加密算法,加密和解密双方使用相同的密钥,加密后数据长度不变。


加密原理结构图


关键字解释:关键字根据自己的理解做了稍许改变。

RsaHackerPrivateKey = 病毒作者预先生成的RSA私钥,只有病毒作者知道。

RsaHackerPublicKey = 病毒作者预先生成的RSA公钥,勒索病毒体内嵌的RSA公钥。

SalsaPrivateKey = 随机生成的Key,用于Salsa20加密算法的Key

RsaLocalPrivateKey = 本地随机生成RSA私钥

RsaLocalPublicKey = 本地随机生成RSA公钥

SalsaFileKey = 随机生成的Key,用于Salsa20加密算法的Key。(就是这个Key加密的文件)

SrcUserFile = 待加密的文件数据

Data3 =  加密后的文件数据 = "随机生成的SalsaFileKey" 使用Salsa20算法加密"SrcUserFile"后形成的加密数据

RAS加密函数定义 = typedef RSA(Key,待加密数据 )

Salsa20加密函数定义 = typedef Salsa20(Key, 待加密数据 )


加密原理

1、根据"勒索病毒体内嵌的RSA公钥(RsaHackerPublicKey )"使用RSA算法来加密"随机生成的SalsaPrivateKey",得到Data1

2、根据"随机生成的SalsaPrivateKey"使用Salsa20算法来加密"本地生成的RSA私钥RsaLocalPrivateKey",得到Data2

3、根据"本地生成的RSA公钥RsaLocalPublicKey "使用RSA算法来加密"随机生成的SalsaFileKey",得到Data4

4、根据"随机生成的SalsaFileKey"使用Salsa20算法来加密原始文件,得到Data3

核心:"勒索病毒体内嵌的RSA公钥(RsaHackerPublicKey )"加密了"本地生成的RSA私钥RsaLocalPrivateKey"

数据无法解密原因

1、勒索进程结束后,"随机生成的SalsaPrivateKey"、"随机生成的SalsaFileKey"就已经被内存释放了。只有"作者手中的RSA私钥(RsaHackerPrivateKey)"才能解密出这两个Key。


解密公式

1、根据"病毒作者手中的私钥(RsaHackerPrivateKey)"&"Data1"使用RSA算法来解密出"随机生成的SalsaPrivateKey"

2、根据"随机生成的SalsaPrivateKey"&"Data2" 使用Salsa20算法来解密出"本地生成的RSA私钥RsaLocalPrivateKey"

3、根据"本地生成的RSA私钥RsaLocalPrivateKey"&"Data4" 使用RSA算法来解密出"随机生成的SalsaFileKey"

4、根据"随机生成的SalsaFileKey"使用Salsa20算法来解密出原始文件







[公告]安全服务和外包项目请将项目需求发到看雪企服平台:https://qifu.kanxue.com

最后于 2019-7-15 20:40 被暗夜之刃编辑 ,原因:
最新回复 (10)
看场雪 3 2019-7-14 21:52
2
0
是不是?
RSA加密函数定义 = typedef RSA2048(Key, 待加密数据)
Salsa20加密函数定义 = typedef Salsa20(Key, 待加密数据)
暗夜之刃 2 2019-7-14 22:50
3
0
看场雪 是不是? RSA加密函数定义 = typedef RSA2048(Key, 待加密数据) Salsa20加密函数定义 = typedef Salsa20(Key, 待加密数据)
谢谢指正。原文已经修改成正确的了。
看场雪 3 2019-7-15 09:33
4
0
吹毛求疵,还有几个字
RSA加密函数定义 = typedef RSA2048(Key, 待加密数据)
^^^                                              ^^^^
最后于 2019-7-15 09:33 被看场雪编辑 ,原因:
暗夜之刃 2 2019-7-15 20:42
5
0
看场雪 吹毛求疵,还有几个字RSA加密函数定义 = typedef RSA2048(Key, 待加密数据)^^^  & ...
已修改,同属强迫症患者,握个爪.......
powerpcer 2019-8-2 14:27
6
0
這種就妙了, 要求解密的人,作者是要給他private key,哪麼這人只要公開PRIVATE KEY,其它人不就可以拿來用了?
joker陈 2019-8-2 16:19
7
0
powerpcer 這種就妙了, 要求解密的人,作者是要給他private key,哪麼這人只要公開PRIVATE KEY,其它人不就可以拿來用了?
作者私钥怎么可能给你,给你了还怎么勒索你。详见解密公式1,Data1这个玩意儿你给作者,作者解密后明文的东西给你。
看场雪 3 2019-8-2 18:11
8
0
当支付赎金之后
黑客不会把RSAHackerPrivateKey给用户
也不会把用户的明文数据发给用户
而是会把RSALocalPrivateKey给用户,然后勒索软件在收到这个key之后,会解密用户所有被加密的文件
最后于 2019-8-2 18:11 被看场雪编辑 ,原因:
nositno 2019-8-13 16:50
9
0
照这种方式来看,作者可以只给你提供一个 SalsaFileKey, 解密一个文件,让你相信他有解密的实力。然后当你支付赎金之后他再提供 RSALocalPrivateKey 解密所有 SalsaFileKey,从而解密所有文件。
作者可以搞个分层加密,一个局域网用一级密钥,每台电脑用二级密钥,每个文件用三级密钥。在支付赎金的时候可以选择解密一个文件,一台电脑,还是一个局域网。这样中毒之后可以让公司申请团购。
htg 1 2019-8-13 17:53
10
0
解密文件关键在于RSA加密算法,看来中招就是无解了,除非能破解RSA
看场雪 3 2019-8-13 19:27
11
0
nositno 照这种方式来看,作者可以只给你提供一个 SalsaFileKey, 解密一个文件,让你相信他有解密的实力。然后当你支付赎金之后他再提供 RSALocalPrivateKey 解密所有 SalsaFil ...
一般现在没做那么复杂
当作者需要向用户证明他有解密能力时,会让用户选择不超过3个被加密的文件,限制文件大小,且不允许是有价值的文件,发送给作者;
作者发还解密后的文件给用户。然后用户就相信了。
游客
登录 | 注册 方可回帖
返回