05月27, 2015

数字海洋的游猎者

摘要

  • 2012年4月起,有境外黑客组织对中国政府、科研院所、海事机构、海域建设、航运企业等相关重要领域展开了有组织、有计划、有针对性的长时间不间断攻击。我们将其命名为OceanLotus(海莲花)。
  • 该组织主要通过鱼叉攻击和水坑攻击等方法,配合多种社会工程学手段进行渗透,向境内特定目标人群传播特种木马程序,秘密控制部分政府人员、外包商和行业专家的电脑系统,窃取系统中相关领域的机密资料。
  • 现已捕获OceanLotus特种木马样本100余个,感染者遍布国内29个省级行政区和境外的36个国家。其中,3%的感染者在中国。北京、天津是国内感染者最多的两个地区。
  • 为了隐蔽行踪,该组织还至少先后在6个国家注册了C2(也称C&C,是Command and Control的缩写)服务器域名35个,相关服务器IP地址19个,服务器分布在全球13个以上的不同国家。
  • 2014年2月以后,OceanLotus进入攻击活跃期,并于2014年5月发动了最大规模的一轮鱼叉攻击,大量受害者因打开带毒的邮件附件而感染特种木马。而在2014年5月、9月,以及2015年1月,该组织又对多个政府机构、科研院所和涉外企业的网站进行篡改和挂马,发动了多轮次、有针对性的水坑攻击。
  • OceanLotus先后使用了4种不同形态的特种木马。初期的OceanLotus特种木马技术并不复杂,比较容易发现和查杀。但到了2014年以后,OceanLotus特种木马开始采用包括文件伪装、随机加密和自我销毁等一系列复杂的攻击技术与安全软件进行对抗,查杀和捕捉的难度大大增加。而到了2014年11月以后,OceanLotus特种木马开始使用云控技术,攻击的危险性、不确定性与木马识别查杀的难度都大大增强。
  • OceanLotus组织的攻击周期之长(持续3年以上)、攻击目标之明确、攻击技术之复杂、社工手段之精准,都说明该组织绝非一般的民间黑客组织,而很有可能是具有国外政府支持背景的、高度组织化的、专业化的境外国家级黑客组织。

关键词:OceanLotus、APT、鱼叉攻击、水坑攻击

第一章 OceanLotus概述

2012年4月起至今,某境外黑客组织对中国政府、科研院所、海事机构、海域建设、航运企业等相关重要领域展开了有组织、有计划、有针对性的长时间不间断攻击。该组织主要通过鱼叉攻击和水坑攻击等方法,配合多种社会工程学手段进行渗透,向境内特定目标人群传播特种木马程序,秘密控制部分政府人员、外包商和行业专家的电脑系统,窃取系统中相关领域的机密资料。

根据该组织的某些攻击特点,我们将其命名为OceanLotus。

目前已经捕获的与OceanLotus相关的第一个特种木马出现在2012年4月。在此后的3年中,我们又先后捕获了与该组织相关的4种不同形态的特种木马程序样本100余个,这些木马的感染者遍布国内29个省级行政区和境外的36个国家。此外,为了隐蔽行踪,该组织还至少先后在6个国家注册了用于远程控制被感染者的C2(也称C&C,是Command and Control的缩写)服务器域名35个,相关服务器IP地址19个,服务器分布在全球13个以上的不同国家。

从OceanLotus发动攻击的历史来看,以下时间点和重大事件最值得关注:

  • 2012年4月,首次发现与该组织相关的木马。OceanLotus组织的渗透攻击就此开始。但在此后的两年左右时间里,OceanLotus并不活跃。
  • 2014年2月,OceanLotus开始通过鱼叉攻击的方法对我们国内目标发起定向攻击,OceanLotus进入活跃期,并在此后的14个月内对我国多个目标发动了不间断的持续攻击。
  • 2014年5月,OceanLotus对国内某权威海洋研究机构发动大规模鱼叉攻击,并形成了过去14个月中鱼叉攻击的最高峰。
  • 同样是在2014年5月,OceanLotus还对国内某海洋建设机构的官方网站进行了篡改和挂马,形成了第一轮规模较大的水坑攻击。
  • 2014年6月,OceanLotus开始大量向中国渔业资源相关机构团体发鱼叉攻击。
  • 2014年9月,OceanLotus针对于中国海域建设相关行业发起水坑攻击,形成了第二轮大规模水坑攻击。
  • 2014年11月,OceanLotus开始将原有特种木马大规模的更换为一种更具攻击性和隐蔽性的云控木马,并继续对我国境内目标发动攻击。
  • 2015年1月19日,OceanLotus针对中国政府某海事机构网站进行挂马攻击,第三轮大规模水坑攻击形成。
  • 2015年3月至今,OceanLotus针对更多中国政府直属机构发起攻击。

2

通过对OceanLotus组织数年活动情况的跟踪与取证,我们已经确认了大量的受害者。下图为2014年2月至今,全球每月感染OceanLotus特种木马的电脑数量趋势分布。

3

从地域分布上看,OceanLotus特种木马的境内感染者占全球感染总量的92.3%。而在境内感染者中,北京地区最多,占22.7%,天津次之,为15.5%。

4

下图为境内OceanLotus特种木马感染者数量地域分布图。

5

技术分析显示,初期的OceanLotus特种木马技术并不复杂,比较容易发现和查杀。但到了2014年以后,OceanLotus特种木马开始采用包括文件伪装、随机加密和自我销毁等一系列复杂的攻击技术与安全软件进行对抗,查杀和捕捉的难度大大增加。而到了2014年11月以后,OceanLotus特种木马开始转向云控技术,攻击的危险性、不确定性与木马识别查杀的难度都大大增强。

