请使用手机微信扫码安全登录

切换账号密码登录

绑定手机号

应国家法规对于账号实名的要求,请您在进行下一步操作前,需要先完成手机绑定 (若绑定失败,请重新登录绑定)。了解更多

不绑定绑定手机号

360官网 | 360商城

推荐论坛版块活动360粉丝商城众测粉丝轰趴馆常见问题
本帖最后由 Potato 于 2021-5-25 16:23 编辑
相关阅读:
Sodinokibi勒索病毒家族,我是链接请点我。


一、        样本信息


文件名:Sodinokibi.exe
MD5:83E02AC0996228C5EE9F07771DD6B11C
SHA1:0C7C658932798BF6F488A5D236B959F6D5F3EF11

二、        样本分析
1.        文件的释放和装载执行
执行开始,释放自身携带的PE文件,自我装载入当前进程空间,跳转到入口点执行代码。

释放的PE文件在执行开始后,判断当前进程是否以管理员权限运行。如果不是,Sodinokibi会以”runas”方式重新启动自身。
重起自身时,系统弹出用户账户控制(UAC)对话框,等待用户选择。一旦用户点击”是”,病毒将以管理员权限执行;如果用户点击”否”,病毒则再次弹出UAC询问弹窗,直至用户点击”是”。
这种情况下可以先使用任务管理器结束Sodinokibi进程,再关闭UAC弹窗。
病毒在管理员权限下运行将拥有更高的文件访问和读写权限,并可以执行诸多高权限操作。

2.        地区豁免
Sodinokibi会获取当前机器的默认语言ID和输入法语言。如果为以下国家语言代码将退出执行,不进行加密。
  • 0x419 : 俄语
  • 0x422 : 乌克兰语
  • 0x423 : 白俄罗斯语
  • 0x428 : 塔吉克语
  • 0x42B : 亚美尼亚语
  • 0x42C : 阿塞拜疆语-拉丁
  • 0x437 : 格鲁吉亚语
  • 0x43F : 哈萨克语
  • 0x440 : 吉尔吉斯语-西里尔语
  • 0x442 : 土库曼
  • 0x443 : 乌兹别克语-拉丁
  • 0x444 : 鞑靼语
  • 0x818 : 罗马尼亚-摩尔多瓦
  • 0x819 : 俄罗斯-摩尔多瓦
  • 0x82C : 阿塞拜疆语-西里尔
  • 0x843 : 乌兹别克语-西里尔
  • 0x45A : 叙利亚语
  • 0x2801 : 阿拉伯语

3.        关闭指定进程和服务
Sodinokibi中的明文字符串几乎全部使用RC4(对称流加密算法)进行加密。通过调试,病毒程序将会匹配并关闭解密出的进程名(主要是数据库、邮箱、浏览器、编辑工具等相关进程)。部分目标进程如下:
  • agntsvc
  • oracle
  • firefox
  • ocomm
  • encsvc
  • thunderbird
  • wordpa
  • xfssvccon
  • powerpnt
  • synctime
  • msaccess
  • infopath
  • ocautoupds
  • steam
  • dbsnmp
  • visio
  • excel
  • thebat
  • mspub
  • ocssd
  • sql
  • winword
  • tbirdconfig
  • dbeng50
  • sqbcoreservice
  • mydesktopqos
  • onenote
  • isqlplussvc
  • outlook
  • mydesktopservice


关闭的目标服务主要与卷影、数据库、反病毒软件等相关:
  • vss
  • backup
  • svc$
  • sql
  • mepocs
  • sophos
  • memtas
  • veeam




4.        删除卷影备份
对于Windows XP以上版本的操作系统,解密并执行powershell脚本删除卷影
Get-WmiObject Win32_Shadowcopy | ForEach-Object {$_.Delete();}
对于Windows XP及其之前的Windows版本操作系统,使用cmd调用vssadmin删除卷影。修改策略,禁用开机自动修复。
  1. cmd.exe /c vssadmin.exe Delete Shadows /All /Quiet & bcdedit /set {default} recoveryenabled No & bcdedit /set {default} bootstatuspolicy ignoreallfailures
复制代码


5.        密钥生成过程
Sodinokibi会从自身携带资源中解密出一个JSON格式数据,接着结合JSON数据中的”pk”元素(攻击者ECDH公钥的base64编码值),使用ECDH(椭圆曲线密钥交换算法)生成用户ECDH公私钥,并对其中的私钥进行加密处理。具体过程如下:
(1)        生成ECDH公私钥对sk_user(私钥)和pk_user(公钥),pk_user二进制值写入注册表键SOFTWARE\\ GITFORWINDOWS\\vTGj;
(2)        生成ECDH公私钥对sk_user_2(私钥)和pk_user_2(公钥);
(3)        计算pk*sk_user_2(ecc点乘)值,结果为32字节,pk是JSON中的攻击者公钥,写入SOFTWARE\\ GITFORWINDOWS\\73g,固定的16进制值如下:
53 64 0d 67 db 29 6d 50 d3 11 f6 84 ac 66 ec 22 0e e0 45 f0 e4 13 5d 46 4f 68 e8 c5 de a1 21 19
(4)        计算第(3)步结果的SHA3_256(一种摘要算法)摘要值,结果为32字节,作为加密KEY;、


