一则邮件攻击样本分析分享

一、前言

通过邮件投递病毒文件是网络攻击常用的一种方式,因此防御邮件攻击是每个安全团队都需要重点考虑的内容。中兴通讯每天都会收到数万封外部邮件,为了及时检测每封邮件是否含有恶意文件,中兴ZInsight团队部署了自研的高级邮件防御系统,针对每个邮件附件,通过动态行为分析的方式检测是否存在威胁。本文介绍近期捕获的一起攻击事件,分析其攻击过程。

二、攻击邮件的捕获与分析

近日,中兴高级邮件防御系统捕获了一批使用高危word附件进行定向攻击的钓鱼邮件,攻击对象均为同一项目团队成员,引起了安全人员的重视。下面是邮件附件的分析报告:

从分析报告中可以清晰的看到,此word文件有创建进程的异常行为,另外也发现了异常的网络行为,可以猜测这是一个下载器。经安全人员进一步分析发现,在word附件中使用了宏病毒,宏病毒由vb写成,采用了加密混淆等方式逃避杀软的检测,见下图:

vb脚本经过混淆,但依然可以看出有联网的痕迹,如下段代码可见http://和.com的痕迹:

启用宏后打开此文档会自动运行脚本,ProcessExplorer上可见其调用cmd.exe执行脚本命令:

该脚本首先通过dns查询若干个恶意网址,连接成功后通过http下载exe文件并运行。通过跟踪,发现其连上solvolab.com/sdB这个恶意网址,下载PE文件并运行。data chunk中可见可执行文件的PE头中的标识和字段:

下载的可执行文件会自动运行并添加到服务,名称为buildbuild:

三、下载的恶意样本分析

对下载的buildbuild.exe样本进行分析,主要功能如下:

1.搜集smartcard信息

该样本通过注册表查询smartCards信息:

逆向分析可见其存在查找4G卡的服务提供商,获取虚拟按键等较明显的搜集敏感信息的行为:

2.自写壳

该样本在PEiD中显示“查无此壳”,也没有任何语言信息,推测为不常见的壳,很有可能是自写的。

此类壳没法用工具自动脱壳,只能手脱。调试过程中发现这个壳的写法还是比较常规的思路:

1) 调用VirtualAlloc为各个区段分配内存,将加密的区段数据解密到各自对应的内存空间,并调用VirtualProtect根据区段的属性修改内存操作权限:

2) 调用LoadLibrary加载dll,调用GetProcAddress分别获取dll中目标函数地址。

3) 跳到解密后的代码执行,如下图001A1000存放的为解码后的.text区段代码:

4) 中间穿插了GetTickCount等反调试手法:

若发现处在调试状态,会通过遍历进程的方式找到并结束自身进程。进程遍历也是常规手法:

调用CreateToolhelp32Snapshot建立进程快照,通过Process32FirstW和Process32NextW进行遍历来找到当前进程,然后通过CloseHandle直接结束进程。

判断是否为当前进程的方法是在上图Call ebx函数中实现,通过调用GetCurrentProcessId获取当前进程ID,和保存的遍历到的进程ID对比,相同就说明当前遍历的进程信息为目标进程。

3.创建子进程

为干扰逆向分析,该样本在运行过程中会调用CreateProcessW创建子进程。

在内存中修改CreationFlags入参为0x00000004(CREATE_SUSPENDED),使子进程创建后自动挂起,然后直接在od中找到其进程号attach即可调试子进程。

子进程创建成功后,病毒主要功能都在子进程中进行,而父进程将退出。

以下皆为子进程中运行的功能。

4.信息收集和系统监控

样本没有自己实现该功能,而是调用了第三方动态库winimhc3.dll、winbrohc.dll、winhafnt.dll等。这些dll是 OCular Agent产品的重要组件。OCular Agent为一电脑监控软件,由SurveilStar Inc开发,数字签名为T.E.C Solutions (G.Z.)Limited,可以记录电子邮件,聊天和即时信息,网站访问,搜索历史,计划活动,文件操作等等。其动态库常被杀软识别为恶意软件。

winimhc3逆向显示很多监控的痕迹,如IMHook、枚举窗口等:

Winbrohc中实现了很多监控功能诸如文件遍历、监控应用程序数据、检索杀软、搜索数据库、修改history文件和注册表等。

调用FindFirstFileW和FindNextFileW进行文件遍历:

监控包括explorer、cmd、winword在内的多个程序:

获取磁盘信息:

获取各种浏览器和云盘中的用户信息及历史数据:

检测杀软:

监控explorer、cmd等常用程序:

获取ProcessToken,提权:

查找账户信息:

监控邮件:

5.自删除

6.自我复制

