根据我们接触到了前期入侵越南组织机构的间谍程序捕获样本,入侵活动涉及7月底对越南两大机场的攻击事件,攻击中使用的恶意软件用于窃取越南航空公司40万会员信息。这些入侵活动中使用的攻击载荷是伪装成杀毒软件McAfee的Korplug RAT变种。
本文描述了从隐藏软件中提取最终攻击载荷的过程。
1 分析样本
884d46c01c762ad6ddd2759fd921bf71 – McAfee.exe
c52464e9df8b3d08fc612a0f11fe53b2 – McUtil.dll(shellcode loader)
28f151ae7f673c0cf369150e0d44e415 – McUtil.dll.mc (shellcode)
321a2f0abe47977d5c8663bd7a7c7d28 – unpacked payload (DLL)
执行流程:
McAfee.exe -> McUtil.dll -> McUtil.dll.mc -> payload (DLL)
2 间谍软件包
该程序是一个非常有意思的模块化软件包。它整体伪装成McAfee杀毒软件:
其签名信息显示为McAfee原始的有效签名证书:
这个签名证书当然不是假的,因为McAfee.exe确实是一个合法程序,但是,却被捆绑了恶意的DLL动态链接库文件,攻击者正是利用了这点进行程序劫持。
攻击中使用的McAfee程序为老版本程序(编译时间为2008年),经测试,当前版本的McAfee程序不存在此类滥用隐患。
3 行为分析
成功植入后,程序潜伏在受害者系统中隐蔽执行。经分析发现,恶意代码注入了系统正常进程svchost.exe,程序主体启动时将会运行svchost.exe进程。从svchost.exe当前进程的详细信息中可以发现,其进程镜像目录包含恶意程序目录。
恶意程序生成的bot类线程从低到高枚举本地地址空间,对局域网内其它主机进行侦察探测:
同时还尝试与远程C&C地址(air.dscvn.org)进行通信连接,在我们的分析测试中,该C&C地址已经失效:
4 解包分析
恶意程序在实现最终功能之前包含多层载体,exe文件以及DLL文件都是正常的,关键的恶意功能在于包含有加密shellcode的外部捆绑文件,而在shellcode中隐藏的是执行核心间谍进程的DLL文件。
shellcode加载
为了达到反调试分析目的,攻击者混淆加载有效载荷的方式非常具有技巧性。McAfee.exe一旦执行,恶意程序就会在系统启动目录中加载名为McUtil.dll的动态库文件,由于系统不对恶意程序整体进行完整性检查,所以执行程序可以加载任意DLL文件:
McUtil.dll被用来部署下一阶段文件:McUtil.dll.mc。为了避免分析跟踪,McUtil.dll不会直接释放文件,而是使用patch方式调用McAfee.exe读取加载。下图为向内存写入钩子加载程序的相关代码片段:
以下为patch之后的程序调用代码,前两行为直接跳转到McUtil.dll地址的命令:
McUtil.dll主体中包含Patch函数,并且在处于动态调用之后,所以,钩子程序加载调用返回之后便会立即执行。
钩子程序调用的外部文件是可见的:
当执行写入内存之后,便发生了JNZ跳转:
提取payload
恶意程序的shellcode被进行了复杂的混淆:
重点不在于此,而在于该恶意程序的解包器和加载器,加载器把以下内容压缩到一段缓冲区内:
之后逐块重新映射这些内容,并为其分配附加内存,另外,在向虚拟镜像重新映射初始PE文件的过程中,也可以看到类似情况。实际上,反编译后的解包内容为一个头部经过变形的PE可执行程序,其中PE程序原始值”MZ”被分隔符XV代替:
通过重构文件头之后还原了exe文件:
文件解析为一个正常的PE文件321a2f0abe47977d5c8663bd7a7c7d28,虽然程序名节都没有命名,但所有内容有效:
文件特征表现了DLL形式的payload,由于文件没有任何导出列表,所以不知道它的原始名称。观察以下加载的导入部分,我们可以确定其为最终攻击载荷,它加载和调用了很多网络通信函数。例如:
在对该程序进行行为分析期间,我们还找到了其执行局域网主机IP扫描的代码。
攻击者为了能让攻击载荷隐秘执行,对所有调用部分进行了执行顺序检查,以下为对主要调用部分进行检查的硬编码名称:
5 总结
该恶意程序使用McAfee程序劫持DLL文件并运行恶意代码,为了逃避检测,还把各部分模块进行了混淆,单一的文件模块不具备恶意行为,也不能被杀毒软件查杀,只有所有部分综合执行之后才能发挥恶意行为功能。
这种类型的恶意程序,其EXE或DLL文件只用来加载shellcode,并不包含恶意代码,虽然用户对PE文件的运行比较谨慎,但是这一次,可能就会比较倒霉。
附录:
转载请注明:指尖安全