综合来看,OceanLotus组织的攻击周期之长(持续3年以上)、攻击目标之明确、攻击技术之复杂、社工手段之精准,都说明该组织绝非一般的民间黑客组织,而很有可能是具有国外政府支持背景的、高度组织化的、专业化的境外国家级黑客组织。

第二章 OceanLotus攻击手法

一、 攻击手法概述

OceanLotus主要使用两类攻击手法,一类是鱼叉攻击,一类是水坑攻击。 鱼叉攻击(Spear Phishing)是针对特定组织的网络欺诈行为,目的是不通过授权访问机密数据,最常见的方法是将木马程序作为电子邮件的附件发送给特定的攻击目标,并诱使目标打开附件。 水坑攻击(Water Hole)是指黑客通过分析攻击目标的网络活动规律,寻找攻击目标经常访问的网站的弱点,先攻下该网站并植入攻击代码,等待攻击目标访问该网站时实施攻击。 下图给出了OceanLotus使用鱼叉攻击和水坑攻击的基本方法。

image.png

从目前受害者遭到攻击的情况看,鱼叉攻击占58.6%,水坑攻击占41.4%。

image.png![image.png]

下图给出了因鱼叉攻击或水坑攻击而感染OceanLotus特种木马的电脑数量历史分布。从图中可以看出,鱼叉攻击的最高峰出现在2014年5月,而水坑攻击的最高峰出现在2015年1月。此外,2014年5月和2014年9月也是两个水坑攻击的高峰期。

image.png

二、 鱼叉攻击

OceanLotus组织会非常有针对性地挑选目标机构,并收集目标机构人员的邮箱信息,再通过向这些邮箱中投递恶意邮件实现定向攻击。当受害者不小心点击执行邮件附件后,电脑就会感染OceanLotus特种木马,木马与C2服务器相连接后,用户系统由此就落入OceanLotus组织的控制网络中。监测显示,从2014年2月至今,OceanLotus的鱼叉攻击始终没有停止,每个月都有新的受害者增加。

在OceanLotus用于进行鱼叉攻击的邮件中(以下简称“鱼叉邮件”),附件通常是使用Microsoft Word程序图标的.exe可执行文件,为了提高攻击的成功率,攻击者通常会采用当前热点事件或关乎用户自身利益的话题为文件名,甚至有的文件名与所攻击的目标机构看起来有密切关联,形成非常显著的定向APT攻击的特征。以下是两个具体的例子:

1)新疆乌鲁木齐暴恐事件相关鱼叉邮件

2014年5月22日,中国新疆乌鲁木齐发生了暴恐事件。而5月28日,我们就捕获到了一个名为“最新新疆暴动照片与信.jpg.exe”的钓鱼文件通过电子邮箱进行发送。

2)公务员工资改革相关内容鱼叉邮件

2014年至2015年间,中国政府出台了《公务员工资改革新方案》,该方案直接影响政府机关从业人员。中国约有700多万公务员,公务员工资改革很长一段时间内,是政府机关人员舆论的热点话题。

2014年9月9日,我们截获名为“工资制度以及特殊津贴.exe”的恶意邮件附件;2014年11月5日,我们又截获名为“工资待遇政策的通知.exe”的恶意邮件附件。在此期间,还有其他类似的恶意邮件附件被截获。而分析显示,这些邮件全部为OceanLotus组织向政府工作人员投递的鱼叉邮件。

通过不间断地对该组织的鱼叉邮件进行跟踪分析,据最近的统计数据显示,OceanLotus组织最常使用的附件存在一定的规律:邮件内容和附件的命名与海洋相关企事业机构建设、海洋资源、中国的党政机关、科研院所等密切关联,部分文件列表如下(有关机构名称及敏感内容用“*”代替):

image.png

一些特种木马的恶意样本之所以会使用很长的文件名,一个重要的原因是利用Windows的文件名显示机制使文件后缀“.exe”不会自动被显示出来。所以,对于绝大多数文件接受者来说,即使电脑系统设置为显示文件后缀名,也很有可能因为文件名过长而使文件后缀名不能正常显示。

统计还显示,OceanLotus发动的鱼叉攻击也具有很强的时间性和周期性。在一周7天中,工作日,即星期一至星期五截获的鱼叉攻击数量较多,而周末截获的鱼叉攻击数量则往往不及工作日的1/5。

image.png

三、 水坑攻击

OceanLotus组织在设置水坑时,主要采用两类方式:一是入侵与目标相关的Web应用系统,替换正常文件或引诱下载伪造的正常应用升级包,以实现在目标用户系统上执行恶意代码的目的;二是入侵与目标相关的Web应用系统后,篡改其中链接,使其指向OceanLotus设置的恶意网址,并在指向的恶意网址上设置木马下载链接。

为了避免暴露,OceanLotus发动水坑攻击的持续周期一般很短,通常是在3-5天之内,几天之后攻击完成,OceanLotus就会将篡改的内容删除或恢复,将设置的水坑陷阱填平。因此,通常来说,想要事后复原水坑攻击的现场比较困难。。 下面是通过技术手段恢复的两个OceanLotus组织设置的典型水坑案例。

1) 水坑A

OceanLotus组织首先通过渗透入侵的攻击方式非法获得某机构的文档交流服务器的控制权,接着,在服务器后台对网站上的“即时通”和“证书驱动”两款软件的正常安装文件捆绑了自己的木马程序,之后,当有用户下载并安装即时通或证书驱动软件时,木马就有机会得到执行。攻击者还在被篡改的服务器页面中插入了恶意的脚本代码,用户访问网站时,会弹出提示更新Flash软件,但实际提供的是伪装成Flash升级包的恶意程序,用户如果不慎下载执行就会中招。

