首页
论坛
课程
招聘
[调试逆向] [病毒木马] [原创]“白加黑”恶意程序样本分析
2021-4-26 23:23 3297

[调试逆向] [病毒木马] [原创]“白加黑”恶意程序样本分析

2021-4-26 23:23
3297

一、基本概况
对于这次的样本分析是基于学习《恶意程序分析与高级对抗技术》课程中”白加黑”恶意程序分析章节的内容,复现攻击链以及其具体的功能。这一门课程是由姜晔讲师教授。
“白加黑”是民间对一种DLL劫持技术的通俗称呼,现在很多恶意程序利用这种劫持技术来绕过安全软件的主动防御以达到加载自身的目的,是目前很火的一种免杀手段。本文将针对此类病毒做了一个简单技术介绍和案例演示。

 

所谓的“白加黑”,笼统来说是“白exe”加“黑dll”,“白exe”是指带有数字签名的正常exe文件,那么“黑dll”当然是指包含恶意代码 的dll文件。病毒借助那些带数字签名且在杀毒软件白名单内的exe程序去加载自己带有恶意代码的dll,便能获得杀毒软件主动防御的自动信任,从而成功 加载到系统中。病毒的这种手段其实是钻了软件编写的空子,若第三方软件在编写时对调用的库文件没有进行审查或审查得不够严谨,就容易发生DLL劫持,这种编写漏洞已被微软获悉,详情可参考Microsoft 安全通报(2269637)

 

1.Dll劫持技术简介

 

当一个可执行文件运行时,Windows加载器将可执行模块映射到进程的地址空间中,加载器分析可执行模块的输入表,并设法找出任何需要的DLL, 并将它们映射到进程的地址空间中。由于输入表中只包含DLL名而没有它的路径名,因此加载程序必须在磁盘上搜索DLL文件。首先会尝试从当前程序所在的目录加载DLL,如果没找到,则在Windows系统目录中查找,最后是在环境变量中列出的各个目录下查找。恶意程序利用这个特点,先伪造一个系统同名的 DLL,提供同样的输出表,每个输出函数转向真正的系统DLL。这样,程序调用系统DLL时会先调用当前目录下伪造的DLL,完成相关功能后,再跳到系统 DLL同名函数里执行。这个过程用个形象的词来描述就是,系统DLL被劫持了。

 

Windows XP SP2系统以上DLL文件加载的搜索顺序如下:
(1)可执行程序加载的目录(可理解为程序安装目录比如C:\Program Files\Internet Explorer)
(2)系统目录(即 %windir%\system32)
(3)16位系统目录(即 %windir%\system)
(4)Windows目录(即 %windir%)
(5)运行某文件的所在目录(比如C:\Documents and Settings\Administrator\Desktop\test)
(6)PATH环境变量中列出的目录
根据前面介绍的DLL加载顺序,运行程序的时候会优先到程序执行的目录下加载必须文件,这么一来,病毒作者可以伪造一个dll,包含所有被劫持dll的导出函数,放到可执行程序目录下,当exe运行时,病毒dll就理所当然被优先调用了。
2.分析环境及工具
系统环境:windows x32 专业版
工具:die、Exeinfo PE、dependency walker、火绒剑、IDA pro、Total Commander,010Editor,upx脱壳工具
分析方式:静态分析
恶意代码类型:远控木马

 

二.攻击链分析

 

那么可以确信的是,白加黑恶意程序是团伙作案,至少两个成员构成,一个DLL程序,一个EXE程序来激活DLL。
为了自己使用电脑的安全,建议设置文件属性,把隐藏的扩展名之类的属性显示出来。
打开此次分析病毒样本:
dat文件夹、HD_Comm.dll程序,一个名为截图bmp.lnk的快捷方式

解压出来之后发现前两个是被隐藏的,如果不修改文件属性,那么只能看见这个快捷方式。

我们打开Total Commander文件管理器F3查看此快捷方式的内容。
存在有一个可以加载dll文件的启动器Rundll32.exe启动了dat目录下的reg.dll程序

使用火绒剑和Process Explorer对其进行行为以及进程的监控。
可以看到其调用顺序:dat\reg.dll→信誉新价格\HD_Comm.dll→dat\TenioDL_core.dll→dat\Au.exe

 

 

进程:QQGame.exe、dllhost.exe自创建了limit、Tencent,QQGame的目录

查看limit目录发现四个成员tenioDL_core.dll还是隐藏的:

汇总归类,MD5校验和sigcheck查看签名

通过筛选发现符合的恶意样本有:

 

让我们使用IDA pro 查看第一个reg.dll
出现加载HD_Comm.dll的现象,那么接下来分析的就应该是此DLL,reg.dll就是一个跳板,但还是看一看此程序里有些什么。

继续查看reg.dll,SHIFT+F12查看字符串发现出现USBKeyTools.exe、华大智宝,CCB开头的字符串,判定此DLL程序是在伪装U盾这一类的程序

