Smoke Loader 木马病毒分析

阅读量    87860 |

分享到: QQ空间 新浪微博 微信 QQ facebook twitter

 

Smoke Loader 木马最早于 2011 年在野外被人们发现,其主要功能是在受感染的的机器上投放其他更具破坏性的恶意软件。经过多年的演变其已经能够加载多达 10 个可执行文件并运行它们,并且现在的 Smoke Loader 新增了一系列的反调试、反沙箱、反虚拟机技术使其分析变得非常复杂。

 

样本信息:

MD5 bf340b3ff326cede17c688bc4092a27b
SHA1 a6d924bc3dad2877866477e0bb5052e09f11c81f

 

样本概述:

该样本是 Smoke Loader 木马,其使用多种技术手段反沙箱、反调试、反分析,在确认未处在分析、调试环境后新建 explorer.exe 进程劫持其入口点使其执行恶意代码进行持久化、连接C2、插件下载执行等操作。

 

运行流程:

 

详细分析:

1,该样本运行后会在入口函数中使用一个循环逐个执行函数数组中的函数。

样本信息。

循环执行数组中的函数。

数组前部都是不相关函数。

只在最后执行 Olectnrs 类的初始化时执行恶意功能。

首先其判断当前进程文件的名称是否是 C.{2}S.{1}LF 如果是则不再执行恶意功能。

然后解密执行位于 0x45F717 处的shellcode1。

shellcode1分析:

该 shellcode 使用多种技巧反反编译,如垃圾指令、滥用 jmp,这使得整块代码变得混乱复杂无法被整体分析,下面是通过单步分析出的功能点。

首先获得必要函数地址。

例:

创建进程快照获得所有进程名称,并检查其中是否含有安全软件、监控软件的进程名,含有则退出。

检测的进程名称有:

avastsvc.exe,aavastui.exe,avgsvc.exe,iavgui.exe,avg.exe,bdwtxag.exe,dwengine.exe,

procexp64.exe,procmon64.exe,procmon.exe,ollydbg.exe,procexp.exe,windbg.exe。

反沙箱:通过检测文件路径里是否有 sample,sandbox,malware,virus字符串。

反虚拟机:

通过 cpuid 获得虚拟CPU信息,并判断其中是否含有虚拟化产品名称信息。

反调试:

通过 NtQueryInformationProcess 函数反调试。

检测调试标识。

检测调试句柄。

通过检测 PEB->BeingDebugged位。

使用挖空注入技术( Process Hollowing )运行 PE1.exe:

循环查找资源直到查找到目标资源解密得到 PE1.exe。

以当前进程文件为目标创建子进程,使用挖空注入技术将 PE1.exe 注入执行,然后退出当前进程。

2,PE1.exe 是一个 FASM 程序,其使用了和 shellcode1 一样的技巧来对抗分析。

PE1.exe 文件信息:

反调试:

通过将 PEB 中的调试标志位与关键跳转指令进行异或来改变跳转位置来引发异常。

解密并执行 PE2.dll 的导出函数:

解密自身 0x401557 处的数据到 0x20000( 不定 ) 得到一个 dll 文件( 该dll文件 PE 头被破坏需要修复 ),然后将该 dll 文件在内存中展开,展开时不展开 PE 头。然后调用展开后 dll 的导出函数 sub_10003ABF(“ZOMBI”,0x20000),两个参数分别是与 C2 通信时的标志、dll 文件所处内存地址。

调用 PE2.dll 的导出函数之前会修改几处位于0x20000处的 dll 文件的数据,其中涉及两个比较重要的逻辑判断,该逻辑判断的修改会影响后续恶意功能的执行。

一处位于 sub_10001FF3 函数。

修改后:

一处位于 sub_10002F6F 函数。

修改后:

调用函数 sub_10003ABF (“ZOMBI”,0x20000)。

修复 PE2.dll 的 PE 头后可知 sub_10003ABF 是其导出函数。

3,PE2.dll 由于将部分重要信息清除所以通过分析软件不能获得太多文件信息,不过由于其没有使用 shellcode1 中的技巧使得其可以被整体分析。

PE2.dll信息:

在其 sub_10003ABF 导出函数中其首先获得了所需函数地址(导入表已被清除)。

将全局数组中的数值和 0x28580879 异或得到函数名 hash,获得的函数地址将放在另一个全局数组中。

创建两个线程终止安全软件进程(如:procexp)。

一个线程通过枚举窗口查找目标进程。

一个线程通过进程快照查找目标进程。