下图为用户访问该水坑站点时,攻击者的JS代码生成的提示用户下载执行伪造Flash升级包的页面。

image.png

该组织的专业之处还体现在,水坑攻击会识别访问来源的操作系统平台,并根据客户端返回的系统信息,返回针对不同平台的恶意代码。在Windows平台下我们使用不同的浏览器访问该页面都会提示下载名为“install_flashplayer.exe”的更新文件;当操作系统为Mac OS时,水坑则向Safari浏览器推送能在MAC OS环境中运行的恶意更新程序“install_flashplayer_mac.zip”。

2) 水坑B

被入侵的网站是一个政府站点,主要面向海洋相关研究类人员、专家提供文献下载、研究项目发稿和相关时事通告等功能。OceanLotus组织入侵网站以后修改了网站的程序,在用户访问公告信息时会被重定向到一个攻击者控制的网站,提示下载某个看起来是新闻的文件,比如在新疆522暴恐事件的第二天网站就提示和暴恐事件相关的新闻,并提供“乌鲁木齐7时50分发生爆炸致多人伤亡.rar”压缩包给用户下载,而该压缩包文件内含的就是OceanLotus组织的特种木马。 在该政府网站上,当用户点击某个通告链接时会提示文件下载,如下图:

image.png

提示框中的download.mail-attach.net为组织控制的服务器,将下载的“乌鲁木齐7时50分发生爆炸致多人伤亡.rar”压缩包文件解压后,可以看到文件夹内包含显示为JPG图片图标的exe可执行文件。若此时目标用户点击该文件,系统就会被感染。如下为部分下载回来的文件列表:

image.png

与此同时,在该服务器水坑文件同级目录下还发现存放了部分用于鱼叉攻击的恶意代码,证实了这起水坑攻击与之前提及的鱼叉攻击为同一组织发起。如下是部分文件列表:

image.png

通过对该组织水坑式攻击手法的跟踪分析,发现该组织如果有机会入侵与目标相关的服务器,就会尽可能替换服务器上可能被下载的正常程序,诱骗用户下载并执行伪造的应用升级包。

下表为部分水坑服务器中出现的恶意文件:

文件名 文件MD5
install_flashplayer.exe 7e68371ba3a988ff88e0fb54e2507f0d
rtx.exe 0529b1d393f405bc2b2b33709dd57153
sinopec.exe 9fea62c042a8eda1d3f5ae54bad1e959
报表插件安装程序.exe 486bb089b22998ec2560afa59008eafa
USBDeview.exe b778d0de33b66ffdaaf76ba01e7c5b7b
DSC00229.exe 53e5718adf6f5feb2e3bb3396a229ba8
install_flashplayer13x37.exe d39edc7922054a0f14a5b000a28e3329
NetcaEKeyClient.exe 41bced8c65c5822d43cadad7d1dc49fd

从目前截获OceanLotus发动的水坑攻击的情况来看,每周的周一和周二感染者数量最多。分析认为,这可能是因为攻击者认真研究了政府和科研机构等工作人员的上网习惯。由于水坑攻击容易将组织信息泄漏,因此,OceanLotus每发动一次水坑攻击的周期一般都不会超过3天。而如果要使3天的攻击更加有效,就需要考虑攻击目标会在一周中的哪些天更容易访问水坑网站。由于中国政府和研究机构的工作人员往往有在星期一、二登录办公系统查询重大内部新闻和通知的习惯,所以在一周的前两天发动水坑攻击,效果相对更好。

image.png

四、 域名变换

为了隐藏自己的真实身份,OceanLotus组织经常变换下载服务器和C2服务器的域名和IP。统计显示,在过去的3年中,该组织至少使用了C2服务器域名35个,相关服务器IP地址19个。而且大多数域名为了抵抗溯源都开启了Whois域名隐藏,使得分析人员很难知道恶意域名背后的注册者是谁。下图给出了OceanLotus注册各个域名时间点信息。

image.png

通过对攻击活动相关域名的统计,我们按注册时间的先后顺序对各个域名做了排序。时间线疏密程度显示该组织在2014年2月至2014年4月申请了大量的新域名。域名的生命周期如下图所示:

image.png

这些恶意域名的注册地和服务器也分布在世界各地。从注册地来看,最大的注册地是巴哈马10个,其次是美国4个,尼日利亚3个。从服务器实际所在地来看,美国和乌克兰最多,各5个,其次是瑞典4个,以色列3个。

image.png

按时间先后顺序排列,部分较活跃的域名详情如下:

