吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 17275|回复: 72
上一主题 下一主题
收起左侧

[PC样本分析] 勒索病毒Sodinokibi样本分析

  [复制链接]
跳转到指定楼层
楼主
Loopher 发表于 2020-7-1 22:07 回帖奖励
使用论坛附件上传样本压缩包时必须使用压缩密码保护,压缩密码:52pojie,否则会导致论坛被杀毒软件等误报,论坛有权随时删除相关附件和帖子!
病毒分析分区附件样本、网址谨慎下载点击,可能对计算机产生破坏,仅供安全人员在法律允许范围内研究,禁止非法用途!
禁止求非法渗透测试、非法网络攻击、获取隐私等违法内容,即使对方是非法内容,也应向警方求助!
勒索病毒Sodinokibi样本分析概述“Sodinokibi勒索病毒在国内首次被发现于2019年4月份,2019年5月24日首次在意大利被发现,在意大利被发现使用RDP攻击的方式进行传播感染,这款病毒被称为GandCrab勒索病毒的接班人”--引用了熊猫正正师傅的描述,更多信息移步到熊猫正正师傅的回答,在参考部分,在今年的5月份公司同事被这个病毒加密了文件,在问了他之后了解到可能是通过RDP的方式传播进来的,因为那段时间前刚好公司要求远程办公就开了Windows的远程控制这里要注意开了Windows远程控制的要记得关闭,除了必须开的,导致这个病毒传播进来了,当然这个病毒还有更多的传播途径(方便大家了解到,这里引用的还是熊猫正正师傅的描述):
  • Oracle Weblogic Server漏洞
  • Flash UAF漏洞
  • RDP攻击
  • 垃圾邮件
  • 水坑攻击
  • 漏洞利用工具包和恶意广告下载
可以看到它的传播方式还是很广泛。这次分析这个样本主要还是练习分析能力,原本只是想自己作为比较保存就好,想想发出来也好学习下别人是怎么处理的,因此这篇文章可能有很多的不足,希望能多多指点。


勒索信息

这个Sodinokibi勒索病毒在加密文件后会把文件的后缀改为随机生成的字符串并修改桌面背景,如下


在每个加密的文件加下会生成一个随机字符串-readme.txt的文件,这个文件是帮助被感染用户解密的一个的帮助文档,内容如下---=== Welcome. Again. ===---
​
[+] Whats Happen? [+]
​
Your files are encrypted, and currently unavailable. You can check it: all files on you computer has expansion wcv7a380.
By the way, everything is possible to recover (restore), but you need to follow our instructions. Otherwise, you cant return your data (NEVER).
​
[+] What guarantees? [+]
​
Its just a business. We absolutely do not care about you and your deals, except getting benefits. If we do not do our work and liabilities - nobody will not cooperate with us. Its not in our interests.
To check the ability of returning files, You should go to our website. There you can decrypt one file for free. That is our guarantee.
If you will not cooperate with our service - for us, its does not matter. But you will lose your time and data, cause just we have the private key. In practise - time is much more valuable than money.
​
[+] How to get access on website? [+]
​
You have two ways:
​
1) [Recommended] Using a TOR browser!
  a) Download and install TOR browser from this site: https://torproject.org/
  b) Open our website: http://aplebzu47wgazapdqks6vrcv6zcnjppkbxbr6wketf56nf6aq2nmyoyd.onion/AD8AE2F24C5CC9FC
​
2) If TOR blocked in your country, try to use VPN! But you can use our secondary website. For this:
  a) Open your any browser (Chrome, Firefox, Opera, IE, Edge)
  b) Open our secondary website: http://decryptor.top/AD8AE2F24C5CC9FC