判断用户权限,如果为低则使用 runas 重新运行进程。

如果当前 os 是 win7 及以上则设置当前进程 SE_DACL_PROTECTED 权限。

解密配置信息,分别位于 0x10004300 和 0x10004548 处,每次获取信息都会先解密然后通过索引获得对应数据。

0x10004300 解密后的信息:

0x10004548 解密后的信息:

反沙箱反虚拟机:

通过文件名、磁盘序列号、已加载模块、磁盘描述反沙箱反虚拟机。

创建命名文件映射用于与子进程的信息传递。

创建傀儡子进程 explorer.exe,然后将 0x20000 处修改后的 PE2.dll 文件展开映射进子进程并 HOOK 子进程入口点使其跳转到 PE2.dll 的 10003BA9 处。鉴于其在计算跳转偏移时使用的是 PE2.dll 的 EP ( 0x10003BA4 )的地址( 未减5 )以及 EP 处的代码逻辑,所以真正的 EP 应该是 0x10003BA9。

0x10003BA9 处代码:

被 HOOK 的子进程入口点。

整体代码如下:

4,PE2.dll 在真正的 EP 处会再次调用 sub_10003ABF(0,0) 函数,由于参数变化这次调用将进入执行恶意功能的分支。

首先打开父进程创建的文件映射获得父进程文件路径。

获得当前正在使用的 User-Agent HTTP 请求标头字符串。

获取配置信息中的白名单地址测试网络联通性,不通则阻塞。

创建互斥体,互斥体名由主机名hash+磁盘序列号。

获得已安装软件的HelpLink、URLInfoAbout,将用于后续与 C2 通信时的流量混淆。

持久化:

将母体文件复制为”%APPDATA%\Microsoft\[a-z]{8}\[a-z]{8}.exe”,其中文件夹名由主机名hash的前8位决定,文件名由磁盘序列号决定。

转换逻辑。

设置自启的位置:

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run

自启方式为篡改已有自启项的值。

第一个红框处是被修改的第二个逻辑,该逻辑判断如未修改将不会通过。

创建线程维持自启。

监控自启键的变化,如果改变则在以下位置重新设置自启。

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\StartupApproved\Run

创建线程与 C2 通信下载后续模块到本地运行:

获得C2地址,从解密逻辑看其可以设置两个 C2 地址,但是经过分析此样本设置的两个 C2 均为 hxxp://b4mb4m.ru/。

C2 地址解密逻辑。

与 C2 通信前后都将向之前获得 HelpLink、URLInfoAbout 发送随机数据以混淆与 C2 的通信流量。

发送的上线包内容包括主机名hash、磁盘序列号、os版本、ZOMBI字符串等。

成功从 C2 获得后续组件数据后会将其保存到本地并执行。

 

沙箱云检测结果

检测环境 Windows 7 SP1 Pro 32位
默认用户 管理员

1,进程挖空技术检测。

2,创建傀儡进程检测。

3,持久化及自启保护检测。

4,信息发现检测。

5,网络行为检测。

 

关于我们

360沙箱云是 360 自主研发的在线高级威胁分析平台,对提交的文件、URL,经过静态检测、动态分析等多层次分析的流程,触发揭示漏洞利用、检测逃逸等行为,对检测样本进行恶意定性,弥补使用规则查杀的局限性,通过行为分析发现未知、高级威胁,形成高级威胁鉴定、0day 漏洞捕获、情报输出的解决方案;帮助安全管理员聚焦需关注的安全告警,过安全运营人员的分析后输出有价值的威胁情报,为企业形成专属的威胁情报生产能力,形成威胁管理闭环。解决当前政企用户安全管理困境及专业安全人员匮乏问题,沙箱云为用户提供持续跟踪微软已纰漏,但未公开漏洞利用代码的 1day,以及在野 0day 的能力。

360混天零实验室成立于2015年,负责高级威胁自动化检测项目和云沙箱技术研究,专注于通过自动化监测手段高效发现高级威胁攻击;依托于 360 安全大数据,多次发现和监测到在野漏洞利用、高级威胁攻击、大规模网络挂马等危害网络安全的攻击事件,多次率先捕获在野利用 0day 漏洞的网络攻击并获得厂商致谢,在野 0day 漏洞的发现能力处于国内外领先地位,为上亿用户上网安全提供安全能力保障。

分享到: QQ空间 新浪微博 微信 QQ facebook twitter
|推荐阅读
|发表评论
|评论列表
加载更多