域名 绑定IP 注册时间 用途
pad.werzo.net 185.29.8.39 2012/4/17 C2,Mac OS
shop.ownpro.net 185.29.8.39 2012/4/17 C2,Mac OS
ssl.sfashi.com 176.31.22.77 2012/11/7 C2
kiifd.pozon7.net 173.208.157.117 2013/1/8 C2,Mac OS
cdn.libjs.co 62.113.238.135 2013/9/6 C2
sin04s01.listpaz.com 193.169.244.73 2013/11/12 C2
high.expbas.net 91.229.77.179 2014/1/22 C2
img.fanspeed.net 2014/2/8 C2
active.soariz.com 193.169.244.73 2014/2/20 C2
zone.mizove.com 193.169.244.73 2014/2/20 C2
dc.jaomao69.info 146.0.43.107 2014/3/14 Downloader
cdn.jaomao69.info 146.0.43.107 2014/3/14 C2
download.mail-attach.net 2014/4/2 Downloader
cnf.flashads.org 128.127.106.243 2014/4/3 钓鱼服务器
cn.flashads.org 128.127.106.243 2014/4/3 钓鱼服务&Downloader& DNS
cv.flashads.org 128.127.106.243 2014/4/3 钓鱼服务器
cp.flashads.org 128.127.106.243 2014/4/3 钓鱼服务器
fpdownload.shockwave.flashads.org 128.127.106.243 2014/4/3 Downloader
authen.mail.hairunaw.com.l.main.userapp.org 192.187.120.45 2014/4/8 Downloader
jsquery.net 64.62.174.176 2014/4/8 C2
gs.kroger7.net 167.114.184.117 2014/5/16 C2
autoupdate.adobe.com 通过域名劫持伪造的Adobe子域名,用于绕过安全检查措施,更新受感染系统上的恶意程序

第三章 特种木马技术

从具体的攻击技术来看,OceanLotus先后使用过4种主要形态的特种木马。其中有3种为Windows木马,一种为MAC系统木马。虽然这4种形态的木马均是以窃取感染目标电脑中的机密数据为目的,但从攻击原理和攻击方式来看,却有着很大的区别。特别是针对Windows系统的3种特种木马形态,其出现时间有先有后,危险程度不断升级,攻击方式从简单到复杂,从本地到云控,可以让我们清楚的看到该组织木马技术的发展脉络和攻击思路不断转变。

根据这4种木马形态的攻击特点,我们将其分别命名为:OceanLotus Tester,OceanLotus Encryptor,OceanLotus Cloudrunner,OceanLotus MAC。

下面就针对OceanLotus特种木马的4种基本形态逐一进行技术分析。

一、 OceanLotus Tester

OceanLotus Tester最早被捕获于2012年,是一种比较简单的木马,与民用领域所见的一般间谍程序差别不大,安全软件也能够比较容易的识别出来。从历史监测数据来看,Tester的感染量微乎其微,在早期被捕获以后长期处于不活跃的状态,在当时属于孤立出现的木马样本。

但是,在我们对OceanLotus特种木马的其他几个形态进行关联性分析时发现,早期出现的Tester木马在攻击对象、文件伪装特征、连接的C2服务器域名和窃取文件的特征等方面,与后来捕获的其他3种木马形态的样本存在诸多交集和共同点。我们因此判定,早期的Tester木马样本也属于OceanLotus这个组织所有。

我们猜测,Tester可能并不是OceanLotus组织正式使用的数字武器,而很有可能仅仅是该组织成立初期,用以进行模拟攻击演练以确定攻击体系可行性时所使用的一些测试代码。

二、 OceanLotus Encryptor

Encryptor木马最早被截获于2014年2月。当时,安全人员截获了一批将自身图标伪装成Word文档或JPG文档的“.exe”文件,而且这些文件都还取了一些颇具迷惑性的社工类文件名。如下图就是Encryptor木马的某个样本伪装成文件名为“商量好的合同”的Word文档后,查看文件属性时的截图。其实仔细观看不难发现,文件的真实类型是应用程序(.exe)。

image.png

Encryptor木马的主要作用是打包和向C2服务器上传电脑中存在的各种Office文档,包括Word、PPT、Outlook文件等。而从攻击技术上来看,Encryptor木马最明显的特点就是会对自己的数据区进行随机递归加密处理,从而大大增加安全软件对其进行识别的难度。

一旦有人下载并打开了Encryptor木马文件,这个木马就会通过以下一系列复杂的过程来进行自我释放。下面以伪装成Word文档的某个样本为例进行分析。

1) 释放Word文档

木马会首先释放出一个文件内容与文件名相符的Word文档,并在桌面上生成快捷方式。这一步的目的是迷惑受害者,使其在打开文件的过程中完全感觉不到异常的存在,以为自己真的只是打开了一个Word文档而已。

2) 释放加密代码

木马程序会随机生成一个64位的密钥,并使用这个密钥对自身代码中的特定部分进行加密,之后把经过加密的代码文件保存在系统的temp目录下,并将加密代码的文件名后缀写为.tmp(以下简称该文件为tmp文件)。而实际上,这个tmp文件一旦运行起来,就会释放出真正的木马程序。

这一步骤是特种木马对抗杀毒软件的重要环节。因为能够最终释放木马程序的tmp文件经过了64位随机加密,就使得安全软件即使发现了系统临时文件夹temp中有新增的程序文件,也无法解密这个文件,无法判断这个文件是不是木马。

3) 解密加密代码

木马通过传递参数(--ping+木马路径+\t+64位密钥),将tmp文件运行起来,运行起来的tmp文件会通过传递过来的正确密钥对之前加密的代码进行解密,并释放出2个实际执行的木马文件qq.exe(加载器)和Bundle.rdb(木马通信模块)。

4) 自我删除

木马一旦释放出了tmp文件并将解码参数传给tmp文件,就会立即将自身从系统中彻底删除。这也是木马程序对抗安全软件、躲避追踪的一个重要手法。因为安全软件如果想要追踪或查杀这个木马,就必须得到该木马的原始文件样本。木马将自身删除后,安全软件就很难捕获到这个木马的样本。 特别需要说明的是,虽然木马生成的tmp文件会一直保存在系统中,但由于tmp文件是经过随机加密的,因此,即使是同一个Encryptor木马,每次运行生成的tmp文件也都是不同的。所以,我们无法将捕获的tmp文件作为木马病毒的样本进行分析。

5) 运行加载