​
Warning: secondary website can be blocked, thats why first variant much better and more available.
​
When you open our website, put the following data in the input form:
Key:
​
bHE563Uf5xjCVP0OTrVpaUsXNIIi0Xz87I6RYOXK78smBHmCkAkxGPB1Rn/u8VES
vQLObNg//JLVwwSeHHqKTT70tx/+ipwyQbb3g+nXAy71CGfFmExFiBUjH0HcCcfD
+SsZnThV3lyjNH2bnYTNCHNV7b8nDT5PueTSsI7+YAjLGHR+FgDKvo0hS85pAwVC
E/+XRGlSSKEZ7x1uZmr/1vqiSv9SHILRzYU4b4OcTHlfjR61c/vvNZBVJE2ahW2d
OztG84sGjrXyvDw0/Jaaxz17+rLrEE+OagylpleMBlBYR1pRTPJIQ+GMax/OVJiW
x98Sypk0398zpQjkMe/3UR2RQmOaae3mLeGKpwmV56yQ3faa7h57phQ9K1d7b8f4
aNTlihBVQGypYwu6L56C4UM5ne2IIMvgcKDdEQhbcHqgxJpnwZaRTVFVthBJuV4X
Hj178UcnHGyCDuS7El1kXPu3lRtTmz/DHaM8+80Bkyj4Lvme4P5l2V4VDyiCc/+4
Yv8X02LJ2i59iW0risZacwaJ2o1yfmQnGY9P8vFcThnTxS/3g4LpU/pjGc2LmRrB
xZZBHo0DwtJzXOvL34UkUK0CoBvLH+VfcOpRMqq0HORjSVst9/T2UdvmQ7e69vkx
XaKBpivHhB7vq8C8ZARamTkXvyddGb7eWFH8c1yFldVgcqB9AYO4Cf16l1sdaLNE
onfHRroet61szfOUeWv1hvBGqDP+8zeXW6fERf1tt6NvTiIkLh79NcOi3LG8U9hE
0/mu0L0RZHt8O5SxneO+rbsp+JOSB5hwnX+C/4ga6cb3vbgnscYpMa6L6AqDHv0s
9i0Hk5IJuw/tnURfxXKHOetVVHDat6T3f+LF5lbXq7QFSen6XEWXgSuH5tsiFu6U
5Qyp3/a12b6Sb7dOjgmHExYDsL7UAC5tRfA1HhyJ/l2GcqU1jVDZnD3IK+yylPcC
UlLmPHolHX/OyDu4Tx2899iJJ/DY2WqapFqzmyevO60uS2W5iDp5wQnkZc25UhHC
MasfzqYBk98LUjoq6E5vYIalnbH80ScfZqoSC+TcRWrIGdc8TZkkG3UoJ7ZDArbc
NoL86FYCswxFFICbBU8yLKw7X6n1p5MYDER+Ka7zyLenrn6Cp6cKQ/ZY2TZzBEI0
WQVFDEuOybNti8HuBifoIQ==
​
​
​
Extension name:
​
wcv7a380
​
-----------------------------------------------------------------------------------------
​
!!! DANGER !!!
DONT try to change files by yourself, DONT use any third party software for restoring your data or antivirus solutions - its may entail damge of the private key and, as result, The Loss all data.
!!! !!! !!!
ONE MORE TIME: Its in your interests to get your files back. From our side, we (the best specialists) make everything for restoring, but please should not interfere.
!!! !!! !!!
样本分析
在进行分析之前需要获取程序的一些基本信息,例如导入导出表,字符串等内容,这样能帮助快速定位一些关键的调用。
后面的分析中IDA内的函数被重名为 mw_xxx格式静态分析

这个样本是2018年11月15日的,使用DIE工具查看样本信息如下




查看编译时间为

没有发现加壳,开始还觉得蛮不错的,这样可以省去了脱壳部分的时间,不过当我用PeBear来查看程序导入信息的时候发现了UPX0 UPX1这两个节区,看来要多用一些工具查一下比较好

开始以为是UPX壳就比较好办了,但实际不是一个真正的UPX壳程序,实际是自定义的壳加载程序和CandCrab类似都是自己的壳。