(5)        生成16字节随机值,记为初始计数值(counter);
(6)        使用第(4)(5)步结果分别作为KEY和Initial_counter_value,使用AES_256_CTR算法加密数据”\x00\x00\x00\x00”+sk_user,加密结果36字节;


(7)        计算第(6)步crc32校验值。
以上各个计算结果共有88字节,作为二进制类型键值写入注册表SOFTWARE\\ GITFORWINDOWS\\Q7PZe。具体分布格式如下:
+0x00 : AES_CTR(\x00\x00\x00\x00+sk_user)
[ key=sha3_256(pk*sk_user_2), counter=initial_counter_value_random ]
+0x24 : pk_user_2
+0x44 : initial_counter_value_random
+0x54 : crc32(offset[0:0x24])

替换pk为硬编码再病毒文件中的另一个攻击者公钥,再次执行第(2)至(7)步,再次得到88字节内容,写入SOFTWARE\\GitForWindows\\BuCrIp。该硬编码攻击者公钥如下:
79 CD 20 FC E7 3E E1 B8 1A 43 38 12 C1 56 28 1A 04 C9 22 55 E0 D7 08 BB 9F 0B 1F 1C B9 13 06 35
通过以上方式生成的88字节结果,攻击者只需要使用对应的私钥即可另行计算得到AES加密密钥从而解密数据(pk*sk_user_2=sk*pk_user_2,ECDH密钥协商)。


6.        信息搜集和上传
利用系统磁盘序列号和处理器信息生成用户的UID。

UID和病毒搜集的其他信息将被AES_256_CTR对称加密算法加密,使用的方式与加密sk_user时一致。使用的攻击者密钥也是硬编码在病毒程序内部:
36 7D 49 30 85 35 C2 C3 68 60 4B 4B 7A BE 83 53 AB E6 8E 42 F9 C6 62 A5 D0 6A AD C6 F1 7D F6 1D

Sprintf输出的待加密信息格式如下:
{
ver:262,
pid:7,
sub:1785,                // 以上三者为固定值,可能为病毒版本信息
pk:,                        // 攻击者公钥
uid:,                        // uid
sk:,                        // Q7PZe键值,pk加密sk_user值,base64
unm:,                        // 用户名
net:,                        // 计算机名
grp:,                        // 工作组
lng:,                        // 语言
bro:(true/false),        // 是否为避免加密国家或地区
os:,                        // 操作系统版本
bit:86/64,                // 操作系统位数
dsk:,                        // 各个磁盘空闲/总容量
ext:                        // 加密文件扩展名
}
加密后的内容写入SOFTWARE\\GitForWindows\\sLF86MWC键。
最后注册表项SOFTWARE\\GitForWindows下的键值有以下几项:

  • 7sg:JSON格式数据中的攻击者公钥;
  • BuCrIp:利用硬编码的攻击者公钥加密后的用户公钥pk_user;
  • IcZd7OY:加密文件扩展名;
  • Q7PZe:利用JSON格式数据中的攻击者公钥加密后的用户公钥pk_user;
  • sLF86MWC:加密后的搜集信息
  • vTGj:用户公钥pk_user。

注册表sLF86MWC中的键值在所有文件加密完成之后会被上传到多个URI下。URI中的域名部分取自RC4解密出的JSON格式数据dmn元素中,全部遍历进行URI拼接并进行数据发送,其中的一些域名为正常网站。域名如下:




URI路径通过在指定字符串中随机选择进行拼接生成。第1层路径从以下字符串中随机选取:
  • images
  • pictures
  • image
  • temp
  • tmp
  • graphic
  • assets
  • pics
  • game


第2层路径从以下字符串中随机选取:
  • wp-content
  • static
  • content
  • include
  • uploads
  • news
  • data
  • admin


上传文件名随机生成,文件扩展名从以下字符串中随机选取:
  • png
  • jpg
  • tmp




7.        搜索文件进行加密
搜索本地A-Z盘,对可移动磁盘、固定磁盘、网络磁盘进行搜索。

对当前可枚举网络资源进行搜索。