qq.exe 程序会用2种方法尝试加载木马通信模块Bundle.rdb:自身加载或注入到一个系统进程,而Bundle.rdb木马模块一旦加载起来,就会和控制端通信完成C2通道的建立。

qq.exe这个程序也经过了一些精心的伪装。单独看其文件属性,稍不注意也会以为它就是QQ软件。下图是木马创建的指向qq.exe的计划任务属性的截图。

image.png

整个木马的加载过程,实际上就是一个木马与安全软件进行对抗的过程。不过,除了上述内容外,Encryptor还采用了填充垃圾数据的方法与安全软件进行对抗。例如用0x00或其它随机字符填充了十几M的文件内容,使得文件体积过大,从而避免样本被云系统上传,如下图所示。

image.png

三、 OceanLotus Cloudrunner

Cloudrunner木马最早被截获于2014年11月。完全不同于之前Encryptor木马,Cloudrunner木马只是一个体量很小的可执行文件,木马本身不显现任何恶意特征,在完成初始的感染以后但却会自动的从指定的服务器上下载其他木马程序到被感染的电脑上。这种攻击方式具有明显的云控特点。攻击者可以根据不同的需要,向被感染电脑上发送各种不同的木马,从而使攻击更加隐蔽,也更具危险性。下图为查看该类木马文件的属性截图。

image.png

下面以某个样本为例,说明Cloudrunner木马具体执行过程。

1) 创建互斥体

样本程序得到执行以后,会创建名字为“9N557T5926632kM8BT8Mj9325k2N6R”的互斥体。

2) 解密执行Shellcode

重新创建自身进程,从自身文件固定偏移处读取加密后的Shellcode,和0x15异或解密后,直接执行Shellcode。

3) 下载云端木马

Shellcode会动态获取用到的API地址,通过Windows的Internet类函数,从http://dc.jaomao69.info/jUFF 下载加密后的数据,解密生成一个待加载的dll。

4) 执行下载的木马

解密后的dll文件会在木马进程空间中加载起来,把该dll内部资源包括的另外一个dll注入到新启动的rundll32进程中。被注入到rundll32的木马模块在rundll32进程里加载起来,和控制端通信完成C2通道的建立。 从木马特点上来看,此木马采用了Shellcode加密,解密执行,然后从网络下载接收第二阶段的木马功能模块,使木马在用户系统上的痕迹尽可能最小化,以逃避防恶意代码工具的查杀,并实现类似云控制的灵活性。具体的信息收集及其他恶意操作以插件的方式投放到受感染系统上执行,功能包含如下表所列:

上传类别 具体内容
即时通信记录 Yahoo、QQ、Skype等
邮件数据 ThunderBird、Foxmail、Mailease、MS Live、Outlook
文件信息 安装程序、近期访问、驱动器目录
系统信息 账户、IP、共享、进程列表、网络连接
屏幕监控
网络流量监视

关于OceanLotus Encryptor和OceanLotus Cloudrunner的详细代码分析,请见“附录2 特种木马代码详解”。

四、 OceanLotus MAC

OceanLotus MAC与OceanLotus Encryptor大致出现在同一时期,二者都属于OceanLotus使用的第二代木马程序。MAC木马主要针对Mac OS系统,主要用于在水坑网站中诱骗用户下载执行。在APT攻击中,使用针对苹果操作系统的木马,并不多见。

下面以某个样本为例来具体介绍MAC木马的攻击过程。

例子样本MD5:9831A7BFCF595351206A2EA5679FA65E 文件FlashUpdate.app\Contents\MacOS\EmptyApplication是一个Loader,负责解密以下两个文件:

FlashUpdate.app\Contents\Resources\en.lproj.en_icon

FlashUpdate.app\Contents\Resources\en.lproj.DS_Stores

.en_icon相当于木马自身的副本,.DS_Stores是真正的执行体,解密并执行完这两个文件后,EmptyApplication会删除自身。

.DS_Stores程序会连接如下3个C2服务器域名:kiifd.pozon7.net,pad.werzo.net,shop.ownpro.net,并实现如下一系列的远程控制功能:

功能 命令
列目录 ls [path]
进入目录 cd [path]
获取当前目录 pwd
删除文件 rm <file_path>
复制文件 cp
移动文件 mv
获取进程信息 p {info:pid \ ppid \ name}
杀掉进程 kill
执行命令 cmd

抓取通信 capture <saved_path> 显示文件| cat path [num_byte] 下载文件| download fromURLsavePath

MAC木马也具有较强对抗能力,具体包括以下几个方面:

1) 对其自身做了非常强的加密,分析时需要进行手工解密。

2) 木马会修改苹果浏览器的安全属性,使下载的程序直接运行而没有安全风险提示。

3) 木马会定时使用/bin/launchctl上传操作。

4) 木马会读取操作系统的版本。

5) 木马会检测Parallels虚拟机。

第四章 OceanLotus能力分析

通过对OceanLotus组织所使用的恶意代码、攻击载荷和诱饵数据的分析,该组织内部可能有多个小组,每个小组有自己的分工。组织中各组可能针对性的收集社工信息、开发定制的工具以及对窃取的情报进行集中二次处理挖掘,各个环节紧密配合,并在其内部共享窃取的情报信息和攻击载荷。概括来说,要达到目前已知的攻击效果,该组织至少应该具备如下能力:

1) 精通目标国家的语言,跟踪相关的新闻时事;识别和分析需要进行攻击的目标人员,收集其相关的基本信息,确定攻击目标人员,设计针对性的攻击方式。

2) 网络渗透和入侵能力,投递鱼叉邮件,设置水坑,抽取敏感数据,保持长期控制。