脱壳首先将样本拖入到x64dbg内,UPX类型的壳一般使用ESP定律 或者在VirualProtect 函数下端点并放行两次,在第二次断下来后单步执行到跳转回OEP位置就能完成脱壳,,
不过今天我用另一个方式也能完成这个脱壳部分,接着就是IAT修复即可。使用IDA打开程序此时提示我们程序可能被加壳了,有些段不正常,如下

这个是预期内的,之后后找到第一条指令PUSHAD,这条指令时压缩壳的一个比较通用的指令特征之一,不过在分析了程序后发现这个这个不是真正的UPX壳,因此不能看到这个标准的特征。如下是汇编指令
因此不能使用上述提到的方法脱壳,为了能脱壳这个程序这里需要在几个关键的Api设置断点
在理清楚要脱壳的点之后,使用x64dbg加载程序接着分别设置断点

如下是设置VirtualAlloc断点,在返回的位置设置断点

运行程序后可以在VirtualAlloc断下来接着等待程序写入pe文件后,在dump即可,如下

将dump的程序保存为sodinokibi_dump.exe。
修复IAT表
使用IDA加载脱壳的程序发现没有导入表,如下

分析程序后发下所有的导入的api是采用hash的方式导入,在动态时导入,如下
        
hash表

分析程序知道在call    sub_406A4D //这里会动态解析api并设置给hash表供后续调用

push    1 call    dword_41CB64进入到sub_406A4D -->mw_build_api  后如下

经过多次层层分析后来到实际的解析程序mw_resolve_api位置,程序手下转换传入的hash值,经过两次转换,如下

api_hash_1 = (unsigned int)arg_iat_hash ^ (((unsigned int)arg_iat_hash ^ 0x76C7) << 16) ^ 0xAFB9;
  api_hash_2 = api_hash_1 >> 21;根据api_hash_2的值来获取动态函数并对应的dll的HANDLE句柄,

之后再次计算api_hash_1 &0x1fffff的值

最后根据计算得到的HANDLE获取IMAGE_EXPORT_DIRECTORY,接着调用mw_get_api_hash 返回的值 &0x1fffff和V5进行比较满足则返回给import_iat_hash_table,这样就能动态导入函数了,如下

为了能更好的分析这个解析过程,需要手动导入Export的结构体

可以看出程序在获取到导出的函数名并调用mw_get_api_hash函数转换并与V15做比较,如果相等则返回对应的函数。分析mw_get_api_hash函数知道传入的导出函数名fn_name每个字节和ch=ch +0x10f * 0x2b,如下
调试看一下解析的好的api都有哪些。这里调试的是dump.exe程序

此时这的程序已经导入并解析完成,此时修复一下IAT

保存新的dump为dump2.exe之后就是IAT Autosearch Get Imports最后修复即可

最后用IDA打开查看如下

在修复了IAT之后,程序的字符串也是被加密使用的,只有动态时机才能被解密,目的还是为了避免被查杀和分析。
程序分析
将修复好dump2.exe使用IDA分析,首先程序会创建一个互斥体用来保证只有一个实例对象运行,使用的互斥体名称是加密的字符串需要在动态阶段解析获取得到,
如下


经过分析这个解密函数是一个RC4的算法,首先使用第一个循环初始化一个sbox,keylength大小在0-255之间,keylength的长度小于0x100

其中keylenght=arg_ptr1+arg_ptr2接着是解密操作
  • 首先初始化两个变量i,j=0
  • 计算i=i+1
  • j=sbox[i ]+j
  • 接着交换两个位置的值, sbox[i ]=sbox[j]
  • 执行异或操作result=key ^ sbox[i+sbox[i+1]]
  • 循环解密上述步骤完成解密

