首页
社区
课程
招聘
【病毒分析】DevicData家族扩散:全球企业和机构成为勒索病毒头号攻击目标!
发表于: 2024-10-15 23:34 6302

【病毒分析】DevicData家族扩散:全球企业和机构成为勒索病毒头号攻击目标!

2024-10-15 23:34
6302

本文聚焦于勒索病毒家族 DevicData 的最新变种,命名为 .DevicData-P-a2a9e9cb 勒索病毒。自2023年1月首次被发现以来,DevicData 家族一直对多个高价值目标展开攻击,包括企业用户、医疗机构和教育机构。这些目标通常持有大量敏感数据,这正是DevicData 选择它们进行攻击的主要原因。随着不断的更新和演进,DevicData 勒索病毒逐渐成为攻击这些特定目标的首选工具。

DevicData 勒索病毒以 RSAAES 加密算法相结合的方式进行数据加密。此组合极大地提升了加密速度,使得病毒在特定硬件环境下能够以每小时 500GB1000GB 的速度加密数据。此外,DevicData 采用全字节加密方式,对文件进行全面加密处理,极具破坏性,几乎难以恢复。一旦感染成功,几乎所有的文件将无法打开、访问,除非支付赎金以获取解密工具。

在对DevicData 家族的信息收集中,我们发现此勒索病毒家族的主要联络邮箱为:Devicdata@tuta.com,而备用邮箱为:Devicdata@onionmail.org。常见的加密文件后缀包括:.DevicData-P.DevicData-D.DevicData-Z.DevicData-C。这些变种后缀的不同,暗示了病毒攻击的不同版本差异。

Recover files!!!.txt

sierting.txt

加密文件名 = 原始文件名+DevicData-P-470b1abd ,例如:sierting.txt.DevicData-P-470b1abd

根据文件的后缀和大小来进行判断:

如果文件后缀是(.IB、.GDB、.FDB、.MDB.....),并且大小 <= 1G,或者文件是普通文件,并且文件大小 <=20MB,那么加密文件的特征:



如果文件后缀是(.IB、.GDB、.FDB、.MDB.....),并且大小 <= 1G,或者文件是普通文件,并且文件大小>20MB,文件的大小都是原始大小。

文件加密使用了AES-ECB加密算法,对加密文件的AES密钥,采用了RSA加密和AES加密双重加密。

KEY是由当前时间所产生的UUID去掉'-'以后的值。

使用了勒索病毒程序自带的配置信息中的RSA公钥部分,即配置文件中publickey的值。

其中ID部分的组成为:当前产生的UUID的前8位。

该内容记录了文件的加密chunknum数量,但是该文件运行结束后就会自删除。

DIE结果:

根据结果可以看到该程序是C#的Win Forms程序,并且存在软件保护,保护器: .NET Reactor(4.8-4.9)[Anti-ILDASM]


去掉保护后,就能够看到比较清晰的内容。

该功能通过method_0函数实现,主要通过读取配置文件中的信息,进行加密所需信息的初始化,并且再读取完毕后会删除配置文件。

病毒文件名+".config"

<?xml version="1.0" encoding="UTF-8" ?> <configuration> <appSettings> <add key="Recover files!!!" value="SomeValue" /> <add key="publicKey" value="<RSAKeyValue><Modulus>tD+B2sflrnCv5X4a7mv71iuJ5MMji8+K4g/v2UcUkB+zd8MIkyQ5KcpqKJbuGbDKGsytB6X4zqMj7DrjrxkVeLI00uCMqoDwhHbz04uS+6K7oGkWmQpbDRNEg4PQOS30qVHbGbYJapvlIpgb61s9D/0sdc3a2HQv1AC0nq+xk0Q2Apjs/Fc5svWosDawK9J17f9YAefBto8DY/dHyWxcFjj3tOZ10cSfaDj8idp+guFU5KeDDKd/yLYVkStPb0hxtrdKnp+TaUp8XBs5Sqbb2qkoS6UJxRxK8j90iJjvb+CBATIyzGRJKPrr1O9N7ClpO9bUHYFS4zq6h3zrzG+hmw==</Modulus><Exponent>EQ==</Exponent></RSAKeyValue>" /> <add key="settingKey" value="1111111111111111" /> <add key="Extension" value=".DevicData" /> <add key="ID" value="YourID" /> </appSettings> </configuration>

1.因为是Winform程序,所以配置的初始化Formload函数中实现的,通过InitializeComponent函数实现。

2.进入InitializeComponent函数可以看到Form1_Load函数的加载,并且还能看到两个按钮的被单击的触发事件。

3.进入Form1_Load函数可以看到,存在一个加载配置文件的操作,完成配置的初始化后会开创一个线程来实现加密操作。

4.进入到init_config函数可以看到具体的实现过程,这里发现加载了配置文件的信息,包括:勒索信、用于加密密钥信息的AES密钥、加密后缀、ID名称等,最后会将当前目录中的所有的config文件删除。

该部分大致分两个阶段来介绍,分为加密准备和文件内容加密,主要介绍了该程序会过滤那些文件后缀、文件路径和文件名称等,并且针对文件的大小选择不同的加密函数,并且运用不同的加密算法等。

1.从配置读取阶段完毕后,将执行剩下的进程创建部分的内容了,这里进程执行的函数是encrypt_entry函数。


2.进入encrypt_entry函数后,可以看到,将会执行Encrypt函数


3.进入Encrypt函数可以看到,分别对系统内四个位置的路径进行了加密,分别是:桌面共享资源映射的网络磁盘本地的磁盘,这里具体的详细分析可以看后面针对于各个位置的Entry函数的分析。