3) 能够开发或者获取绕过当前主流防病毒工具的特种木马,持续改进和对抗。

对应到以上的3种能力,我们推测OceanLotus组织很可能存在3个小组,其基本能力及任务分工大致如下:

image.png

此外,考虑到OceanLotus组织制作的特种木马大多使用中文名称,而且往往紧贴中国国内最新时政变化,所以,该组织中一定有精通中文、了解中国国情的人专门从事有针对性的社会工程学研究。  

第五章 OceanLotus攻击的捕获

随着“互联网+”时代的到来,越来越多的政府机构和企事业单位实现了网络化办公,并将内部的办公网络与外部的互联网相连。企业的互联网化在提高企业办公效率的同时,也使内部网络面临着越来越多的来自全球各地不同目的攻击者的网络攻击。

事实上,针对政府、机构和企业的APT攻击每天都在发生,甚至可以说,APT攻击就潜藏在我们每一个人的身边。OceanLotus也只不过是我们目前已经捕获到的数十起APT事件中的一个典型案例而已。

目前,已经有一些国际知名的安全企业,如FireEye、卡巴斯基等针对APT攻击展开了相关研究,并发布了相关的研究报告。而在国内,关于APT攻击的专业研究资料目前还非常有限。

造成这种状况的原因之一,是APT攻击具有很强的隐蔽性、针对性和对抗性特点,使用一般民用防御手段和木马查杀技术很难发现。针对APT攻击的捕获和检测技术也成为了近年来国内外安全公司和研究机构关注的焦点。

360 APT团队借助360公司多年在木马病毒、漏洞攻击的对抗过程中积累的经验,针对特种木马、0day/Nday漏洞攻击的检测和对抗等方面都进行了大量的探索和实践,使得运用这些特种木马或漏洞进行的APT攻击在我们的系统中现形。

当然,除了针对特定的高级APT攻击过程的检测和防御外,目前捕获和研究APT攻击还面临着一个更大的挑战:如何将不同时间、不同地点、不同人群遭到的各种不同形式的网络攻击事件关联起来,形成一个APT攻击的全貌。目前国外关于APT攻击的研究也大多集中在对个别目标实体的、短周期攻击过程的研究上,很少有机构能够进行较大时间尺度和较大地域范围内的APT攻击研究。

OceanLotus所发动的APT攻击,攻击周期长达3年之久,攻击地域遍布国内29个省级行政区和境外的36个国家,鱼叉攻击、水坑攻击,前后不下几十个轮次,被黑网站也多达十几个。而且在这3年多的时间里,OceanLotus还先后使用了至少4种不同程序形态、不同编码风格和不同攻击原理的木马程序,恶意服务器遍布全球13个国家,注册的已知域名多达35个。

因此,对于OceanLotus发动的这种范围大、时间长,但目的明确、目标精准的APT攻击,如果单独依靠传统的各种局部检测与防御技术,即便能够发现一些零星的攻击事件和病毒样本,也很难复原整个APT攻击的全貌。 360 APT团队此次捕获的OceanLotus组织及其攻击,主要使用了多维度大数据关联分析的方法。我们将百亿级的恶意程序样本库、数亿级的安全终端的防护数据、PB级的搜索引擎的全网抓取数据以及其他多个维度的互联网大数据进行了关联分析和历史检索,最终在每天海量的网络攻击事件中定位出与OceanLotus相关的各种攻击事件和攻击元素,最终绘制出OceanLotus组织对我国境内目标发动APT攻击的全貌。

目前,能够在实践中使用大数据方法分析定位APT攻击的研究机构并不多,同时,具有互联网大数据的处理与分析能力和高级攻防对抗经验的安全企业寥寥。360 APT团队针对未知威胁和APT攻击的研究是建立在360公司多年积累的安全大数据和互联网安全技术方法的基础之上的,因此能够捕获一些以往国内外其他研究者无法发现的威胁元素,并进行事件关联分析。我们也希望能够通过这种新的基于大数据的互联网安全研究成果,给其他网络安全工作者提供一些有益的参考和帮助。  

附录1 IOC

一、 恶意样本MD5