我在gitub上找到了有人写了前部分解密脚本 地址:  思路是
  • 获取所有引用的RC4函数
  • 获取指令位置,提取对应的参数值,包括str_tbl_start,offset,key_len,str_len
  • 获取参数的脚本
  • 如果是寄存器则将获取寄存器的值,例如上面的text:002748A3                 lea     eax, [ebp+var_58]
    .text:002748A6                 push    eax ; 去读取寄存器的值,
    .text:002748A7                 push    56h ; 读取立即数
    .text:002748A9                 push    0Fh ; 读取立即数
    .text:002748AB                 push    7BEh ; 读取立即数
    .text:002748B0                 push    offset unk_28CC28
    .text:002748B5                 call    mw_rc4_wrapper  ; Global\206D87E0-0E60-DF25-DD8F-8E4E7D1E3BF0其中获取寄存器的值如下
  • 接着调用RC4解密解密字符串,添加注释 注释函数我调试时暂时关闭的

使用python脚本解密字符串如下

可以得到这里创建的Mutex=Global\206D87E0-0E60-DF25-DD8F-8E4E7D1E3BF0同样用脚本将这些解密的字符串标注在函数调用位置

得到运行时的参数一致

在创建完成互斥体后,然后读取配置信息,这个配置信息同样经过了RC4加密,调用如下

为了方便获取所有调用解密的位置,在上一个脚本内添加如下来获取解密配置的参数

解密后的字符串是很长的配置等信息,如下

运行时的数据解密如下

经过整理后即可得到这里解密的数据是配置信息,包括了公钥,域名等配置信息,如下是解析出来的json数据

**为了不影响查看,解密的配置信息放在附件内了**

执行CVE-2018-8440 exp提权
调用mw_is_exp来决定是否利用漏洞,根据解密的数据知道这里是True

在运行时的返回Tru
e
获取当前进程id并调用漏洞利用函数

进入到mw_exp_vul函数后分析,程序会判断系统的文件时间是不是2018年11月,接着判断系统的版本的最低版本是否满足0x501,如果满足则开始读取%systemdir%下的两个驱动文件win32kfull.sys win32k.sys是否存在并且文件是是否符合上述时间如果最低版本小于0x501,则会调用Wow64DisableWow64FsRedirection函数关闭文件重定向到Wow64目录确保能访问到system32目录在64位系统上运行的32位系统执行访问的系统文件会被重定向到Wow64目录下。查了相关的漏洞信息后发现,这两个文驱动文件时可以被利用来做提权漏洞

接着着判断系统是32/64并提取对应的exploit代码并执行

对应的exploit代码64bit exploit

32bit exploit

运行时的调用代码

程序在执行的时候并不做解密操作,这里可以写一个脚本将exploit段提取出来,由于这里暂时不做漏洞代码的分析就不做这个分析了,只需要知道如果这个程序执行成功后执行的进程会完成提权执行。
执行加密流程进程权限提权
首先执行runas来执行提升进程权限

不过在调试分析的时候发现这里并不能进行,因此这里就执行失败。
主要加密流程

获取explorer进程身份
调用ImpersonateLoggedOnUser函数获取explorer进程登录信息

运行时的调用

获取配置信息并读取系统信息
解密处配置信息内容保存在全局变量

调用mw_read_system_info读取系统信息
,
如下是要读取的信息字段内容Volnume
username
computerName
newworkType
localName
languageType
productName
driverType
diskFreeSpace
archiveType将这些信息保存在注册表内,保存的内容格式{"ver":%d,"pid":"%s","sub":"%s","pk":"%s","uid":"%s","sk":"%s","unm":"%s","net":"%s","grp":"%s","lng":"%s","bro":%s,"os":"%s","bit":%d,"dsk":"%s","ext":"%s"}
如下是保存在注册表内的内容

