1.背景
1.1 Babuk勒索家族
Babuk勒索家族最早曝光于2021年1月初,在几个月内,它就跻身于最臭名昭著的勒索软件组织之列。自回归以来,它通过在地下论坛上积极宣传自己而获得了更多的知名度。在策略方面,其加密功能与其他勒索软件组织没有太大区别。随着时间的流逝,勒索软件组织通过发布新变种并致力于改进其攻击机制,成功地制造了混乱。
该加密器使用了多种加密方式:HC-128/ChaCha8 对称加密算法、椭圆曲线 Diffie-Hellman (ECDH)、SHA256 hashing等,特征也极为特殊,会将所有被加密文件后缀修改为.babyk,并且在所有加密文件的加密内容末尾附加字符串“choung dong looks like hot dog!!!”,该字符串的意义是为了标注着勒索软件与 Babuk 有关。
解析Babyk行为文章链接
https://www.acronis.com/en-eu/blog/posts/babuk-ransomware/
以下是针对 Linux/UNIX 和 ESXi 或 VMware 系统的跨平台加密后提取的勒索信内容。
勒索信
What happened?
---------------------------------------------------------------
Your computers and servers have been encrypted, which is fundamentally different from normal file damages.
And you can save yourself the trouble of going to the internet to find a way to decrypt them, because unless you pay the ransom.
Even if God comes, he will not be able to help you recover them!
What guarantees?
---------------------------------------------------------------
We value our reputation. If we do not do our work and liabilities, nobody will pay us. This is not in our interests.
All our decryption software is perfectly tested and will decrypt your data. We will also provide support in case of problems.
You can contact us to test an unimportant encrypted file and we will decrypt it to prove that we have the ability to decrypt them.
How to canotact us?
---------------------------------------------------------------
Your encryption ID:7gui):
You can contact us at the email address below:
ijtg5gr@keemail.me
ag55htr@keemail.me
How to Pay?
---------------------------------------------------------------
Please pay $20000 worth of bitcoins(BTC) to the address below:
bc1qz23mpc3qdy02jzw64xw9zhe4s275un40efsd2l
We will send you the decryption program after we confirm your payment.
---------------------------------------------------------------
*****WARNING: You have up to 7 days to consider whether or not to make a payment,
so hurry or you may lose your files and data forever,
And, we will make all your data available to the Internet.
1.2 来源
该加密器最初的泄露是来自于一篇Twiter文章,是由其babuk的开发者泄漏的源代码。
Twiter文章:
https://twitter.com/vxunderground/status/1433758742244478982?s=46&t=7D_QCICAVCcsuuaq3z_Tkw
源码泄漏地址:
https://github.com/Hildaboo/BabukRansomwareSourceCode/tree/main
其中存在三种针对不同系统类型(Linux系统、NAS系统、Windows系统)的病毒文件,本篇是针对Windows系统的分析。
2 总体行为
2.1 行为展示
2.2 密钥下发(Builder.exe)
这里可以通过VS生成了Builder.exe来实现对其Builder过程进行分析,可以看到主要是对这部分文件的处理与释放
2.3 文件释放
文件释放列表及作用:
No |
替换前的二进制文件 |
替换后二进制文件 |
文件描述 |
1 |
d_esxi.out |
d_esxi.out |
ESXI 解密器 |
2 |
d_nas_arm.out |
d_nas_arm.out |
NAS ARM 解密器 |
3 |
d_nas_x86.out |
d_nas_x86.out |
适用于 NAS x86 的解密器 |
4 |
d_win.bin |
d_win.exe |
适用于 Windows 的解密器 |
5 |
e_esxi.out |
e_esxi.out |
ESXI 加密器 |
6 |
e_nas_arm.out |
e_nas_arm.out |
NAS Arm 加密器 |
7 |
e_nas_x86.out |
e_nas_x86.out |
NAS x86 加密器 |
8 |
e_win.bin |
e_win.exe |
Windows 加密器 |
9 |
note.txt |
NA |
勒索信 |
2.4 流程图
2.恶意文件分析
2.1 逻辑分析
1 读取参数,第一个参数是文件夹路径,第二个是指定密钥文件
2 根据参数1的文件路径,来和kp.curve25519与ks.curve25519进行拼接,用于后续存储密钥
3 利用随机数函数CryptGenRandom来产生一个私钥,再利用该私钥配合curve25519算法生成一个公钥
4 或者看是否存在第三个参数,有指定私钥的文件,利用该文件内的私钥配合curve25519算法生成一个公钥
5 将私钥和外部的note.txt勒索信写入到加密器中,将私钥写入到解密器中
这里可以看到是传了2个参数进去,这里被ida识别成了一个,所以上面的那个是释放文件名称,下面的需要修改的。
6 将生成的私钥和公钥写入到kp.curve25519和ks.curve25519文件中
3.密钥产生程序
3.1 逆向分析(keygen.exe)
1.整体流程就是调用随机数函数SystemFunction036,产生了32位的随机数。
2.其中systemFunction036是cryptbase.dll中的函数。
3.之后就是经过了Curve25519算法的密钥生成,得出了一个公钥和一个私钥。
4.Windows源代码分析
4.1 流程图
4.2加密器(e_win)
程序先初始化了一下加密的句柄,使用了CryptAcquireContextW函数,获取了两次一共,第一次就是有现成的加密句柄就用现成的,第二次的话就是保障一下,如果没有就创建一个,然后第三个参数是加密的类型,这里的0x18则是对应的PROV_RSA_AES,意味着支持RSA和AES加密算法。
最后将加密句柄返回。
回到主函数,获取了输入的参数,并且判断是否存在debug参数,如果存在则开启调试模式
如果是调试模式开启,则创建一个用于记录调试模式的文件
4.3 关闭服务
主要比较有特点的就是,通过使用ControlService函数,来对服务发出停止操作,然后调用sleep函数直到服务成功停止后,再调用。
所停止的服务有:
vss,sql,svc$,memtas,mepocs,sophos,veeam,,backup,GxVss,,GxBlr,GxFWD,GxCVD,GxCIMgr,DefWatch,ccEvtMgr,ccSetMgr,SavRoam,RTVscan,QBFCService,QBIDPService,Intuit.QuickBooks.FCS,,QBCFMonitorService,YooBackup,YooIT,zhudongfangyu,sophos,stc_raw_agent,VSNAPVSS,VeeamTransportSvc,VeeamDeploymentService,VeeamNFSSvc,veeam,PDVFSService,BackupExecVSSProvider,BackupExecAgentAccelerator,BackupExecAgentBrowser,BackupExecDiveciMediaService,BackupExecJobEngine,BackupExecManagementService,BackupExecRPCService,AcrSch2Svc,AcronisAgent,CASAD2DWebSvc,CAARCUpdateSvc
4.4 停止进程
sql.exe, oracle.exe, ocssd.exe, dbsnmp.exe, synctime.exe, agntsvc.exe, isqlplussvc.exe,
xfssvccon.exe, mydesktopservice.exe, ocautoupds.exe, encsvc.exe, firefox.exe, tbirdconfig.exe,
mydesktopqos.exe, ocomm.exe, dbeng50.exe, sqbcoreservice.exe, excel.exe, infopath.exe, msaccess.exe,
mspub.exe, onenote.exe, outlook.exe, powerpnt.exe, steam.exe, thebat.exe, thunderbird.exe,
visio.exe, winword.exe, wordpad.exe, notepad.exe
4.5 删除系统的影卷
调用了cmd命令实现:
cmd.exe /c vssadmin.exe delete shadows /all /quiet
4.6 清空了系统的回收站
获取了系统的信息,并且获得了系统的处理器的数量,并且创建了参数分别为0和1的两个加密线程。
StartAddress
一共有两种参数,0的话就是会检查一下当前的文件队列,1的话就直接开始加密。
获取shares和paths的参数,该程序格式应该是用逗号分开的。
其中shares代表了加密IPC共享资源中的文件。
path代表了指定加密磁盘路径,例如c:
然后他会调用sub_40AB10来实现对其指定路径的所有文件的加密,甚至还会对驱动盘类型进行判断,如果是网络的驱动盘,该程序甚至会调用WNetGetConnectionW来检索其网络资源。
如果share和path参数都没有指定,那么就会检查是否存在名为DoYouWantToHaveSexWithCuongDong的互斥体,如果也不存在,则认为程序是第一次运行,就创建一个名为DoYouWantToHaveSexWithCuongDong的互斥体,以保证后续资源的利用不会被抢占。
之后呢就是一系列的加密网络上的资源了,例如映射本机的NAS之类的这种驱动器,还有遍历本机的操作了。
迭代遍历文件过程中会写入勒索信
并且会检查文件的后缀和文件的名称,名称是勒索信和后缀是.exe、.dll、.babyk的不加密。
)
等所有的磁盘遍历和文件加密完毕后,就是资源的释放了,外加又一次清除了系统的影卷。
)
4.6.1 加密流程
首先这个恶意程序会先初始化一下加密的标志“choung dong looks like hot dog!!”,之后会再修改一下文件的名称。
4.7 加密分析
该恶意程序使用了Curve25519算法来实现密钥的生成,之后使用了sha256来加密了密钥,并且将其分开当作后续加密的密钥,最后文件的加密是采用了AES来实现的。
https://cr.yp.to/ecdh.html这篇文章中基本介绍了使用**Curve25519加密算法的使用方法。**
总结一下要使用Curve25519加密算法的方法:
1 要生成 32 字节的 Curve25519 密钥,首先从加密安全源生成 32 个密钥随机字节
2 利用生成的32个随机字节的密钥和一个常数序列来生成公钥
3 利用生成的私钥和对方的公钥来生成共享密钥
4 使用sha512来生成共享密钥对应的sha512,一分两半,当作加密的Key和IV
5 计算sha512的crc用于解密时对密钥的校验
6 最后使用生成的KEY和IV进行HC-128流加密
4.7.1 算法分析
这里可以写一个Python脚本来验证一下这个过程,首先假设我们有Alice和Bob两个人
4.7.1.1 流程图
)
1 先生成一对随机的密钥,然后再生成对应的公钥
当然这里不见的非得需要33-126,因为我是想保持密钥由明文组成。
import random
import donna25519
private_key = ''
for i in range(0,32):
private_key+= chr(random.randint(33,126))
donna = donna25519.PrivateKey(secret=private_key)
public_key = donna.get_public().public
print 'private_key: '+private_key.encode('hex')
print 'public_key: '+public_key.encode('hex')
Alice Key:
private_key: 3840763b6b2a68583f7e3d7076224a5b7571217423236f6b233a6b6e68586649
public_key: 0b495944de1f2fa6dfa9fba7f73d53fc47d0c43592a52d4f80e4d7ae34a54556
Bob Key:
private_key: 705078776a2f316747502573447255492a513a3653385a3f213674482c495753
public_key: 30c1df51602efdd0eaa2d9f51e87851ecb351d2d555f3ec32cbb76916c74e43b
2 实现一下这个交换的过程,这里先让Alice给Bob做密钥交换。
import donna25519
Alice_private_key = '3840763b6b2a68583f7e3d7076224a5b7571217423236f6b233a6b6e68586649'.decode('hex')
Bob_public_key = '30c1df51602efdd0eaa2d9f51e87851ecb351d2d555f3ec32cbb76916c74e43b'.decode('hex')
donna = donna25519.PrivateKey(secret=Alice_private_key)
public_key = donna25519.PublicKey(public=Bob_public_key)
share_key = donna.do_exchange(public_key=public_key)
print 'share_key: '+share_key.encode('hex')
可以得到:
Alice_public_key: 0b495944de1f2fa6dfa9fba7f73d53fc47d0c43592a52d4f80e4d7ae34a54556
share_key: 7ef8f5be057f00fed06c3b993c0d5b6102d86680c124ebf12f005cf1c22c1f27
3 假设Bob接收到了这个Alice的公钥后,然后来实现一下Bob对Alice的密钥交换。
import donna25519
Bob_private_key = '705078776a2f316747502573447255492a513a3653385a3f213674482c495753'.decode('hex')
Bob_public_key = '30c1df51602efdd0eaa2d9f51e87851ecb351d2d555f3ec32cbb76916c74e43b'.decode('hex')
Alice_public_key = '0b495944de1f2fa6dfa9fba7f73d53fc47d0c43592a52d4f80e4d7ae34a54556'.decode('hex')
donna = donna25519.PrivateKey(secret=Bob_private_key)
public_key = donna25519.PublicKey(public=Alice_public_key)
share_key = donna.do_exchange(public_key=public_key)
print 'Bob_public_key: '+Alice_public_key.encode('hex')
print 'share_key: '+share_key.encode('hex')
可以得到:
Bob_public_key: 0b495944de1f2fa6dfa9fba7f73d53fc47d0c43592a52d4f80e4d7ae34a54556
share_key: 7ef8f5be057f00fed06c3b993c0d5b6102d86680c124ebf12f005cf1c22c1f27
通过这个过程我们了解此恶意程序的密钥生成与交换完全一样,而我们可以是Bob也可以是Alice,黑客也可以是Alice也可以是Bob,当我们根据对方的公钥和自己的私钥生成共享的密钥之后,后面的加密流程几乎都是依赖此密钥继续的。
密钥生成完毕之后,会根据文件的大小来选择是否是全加密或者是部分加密等,之后就会进入到合适的加密函数,但都是一个加密函数
文件内容的加密则会利用刚才的Key和IV进入到HC128的密钥流生成,最后将生成的密钥和原文进行异或后,即完成加密。
4.7.2 加密标志写入
最后就是对文件的末尾进行公钥、CRC32和加密标志"choung dong looks like hot dog!"的写入了,该标志也是作为目前Babuk家族的主要识别标志了。
当黑客拿到文件末尾的公钥后,即可使用自己的私钥来产生出对应的共享密钥,然后实现后面的解密,其中crc32是对共享密钥的校验,来对其完整性进行了验证。
5.总结
Windows这部分的加密的执行主要采用了多线程的方式,其中加密算法采用了Curve25519算法作为其加密算法,每个文件都是使用了同一个黑客的公钥来实现的密钥交换,但每个文件都会生成一个属于自己的私钥和公钥,而且整体发现此款恶意程序以加密速度为目标,为的就是用最短的时间来实现对中招电脑的资料进行加密。