文件MD5 启动文件路径
dfca5127134f7198d7cf4fccdafdc7e9 %userprofile%\appdata\roaming\tencent\qq\qq.exe
ed501e21e62359ffd6f4d8ca42e66e59 %userprofile%\appdata\roaming\tencent\qq\qq.exe
ee24c12698de35c9d3594264bc2c2829 %userprofile%\appdata\roaming\tencent\qq\qq.exe
4df81f3e8db3ea27caedfbc52961a3a2 %userprofile%\appdata\roaming\tencent\qq\qq.exe
3290625d0f238950f353272a787cb0e9 %userprofile%\appdata\roaming\tencent\qq\qq.exe
6de3c7a74dbf857290fd92a4339f7836 %userprofile%\appdata\roaming\tencent\qq\qq.exe
39c3cb43aa0b30c1858f95f2895e4e8b %userprofile%\appdata\roaming\tencent\qq\qq.exe
274da4692bb28a302f2a7dfbdecc92bb %userprofile%\appdata\roaming\tencent\qq\qq.exe
5011856ebf6759962b6f580e9f1ad322 %userprofile%\appdata\roaming\tencent\qq\qq.exe
2b4d52c859cf6668dd75a5cfea99e7a9 %userprofile%\appdata\roaming\tencent\qq\qq.exe
19b5c6f2ed567ea6a89511f0aea1f3aa %userprofile%\appdata\roaming\tencent\qq\qq.exe
32b430240e6cc8ad4632c19c92bffe37 %userprofile%\appdata\roaming\tencent\qq\qq.exe
676c81ab9ce7970a42fc8dd692c465c5 %userprofile%\appdata\roaming\tencent\qq\qq.exe
416cfb90303f7015f613d22edd14b9d2 %userprofile%\appdata\roaming\tencent\qq\qq.exe
0c3355c2c7f75dc4793525a3d7aa1bbb %userprofile%\appdata\roaming\tencent\qq\qq.exe
38d4c60b8a4deccd1b507a5f0b7b40eb %userprofile%\appdata\roaming\tencent\qq\qq.exe
2508b86efb31fa63ba48ec3cc1508e18 %userprofile%\appdata\roaming\tencent\qq\qq.exe
6b367b82e9bd27770a2a01320d778b26 %userprofile%\appdata\roaming\tencent\qq\qq.exe
29c751356a631eac4a553acb7e2c414e %userprofile%\appdata\roaming\tencent\qq\qq.exe
445ed2d8c51a78fcee75c77641dbb021 %userprofile%\appdata\roaming\tencent\qq\qq.exe
3743d1c0b71d231463a5666ca28e9f4b %userprofile%\appdata\roaming\tencent\qq\qq.exe
4734074d0bf21c62db0751251a3abeed %userprofile%\appdata\roaming\tencent\qq\qq.exe
0bf5190137399d943f3f92e24e9d970f %userprofile%\appdata\roaming\tencent\qq\qq.exe
6c149dd9e472f8e7f68d1f8771ab74d7 %userprofile%\appdata\roaming\tencent\qq\qq.exe
4fc19b5d80cbbbeb5374ea14eac27d45 %userprofile%\appdata\roaming\tencent\qq\qq.exe
2cccf3bdaccc6295062a62812af1adeb %userprofile%\appdata\roaming\tencent\qq\qq.exe
15e2bbafd4ecface1d78b06ab9b1331d %userprofile%\appdata\roaming\tencent\qq\qq.exe
62820f4f4a6e91529ac9b76322decff5 %userprofile%\appdata\roaming\tencent\qq\qq.exe
2a27610be3cf2631d438af505f366fa3 %userprofile%\appdata\roaming\tencent\qq\qq.exe
2e63e1f0f5d33408ee9c2fd1dd1c3fb7 %userprofile%\appdata\roaming\tencent\qq\qq.exe
1039415a93bf1fbe81a72b50dd47179c %userprofile%\appdata\roaming\tencent\qq\qq.exe
1d1d977311678770df3dad53a78072f5 %userprofile%\appdata\roaming\tencent\qq\qq.exe
4bc2263063cf119e6532db08b257dee8 %userprofile%\appdata\roaming\tencent\qq\qq.exe
6f026548b4f5d695ebaba1f9baa39743 %userprofile%\appdata\roaming\tencent\qq\qq.exe
40a9c6df09e5ae3bcc2f0ad8c86a1990 %userprofile%\appdata\roaming\tencent\qq\qq.exe
071528cc2401b8abdc878d609a8e60d5 %userprofile%25%5Cappdata%5Croaming%5Ctencent%5Cqq%5Cqq.exe
8173a28d6f4ac5aeb150321a6ebc9c0f %userprofile%\appdata\roaming\tencent\qq\plugin\com.tencent.directshow\bundle.rdb
f099636a101e65a1447ce88028acefd7 %userprofile%\appdata\roaming\tencent\qq\plugin\com.tencent.directshow\bundle.rdb
06306e6a66c41c42e8a480d6c014a5b9 %userprofile%\appdata\roaming\tencent\qq\plugin\com.tencent.directshow\bundle.rdb
8173a28d6f4ac5aeb150321a6ebc9c0f %userprofile%\appdata\roaming\tencent\qq\plugin\com.tencent.directshow\bundle.rdb
9d68eb143708f7c05222afead62d2c7a %userprofile%\appdata\roaming\tencent\qq\plugin\com.tencent.directshow\bundle.rdb
5396cace6655f7dd4033a4a559e693c0 %userprofile%\appdata\roaming\tencent\qq\plugin\com.tencent.directshow\bundle.rdb
05a08c3d6cf0855d16372c197424d824 %userprofile%\appdata\roaming\tencent\qq\plugin\com.tencent.directshow\bundle.rdb
8f5ab998f6830f452f4ecc916d4d0f88 %userprofile%\appdata\roaming\tencent\qq\plugin\com.tencent.directshow\bundle.rdb
d5e9efe375e94a2b8ae02281993c74c7 %userprofile%\appdata\roaming\tencent\qq\plugin\com.tencent.directshow\bundle.rdb
8d72bbc978243516d94ab3a250cfbe2a %userprofile%\appdata\roaming\tencent\qq\plugin\com.tencent.directshow\bundle.rdb

二、 恶意域名

  • download.mail-attach.net
  • mokkha.goongnam.com
  • fpdownload.shockwave.flashads.org
  • cn.flashads.org
  • active.soariz.com
  • google-service.com
  • sin04s01.listpaz.com
  • cv.flashads.org
  • 24.datatimes.org
  • userapp.org
  • push.relasign.org
  • ese.hackermind.info
  • seri.volveri.net
  • hn.hackermind.info
  • cp.flashads.org
  • cdn.libjs.co
  • autoupdate.adobe.com
  • dc.jaomao69.info
  • googl-mail.com
  • cdn.jaomao69.info
  • ebenezermelbourne.com
  • economy.bloghop.org
  • billy.hackermind.info
  • emp.gapte.name
  • kiifd.pozon7.net
  • high.expbas.net
  • shop.ownpro.net
  • img.fanspeed.net
  • pad.werzo.net
  • kroger7.net
  • zone.mizove.com
  • hysalt.net
  • high.vphelp.net
  • cnf.flashads.org
  • ming.chujong.com

