作者:启明星辰ADLab
公众号:https://mp.weixin.qq.com/s/2KVWemeMrFIkzIH7b-FtFg

1、概 述

近日,启明星辰ADLab捕获到了“侠盗”病毒最新变种,该病毒的版本号为V5.3,编译时间为4月14日,距离其上一个版本V5.2在中国肆虐仅仅一个多月。“侠盗”V5.2开始肆虐中国的时间为3月11日,并已感染了我国上千台政府、企业和相关科研机构的计算机。湖北省宜昌市夷陵区政府、中国科学院金属研究所、云南师范大学以及大连市公安局等机构均在其官网发布了防范病毒攻击的公告。

“侠盗”病毒的第一个版本诞生于2018年1月,目前为止,已经更新迭代了5个大的版本、20几个小版本。其主要目的是通过加密受害用户的计算机文件来对受害用户进行勒索。“GandCrab”勒索病毒之所以被人称为“侠盗”,是因为其曾经“人道地”为无力支付“赎金”的叙利亚父亲解密了其在战争中丧生的儿子的照片,并放出了部分叙利亚地区之前版本的解密密钥,还将叙利亚以及其他战乱地区加进感染区域“白名单”。

“侠盗”会将用户文件加密后添加上勒索后缀名,然后再更换感染系统的桌面为勒索图片,勒索图片上的文字提示受害用户阅读其勒索手册文本文件,在勒索手册文本文件中进一步引导受害用户赎回用户文件。在5.2之前的版本中,勒索手册文件引导受害用户通过Tor网络赎回文件,赎金支持达世币和比特币支付;而在最新的5.3版本中,勒索手册中只给出了黑客的邮箱,要求受害者邮件联系他们,除了这一点变化,“侠盗”5.3还更新了黑客公钥。目前尚不清楚Gandcrab5.3勒索病毒可能会要求解密者支付多少钱,但之前的版本要求在比特币或达世币上支付500美元至4000美元不等。

2、病毒传播

“侠盗”病毒传播途径主要有RDP、VNC途径进行暴力破解和入侵、定向鱼叉钓鱼邮件投放、捆绑恶意软件和网页挂马攻击、僵尸网络以及漏洞利用传播等。

目前在暗网中,“侠盗”幕后团队采用“勒索即服务”(“ransomware as-a-service” )的方式,向黑客大肆售卖V5.3版本病毒,即由“侠盗”团队提供病毒,黑客在全球选择目标进行攻击勒索,攻击成功后 “侠盗”团队再从中抽取30%-40%的利润。“垃圾邮件制造者们,你们现在可以与网络专家进行合作,不要错失获取美好生活的门票,我们在等你。”是“侠盗”团队在暗网中打出的“招商广告”。

“侠盗”是目前第一个勒索达世币的勒索病毒,后来才加了比特币,要价500美元至4000美元不等。据“侠盗”团队2018年12月公布的数据,其总计收入比特币以及达世币合计已高达285万美元。

3、破解历史

像大部分勒索文件一样,“侠盗”使用了RSA加密算法,除非拿到黑客持有的RSA-2048私钥,才能够对感染文件进行解密,否则无法解密。

因为“侠盗”事件,攻击者放出了勒索病毒部分早期版本的解密密钥,多个安全厂商随后相继发布了解密工具。从18年10月到今年2月,Bitdefender先后发布了“侠盗”多个版本的解密工具,最新的解密工具下载地址为:https://labs.bitdefender.com/wp-content/uploads/downloads/gandcrab-removal-tool-v1-v4-v5/,该工具可以解密的版本如表1所示。其解密原理是通过在线向Bitdefender服务器提交加密ID,来获取可用的解密私钥( RSA-2048)来进行解密。用户可以根据表中的加密文件后缀或勒索说明文本文件的开始来核对病毒版本。

表1 可以解密的版本(“([A-Z]+)”表示5-10位随机字母)

然而,道高一尺魔高一丈, “侠盗”现在又相继发布了版本V5.2和V5.3,至今都无法破解。

4、加密原理分析

“侠盗”V5.3用到的核心算法主要有Salsa20和RSA-2048。Salsa20算法用于加密用户文件和加密用户的本地RSA-2048私钥。RSA-2048算法用于加密Salsa20密钥和IV。如下图1所示:

img

图1 GandCrab5.3 加密原理图

图1的中间,黑客利用微软“advapi32”库函数本地生成RSA-2048的一对公私玥对,私钥会被Salsa20加密,公钥用于加密“加密用户文件”的key和IV。我们分别将这一对公私玥记为locPrikey和locPubkey。

图1的左半部分,locPrikey被Salsa20加密生成data3;Salsa20的SalsaKey(32bytes随机数)和IV1(8bytes随机数)被黑客的公钥hackerPubkey分别加密生成data1和data2;locPrikey长度0x00000494、data1、data2和data3被base64加密后保存在“-MANUAL.txt”文件中用于赎回后文件解密(表示大写的加密文件后缀名)。

图1的右半部分,locPubkey用于加密Salsa20的密钥SalsaFileKey(32bytes随机数)和IV2(8bytes随机数),加密后分别生成密文data5和data6;用户文件被Salsa20算法加密生成data4;这些加密过的数据加上用户文件长度和固定字节,最后拼接成密文文件finalFile。

5、行为分析

我们分析后发现,同“侠盗”5.2版本一样,GandCrab5.3也加入了花指令混淆(如图2)来对抗静态分析。我们结合动、静态分析技术,对“侠盗”5.3进行了详细深入的分析。“侠盗”病毒在成功感染用户设备后,会检测感染设备使用的操作系统语言,以确保其不会感染“俄罗斯”、“乌克兰”、“乌兹别克斯坦”等东欧和西亚国家的用户。“侠盗”会尝试终止感染设备上的相关安全软件以防止自身被查杀。并且还会终止感染设备上运行的Office套件进程和SQLServer等数据库进程,防止因用户文件被占用而漏掉需要加密的文件。“侠盗”在加密用户文件之前会首先排除特定的系统相关目录和文件,以保证操作系统的正常运行。在完成文件加密操作后,“侠盗”会替换用户桌面,警示受害用户文件已经被加密,让受害用户到病毒生成的“Manual”文件中按照提示赎回文件。

最后,“侠盗”会将收集到的感染设备操作系统类型、用户名等信息加密发送到远程服务器。另外,“侠盗”还删除了感染设备的卷影拷贝,目的是防止用户利用Windows Recovery对文件进行恢复,这也是勒索病毒的常规操作。

img

图2 花指令混淆

5.1 排除部分国家

“侠盗”在“作恶”之前,会获取感染计算机操作系统语言版本,如果攻击目标是图3这些语言区域标志符的操作系统,则不进行加密,退出程序。我们将相关的区域标志符和对应语言(国家)列到表2中。从表2中我们可以看到,这些国家大部分位于东欧和西亚的战乱地区,攻击者对这些国家“网开一面”大概是“得益于”“侠盗”事件,但对俄语系的操作系统也如此垂爱,很容易让人联想到“侠盗”背后的黑客或许来自俄语系国家。

img

图3 语言区域标志符

表2 排除的语言(国家)

5.2 终止安全软件

“侠盗”遍历感染设备系统进程,如果发现感染设备有运行卡巴斯基、诺顿等安全软件,就强制结束掉目标进程,防止自己被杀毒软件查杀。相关的安全软件如下图4所示。

img

图4 相关安全软件进程

5.3 终止特定程序

“侠盗”会遍历感染设备系统当前进程列表,如果匹配到指定的进程则结束该进程,以防止遗漏掉因用户文件被占用而不能被加密的用户文件。如Word、Excel、PowerPoint、Onenote、Visio、Oracle、SQLserver、MySQL等常见应用进程,详细目标进程如图5所示:

img

图5 终止的目标进程

5.4 确定加密文件类型

5.4.1 文件后缀白名单

为了排除掉没有价值的勒索数据文件,“侠盗”内置了一份文件后缀白名单,如图6所示。我们将其列到表3中,其中包括的文件有可执行文件、系统动态调用库文件、系统驱动文件和“侠盗”相关的文件等。

img

图6 不加密的文件类型

表3 后缀白名单

5.4.2 系统白名单

