2016宏病毒分析及预防报告(1-2月)

*原创作者:Leon

笔者对近期的一些主流安全事件中涉及的宏病毒技术的整理研究。宏病毒出没,务必小心!

0×01 概述

近期互联网上涌现了各种各样的宏病毒,从年前乌克兰的BlackEnergy、Direx银行木马再到最近各种各样的勒索软件肆虐等等。然而诧异的是,这些木马病毒都是借助Office宏完成攻击的,即传统的宏病毒,它是一种寄存在文档或模板的宏中的计算机病毒。一旦打开这样的文档,其中的宏就会被执行,于是宏病毒就会被激活,转移到计算机上,并驻留在Normal模板上。因此这种早期的病毒貌似近期又死灰复燃了。本文将对近期出现的宏病毒进行整理分析以及提升防御宏病毒的方法。

0×02 诱导用户方式

现在的黑客们最常用的攻击方式是通过电子邮件进行网络钓鱼,例如Direx银行木马、Locky勒索软件等是通过鱼叉式网络钓鱼的方式扩散开来的,例如下图的这个邮件诱饵:

 

通常,这个邮件中的DOC附件文档中包含宏病毒。我们知道Office 文档宏病毒是一种早期的病毒,可以追溯到2000年,那时候Word和Excel支持自动执行宏指令。这就意味着病毒或者木马可以伴随着文档的打开而自动运行并且感染系统。随后微软禁用了这个特征,并且当前的Office版本需要用户一些特别的操作启用宏后才能打开存在文档中的宏指令。因此黑客们都会使用社工的办法,让用户去启用宏从而能看到让其觉得很有意思的内容。例如BlackEnergy病毒的通过文档内容诱导用户:

 

这个文档通过“Pravii Sektor”(英文Right Sector,乌克兰民族党)来诱惑用户开启宏,而该民族党在2013年11月成立并在该国的政治立场中扮演着很关键的角色,因此借助了该地的动荡局势来吸引用户打开。

0×03 提取宏

为了便于分析现在将其中的一些宏从Office文档中提取出来,看看这些宏病毒有什么异同点。

1.乌克兰的BlackEnergy宏病毒:

 

如图所示,宏指令在内存中创建一个字符串“vba_macro.exe”,然后以这个字符串为文件名的文件被创建,接着通过循环将数组中的数据写入“vba_macro.exe”。因此Init0()中的数据应该就是payload,而头两个字节”77 90”的十六进制为”4D 5A”,即PE文件的DOS头标志。这个文件最终通过Shell命令被执行,因此 vba_macro.exe payload是一个典型的BlackEnergy释放的文件。

2.某零售行业宏病毒样本:

 

如图所示,宏指令的工作流程包括下面两个部分:

1、创建名为gvnghjas和 lof4文件;

2、将gvnghjas保存为gvnghjas.rtf文档文件;

3、打开gvnghjas.rtf文件,rtf文件释放并执行lof4.exe文件。

和BlackEnergy不同的是,宏先创建rtf文件,而最终是通过执行rtf文件将这个打包的EXE释放至用户的临时文件夹中(a.k.a. %TEMP%)并执行。由于RTF文件可以嵌入Package,因此在其中可以插入任意数据,研究显示这样做的目的还可以绕过很多垃圾邮件的过滤系统。

3.Direx银行木马宏病毒:

 

 

如图所示,与1和2中的不同的是,宏指令从硬编码的URL下载payload并执行,这是典型的从网络服务器上下载payload。在不同文档捕获到的payload使用如下URL:

l armandosofsalem[.]com/l9k7hg4/b4387kfd[.]exe

l trinity.ad-ventures[.]es/l9k7hg4/b4387kfd[.]exe

l 188.226.152[.]172/l9k7hg4/b4387kfd[.]exe

4. 某勒索软件宏病毒样本:

   

 

如上图所示,这个宏比较独特,宏代码相当长,但是被olevba检测出可疑的命令是“shell”。根据经验,一个典型的宏在执行它的shell前,需要向文件中写入payload或者是从网上下载payload,但是对代码进行分析后,发现也没有多余的命令去下载或者向磁盘中写入文件。

这就意味着,这个宏既没有释放payload从而通过shell命令去执行,也没有从网上下载payload。

这个代码包含了2034个整型数组,研究发现这2034个整型(32bit)数组转化成8KB的字符串,这个字符串就是命令来启动cmd.exe命令,随后通过循环的方式一行一行构建VBScript文件,最终执行这个VBScript。

0×04 病毒行为分析

在上面的分析中,我们发现这些宏要么在本地释放执行木马,要么在网络上下载木马,或者是通过不多见的VBScript运行木马文件。而这些木马病毒的表现也是多种多样的,最直接的就是勒索软件,例如DMA Locker,Locky等。