三、 恶意IP

  • 146.0.43.107
  • 179.43.146.203
  • 193.169.244.73
  • 191.101.22.4
  • 176.31.22.77

附录2 特种木马代码详解

一、 OceanLotus Encryptor

样本MD5: 70ca42bb9c3b6e49663fc532833874c3

执行细节

木马判断命令行参数是否有“—ping”,如果没有“—ping”,说明是用户自己点开的,就执行安装木马的流程,会先尝试开启Schedule的服务,然后获得temp文件夹的路径。

image.png

生成0x40个字节的密钥,用来加密自身资源文件:

image.png

把获取到的密钥转化为HEX为下次所用,然后加密资源里的数据区段。

image.png

进入这个加密函数可以看到其在读取自身,把读取到的数据放入缓冲区。

image.png

从特定的位置用0x40长的密钥对数据进行加密,执行加密的第一个函数,加密的内容是0x12345678,这是一个标志,用于解密时验证密码和数据的正确性,是否可以开始下面的操作。

image.png

把加密后的数据做修改,写入到temp文件里,temp文件路径为:%temp%/2c.tmp[文件名是随机的2字节],下面通称此文件为temp文件。

image.png

传递参数“—ping+【运行的文件全路径】+【\t】 + 密钥”,执行起来temp文件。

image.png

如果命令行参数里带有“—ping”字段,执行下面的流程,就是temp运行起来的时候,执行这个函数。

image.png

释放资源里的加密好的docx文件,解密成docx文件,放到运行木马的目录,docx的名字和木马的名字一样,然后通过API:ShellExectue打开docx文件,让用户感觉一切正常。

image.png

image.png

得到刚才传递的密钥,开始解密过程:

image.png

image.png

判断解密后这个位置的值是不是等于0x12345678 如果是的话说明这次解密的数据和密钥是匹配的,然后执行下面的释放恶意代码的流程。

image.png

进入释放木马文件的操作:

image.png

开始释放解密后数据,写成“qq.exe”文件作为伪装,释放的路径为“%Applation Data%\Tencent\QQ\qq.exe”,这文件其实就是一个loader。

image.png

开始释放木马dll文件,文件路径为: “%Applation Data%\Tencent\QQ\Plugin\Com.Tencent.DriectShow\Bundle.rdb”

木马代码都在这里面。

image.png

如果有2个字节的进程,就运行起来“qq.exe”,执行起来木马,然后创建计划任务,指向“qq.exe”。

image.png

image.png

木马安装的过程到此结束。

“qq.exe”的功能主要是提权后从注册表读取木马dll的路径,通过判断传递过来的命令行参数,判断是注入进程启动或者是自身LoadLibrary启动木马dll程序。

image.png

Dllmain直接创建工作的线程,执行木马的通信。

image.png

通过字符串拼出上线域名,提取样本中的域名如下: zone.mizove.com

sin04s01.listpaz.com

active.soariz.com

拼串相关的代码如下:

image.png

连接成功任何一个域名,进入关键函数,开始进行木马通信。

image.png

连接完成以后客户端会接收并执行命令,主要功能是根据接收到的头部的168字节中偏移第60-64字节的内容决定。主要功能如下表,有些指令的功能的函数都是动态调用的,会动态地从服务端获取数据。已知的一些指令字对应的功能如下:

4字节指令 执行的功能
0xB58D7 创建目录
0x54A1A 获取电脑的基本信息发送出去
0xB592A 删除文件
0xB8237 结束指定进程
0xB3F0A 传输文件到控制端
0xB4052 从主控端下载文件到服务端
0x7B572 枚举注册表键值
0x793D3 获取指定的注册表内容
0x7B135 设置注册表内容
0x54A1A 获取电脑的基本信息发送出去
0xB4092 获取文件列表
0xB3B46 加载插件注入进程

相关的代码:

image.png

木马使用一种自定义的协议格式进行控制端与受控端的通信。示例:如下。

image.png

受控端到控制端的回应示例:

image.png

二、 OceanLotus Cloudrunner

例子样本MD5:3b6ba05d5d0f236cf0867f1d7fe1a25e

执行细节

样本会创建一个名字为"9N557T5926632kM8BT8Mj9325k2N6R"的互斥体,如果Windows系统中不存在这个互斥体的话,就会再次运行起来自己。

image.png

如果是第一次运行的话,就会再次启动自己。

image.png

自身运行起来后,会进入加载Shellcode的流程,从文件固定偏移取到数据与0x15异或解密开执行。

image.png

Shellcode动态获取用到的API的地址。

image.png

通过InternetOpenA连接dc.jaomao69.info,如果返回失败,则直接退出。

image.png

image.png

样本成功连接C&C服务器以后会从http://dc.jaomao69.info/jUFF这个URL下载下来加密后的数据。

image.png

分配可执行的空间,解密后直接执行代码。

image.png

把解密下载下来的数据后,确认是一个dll,其导出模块名是inject_dll.dll,用于注入。

image.png

这个dll会通过创建rundll32进程,把该dll资源里包含的另外一个dll注入到rundll32进程里。

image.png

被注入的dll,是一个功能较全面的木马,其入口函数。

image.png

如下代码获取上线信息。

image.png

木马的接收消息循环函数,用于处理来自控制端的命令,采用HTTP隧道进行通信。

image.png

本文链接:http://blogs.360.cn/post/oceanlotus-apt.html

-- EOF --