“侠盗”还内置了一份目录白名单,以确保感染设备能够“正常运行”。目录白名单见表4。白名单目录包括“Windows”、“Program Files”和“Tor Browser”等目录,排除这些目录,受害用户就可以使用“正常运行”的感染设备向黑客赎回加密文件。

表4 系统目录白名单

表5中的系统文件也不在加密目标之列:

表5 系统文件白名单

5.4.3 加密的文件后缀

“侠盗”目标要加密的文件后缀如图7,我们将其整理到表6中。从表6中我们可以看到,“侠盗”要加密的文件后缀有多个,常见的有“dox”“xml”等Office套件文件,“tar”“zip”等压缩文件。

img

图7 加密的文件类型

表6 加密的文件后缀

5.5 加密用户文件

“侠盗”会遍历感染设备共享目录和本地磁盘。采用RSA-2048+Salsa20算法加密感染设备文件。

加密共享目录下的文件如图8所示:

img

图8 加密共享目录下的文件

加密本地磁盘目录下文件如图9所示:

img

图9 加密本地磁盘目录下文件

5.6 生成MANUAL文件

“侠盗”先将勒索信息解密到内存中,在进行版本和后缀信息拼接后,将整个勒索信息写入MANUAL文件中,如图10和图11所示:

img

图10 创建MANUAL文件,写入勒索信息

img

图11 解密到内存中的勒索信息

最终的MANUAL文件由勒索信息、加密后的私钥信息和加密后的感染设备信息组成。其中黑客特意强调受害用户不要修改私钥信息内容,因为一旦私钥信息一旦被改变,就无法对文件进行解密。

5.7 替换感染设备桌面

创建勒索桌面壁纸到“C:\Documents and Settings[username]\LocalSettings\Temp\bxmeoengtf.bmp”,如图12所示:

img

图12 创建勒索图片,设置勒索桌面

图13中,勒索图片上写有“YOURFILES ARE UNDER STRONG PROTECTION BY OUR SOFTWARE. IN ORDER TO RESTORE IT YOUMUST BUY DECRYPTOR,For further stepsread %s-DECRYPT.%s that is located in every encrypted folder”,提示感染用户阅读Manual文件支付赎金。

img

图13 勒索壁纸

5.8 删除卷影拷贝

“侠盗”会删除感染计算机卷影副本,这是勒索病毒的常规操作,这样做的目的是防止受害用户通过Windows Recovery对文件进行恢复,如图14。

img

图14 删除卷影副本

如图15,“侠盗”调用“shell32.ShellExecuteW”执行命令“/c vssadmin delete shadows /all /quiet”

img

图15 执行删除命令

5.9 连接C&C