开始分析HD_Comm.dll,使用total Commander F3查看是否加壳
发现加了UPX壳

使用UPX插件解壳
Upx.exe -d HD_Comm.dll

解压之后,使用IDA pro 打开此程序。SHIFT+F12查看字符串,大致浏览一遍,找到了config.dat字符串Ctrl+x查看其交叉引用。查找此字符串的原因在于搞清楚恶意样本的程序链

可以看到,进行了路径的拼接,CreateFileA获取了句柄成功后,申请堆空间,将这个文件
载入到了文件中。然后在1000190E这个位置调用了一个函数,进去看看。

发现这是一个标准的解密运算流程

可以发现从一开始就在做一些除法加法的操作,idiv的被除数保存在了EAX那么就得看看EAX存放的值。

那么我们esc回退一下看看参数3的值。根据参数从右往左入栈规则,那么就可以确定18h就是EAX的值

根据之前的截图进行运算,除数是ECX那么18%A9得EAX=0,余数DL=18,18+8得20
参数1为数据赋值给EAX,进行取数据运算,最后得出(cl^20)-20,后面就进行代码自增继续循环运算。
那么就可以通过010Editor进行算数运算得到真正的恶意核心样本了。
删除第一个00然后再进行对16进制格式的xor 20 sub 20的操作会得到一个新的PE文件,命名为config_modify

使用total Commander打开io.dat,无法看出什么东西,看来是被加密了

使用IDA pro打开config_modify这个文件,查找io.dat这个文件,之所以要查找这个文件,是因为到现在为止,整个攻击链中就剩下这个不知道是什么。

Ctrl+x交叉引用查看被调用的位置,发现和之前的一样都是申请内存载入数据

在1000B0E4处发现解密操作

 

那么就可以通过010editor进行计算得到io.dat
解密出来可以看到名为JFIF的字符

那么我们可以更改一下解密后的这个文件的后缀名,可以确定这个文件就是用来迷惑用户的DNF的报价图

查看config_Modify.dat的导入表发现导入了操作资源表的操作,那么可以确定这程序中可能存在特殊资源。

那么可以使用ResourceHack这个工具来查看其资源信息
发现了两个资源信息,选择操作→将资源保存至二进制文件

将104保存为config_src_1.dat,将108保存为config_src_2.dat,通过MD5Checker查看对比,发现就是释放出来的名为dllshost.dll和QQGame.exe文件

至此整个恶意样本的攻击链就完全的展示出来了。

 

三.恶意样本功能分析
使用IDA pro具体分析config_modify程序的功能,观察其API调用分析出执行的功能,可以先从字符串入手,SHIFT+F12看看有没有熟悉的一些字符

发现一连串的虚拟键盘字符串,那么就有理由怀疑此恶意程序有键盘记录的功能,任选一个点进去交叉引用查看一下。

发现是以单个字符显示的,再次交叉引用

发现类型是r,读取

点进去跳转到此处

那么按下空格键查看流程图

紧跟着按键下面是一个获取标题和时间的字符串,同样交叉引用,查看其上下文。

 

可以看到获取正在使用的窗口以及获取本地时间的API调用。

再次回到字符串窗口,可以看到诸如360Tray.exe,KsafeTray.exe

发现安全厂商的模块进程字符串。选择一个进去查看其上下文。
可以看到在1000AC7C处使用了这个字符串

进去看一下,通过标志值为2知道,是在遍历进程的操作。

整个流程图最后都指向终止指定进程以其所有线程的API。那么就可以确定这个恶意代码有结束杀毒软件的功能。

看一下导入表的一些函数调用。看到导入表中存在shell32.dll模块执行shellcode的命令和联网建立TCP链接ws2_32.dll模块以及Wininet.dll模块如FTP、 HTTP和NTP等操作。因此就可以判定这是一个后门程序。那么下面就来具体的分析分析其功能。

为了接收远端传来的指令,那么一定会调用ws2_32.dll模块中recv这个API
我们交叉引用查看此API。发现被100037D0处引用,对这个函数进行交叉引用。

发现多次被调用,选择第一次调用的处。就是10002054的位置。那么由流程图可以发现,这是一个典型的Switch多分支结构。

可以看到以蓝色矩形为起点,是一个很复杂的调用关系。

 


放大查看也可以找到我们之前所查看的如键盘记录函数

以及获取系统信息的API以及连接网络所用的API。

最后在看一下导出表里面有什么发现了一个导出的函数,我们查看一下

发现存在Sleep我换算成十进制等于20000意思是要睡眠20秒,这应该是反沙箱的一种。

 

那么就可以总结出一张图这样的流程图:

参考资料:
浅谈“白加黑”-DLL劫持技术 作者:Dark_Tsa97


第五届安全开发者峰会(SDC 2021)议题征集正式开启!

最后于 2021-4-26 23:26 被APT_华生编辑 ,原因:
上传的附件:
收藏
点赞6
打赏
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回