自我复制到在c:\windows\system32目录下,目的是为了后续创建服务用:

4F4句柄在OD中查知为c:\windows\system32\buildbuld.exe:

这个过程并没有直接调用kernel32的WriteFile实现,而是通过外壳函数SHFileOperationW实现,该函数最终会去调用WriteFile函数:

SHFileOperation是一种外壳函数,用它可以实现各种文件操作,如文件的拷贝、删除、移动等,该函数使用起来非常简单,它只有一个指向SHFILEOPSTRUCT结构的参数。使用SHFileOperation( )函数时只要填写该专用结构--SHFILEOPSTRUCT,告诉Windows执行什么样的操作,以及其它重要信息就行了。

7.创建服务

使用之前自我复制的c:\windows\system32\buildbuild.exe文件创建服务:

四、样本分析总结

该样本采用了很多方法干扰逆向,例如自写壳、子进程、反调试、以及调用第三方监控软件的dll等等。并且调试过程中发现该样本总是用VirtualAlloc分配内存,然后将要执行的部分代码拷入内存中执行,同时喜欢用类似call eax的函数调用手法,使得无法使用IDA等工具查看其代码逻辑,只能依靠手调。

功能比较常规,但是并没有自己实现,而是调用了第三方的监控软件中的dll,一方面功能大而全,另一方面其庞大的代码量也可以起到干扰逆向的效果。

五、防御建议

邮件攻击是非常普遍的一类网络攻击,当企业收到的攻击邮件集中于某一团队时,需要格外注意,很可能是有目的的定向攻击,需要及时预警,提醒团队加强防范,不要轻易打开邮件的附件和链接,对可疑文件进行杀毒,必要时通过沙箱进行动态行为检测。

buildbuild.exe样本MD5:

95240732d90027df7cb2c6c74804253b

*本文作者:ZInsight团队,转载请注明来自FreeBuf.COM

原文发布于微信公众号 - FreeBuf(freebuf)

原文发表时间:2018-11-12

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏IT技术精选文摘

缓存更新的套路

看到好些人在写更新缓存数据代码时,先删除缓存,然后再更新数据库,而后续的操作会把数据再装载的缓存中。然而,这个是逻辑是错误的。试想,两个并发操作,一个是更新操作...

3887
来自专栏美团技术团队

磁盘I/O那些事

背景 计算机硬件性能在过去十年间的发展普遍遵循摩尔定律,通用计算机的CPU主频早已超过3GHz,内存也进入了普及DDR4的时代。然而传统硬盘虽然在存储容量上增长...

90010
来自专栏企鹅号快讯

可编程逻辑控制器PLC

PLC代表可编程逻辑控制器。它们基本上用于控制工业中的自动化系统。它们是最先进和最简单的控制系统之一,现在正在大规模地取代硬连线逻辑继电器。 ? 在详细介绍PL...

2317
来自专栏杨建荣的学习笔记

需要了解的pssh(r11笔记第28天)

昨天的一篇文章,关于ssh命令的几个使用小技巧(r11笔记第27天),也收到了不少朋友的反馈,其中有个朋友提议说还是用pssh吧,我想想也是。 对...

3436
来自专栏影子

给Ionic写一个cordova(PhoneGap)插件

47210
来自专栏张善友的专栏

利用 Microsoft StreamInsight 控制较大数据流

原文地址:http://msdn.microsoft.com/zh-cn/magazine/hh205648.aspx 下载代码示例 生产线的产量下降后,将...

2106
来自专栏Golang语言社区

大型服务端开发的反模式技巧

1. 用线程池执行异步任务 ? 为了减少阻塞时间,加快响应速度,把无需返回结果的操作变成异步任务,用线程池来执行,这是提高性能的一种手段。 你可能要惊讶了,这么...

3575
来自专栏伪君子的梦呓

小白教程--安装和使用PyCharm 教育版

0.0 引言 昨天发现 PyCharm 有教育版,而且教育版(edu)是基于社区版(community) ,有教育相关的功能。 教育版开源免费,有无编程基础都...

7816
来自专栏Python小白进阶之旅

Python盗号原理-代码实现截屏键盘记录远程发送-不要做坏事-木马外挂学习使用

这年头盗号的从出不穷,不是脱裤就是社工钓鱼。今天呢我们就以前面的几篇技术文章做铺垫,来讲一下python盗号的原理(学习用途,请勿用于违法犯罪),知己知彼方能百...

5928
来自专栏黑白安全

iOS安全基础之钥匙串与哈希

本文最初是由Chris Lowe编写的,后来经过Ryan Ackermann(ios系统开发者)的修改,已经可以针对最新的Xcode 9.2,Swift 4,i...

1042

扫码关注云+社区

领取腾讯云代金券