“侠盗”会访问指定域名的80和443端口,“侠盗”在连接黑客控制的远程服务器(如http://www.kakaocorp.link)成功后,向远程服务器发送感染设备信息,如图16。

img

图16 向远程服务器发送感染设备信息

表7是部分远程服务器域名:

表7 部分远程服务器域名

6.算法分析

“侠盗”用到的主要加密算法有RSA-2048、Salsa20。Salsa20算法用于加密用户文件和加密用户的本地RSA-2048私钥。RSA-2048算法用于加密Salsa20密钥和IV,详细的算法我们在下面分几部分逐步介绍(变量命名参照图1)。

6.1 收集系统信息

“侠盗”收集感染设备配置信息后,一方面保存在本地,一方面发送到C&C服务器。收集到的信息如图17:

img

图17 收集到的pcData

即:pc_user=Administrator&pc_name=ADMIN-62597FF55&pc_group=WORKGROUP&pc_keyb=0&os_major=MicrosoftWindowsXP&os_bit=x86&ransom_id=dfe92855cc97a801&hdd=C:FIXED_25757888512/3537391616&id=287&sub_id=1511&version=5.3&action=call

我们将其记为pcData,pcData在保存到本地之前和发送到C&C服务器之前,分别使用了rc4算法加密和base64加密。表示如下:

strPCdata  = base64encode(rc4(pcData,rc4key))

其中,rc4key为".oj=294~!z3)9n-1,8^)o((q22)lb$"

strPCdata保存在”-MANUAL.txt”文件中(表示大写的加密文件后缀名),见图18:

img

图18 Base64存储的PC相关密文信息

由于C&C失效,所有我们没有抓到发送发送strPCdata的数据包。

6.2 解密pubkey

“侠盗”先生成64字节流input3(由Salsakey3(固定字节)和IV3(固定字节)和常量组成),如图19:

img

图19 生成的input3

“侠盗”在使用Salsa20算法解密黑客的RSA2048公钥,我们将公钥密文记为pubkeyEncrypted,将解密后的公钥记为hackerPubkey,算法如下:

hackerPubkey=  Salse20(input3, pubkeyEncrypted)

hackerPubkeyEncrypted见图20:

img

图20 解密前的hackerPubkey

解密得到hackerPubkey见图21,对比“侠盗”5.2的黑客公钥(图22),我们发现在5.3版本中黑客更新了其持有的公钥。

img

图21 GandCrab5.3解密后的公钥

img

图22 GandCrab5.2 黑客公钥

6.3 本地生成RSA公私玥对

黑客利用微软“advapi32”库函数本地生成RSA-2048公私玥对,我们分别记为locPubkey和locPrikey,针对每个感染者本地公私玥对只生成一次。其中,locPubkey用于加密SalsaFileKey和IV2,而locPrikey使用Salsa20算法加密后最终保存到本地。

locPubkey(0x114字节)见图23:

img

图23 内存中的locPubkey

locPrikey(0x494字节)见下图24:

img

图24 内存中的locPrikey

6.4 加密本地私钥

“侠盗”首先生成SalsaKey(32字节随机数)和IV1(8字节随机数),再和常量一起生成64字节输入流,我们记为input1,然后,“侠盗”使用Salsa20算法加密locPrikey,算法如下:

data3  = Salsa20(input1,locPrikey)

SalsaKey(32字节随机数)和IV1(8字节随机数)分别被黑客的公钥加密,如下:

data1= RSA2048(hackerPubkey, SalsaKey)

data2 = RSA2048(hackerPubkey, IV1)

最后,“侠盗”将“data1”、“data2”、“data3”base64加密后保存在本地,如下(其中0x00000494为locPrikey长度):

gandcrabKey=base64encode(0x00000494+ data1+  data2+ data3)

保存在“****-MANUAL.txt”文件中,如图25:

img

图25 Base64存储的本地RSA-2048私钥密文信息

6.5 加密感染者文件

“侠盗”第一步生成SalsaFileKey(32字节随机数)、IV2(8字节随机数)以及常量生成的64字节输入流,我们记为input2,input2针对每一个用户文件都唯一生成,然后“侠盗”使用Salsa20算法加密用户文件,算法如下:

data4  = Salsa20(input2,userFile)

第二步用本地公钥locPubkey加密SalsaFileKey(32字节随机数)和IV2(8字节随机数),算法如下:

data5 = RSA2048(locPubkey, SalsaFileKey)

data6 = RSA2048(locPubkey, IV2)

最后,“侠盗”将“data4”、“data5”、“data6”和固定的字节拼接成加密文件,如下(其中lenUserFile为用户原始文件大小):

finalFile=data4 +data5+data6+lenUserFile+固定字节

加密后的文件结构如图26:

img

图26 加密的文件结构

7.总结与建议

因为大部分勒索病毒加密后的文件都无法解密,所以应对勒索病毒以预防和备份为主。建议用户做好日常的防范措施:

  • 及时更新操作系统,及时给计算机打补丁。
  • 对重要的数据文件要进行异地备份。
  • 尽量关闭不必要的文件共享,或把共享磁盘设置为只读属性,不允许局域网用户改写文件。
  • 尽量关闭不必要的服务和端口。如:135,139,445端口,对于远程桌面服务(3389),VNC服务需要进行白名单设置,仅允许白名单内的IP登陆。
  • 采用不少于10位的高强度密码,并定期更换密码,通过windows组策略配置账户锁定策略,对短时间内连续登陆失败的账户进行锁定。
  • 安装具备自保护功能的防病毒软件,并及时更新病毒库或软件版本。
  • 加强员工安全意识培训,不轻易打开陌生邮件或运行来源不明的程序,切断勒索病毒的邮件传播方式。

Paper 本文由 Seebug Paper 发布,如需转载请注明来源。本文地址:https://paper.seebug.org/911/