4.所有位置的加密准备其实都是一样的,都是将路径最终送入到Filter_Path_and_Write_Ransomware_Note函数来做路径遍历过滤并且在其路径中写入勒索信,这里以Encrypt_Desktop_Path函数举例,folderPath是系统的桌面的路径,最终都是送入到Filter_Path_and_Write_Ransomware_Note函数。


5.进入到Filter_Path_and_Write_Ransomware_Note函数中看一下,可以看到从文件路径、文件后缀和文件名称分别进行了过滤


接着会根据目录还是文件进行选择,如果是文件则调用sort_file_list函数对该目录下的文件进行排序,然后针对不同的文件后缀选择不同的加密方式,这里主要会对这部分后缀进行选择:


如果是这部分后缀的文件则会被选择送入到method_7函数做加密处理,而不属于这部分后缀的文件则会进入到method_8函数做加密处理。

6.其中对于method8函数还是method7函数而言,前面的流程都是差不多的,这里以method_7函数进行分析。

首先该method_7函数主要对文件名称文件权限做了校验:文件名不为空文件名不为"Recover files!!!.txt"文件权限不仅为只读。 只有满足以上条件的文件才会进行下面的加密操作。


7.根据文件的大小来进行判断具体执行那个加密函数。这个method_7函数在文件大小的校验是1G,而method_8函数在文件大小的校验是20MB,之后就是根据文件大小的不同送入不同的加密函数中了。

上面在加密准备阶段分别介绍了文件加密前的条件和根据文件后缀的不同和文件大小的不同,来选择不同的加密函数等。

1.在两个method系列函数处在根据不同的文件大小,而进行选择时,method_7函数在文件大小的校验是1G,而method_8函数在文件大小的校验是20MB


2.在校验文件大小是否小于等于1GB或者小于20MB时,如果满足条件的话,两个method_函数都会调用AESWriteByteToOldFile函数进行加密,之后再修改文件名称。


3.在校验文件大小是否大于1GB或者大于20MB时,则会分别会先将文件的名称修改为带加密后缀的文件名


metho_7函数有一点不同的地方就是它不仅会先将文件的名称修改为带加密后缀的文件名,还会创建一个名为加密文件名+"-Recover.Recover"的记录文件。

4.而在文件大小的校验的分叉点会存在两个比较重要的函数,分别是AESWriteByteToOldFile函数AESWriteByteToOldFile_F函数,该函数主要用作根据文件的大小来选择合适的加密函数。

AESWriteByteToOldFile_F函数:

用作对10G的文件进行分界,大于等于10GB的文件则会送入到AESWriteByteToOldFile_FD函数进行加密,而小于10GB的文件则会被送入到AESWriteByteToOldFile_FA函数进行加密。


AESWriteByteToOldFile函数:

用作对50MB的文件进行分界,大于50MB的文件则会送入到AESWriteByteToOldFile_FB函数进行加密,小于等于则会被送入到AESWriteByteToOldFile_FC函数进行加密。

加密算法的具体实现是AESMoedlBEncrypt函数,该函数使用了AES的ECB模式来对数据进行数据加密


密钥生成这里可以看到,使用的key是配置读取功能部分看到的encrypto_file_key这个变量的内容


回顾到配置读取功能部分看这个变量的产生是使用了method_2()函数产生的


进入到method_2函数可以看到,该函数的产生是生成一个uuid然后将其中的'-'字符去掉之后,将其作为加密的KEY。


好了,整体的密钥生成已经分析完毕,总结就是KEY是由当前时间所产生的UUID去掉'-'以后的值。

这里的会根据文件的大小选择不同对应的函数,而对数据进行加密的函数采用的都是AESModelBWriteFile函数来实现对数据的加密。

整体流程就是先读取该文件中的所有数据,然后创建读写IO流,再将配置读取功能时所产生的RSA加密数据写入到文件开头


之后呢就是调用AESMoedlBEncrypt函数将读取到的所有数据进行AES加密,加密完毕后将其再写入到文件中。

该函数先将大文件分成 1 MB 的Chunk块读取并处理。对于每个块,根据块的num编号对Chunk的数据来进行不同的操作,这里的判断条件是num的值是否是10的倍数,如果是则进行加密,即每过10个Chunk的数据,加密一个Chunk的数据。


否则就对该Chunk的数据进行数据交换操作,将如下位置字节的数据进行交换(数组下标一般是从0开始,故源文件中如何要找对应的位置应该加一):

19930 <-> 3550

1220 <-> 6500

19430<->7500

19701 <-> 5023

19701 <-> 297101

交换完毕后,将数据写入到文件中,之后就是对chunk的标号num进行加一,然后移动文件指针,开始进行下一个chunk的数据的读取。

该函数先将大文件分成 1 MB 的Chunk块读取并处理。对于每个块,根据块的num编号对Chunk的数据来进行不同的操作,这里与上面的恰好相反,这里对num的判断条件是num首先不能为10的倍数,并且num必须大于25,只有满足这两个条件才做数据交换,而交换数据的位置如下:

19930 <-> 3550

1220 <-> 6500

19430<->7500

19701 <-> 5023

19701 <-> 297101

交换完毕后,会将数据写入到文件中,之后就是num下标加一,然后移动文件指针到下一个chunk


对于num的值不满足10的倍数,并且小于25的,才对该Chunk的数据进行文件加密。


加密完成后,就是num下标加一,然后移动文件指针到下一个chunk

该函数首先会先判断chunk的标号num是否大于总大小,之后就会执行加密,而加密方式为循环加密,一次读取一个Chunk(1MB)的数据,其中一个Chunk对应一个它的标号numnum是从0开始的。在加密过程中会针对文件的前5120个(5GB)的Chunk数据进行加密,超过了5120的Chunk则会每过5个chunk加密一个Chunk大小的数据,总结一下:


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

收藏
免费 0
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//