搜索时除了program files和program files (x86)下的sql目录(数据库文件),不对含有以下字符串的路径和文件进行加密。
  • $windows.~bt
  • perflogs
  • appdata
  • boot
  • tor browser
  • program files [ 仍然搜索其中的sql目录 ]
  • application data
  • mozilla
  • programdata
  • windows
  • intel
  • $recycle.bin
  • system volume information
  • msocache
  • $windows.~ws
  • windows.old
  • program files (x86) [ 仍然搜索其中的sql目录 ]
  • google
  • iconcache.db [ 以下为文件名 ]
  • bootsect.bak
  • ntuser.dat
  • ntuser.ini
  • thumbs.db
  • autorun.inf
  • ntldr
  • boot.ini
  • desktop.ini
  • bootfont.bin
  • ntuser.dat.log

除了文件名和路径之外,根据扩展名,类型为可执行文件(如dll、exe)、文件图标、链接文件或是系统相关文件(如msc、hlp)等文件将不进行加密。部分扩展名如下:
  • nls
  • mod
  • msc
  • themepack
  • hta
  • mpa
  • adv
  • dll
  • theme.. .. ..



对于搜寻到的可加密类型文件,若文件大小大于228字节,Sodinokibi会读取文件尾部的 228字节判断文件是否加密过。已加密过的文件判断方式:
计算尾部空间中偏移176至208共32字节(pk_user_file)内容的crc32校验值,与偏移216处的crc32值(4字节)进行比较,如果相同,说明文件已经被加密过,跳过当前文件。
8.        文件加密方式
文件加密时使用IO完成端口进行线程间数据传送。在加密文件阶段,主线程负责可加密文件的搜寻,并为每个可加密文件生成一个32字节密钥和8字节初始向量IV,生成方式为KEY=SHA3_256(ECCMul(pk_user,sk_user_file)),IV为随机值。
对于大于1MB的文件,Sodinokibi将加密内容大小设置为1MB,加密线程加密文件时根据这个大小加密文件首部1MB内容;如果小于1MB,则文件将被全部加密。

之后将Q7PZe、BuCrIp键值(这两者在所有文件中保持不变),待加密数据字节数以及其他加密所需信息,通过API PostQueuedCompletionStatus传入IO完成端口队列,等待加密线程读取。

加密线程不断调用API GetQueuedCompletionStatus获取完成端口队列中的数据,从而根据接收到的数据对指定文件进行加密。
加密算法采用salsa20(一种对称流加密算法),Key为32字节,iv为8个字节。正式加密时计数器值为1(原为0,但是加密过一次IO完成端口队列中数据包的首部4字节”\x00\x00\x00\x00”,从而自增1)。Salsa的扩展密钥格式:




文件加密代码:

加密完成后文件尾部228字节空间分布:


加密流程和加密后文件格式如下图:


9.        勒索信息
加密完成后病毒会修改系统桌面背景,提醒用户系统文件被加密。

背景图片底色为蓝色,图片中的文字通过DrawText函数写入,其中{ext}为加密后文件扩展名。
All of your files are encrypted!
Find {ext}-readme.txt and follow instructions

病毒在每个被加密的目录下放置勒索信息文件,文件名为{随机字符串}-readme.txt。
勒索信息提示文件中的{EXT}、{UID}和{KEY}分别替换为加密文件扩展名、根据磁盘和处理器信息生成的UID、SOFTWARE\\GitForWindows\\sLF86MWC键值的base64编码值。
提示文件中告知用户有两种方式联系攻击者进行文件恢复。一种是下载Tor浏览器,访问网址hxxp://aplebzu47wgazapdqks6vrcv6zcnjppkbxbr6wketf56nf6aq2nmyoyd.onion/{UID}进行联系;第二种则直接使用已有的浏览器访问http://decryptor.top/{UID}。按攻击者所说,第二种方式容易联系速度较慢。

共 3 个关于Sodinokibi勒索病毒样本分析的回复 最后回复于 2020-3-7 16:28

评论

直达楼层

沙发
简简单单chao 产品答疑师 发表于 2019-11-15 15:14 | 只看该作者 | 私信
给小姐姐点赞
板凳
360fans_GLdNML LV1.上等兵 发表于 2020-2-17 16:02 | 只看该作者 | 私信
该病毒会贮存在本机中吗?我将系统资料全部清除干净,再重新安装软件有用么?
地板
360fans_LjSKE0 LV2.下士 发表于 2020-3-7 16:28 | 只看该作者 | 私信
半年前中的,只能付钱恢复吗
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Potato 产品答疑师

粉丝:9 关注:0 积分:11285

精华:0 金币:11915 经验:7015

最后登录时间:2024-4-24

私信 加好友

最新活动

读书日主题活动 |  世界读书日,360AI阅读

排行榜

热度排行 查看排行
今日 本周 本月 全部
    今日 本周 本月 全部

      内容推荐 热门推荐最新主帖

      扫码添加360客服号,涨知识的同时还有超多福利等你哦

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