本次参考文章:
[原创]“白加黑”恶意程序样本分析-软件逆向-看雪-安全社区|安全招聘|kanxue.com
定义
Q:什么是白加黑程序?
A:通常是一个正常的/带有数字签名的exe文件与恶意的dll文件共同完成恶意行为
白加黑是DLL劫持的一种,由于dll文件自身不能直接运行,并且对dll的检测要弱于exe文件,是一种免杀手段,借助带有 数字签名或者在杀软白名单中的程序区加载恶意dll.
Q:程序的执行流程是怎么样的呢?
A:
一、样本分析
样本简介
样本sha256:12df0d7b94c6fa514cb3dbd5e6d4976fa49365b1c820a79b319d95d0c27a0289
样本名称:信誉新价格
样本类型:*.rar
在线沙箱分析:
攻击链分析:
解压后压缩包 中还有一个文件夹
之后才是具体的文件
截图中名为dat的文件夹还有名为HD_Comm.dll的文件是虚化显示的,说明这两个文件的属性是隐藏,
在计算机设置中尽量选择显示隐藏文件,以及文件的扩展名
谈到文件的隐藏属性,就可以解释恶意软件的作者为什么在压缩包内还有一个文件夹
在为压缩状态的时候,无论文件属性是否为隐藏,都会在压缩包内显示
如果有外层的文件夹,可能会有部分下载者在看到如下的文件夹和文字的时候就会直接下载
但如果没有外层的文件夹,并且没有设置显示隐藏文件,那么打开压缩包看到的是3个文件,下载到本地却只能看到一张图片,不免会引起下载者的怀疑
其实也是在考验安全意识的强弱
首先查看“截图.bmp.lnk”文件,可以发现在未解压前查看的时候可以看到.lnk后缀,但是解压后,即使设置了显示文件扩展名的选项,依旧显示的是.bmp,不过依旧可以从文件图标和文件类型上看出该文件属于lnk类型的文件。
查看该快捷方式对应目标,右键--属性
此快捷方式对应的目标为:%systemroot%\System32\rundll32.exe dat\reg.dll DriverInfo
因此双击截图.bmp之后,实际上是利用Windows自带的rundll32.exe这个程序来执行dat目录中的reg.dll这个文件。
此处的Lnk文件作为激活工具,白exe为微软的rundll32.exe,黑 dll为隐藏文件夹中的reg.dll
行为监控
使用工具:火绒剑
打开火绒剑的监控,监控rundll32.exe,
然后双击截图.bmp.lnk
此时也能看出该程序的可疑性
查看监控到的行为
首先调用dat目录中Reg.dll
接着调用信誉新价格目录下的HD_Comm.dll
然后继续调用dat目录中的TenioDL_core,以及Au.exe
查看进程树
可以看到这里多出了QQ游戏的进程,新建了“Tencent”以及“QQGAME”这两个文件夹
另外还有一个dllhost.exe的进程,路径为:C:\Windows\limit\dllhost.exe,这是一个微软系统中的文件名,起迷惑作用,在windows目录中新建了limit文件夹,很可能就是有问题的程序
不妨跟进这个目录,发现有四个文件,并且TenioDL_core.dll设置了隐藏属性
目前为止,我们发现的文件有:
首先要对这些文件进行黑白判定
判定是否有数字签名,使用到的工具是sigcheck
Sigcheck - Sysinternals | Microsoft Learn
计算md5值
https://www.cnblogs.com/klchang/p/14020974.html
由上述表格可知
位于“信誉新价格”以及“dat”目录的文件,其实就是恶意程序的原始文件,其中只有Au.exe具有数字签名。
在恶意程序被激活之后,它会创建名为limit的文件夹以及QQGAME的文件夹
1.其中在QQGAME文件夹中释放出来的QQGame.exe具有数字签名,说明它是真实的腾讯文文件,那么很明显它就是假借QQ游戏来混淆视听的
2.而在limit文件夹中,load.exe具有数字签名,其MD5值与dat目录中的Au.exe是一样的,说明二者是同一个文件。
config.dat没有数字签名,由于两个目录中的MD5值也是一样的,因此可知也是同一个文件。dllhost.exe是新释放出来的没有数字签名的文件,TenioDL_core.dll也没有数字签名,它其实位于原“信誉新价格”文件夹,原始文件名是HD_Comm.dll。
以下是除去白名单的程序,需要重点关注
regdll
首先对Reg.dll进行分析
恶意程序一开始是利用Windows自带的rundll32.exe这个程序来执行dat目录中的reg.dll这个文件,那么我们不妨先使用IDA来载入reg.dll这个文件
加载之后IDA会提示加载HD_Comm.dll
猜测,应该是reg.dll之后又调用了HD_Comm.dll,reg.dll相当于是中间过渡的跳板,真正的恶意功能存在于HD_Comm.dll里面,不妨先看一下reg.dll中是否包含有价值的信息
载入HD_Comm.dll之后就可以对reg.dll进行分析
首先查看字符串,IDA中shift+F12
可以发现一些值得关注的字符,CCB表示中国建设银行,HUADAZHIBAO(华大智宝),USBKeyTools.exe,由此可知这是伪装成了建行U盾之类的程序
HD_Comm.dll
接下来分析HD_Comm.dll
首先查看是否加壳,使用DIE查看,可以发现加了UPX壳
首先进行脱壳,使用从网上下载的工具包upx -d进行脱壳
查看脱壳后的程序
可以看到壳已经被脱掉
在IDA中载入,首先还是Shift+F12,查看字符串
看到“config.dat”的字符串,在IDA中Ctrl+X查看是何处引用了这个字符串
来到被调用的代码处
首先可以看到,程序首先调用了CreateFileA函数来打开“config.dat”这个文件,也就是获取该文件的句柄,如果能够成功获取句柄,接下来会分配内存,将这个文件载入到内存里面:
之后首先调用了sub_100016B0函数,双击进入函数内部查看
可以发现该函数做了很多的运算,并且包含循环体,很可能就是进行解密
其原理就是不断取出目标文件的字节,保存在cl寄存器里面,然后将cl与dl进行异或运算,再把异或的结果与dl相减
那么dl的值来源是哪里呢?
向上查看代码发现有add dl,8的指令,dl是edx寄存器的低8位
然后就是idiv ecx,这是一个除法运算,商保存在eax中,余数保存在了edx中
idiv指令之后的是除数,也就是ecx=0xA9,被除数保存在eax中
而eax是由传进来的第三个参数决定的
查看传递的参数
由于参数传递是从右到左,所以第三个参数也就是最先入栈的0x18,即eax=0x18
最后计算得dl的值为0x20 (0x18/0x0A9)的余数0x18再加上0x8也就是0x20
接下来手动对config.dat进行解密,使用工具:winhex
正常情况下4D5A应该在文件的起始部分,而该文件的第一个字节却是00,这样躲避了部分静态检测
手动将第一个字节00删除
右键——移除第一个字节00
然后选中4D,右键修改数据,先进行异或
然后再次修改数据,减去0x20,注意此处填入的是-20
然后得到解密之后的文件,也是恶意程序的核心config_modify.dat
也可以尝试在Xdbg中动态调试获得解密之后的文件,dump出来
在IDA中打开解密之后的config_modify.dat
首先查看字符串,在dat文件夹中只剩下io.dat没有研究,Ctrl+F在其中搜索io.dat
然后查看其调用情况
可以看到,它与config.dat的调用方式如出一辙,也是首先利用CreateFileA函数来获取文件句柄,然后再为其分配内存空间并进行进一步的解密操作:
Q:此处解密的原理是什么
A:首先减去0x6a,然后与0x22异或
此处依然是手动在winhex中进行解密,步骤如上,不在复述
解密后出现了JFIF字符,于是基本可以判断这个文件是JFIF类型的文件,将其后缀修改为.jfif,然后打开
获取资源文件
在观察config_modified的导入表中,发现存在与资源相关的函数
使用工具:ResourceHacker
发现其中存在两个资源节
提取资源,保存为二进制文件
经过对文件进行md5值计算,发现第一个资源就是dllhost.exe,第二个资源就是QQGame.exe
分析样本的恶意功能
将重点分析放在解密之后的config.dat(即config_modified.dat)文件上
在IDA中打开
首先从字符串以及函数调用入手
1.键盘记录器
看到了很多键盘按键相关的字符,初步判断有键盘记录器的功能
选中一个字符点进去,以[F10]为例
然后Ctrl+X查看引用
选中off_1001B1CC
再次Ctrl+X查看其交叉引用
随着流程图向上走查看与键盘记录相关的函数,此处为GetKeyState和GetAsyncKeyState
以上说明该恶意程序具有键盘按键的功能
2.获取当前窗口信息
继续回到字符串窗口,在按键下方存在于标题以及时间先关的字符串
跟进记录时间的字符串查看其交叉引用,此处发现GetLocalTime 函数用来获取系统时间
在其上方还有获取当前窗口以及标题的函数
以上可知恶意程序具有获取用户正在使用的窗口的功能,并记录系统时间
3.关闭杀软进程
再次回到字符串窗口,可以看到有360Tray.exe和KSafe Tray.exe等杀软进程有关的字符串
同上查看函数交叉引用
以KSafe Tray.exe为例
首先将字符串KSafe Tray.exe作为参数传入sub_A710中,
在sub_A710中,先调用
拍摄快照,
再遍历进程,比较进程名看杀软进程是否存在,
如果存在该杀软进程,就再次将字符串KSafe Tray.exe作为参数传入到sub_1000A140
关闭掉该杀软进程
以上说明该程序具有关闭系统中运行的部分杀软进程的功能
4.后门程序
字符串中获取了大量的信息,接下来看一下程序的导入表
存在网络通信相关的函数
存在命令执行函数
存在获取系统信息的函数
根据以上的函数可以初步的推断,这可能是一个后门或者远控木马程序
与攻击者建立网络连接,将受害主机信息发送给攻击者,接收攻击者的恶意指令并执行
接下来的重点放在恶意程序是根据攻击者下发的不同的指令执行不同操作的
首先接受远端的指令,一般需要recv函数
首先查看recv函数的交叉引用
在sub_100037D0中被调用,再查看sub_100037D0的交叉引用图
此处选择的是Xref to
Xref to :谁调用了当前函数
Xref from:当前函数调用了谁
可以看到有多个函数调用了sub_100037D0,这里我们看一下第一处调用,也就是函数sub_10002020的位置:
查看左侧的Graph OverView
这是一个典型的多分支机构
由此就可以判断,当前函数就是整个恶意程序功能的分发核心。而通过伪代码,我们也可以看到恶意程序通过switch语句通过接收到的指令的不同,以实现不同的模块功能:
攻击链路