提取出来如下01FED7D8 {"ver":258,"pid":"5","sub":"367","pk":"1g3/QEQPOQ7S3fBLZ0wvu/B9N
01FED858 fpLLvf8mByoN3or9E0=","uid":"AD8AE2F24C5CC9FC","sk":"cioYIoc2p54v
01FED8D8 UqOzEqzUnc362D7IN16QjuFrZUQ9owM5wHwg3Q7xXoR20ZEGbqr6d2L6ZOdYnVa4
01FED958 kdKZMx0DwZ1zpTBMEdUKB/45iazCesPopjCsI6kUuQ==","unm":"user9527","
01FED9D8 net":"USER9527-PC","grp":"WORKGROUP","lng":"en-US","bro":false,"
01FEDA58 os":"Windows 7 Ultimate","bit":64,"dsk":"QwADAAAAAPCf+QcAAAAA4Ot
01FEDAD8 cBAAAAA==","ext":"j5113by3"}....................................
&#8203;这里的ext是生成的{EXT}-readme.txt的EXT的值保存在注册表内的rnd_ext内最后写入到注册表的SOFTWARE\Refcfg\内容

拼接好readme.txt

调用CreateToolhelp32Snapshot函数遍历进程并关闭

经过分析后发现这里关闭的进程在配置文件内的prc字段内        '...',
        "agntsvc.exe",
        '...'
&#8203;避免在加密阶段加密文件失败。
删除卷影备份
下一步是删除卷影备份,防止加密后用户可以利用卷影备份完成重要数据的恢复

cmd.exe /c vssadmin.exe Delete Shadows /All /Quiet & bcdedit /set {default} recoveryenabled No & bcdedit /set {default} bootstatuspolicy ignoreallfailures同时利用bcdedit将recoveryenable为不可用。
遍历文件
紧接着判断是否存在移动设备U盘等并遍历文件保存

驱动类型的取值范围

这里就能知道这个病毒还会对U盘内的文件完成加密。
遍历共享目录文件

共享文件目录一般会有两个场景使用
  • 虚拟机和物理机的共享
  • 两个设备之间共享
创建io线程
开始执行加密,这里加密的是通过CreateIoCompletionPort创建输入/输出(I/O)完成端口,并将其与指定的文件句柄关联,或创建尚未与文件句柄关联的I/O完成端口,允许稍后关联。将打开的文件句柄的实例与I/O完成端口相关联,可以让进程接收到涉及该文件句柄的异步I/O操作完成的通知。

也就是说在后面通过打开文件和读取写入的过程中只要将打开的文件的句柄和指定的进程关联,就能获取到对应的文件内容,就是通过这个方法来获取文件的流完成加密。创建线程的a1是传给io线程要执行的参数,在执行遍历的时候会将文件路径交给线程,之后线程会执行io操作,创建好io服务后,调用文件遍历操作,同时便利得到的文件路劲会传给线程

每次执行读取io前都会调用mw_check_file_path mw_check_file_extension函数进行检查

文件的后缀主要是配置文件内的字段ext内容。执行文件遍历

执行线程在获取到文件路径后调用GetQueuedCompletionStatus判断是读取状态还是写入源文件

加密算法看了之后确实很难分析懂,如果对加密算法很感兴趣的请参考国外研究人员的分析,以后会增加加密算法的分析。https://www.acronis.com/en-gb/articles/sodinokibi-ransomware/为了能得到所有的加密流程都完成,创建加密io、调用遍历文件加密之后使用了循环等待所有的io都完成。

生成桌面图片文件
当加密工作结束,开始创建桌面背景

写入的文件会将之前创建的EXT的值写到图片内

最后保存背景图片到tmp目录下,之后调用SystemParametersInfoW设置用户桌面

如下是生成的图片

回传信息
所有的勒索病毒都会在一开始或者结束阶段回传相关加密信息,Sodinokibi病毒也是如此。

先读取保存在配置文件内的domain,如下

接着拼接处url地址,拼接格式如下https://domain/[ wp-content|static|cont|include|uploads|news|data|admin]/[images|pictures||image|temp|tmp|graphic|pics|game]/[随机字符串].[jpg|png
|gif]第一部分是将得到的域名和https://进行拼接

接着第二部分的拼接

拼接好第二部分的url

第三部分的url

第四部分

将处理好的url返回

解密处请求头

发起网络请求

使用POST方式将数据返回,发送的数据信息如下

总结执行流程
Sodinokibi勒索病毒的加密流程如下

