宝运莱官方网站ADLab:Crysis家族勒索病毒最新变种分析
颁布功夫 2018-06-18
近期,宝运莱官方网站ADLab收到客户反�。河捎诓幻髟�,电脑中的文件被加密,无法打开。在得知这一新闻后,宝运莱官方网站ADLab迅速调派技术人员赶往客户现场。通过对现场习染机勘验后,我们发现加密后的文件被统一冠以“.bip”后缀名,另表我们还发现被加密的文件目录中有一个勒索提醒文件“FILES ENCRYPTED.txt”,它是由勒索病毒创建的,主张是通知受害者其数据已经被加密,若是想要解密文件,需依照攻击者提供的联系方式支付赎金。被加密的文件和“FILES ENCRYPTED.txt”内容如下:
受习染的电脑在加密实现后或电脑沉启后会弹出两个提醒框,提醒框是由mshta.exe挪用Info.hta天生的勒索信息。习染机械的两个Info.hta文件存放蹊径别离为:
%windir%\System32\Info.hta
%AppData\Romaing\Info.hta
它的重要职能是提醒受害人若何联系黑客、若何获得比特币、若何实现支付等信息,提醒框内容如下图所示:
经过现场对受习染机械的技术分析后,我们找到了该勒索病毒的样本法式,样本有关信息如下表所示:
二、攻击汗青
2016年6月,国表安全专家发现,可能通过Java Applet传布的跨平台(Windows、MacOS)恶意软件Crysis起头参与勒索职能,并于8月份被发现用于攻击澳大利亚和新西兰的企业。Crysis恶意软件不仅可能习染VMware虚构机,还可能全面网络受害者的系统用户名密码、键盘纪录、系统信息、屏幕截屏、谈天信息,节造麦克风和摄像头,此刻又参与了加密勒索职能,其威胁性大有取代TeslaCrypt和Locky勒索软件的趋向。它重要通过暴力破解远程桌面(RDP)和谈传布,支持185种文件类型加密。
2016年11月12日,勒索病毒 Crysis解密密钥被公开,Crysis2及3的受害者可通过这个密钥复原迷失的文件。
2017年5月下旬,Crysis/Dharma病毒出现了一个新的变种.cesar,中国境内有部门幼我和企业起头受到攻击。
2017年8月30日,ID-Ransomware的Michael Gillespie发现了Crysis/Dharma 勒索软件一个新的变种, 文件被追加 .arena 扩大名。中国境内幼我和企业受到攻击数量显著增多。汉中某手机代工厂中病毒后所有的服务器文件后缀造成了.arena,工厂依照提醒信息的地址给黑客付款,付款后黑客就隐没了,三天后黑客发来信息称自己在出差,并发来了一个解密工具,工厂解密后发现黑客只解密了部门文件,必要再支付一次能力持续解密。下图的勒索邮件图片来自网络:
2018年3月, Crysis/Dharma 勒索软件出现一个新的变种, 文件被追加.java 扩大名。
2018年5月16日, Crysis/Dharma 勒索软件出现一个新的变种, 文件被追加.bip 扩大名。宝运莱官方网站ADLab第一功夫发现该变种,并对其进行了深刻的分析,由于使用了RSA+AES加密,所以目前尚无法被解密。它支持343种文件体式的加密,比最初增长了1.85倍。
三、勒索病毒技术分析
该勒索病毒使用加密的shellcode,在shellcode中利用换体技术对法式地址空间进行批改,以达到滋扰杀毒软件的查杀和匹敌二进造分析的主张。加密算法实现上并没有使用常见的加密开源库,所以给逆向人员在算法鉴别上带来肯定的难题。我们在做二进造分析的时辰,没有发现勒索软件有网络数据产生,揣摩是黑客的C&C服务器已经关关了。
3.1 勒索病毒母体执行
3.1.1 勒索病毒执行流程
勒索病毒运行后,首先利用TEA算法解密shellcode,shellcode解密实现后,便起头执行。shellcode的职能是改写勒索病毒自身内存地址空间,对勒索病毒进行换体。流程图如下:
3.1.2 解密shellcode
勒索病毒运行后,首先通过LoadLibraryA函数加载Kernel32.dll,而后利用GetProcAddress动态获取LocalAlloc和VirtualProtect的函数地址,再利用LocalAlloc分配0x11C98大幼的内存地址作为shellcode数据的存储空间,通过sub_4011D5函数把数据段中的数据赋值给dw_shellcode地址,使用TEA算法解密dw_shellcode地址的数据,解密实现后挪用VirtualProtect函数给shellcode增长执行权限,而后执行shellcode代码,有关代码如下图所示:
在分析shellcode解密代码的时辰,凭据TEA的魔数特点0xC6EF3720,鉴别出解密代码的算法是TEA算法,代码如下所示:
3.2 Shellcode执行
勒索病毒母体执行结束后,起头执行shellcode代码。在shellcode中动态挪用VirtualAlloc分配内存,把新的变体内容拷贝到内存中;挪用VirtualProctect批改内存属性,把源法式地址空间清零;使用新的变体内容填充,最后挪用VirtualFree开释前面分配的内存。有关代码如下图所示:
3.3 换体后世码执行
换体实现后,勒索病毒便起头执行变体代码。变体代码起初创建一个互斥,预防自身被屡次执行;其次,变体代码创建一个线程,用于监控习染机上指定的过程或服务,该线程每隔500毫秒对习染机上的指标过程或服务进行一次关关操作;再次,变体代码创建开机自启动注册表项,拷贝自身到注册表项地点目录,以达到开机自启动的主张,而后变体代码删除磁盘卷影,预防受害人复原数据;最后,变体代码创建一个线程,用于扫描局域网共享目录并对扫描到的文件进行加密。遍历逻辑驱动器,每个驱动器创建一个文件加密线程,对逻辑驱动器下的文件进行加密。该变体代码的执行流程图如下所示:
3.3.1 创建互斥
勒索病毒的字符串都是使用RC4算法加密的,通过内置的一个128字节密钥进行解密。我们用Ollydbg对字符串解密过程进行动态跟踪,得到了RC4的128字节的密钥,如下所示:
互斥体的名称由三部门组成,第一部门是RC4解密出来的字符串“Global\syncronize_”,第二部门是RC4解密出来的字符串“45STKM”,第三部门是凭据参数选择,若是参数为1就是“A”,不然是“U”。
最终,勒索病毒会创建两个互斥体 "Global\syncronize_45STKMA"和"Global\syncronize_45STKMU",有关代码如下:
3.3.2 解锁文件占用
勒索病毒不只会杀死指定的在运行的过程并且还会终场指定的在运行的服务,这样做的益处是解锁对应过程的文件占用,从而保障文件加密成功。勒索病毒会使用上文中的RC4算法解密得到要杀死的过程名称和服务名称。有关代码如下图所示:
过程名和服务名列表如下:
勒索病毒在实现字符串解密后,创建一个线程,在线程中遍历系统过程,判断指标过程是否存在,若是存在,就杀死指标过程。相应代码如下所示:
遍历系统服务名称,判断服务名称是否存在,若是存在就终场服务。有关代码如下所示:
该勒索病毒创建一个线程,每隔500毫秒循环一次,判断相应的过程和服务是否存在,若是存在就杀死,反汇编代码如下所示:
3.3.3 增长开机自启动
勒索病毒先拷贝设置到以下目录:
拷贝实现后在注册表HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run下新建3个注册表项,注册表内容如下图所示。
“%AppData\Romaing\Info.hta”是勒索病毒提醒用户解锁的提醒文件。通过注册表我们能够看到“Info.hta”文件被拷贝了两份,另表一份是在“%System32%”蹊径下,可能是黑客为了确保这个提醒框被受害人能看到,所以专门写了两个蹊径。
“load_.exe”文件是勒索病毒法式自身的拷贝,这样就能够实现每次开机启动后执行加密逻辑,把受害人新增的文件加密。有关代码如下:
拷贝文件增长注册表开机自启动
%sh(Startup)%目录下的开机自启动法式
%sh(Common Startup)%目录下的开机自启动法式
%Appdata%目录下支付勒索的提醒法式
3.3.4 删除磁盘卷影
卷影副性子能可提供网络共享上的文件的即时点副本。利用共享文件夹的卷影副本,用户能够查看网络文件夹在从前某一功夫点的内容。
勒索病毒会删除磁盘卷影,以预防受害人通过磁盘还原方式对文件进行复原,删除磁盘卷影的号令为“mode con cp select=1251 vssadmin delete shadows /all /quiet Exit”,该号令是用上文中的RC4算法解密出来的。勒索病毒通过挪用CreateProcess启动“C:\Windows\system32\cmd.exe”挪用删除号令来删除磁盘卷影,有关代码如下图所示:
3.3.5 枚举局域网的共享目录,对共享目录文件进行加密
该勒索病毒创建一个线程,对局域网中共享的文件进行加密。
线程中遍历局域网共享资源,加密文件的主题代码如下:
3.3.6 遍通书地磁盘,对磁盘目录文件进行加密
该勒索病毒吓酌上文中的RC4算法解密一段数据,解密后的了局为 “ABCDEFGHIJKLMNOPQRSTUVWXYZ”,通过GetLogicalDrives函数获取磁盘驱动器,而后遍历执行文件加密,有关反汇编代码如下所示:
为了保障电脑系统正常启动,勒索病毒对保险操作系统正常运行的文件不加密,并把这些文件的文件名加密存储在法式中。通过上文中的RC4算法解密后的文件名列表如下:
3.3.7 文件加密
勒索病毒支持343种类型文件的加密,文件类型(文件的后缀名)是以分号宰割并通过上文中的RC4算法加密存储的,运行时动态解密,解密后的字符串在Ollydbg内存中如下图所示:
支持加密的文德珐展名如下:
.1cd;.3ds;.3fr;.3g2;.3gp;.7z;.accda;.accdb;.accdc;.accde;.accdt;.accdw;.adb;.adp;.ai;.ai3;.ai4;.ai5;.ai6;.ai7;.ai8;.anim;.arw;.as;.asa;.asc;.ascx;.asm;.asmx;.asp;.aspx;.asr;.asx;.avi;.avs;.backup;.bak;.bay;.bd;.bin;.bmp;.bz2;.c;.cdr;.cer;.cf;.cfc;.cfm;.cfml;.cfu;.chm;.cin;.class;.clx;.config;.cpp;.cr2;.crt;.crw;.cs;.css;.csv;.cub;.dae;.dat;.db;.dbf;.dbx;.dc3;.dcm;.dcr;.der;.dib;.dic;.dif;.divx;.djvu;.dng;.doc;.docm;.docx;.dot;.dotm;.dotx;.dpx;.dqy;.dsn;.dt;.dtd;.dwg;.dwt;.dx;.dxf;.edml;.efd;.elf;.emf;.emz;.epf;.eps;.epsf;.epsp;.erf;.exr;.f4v;.fido;.flm;.flv;.frm;.fxg;.geo;.gif;.grs;.gz;.h;.hdr;.hpp;.hta;.htc;.htm;.html;.icb;.ics;.iff;.inc;.indd;.ini;.iqy;.j2c;.j2k;.java;.jp2;.jpc;.jpe;.jpeg;.jpf;.jpg;.jpx;.js;.jsf;.json;.jsp;.kdc;.kmz;.kwm;.lasso;.lbi;.lgf;.lgp;.log;.m1v;.m4a;.m4v;.max;.md;.mda;.mdb;.mde;.mdf;.mdw;.mef;.mft;.mfw;.mht;.mhtml;.mka;.mkidx;.mkv;.mos;.mov;.mp3;.mp4;.mpeg;.mpg;.mpv;.mrw;.msg;.mxl;.myd;.myi;.nef;.nrw;.obj;.odb;.odc;.odm;.odp;.ods;.oft;.one;.onepkg;.onetoc2;.opt;.oqy;.orf;.p12;.p7b;.p7c;.pam;.pbm;.pct;.pcx;.pdd;.pdf;.pdp;.pef;.pem;.pff;.pfm;.pfx;.pgm;.php;.php3;.php4;.php5;.phtml;.pict;.pl;.pls;.pm;.png;.pnm;.pot;.potm;.potx;.ppa;.ppam;.ppm;.pps;.ppsm;.ppt;.pptm;.pptx;.prn;.ps;.psb;.psd;.pst;.ptx;.pub;.pwm;.pxr;.py;.qt;.r3d;.raf;.rar;.raw;.rdf;.rgbe;.rle;.rqy;.rss;.rtf;.rw2;.rwl;.safe;.sct;.sdpx;.shtm;.shtml;.slk;.sln;.sql;.sr2;.srf;.srw;.ssi;.st;.stm;.svg;.svgz;.swf;.tab;.tar;.tbb;.tbi;.tbk;.tdi;.tga;.thmx;.tif;.tiff;.tld;.torrent;.tpl;.txt;.u3d;.udl;.uxdc;.vb;.vbs;.vcs;.vda;.vdr;.vdw;.vdx;.vrp;.vsd;.vss;.vst;.vsw;.vsx;.vtm;.vtml;.vtx;.wb2;.wav;.wbm;.wbmp;.wim;.wmf;.wml;.wmv;.wpd;.wps;.x3f;.xl;.xla;.xlam;.xlk;.xlm;.xls;.xlsb;.xlsm;.xlsx;.xlt;.xltm;.xltx;.xlw;.xml;.xps;.xsd;.xsf;.xsl;.xslt;.xsn;.xtp;.xtp2;.xyze;.xz;.zip
文件加密职能是在线程函数中执行的,在加密前,它先进行CRC32校验,确保加密成功,并机关加密后文件名的定名,该恶意法式加密后的文件依照{原始文件名}+{.id-}+{C盘序列号}+{.[filedec@tuta.io] .bip}方式进行沉定名。以“test.txt”为例,加密后的文件名为“test.txt .id-B05844B5.[filedec@tuta.io].bip”。每个文件都随机天生一个0x16字节的IV,从而保险加密的随机性,线程函数主题代码如下:
在加密文件前,勒索病毒先去掉指标文件的只读属性,待加密实现后再还原其原有的文件属性,有关代码如下所示:
3.3.8 加密算法分析
勒索病毒加密文件,使用内置的一段加密的RSA公钥对随机天生的AES密钥进行加密,并将加密后的内容发给黑客,黑客使用RSA私钥进行解密,得到加密文件的AES密钥。为了保险随机性,黑客对每个文件进行加密的时辰都使用随机的IV,被加密后的文件依照特定的文件体式进行存储,文件加密算法流程图如下所示:
在加密算法中有一个极度沉要的结构体,如下图所示:
这个结构体的初始化过程是:首先利用上文中的RC4算法解密一段内置的0x80字节的数据,解密后的了局作为RSA的公钥;而后对RSA的公钥进行SHA1求值,将其SHA1了局赋值给encrypt-> rsa_pub_sha1。RSA公钥如下图所示:
推算RSA公钥的SHA1了局为“23 A0 55 82 B9 C1 12 1E FE 56 71 CE 45 87 38 1D BA 95 B7 F9”,有关代码如下图所示:
勒索病毒使用GetVolumeSerialNumber函数获取C盘序列号,并填充encrypt->disk_id字段,通过rdtsc获取CPU自从启动以来的时钟周期数(也就是一个随机数);使用RC4加密,RC4加密的了局作为后面对文件加密的AES密钥,填充encrypt->aes_key字段。代码如下图所示:
勒索病毒使用RSA公钥加密encrypt->aes_key,加密后的了局填充encrypt->rsa_encrypt_key字段,通过上文的RC4算法解密得到黑客联系邮箱“.[filedec@tuta.io]”和文件后缀名“.bip”,代码如下图所示:
初始化完加密结构体,勒索病毒会创建线程对文件进行加密,在对文件进行加密的时辰,该勒索病毒会判断文件大幼是否大于0x180000,若是大于就使用大文件加密步骤,不然就使用幼文件加密函数。有关代码如下:
(1)幼于蹬宗0x180000的文件处置步骤
加密实现后,勒索病毒把AES加密的了局写入文件中,而后再追加一段数据。如果这段数据的肇始地址为0,将这段地址全数初始化为0:
1) 在第0x04字节后顺次写入0x00000002和0x417AFE0C;
2) 在第0x18字节后写入0x00000020;
3) 在第0x20字节处写入文件名;
4) 在文件名后面追加6字节的encrypt->str_45STKM;
5) 在encrypt->str_45STKM后面追加20字节的encrypt->rsa_pub_sha1;
6) 在encrypt-> rsa_pub_sha1后面追加16字节的IV;
7) 在IV后面追加4字节的PadingLen,(对AES明文不及16字节的补齐长度);
8) 在PadingLen后面再追加128字节的encrypt->rsa_encrypt_key;
9) 在encrypt-> rsa_encrypt_key后面写入4字节的偏移(0x20+文件名长度)。
至此,文件加密实现,关关文件,有关代码如下:
(2)大于0x180000的文件处置步骤
加密实现后,勒索病毒把AES加密的了局写入文件中,而后再追加一段数据。如果这段数据的肇始地址为0,将这段地址全数初始化为0:
1) 在第0x0字节处写入文件名;
2) 在文件名后面追加6字节的encrypt-> str_45STKM;
3) 在encrypt-> str_45STKM后面追加20字节的encrypt-> rsa_pub_sha1;
4) 在encrypt-> rsa_pub_sha1后面追加16字节的IV(用于AES加密);
5) 在IV后面追加4字节的0x00(这里可能是为了与幼文件体式兼容);
6) 在PadingLen后面再追加128字节的encrypt-> rsa_encrypt_key;
7) 在encrypt-> rsa_encrypt_key后面写入4字节的文件名长度。
有关代码如下图所示:
四、总结及建议
勒索病毒已经成为了一种越来越普遍和有效的攻击方式,幼我用户和企事业组织受害者居多,并且一旦习染勒索病毒,数据被加密就很难还原。由于勒索病毒都选取成熟的密码学算法,使用高强度的对称和非对称加密算法对文件进行加密,所以在通常情况下只能支付高额的赎金。有些勒索病毒在加密过程中使用Windows Crypto API天生密钥并进行加密,但此API在某些操作系统上并未将天生密钥时产生的素数从内存中删除,因而若该内存块尚未被覆盖,我们就能够通过截取素数天生出同样的密钥,使用该密钥实现对已被加密的文件进行解密。Crysis勒索病毒没有使用这个API,所以不存在此缝隙。目前互联网上流传的一些勒索病毒的解密工具大多是利用了勒索病毒职能或逻辑上的缝隙或私钥泄露实现的。
勒索病毒的几点防备建议:
1) 对沉要的数据文件定期进行非本地备份。
2) 不重点击起源不明的邮件以及附件。
3) 沉定名vssadmin.exe过程,预防勒索病毒利用它一次性断根文件的卷影副本。
4) 开启防火墙,并升级到最新版本,阻止勒索病毒与其C&C服务器通讯。
5) 实时给电脑打补丁,建复缝隙。
6) 使用长度大于10位的复杂密码,禁用GUEST海东帐户。
7) 尽量不要使用局域网共享,或把共享磁盘设置为只读属性,不允许局域网用户改写文件。
8) 关关不用要的端口,如:445、135、139、3389等。


京公网安备11010802024551号