【警惕】“侠盗”勒索病毒V5.3新变种全面剖析

发布时间 2019-04-25

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)来进行解密。用户可以根据表中的加密文件后缀或勒索说明文本文件的开始来核对病毒版本。



区域标志符

语言(国家)

0x419

俄语(俄罗斯)

0x422

乌克兰语(乌克兰)

0x423

白俄罗斯语(白俄罗斯)

0x428

塔吉克

0x42B

亚美尼亚语(亚美尼亚)

0x42C

阿泽里语(阿塞拜疆,拉丁语)

0x437

格鲁吉亚语(格鲁吉亚)

0x43F

哈萨克语(哈萨克斯坦)

0x440

吉尔吉斯语(吉尔吉斯坦)

0x442

土库曼

0x443

乌兹别克语(乌兹别克斯坦,拉丁语)

0x444

鞑靼语(俄罗斯)

0x818

罗马尼亚语(摩尔多瓦地区)

0x819

俄语(摩尔多瓦地区)

0x82C

阿泽里语(阿塞拜疆,西里尔语)

0x843

乌兹别克语(乌兹别克斯坦,西里尔语)

0x45A

叙利亚语(叙利亚)

0x2801

阿拉伯语(叙利亚)



表2 排除的语言(国家)


5.2 终止安全软件



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


图4 相关安全软件进程



5.3 终止特定程序



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


图5 终止的目标进程


5.4 确定加密文件类型


5.4.1 文件后缀白名单


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


图6 不加密的文件类型


白名单路径

"\\ProgramData\\"

"\\IETldCache\\"

"\\Boot\\"

"\\Program Files\\"

"\\Tor Browser\\"

"\\All Users\\"

"\\Local Settings\\"

"\\Windows\\"




表4 系统目录白名单


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



加密的文件后缀

.1st  .602 .docb .xlm .xlsx .xlsm .xltx .xltm .xlsb .xla .xlam .xll .xlw .ppt .pot  .pps .pptx .pptm

.potx  .potm .ppam .ppsx .ppsm .sldx .sldm .xps .xls .xlt ._doc .dotm ._docx .abw  .act .adoc .aim

.ans  .apkg .apt .asc .asc .ascii .ase .aty .awp .awt .aww .bad .bbs .bdp .bdr  .bean .bib .bib .bibtex

.bml  .bna .boc .brx .btd .bzabw .calca .charset .chart .chord .cnm .cod .crwl .cws  .cyi .dca .dfti

.dgs  .diz .dne .dot .doc .docm .dotx .docx .docxml .docz .dox .dropbox .dsc .dvi  .dwd .dx .dxb .dxp

.eio  .eit .emf .eml .emlx .emulecollection .epp .err .err .etf .etx .euc  .fadein.template .faq .fbl

.fcf  .fdf .fdr .fds .fdt .fdx .fdxt .fft .fgs .flr .fodt .fountain .fpt .frt .fwd  .fwdn .gmd .gpd

.gpn  .gsd .gthr .gv .hbk .hht .hs .hwp .hwp .hz .idx .iil .ipf .ipspot .jarvis  .jis .jnp .joe .jp1

.jrtf  .jtd .kes .klg .klg .knt .kon .kwd .latex .lbt .lis .lnt .log .lp2 .lst .lst  .ltr .ltx .lue

.luf  .lwp .lxfml .lyt .lyx .man .mbox .mcw .md5 .me .mell .mellel .min .mnt .msg  .mw .mwd .mwp

.nb  .ndoc .nfo .ngloss .njx .note .notes .now .nwctxt .nwm .nwp .ocr .odif .odm  .odo .odt .ofl .opeico

.openbsd  .ort .ott .p7s .pages .pages-tef .pdpcmd .pfx .pjt .plain .plantuml .pmo .prt  .prt .psw .pu

.pvj  .pvm .pwd .pwdp .pwdpl .pwi .pwr .qdl .qpf .rad .readme .rft .ris .rpt .rst  .rtd .rtf .rtfd .rtx

.run  .rvf .rzk .rzn .saf .safetext .sam .sam .save .scc .scm .scriv .scrivx .sct  .scw .sdm .sdoc .sdw

.se  .session .sgm .sig .skcard .sla .sla.gz .smf .sms .ssa .story .strings .stw  .sty .sublime-project

.sublime-workspace  .sxg .sxw .tab .tab .tdf .tdf .template .tex .text .textclipping .thp .tlb  .tm .tmd

.tmdx  .tmv .tmvx .tpc .trelby .tvj .txt .u3i .unauth .unx .uof .uot .upd .utf8  .utxt .vct .vnt .vw

.wbk  .webdoc .wn .wp .wp4 .wp5 .wp6 .wp7 .wpa .wpd .wpd .wpd .wpl .wps .wps .wpt  .wpt .wpw

.wri  .wsd .wtt .wtx .xbdoc .xbplate .xdl .xdl .xwp .xwp .xwp .xy .xy3 .xyp .xyw  .zabw .zrtf .zw.rar

.zip  .cab .arj .lzh .tar .7z .gzip .iso .z .7-zip .lzma .vmx .vmdk .vmem .vdi .vbo



表6 加密的文件后缀



5.5 加密用户文件



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



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


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



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



5.6 生成MANUAL文件


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


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



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


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



5.7 替换感染设备桌面


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



图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文件支付赎金。



图13 勒索壁纸



5.8 删除卷影拷贝


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



图14 删除卷影副本


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



图15 执行删除命令



5.9 连接C&C


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



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



其中,rc4key为".oj=294~!z3)9n-1,8^)o((q22)lb$"
strPCdata保存在”*-MANUAL.txt”文件中(*表示大写的加密文件后缀名),见图18:



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


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



6.2 解密pubkey


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



图19 生成的input3


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



hackerPubkey=  Salse20(input3, pubkeyEncrypted)


hackerPubkeyEncrypted见图20:




图20 解密前的hackerPubkey


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



图21 GandCrab5.3解密后的公钥



图22 GandCrab5.2 黑客公钥



6.3 本地生成RSA公私玥对


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


locPubkey(0x114字节)见图23:


图23 内存中的locPubkey


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



图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:


图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:



图26 加密的文件结构



7.总结与建议


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


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