建议
从上述分析中可以看出,勒索病毒为了防止用户自行恢复备份文件会删除系统提供的备份功能,如果U盘是连接到电脑上文件也会被加密,同时还禁止使用恢复模式,因此要对重要文件做好备份,最好是云备份,勤打补丁,关闭远程访问控制端口3389等。当然,最好还是安装反病毒软件等来减少被感染的风险。

样本特征

sha256BF7114F025FFF7DBC6B7AFF8E4EDB0DD8A7B53C3766429A3C5F10142609968F9

参考
  • 熊猫正正-Sodinokibi解密工具,可解密一千七百多个变种
  • Taking Deep Dive into Sodinokibi Ransomware
  • OALabs-Revil-decrypt
  • CVE-2018-8440
  • Malware Tales: Sodinokibi

免费评分

参与人数 30威望 +2 吾爱币 +121 热心值 +28 收起 理由
crazycannon + 1 + 1 谢谢@Thanks!
老機劉叔 + 1 + 1 我很赞同!
775673603 + 1 用心讨论,共获提升!
faed + 1 + 1 我很赞同!
hhz0068 + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
0615 + 1 + 1 热心回复!
nieshi666 + 1 + 1 用心讨论,共获提升!
MUMUAA + 1 + 1 我很赞同!
kole + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
啦啦啦666 + 1 用心讨论,共获提升!
PHILKILIG + 1 + 1 我很赞同!
孤独的鬼人 + 1 用心讨论,共获提升!
neolay + 1 谢谢@Thanks!
幻想领域 + 1 + 1 用心讨论,共获提升!
poisonbcat + 1 + 1 谢谢@Thanks!
gaosld + 1 + 1 用心讨论,共获提升!
siuhoapdou + 1 + 1 用心讨论,共获提升!
RickyRude + 1 不错不错,学习到了
kjian + 1 + 1 用心讨论,共获提升!
无所事事又一天 + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
fei8255 + 1 + 1 我很赞同!
xxiiee588 + 1 + 1 我很赞同!
RoB1n_Ho0d + 1 我很赞同!
emmet_mayi + 1 热心回复!
Luke01 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
Hmily + 2 + 100 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
SJC + 1 热心回复!
cappnnio + 1 我很赞同!
www.52pojie.cn + 1 谢谢@Thanks!
生有涯知无涯 + 1 + 1 我很赞同!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

推荐
JuncoJet 发表于 2020-7-2 08:50
就想知道有没恢复的可能啊

2020/05/29  05:21             3,801 mimikatz.txt.pem09v
2020/05/29  05:21               237 nl_passwords.txt.pem09v
2020/05/29  05:21               254 nl_users.txt.pem09v
2020/05/29  05:21             7,548 pem09v-readme.txt
2020/05/29  05:21               247 results.txt.pem09v

勒索病毒.rar

7.75 KB, 下载次数: 85, 下载积分: 吾爱币 -1 CB

被加密的文件

推荐
m2m2lu123 发表于 2020-7-2 00:05
沙发
 楼主| Loopher 发表于 2020-7-1 22:11 |楼主
这个发上来怎么全乱了,预览和发送出来都不一样了

点评

那个[ i ]被discuz识别成斜体了,我编辑下加了个空格,以后可以考虑用markdown格式来写,论坛也支持,会更好看一些。  详情 回复 发表于 2020-7-3 14:50
3#
bozai120 发表于 2020-7-1 23:21
太屌了.......
头像被屏蔽
4#
ufoiso 发表于 2020-7-1 23:21
提示: 作者被禁止或删除 内容自动屏蔽
6#
wfd007 发表于 2020-7-2 07:29
向高手致敬
7#
cybycy 发表于 2020-7-2 07:37
大佬nb 虽然完全看不懂
头像被屏蔽
8#
ufoiso 发表于 2020-7-2 08:36
提示: 作者被禁止或删除 内容自动屏蔽
10#
mtda 发表于 2020-7-2 09:08
分析全面  逻辑清晰 赞
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-15 08:28

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表