[摘要]一、概述近期我们翰海源团队一直在持续关注着一个Bo.net的演变,该Botnet从2014年8月末开始活动,一直持续到2014年10月底,截至目前该Botnet仍然存活。同时我们也在金融、IT、政府...
一、概述
近期我们翰海源团队一直在持续关注着一个Bo.net的演变,该Botnet从2014年8月末开始活动,一直持续到2014年10月底,截至目前该Botnet仍然存活。同时我们也在金融、IT、政府、银行等行业发现了攻击样本,我们提醒客户请警惕最新的Smoke Loader和Andromeda变种botnet。
Botnet使用钓鱼邮件作为主要的传播途径,邮件大多以“my new photo”或者“New offer Job”为主题,携带一个名为“photo.zip”或者“offer.zip”的压缩附件。
cs
.xzking.com/d/file/20141101/832b9f5bea501eb1ef4adbe77f5018c7.png' />

在监控中发现,该Botnet在9月份使用Smoke Loader 作为主要的攻击载荷,在10月份之后,该Botnet开始逐渐转变为Andromeda,这两种不同类型的Botnet具有一些十分相似的特征,但是出现 在同一个较大规模的Botnet中,并不是十分常见。
Smoke Loader Botnet在2011开始一些俄语的黑客论坛公开出售,2014年3月份作者在论坛申明该程序将只针对使用“俄语”的客户出售(only for RU-speaking customers),不过在网上已经流传出了部分crack版本。

Andromeda Botnet几乎在同一时间出现,目前最新的官方版本为2.08,最初的Andromeda只针对使用俄语的客户出售,2012年作者开始将旧版本开放给使用英语的客户。

这两种Botnet均通过模块化进行安装,原始的安装程序为一个装载器,安装后将根据需要下载其他功能模块,可以窃取主机上的浏览器、FTP、邮件、即时通信工具的账户和密码,接收控制指令对指定目标发起DDos攻击。
该Botnet从8月末开始出现,9月份大量通过邮件的方式传播,从9月份开始到10月末这段时间内我们在某私有云平台上监控到的Botnet每天的活跃统计就有几百,如下图

该Botnet的控制中心主要分布在一些欧洲国家,其中主要的几个分布在乌克兰和俄罗斯境内。

二、技术细节
2.1 装载器
该Botnet使用的装载器采用微软.Net框架的C#语言编写,代码进行混淆处理,我们发现这种框架具有极好的免杀效果,如下图在9月19号捕获到的样本在VT上检测率为0:

装载器主要负责将一字节数组拷贝到一块可写可读可执行的内存区域,并将代码的控制权转交给这一字节数组:

部分装载器包含以下的pdb路径:
c:cryptor.servercryptorscsharp_19_09_2014_20_11_44outdir_zjNXqqGibngGNetThreeNetThreeobjx86 ReleaseNetThree.pdb
2.2 注入器
两种Bot均通过多次的注入来执行最终的恶意代码。
2.2.1 Smoke Loader
SmokeLoader装载器成功将控制器交给shellcode后,shellcode会首先通过注册表项:
HKLMSystemCurrentControlSetServicesDiskEnum
来判断是否在以下虚拟机环境中:
Virtual、VMware、 QEMU、Xen
我们发现在Andromeda 2.06的版本中也用到了同样的方法来检测虚拟机环境。
如果没有检测出虚拟机环境,则shellcode读取装载器的一段加密数据并在内存中进行解密:

解密后的数据是一个可执行文件,该文件并不会写入到磁盘上,而是通过进程注入的方式来执行。
Smoke Loader会将这段可执行文件注入到Explorer.exe进程中,注入的代码并不是最终要执行的恶意代码,而是另一个注入器,这个注入器会通过 XOR解密另一段代码并将最终的恶意代码注入到 svchost.exe进程中:

2.2.2 Andromeda
整个装载过程中,Andromeda与Smoke Loader几乎完全相同,在注入的过程中有部分不同,下图标注部分是Andromeda中的解密标记:


解密完成后shellcode将重新创建一个挂起的(SUSPEND)自身进程,然后将解密后的代码注入:

与Smoke Loader一样,到这里只是完成了第一次注入,接下来注入代码会根据当前系统的版本为32或者64位来选择注入svchost.exe或msiexec.exe。
以注入msiexec.exe为例,注入代码之前会首先创建一个挂起的msiexec.exe进程,通过文件读取msiexec.exe可执行文件 到内存中,然后通过ZwUnMapViewOfSection卸载整个进程空间的数据,修改原始文件中的入口地址为恶意代码的地址,通过 ZwMapViewOfSection来将代码注入到新创建的SUSPEND进程并调用ResumeThread重新启动进程。


Smoke Loader和Andromeda均会创建一个守护进程来检测指定路径下的可执行程序运行状态,一旦发现被终止会立即重启主模块。
2.3 对抗
2.3.1 代码混淆
除了在装载器的C#代码中进行过变量和函数名的混淆外,这两种Botnet在shellcode的执行过程中均使用同一种函数名校验和的方法来执行系统函数。

2.3.2 Anti-VM
除了前面提到的Smoke Loader通过注册表来当前运行的环境之外,Andromeda会遍历系统当前进程并计算进程名的CRC32的HASH,然后检查是否存在包含 vmtoolsd.exe、vmwareuser.exe、regmon.exe、filemon.exe、VBoxService.exe 、VBoxTray.exe、WireShark.exe、procexp.exe 等18个进程的HASH。

2.3.3 Anti-API Hook
除了前面的几种,Andromeda中的shellcode将所有需要的API函数的第一条指令保存在自己的代码区,然后通过两次跳转来调用API,这种方法并没有在Smoke Loader中使用。

2.4 网络通信
2.4.1 Smoke Loader
Smoke使用计算机名的CRC32和磁盘序号的异或作为每台主机的标识和互斥体名,首次运行连接C&C的网络数据包如下:

其中POST数据内容经过加密,解密后的数据格式如下:
cmd=getload&login=[MutexName]&sel=cool1&ver=5.1&bits=0&admin=1&hash=[MutexName]
cmd:command
login:主机的唯一标识符
sel:botid
ver:版本号
bits:系统版本标识,32或者64位
admin:当前程序运行用户是否为管理员
hash:主机的唯一标识符
返回页面伪装成一个404页面并携带一段加密的数据,这段数据经过Xor编码,编码的Key为附加数据的第一个字节:

解码后的内容如下:
Smk0
关键词:警惕最新的Smoke Loader与Andromeda变种botnet