1. DMA Locker

今年早些时候出现的一款勒索软件,目前为止该勒索软件的影响范围比较小,但我们还是想提醒您,它仍然存在。

 

当勒索软件运行时,软件移至C:\ProgramData (或者C:\Documents and Settings\All Users\Dokumenty\),重命名为fakturax.exe,随后释放另一个修改后的备份:ntserver.exe。而faktura.exe在执行完后即被删除了。不同版本的勒索软件可能会在该目录下释放不同的文件。

DMA locker的解密过程是内建的。从该软件GUI的提示框中可以看到。如果用户在文本框中键入密钥(32个字符串长度)然后点击按钮,程序就会切换到解密模式(使用提供的密钥)。

这个恶意软件包括两个黑名单而不是一系列的攻击扩展名,一个是目录:

另一个是文件的扩展名:

加密算法

作者声称他使用的是AES和RSA算法。在代码里这些看起来是怎样的呢?

文件被一块一块的加密,一个单元是16个字节(4 dwords)。Key是32位长,在加密之前已经做了预处理。这两个元素—预处理的key和输入文件的数据块—都是被拷贝进一个缓冲区中,这个缓冲区作为加密的中间过程。

下面是一个样本文件:square.png被加密函数加密。使用的Key:”11111…”。(拷贝的文件的数据块在图片当中被选中了)

 

加密之后(输出标记为灰色):

 

输出之后又被拷贝进原始缓冲区中,包括整个文件。每个加密的文件都有前缀“ABCXYZ11”,一个有趣的值,这个被勒索软件用来确认加密文件(这个在新版本中有介绍)。下面我们可以看到dump至磁盘上的样本文件:

 

16个字节长度的数据块文件被AES的ECB模式加密。

2. LOCKY

 

最近一种比DMA Locker更强大的Locky勒索软件开始出现,Locky以一种分布式的方式,通过Dridex僵尸网络存扩散开来。采用128-bit的AES加密方式并且有一个域名生成算法(DGA)。而且还能够加密SQL数据库,源码,比特币钱包等等。

除了核心的操作系统文件,Locky可以加密任何其能找到的文件。下面列出了其能加密的文件类型:

.m4u .m3u .mid .wma .flv .3g2 .mkv .3gp .mp4 .mov 

.avi .asf .mpeg .vob .mpg .wmv .fla .swf .wav .mp3 

.qcow2 .vdi .vmdk .vmx .gpg .aes .ARC .PAQ .tar.bz2 

.tbk .bak .tar .tgz .gz .7z .rar .zip .djv .djvu .svg 

.bmp .png .gif .raw .cgm .jpeg .jpg .tif .tiff .NEF 

.psd NaNd .bat .sh .class .jar .java .rb .asp .cs .brd 

.sch .dch .dip .pl .vbs .vb .js .h .asm .pas .cpp .c 

.php .ldf .mdf .ibd .MYI .MYD .frm .odb .dbf .db .mdb 

.sql .SQLITEDB .SQLITE3 .asc .lay6 .lay .ms11 (Securitycopy) 

.ms11 .sldm .sldx .ppsm .ppsx .ppam .docb .mml .sxm .otg 

.odg .uop .potx .potm .pptx .pptm .std .sxd .pot .pps 

.sti .sxi .otp .odp .wb2 .123 .wks .wk1 .xltx .xltm 

.xlsx .xlsm .xlsb .slk .xlw .xlt .xlm .xlc .dif .stc 

.sxc .ots .ods .hwp .602 .dotm .dotx .docm .docx .DOT 

.3dm .max .3ds .xml .txt .CSV .uot .RTF .pdf .XLS .PPT 

.stw .sxw .ott .odt .DOC .pem .p12 .csr .crt .key wallet.dat

每个文件使用微软Windows的CryptoAPI函数通过128-bit的密码块链接模式进行加密。加密后的文件重命名为”.locky”的扩展名。

域名生成算法(DGA)

Locky至少用到一个硬编码的command and control(C&C)IP地址,用来作为加密密钥交换以及报告感染主机。然而,Locky同时也适用DGA作为command and control(C&C)的底部构造。Forcepoint安全实验室通过逆向反编译了这个算法。下面是DGA的C代码:

/* Modify the SystemTime to generate domains for a different day */
char *LockyDGA(unsigned int seed, SYSTEMTIME SystemTime)
{
int modConst1 = 0xB11924E1;
int modConst2 = 0x27100001;
int modConst3 = 0x2709A354;
int modYear, modMonth, modDay;
int modBase = 0, i = 0, genLength = 0;
unsigned int x = 0, y = 0, z = 0;
unsigned int modFinal = 0;
char *domain;
char tldchars[29] = "rupweuinytpmusfrdeitbeuknltf";
   
// Perform some shifts with the constants
modYear = __ROR4__(modConst1 * (SystemTime.wYear + 0x1BF5), 5);
modDay = __ROR4__(modConst1 * (modYear + ((unsigned int)SystemTime.wDay >> 1) + modConst2), 5);
modMonth = __ROR4__(modConst1 * (modDay + SystemTime.wMonth + modConst3), 5);
modBase = __ROL4__(seed % 621);
modFinal = __ROR4__(modConst1 * (modMonth + modBase + modConst2), 5);
modFinal += 0x27100001;
   
// Length without TLD
genLength = modFinal % 11 + 5;
   
if (genLength)
{
// Allocate full length including TLD and null terminator
domain = (char *)malloc(modFinal % 11 + 8 + 1);
   
// Generate domain string before TLD
do
{
x = __ROL4__(modFinal, i);
y = __ROR4__(modConst1 * x, 5);
z = y + modConst2;
modFinal = z;
domain[i++] = z % 25 + 97;
}
while (i < genLength);
  
// Add a '.' before the TLD
domain[i] = '.';
  
// Generate the TLD from a hard-coded key-string of characters
x = __ROR4__(modConst1 * modFinal, 5);
y = (x + modConst2) % ( (sizeof(tldchars) - 1) / 2 );
  
domain[i + 1] = tldchars[2 * y];
domain[i + 2] = tldchars[2 * y + 1];
domain[i + 3] = 0// Null-terminate
}
return domain;
}

这个算法每天生成6个域名,类似下面这种:

2016-02-18: wblejsfob[.]pw, kqlxtqptsmys[.]in, cgavqeodnop[.]it, pvwinlrmwvccuo[.]eu, dltvwp[.]it, uxvvm[.]us 

2016-02-19: wblejsfob[.]pw, kqlxtqptsmys[.]in, cgavqeodnop[.]it, pvwinlrmwvccuo[.]eu, dltvwp[.]it, uxvvm[.]us

2016-02-20: nquvsq[.]pm, bgrjlkvxa[.]fr, svkjhguk[.]ru, gitybdjgbxd[.]nl, xxmavhnxts[.]tf, ovdeondpeethj[.]eu

这个C&C的通信方式如下:

 

截止到2.26日,该勒索软件的一个JS文件变种可以绕过所有的杀软,危害很大,因此务必小心。

3. BlackEnergy

为了确保在每个系统启动时执行,释放文件在系统启动文件夹下创建了一个LNK文件,这个文件的执行和每个系统的启动命令一样:
%APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup\{D0B53124-E232-49FC-9EA9-75FA32C7C6C3}.lnk

最后的payload是一个在80端口上连接一个硬编码的C&C服务器,5.149.254.114.简单的木马。这个服务器当前处于未联通状态,或者通过IP地址的限制访问。一旦这个服务器在线,这个文档通过HTTP POST请求,发送基本的恶意指令:

 

请求是BASE64加密的。其中一些字段包括:

b_gen=301018stb

b_ver=2.3

os_v=2600

os_type=0

b_id是一个通过计算机的操作系统信息计算出来的一个独一无二的机器识别码,对于每个人来说也是唯一的。这将使得攻击者可以区别相同网络的不同受感染的主机。b_gen似乎是被攻击者的ID,类似301018stb。而STB应该是乌克兰电视台“STB”,这家电视台曾在2015年11月公开提及BlackEnergy的受害者。

0×05  防御

从目前来看,借助Office文档的宏病毒传播的趋势愈演愈烈,尤其是借助宏的勒索软件并没有消失的迹象,每周都会出现新型的变种。为了保护自己免受威胁,下面的几点意见作为包括商业人士,资料审查人士等在内的所有人士应该意识到:

备份重要文件;

不要打开来历不明的邮件附件;

除非必要,否则默认不开启Office的宏。

对于一些商业系统,网络隔离显得尤为重要,能够将商业损失降到最低。 

参考资料

1、 http://www.bleepingcomputer.com/news/security/the-locky-ransomware-encrypts-local-files-and-unmapped-network-shares/ 

2、 http://decalage.info/8KB_oneliner#userconsent#

3、 https://securelist.com/blog/research/73440/blackenergy-apt-attacks-in-ukraine-employ-spearphishing-with-word-documents/

4、https://blog.malwarebytes.org/news/2016/02/draft-dma-locker-a-new-ransomware-but-no-reason-to-panic/

5、http://labs.bromium.com/2016/02/03/macro-redux-the-premium-package/

6、http://www.freebuf.com/news/95449.html

7、http://www.freebuf.com/articles/network/96011.html

你可能感兴趣的:(钓鱼)