首页
社区
课程
招聘
[原创]NetWalker加密流程的分析
发表于: 2021-1-22 19:26 6506

[原创]NetWalker加密流程的分析

2021-1-22 19:26
6506

2020年,新冠病毒遍布全球,由于企业的远程办公加快了办公数字化,给勒索病毒打开新的攻击面。在日常的威胁情报狩猎中,我留意到NetWalker勒索软件在网络攻击活动中十分活跃。

NetWalker又名Mailto,是一款十分较新的勒索病毒,于2019年九月出现,曾先后攻击过西班牙的医院、澳洲TollGroup公司、加拿大电力公司、加州大学、阿根廷官方移民局等机构。在疫情爆发期间,许多勒索病毒都不再攻击医疗机构,而NetWalker勒索软件确是例外,其在2020年多次攻击活动中,有数次攻击医疗机构,这让它迅速引起人们的重视。

由于网络上对该病毒加密流程甚少,因此在这里本人仅对该病毒的加密流程进行分析,更多的详情可浏览参考链接中的报告。

与传统勒索病毒传播方式一样,NetWalker传播途径主要有RDP、VNC、鱼叉网路钓鱼、网页挂马等方式。NetWalker采用了RAAS(勒索即服务)的方式,使得他们可以更大规模地运营,针对更多组织进行勒索攻击。

和大部分勒索病毒不一样的是,NetWalker采用了curve25519+ChaCha的方式加密文件。

(以下知识内容均来自网络)

curve25519是一条椭圆曲线,并设计用于椭圆曲线Diffie-Hellman(ECDH)密钥协商方案。它是最快的ECC曲线之一,任何已知专利均为涵盖。

其有以下两条重要的公式:

计算公钥

为了生成和32字节密钥一致的32字节公钥PublicKey[0], PublicKey[1], ……,PublicKey[31],调用以下函数:

其中BasePoint为:

const unsigned char BasePoint[32] = {9};

生成共享密钥

给定另一用户的Curve25519公共秘钥hispublic[0], hispublic[1], …, hispublic[31], 调用以下函数:

生成32-byte共享秘钥shared[0], shared[1], …, shared[31]. 另一个人可以根据自己的私钥以及你的公钥生成相同的共享秘钥。

下图来自于网络,仅用于方便大家理解。

在介绍ChaCha加密之前,我们首先得要了解一下其前身Salsa20,Salsa20是一种流加密算法,它创建在基于add-rotate-xor(ARX)操作的伪随机函数之上——32位模加、异或(XOR)和循环移位操作。

其密钥流布局如下:

而ChaCha是Salsa20的修改版本,也同样是流加密算法。其目的是在提高每轮扩散的同时实现相同或稍好的性能。

其密钥流布局如下:

更多的知识可以在维基百科上查阅。

NetWalker的配置信息被使用RC4算法加密后存放于资源段,该资源的前四个字节为密钥的长度,后面的n个字节为解密密钥,剩下的内容为需要解密的配置信息密文。

在成功解密后将得到NetWalker的配置信息,包括一些白名单,洋葱地址,杀死进程列表。在这里我们需要留意的是黑客的公钥mpk(base64编码)。

NetWalker的第一步就是生成私钥1。在NetWalker中,都是以ZwQuerySystemTime获取到当前系统时间作为种子,使用RtlRandomEx来生成的随机数作为私钥。

第二步,NetWalker会使用上面随机生成的私钥1(32个字节的随机数)通过curve25519算法来生成公钥1,算法如下:

第三步,NetWalker使用第一步同样的方式来生成私钥2,并使用私钥2和公钥1通过curve25519算法来生成共享密钥1,算法如下:

在获取到共享密钥1后,NetWalker会对共享密钥1使用SHA256得到摘要,并且取其前八个字节作为后续ChaCha加密的向量1。

在NetWalker中的SHA256为一个变形的SHA256,其会对产生的摘要中第一个字节进行自加1。

第四步,NetWalker将会使用共享密钥1作为密钥key,使用向量1作为向量iv对文件内容进行ChaCha加密得到密文1,加密成功后将会把密文1写入到文件中。密钥流布局如图所示。

算法如下:

综上所述,加密文件的流程如下:

但是,在文件中只保存了密文1是无法进行解密的,为了后续的解密,NetWalker还采取了以下操作。

NetWalker使用私钥2通过curve25519算法来生成公钥2并且保存到文件中,算法如下:

由于curve25519算法的特性,公钥1和私钥2产生的共享密钥1同样也可以使用私钥1和公钥2产生,算法如下:

由于黑客选择了保存公钥2而没有保存公钥1 ,因此,黑客接下来不对私钥2进行操作而是对私钥1进行操作,想方设法来保存其密文并通过手上的私钥进行解密。

NetWalker会产生一个新的随机数作为私钥3,并使用NetWalker中硬编码的公钥mpk(base64解码mpk字段即可得到)通过Curve25519算法得到共享密钥3,算法如下:

在获取到共享密钥3后,NetWalker会对共享密钥3使用SHA256得到摘要,并且取其前八个字节作为后续ChaCha加密的向量3。然后NetWalker会使用该共享密钥3和向量3对私钥1进行ChaCha加密,得到密文2并且保存到文件中,算法如下:

最后,将私钥3通过curve25519算法,得到公钥3并且保存到文件中,算法如下:

因此,完整的一个加密流程图如下:

在上述提到的mpk是由黑客手上的私钥通过curve25519算法得到的,算法如下:

由于curve25519的特性,黑客也同样可以使用自己手中的私钥和公钥3得到共享密钥3,从而进行解密,算法如下:

在得到共享密钥3后,黑客便可以对密文2进行解密,从而得到私钥1。私钥1和公钥2通过curve25519算法,能够得到共享密钥1,最后通过共享密钥1对密文1进行解密,则能够还原文件内容了。

NetWalker是一款十分活跃的勒索软件,其核心的加密思路实际上和其他勒索软件并无太大差异,只是算法上进行了变化。由于大部分勒索病毒加密后都无法解密,只能乖乖向黑客投降,因此这里建议大家做好日常的防护措施,开启勒索病毒诱捕防护等功能。

https://cloud.tencent.com/developer/article/1763751

https://en.wikipedia.org/wiki/Curve25519

https://mp.weixin.qq.com/s/IeTZSDhX7E_l2cyT5QJgQA

https://www.mcafee.com/blogs/other-blogs/mcafee-labs/take-a-netwalk-on-the-wild-side/

https://blog.csdn.net/mutourend/article/details/94435761

https://blog.csdn.net/u011897062/article/details/89633193

https://mp.weixin.qq.com/s/ezNy-kjI6oMceV4F2FRwng

https://mp.weixin.qq.com/s/2KVWemeMrFIkzIH7b-FtFg

 
 
 
 
curve25519(PublicKey, SecretKey, BasePoint)
curve25519(PublicKey, SecretKey, BasePoint)
curve25519(SharedKey,SecretKey,hispublic);
curve25519(SharedKey,SecretKey,hispublic);
 
 

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

最后于 2022-1-19 10:50 被lracker编辑 ,原因: 标题修改
收藏
免费 3
支持
分享
最新回复 (1)
雪    币: 191
活跃值: (154)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
2
写的很详细
2021-1-27 18:08
0
游客
登录 | 注册 方可回帖
返回
//