摘要
- 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针对更多中国政府直属机构发起攻击。
通过对OceanLotus组织数年活动情况的跟踪与取证,我们已经确认了大量的受害者。下图为2014年2月至今,全球每月感染OceanLotus特种木马的电脑数量趋势分布。
从地域分布上看,OceanLotus特种木马的境内感染者占全球感染总量的92.3%。而在境内感染者中,北京地区最多,占22.7%,天津次之,为15.5%。
下图为境内OceanLotus特种木马感染者数量地域分布图。
技术分析显示,初期的OceanLotus特种木马技术并不复杂,比较容易发现和查杀。但到了2014年以后,OceanLotus特种木马开始采用包括文件伪装、随机加密和自我销毁等一系列复杂的攻击技术与安全软件进行对抗,查杀和捕捉的难度大大增加。而到了2014年11月以后,OceanLotus特种木马开始转向云控技术,攻击的危险性、不确定性与木马识别查杀的难度都大大增强。
综合来看,OceanLotus组织的攻击周期之长(持续3年以上)、攻击目标之明确、攻击技术之复杂、社工手段之精准,都说明该组织绝非一般的民间黑客组织,而很有可能是具有国外政府支持背景的、高度组织化的、专业化的境外国家级黑客组织。
第二章 OceanLotus攻击手法
一、 攻击手法概述
OceanLotus主要使用两类攻击手法,一类是鱼叉攻击,一类是水坑攻击。 鱼叉攻击(Spear Phishing)是针对特定组织的网络欺诈行为,目的是不通过授权访问机密数据,最常见的方法是将木马程序作为电子邮件的附件发送给特定的攻击目标,并诱使目标打开附件。 水坑攻击(Water Hole)是指黑客通过分析攻击目标的网络活动规律,寻找攻击目标经常访问的网站的弱点,先攻下该网站并植入攻击代码,等待攻击目标访问该网站时实施攻击。 下图给出了OceanLotus使用鱼叉攻击和水坑攻击的基本方法。
从目前受害者遭到攻击的情况看,鱼叉攻击占58.6%,水坑攻击占41.4%。
![image.png]
下图给出了因鱼叉攻击或水坑攻击而感染OceanLotus特种木马的电脑数量历史分布。从图中可以看出,鱼叉攻击的最高峰出现在2014年5月,而水坑攻击的最高峰出现在2015年1月。此外,2014年5月和2014年9月也是两个水坑攻击的高峰期。
二、 鱼叉攻击
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组织最常使用的附件存在一定的规律:邮件内容和附件的命名与海洋相关企事业机构建设、海洋资源、中国的党政机关、科研院所等密切关联,部分文件列表如下(有关机构名称及敏感内容用“*”代替):
一些特种木马的恶意样本之所以会使用很长的文件名,一个重要的原因是利用Windows的文件名显示机制使文件后缀“.exe”不会自动被显示出来。所以,对于绝大多数文件接受者来说,即使电脑系统设置为显示文件后缀名,也很有可能因为文件名过长而使文件后缀名不能正常显示。
统计还显示,OceanLotus发动的鱼叉攻击也具有很强的时间性和周期性。在一周7天中,工作日,即星期一至星期五截获的鱼叉攻击数量较多,而周末截获的鱼叉攻击数量则往往不及工作日的1/5。
三、 水坑攻击
OceanLotus组织在设置水坑时,主要采用两类方式:一是入侵与目标相关的Web应用系统,替换正常文件或引诱下载伪造的正常应用升级包,以实现在目标用户系统上执行恶意代码的目的;二是入侵与目标相关的Web应用系统后,篡改其中链接,使其指向OceanLotus设置的恶意网址,并在指向的恶意网址上设置木马下载链接。
为了避免暴露,OceanLotus发动水坑攻击的持续周期一般很短,通常是在3-5天之内,几天之后攻击完成,OceanLotus就会将篡改的内容删除或恢复,将设置的水坑陷阱填平。因此,通常来说,想要事后复原水坑攻击的现场比较困难。。 下面是通过技术手段恢复的两个OceanLotus组织设置的典型水坑案例。
1) 水坑A
OceanLotus组织首先通过渗透入侵的攻击方式非法获得某机构的文档交流服务器的控制权,接着,在服务器后台对网站上的“即时通”和“证书驱动”两款软件的正常安装文件捆绑了自己的木马程序,之后,当有用户下载并安装即时通或证书驱动软件时,木马就有机会得到执行。攻击者还在被篡改的服务器页面中插入了恶意的脚本代码,用户访问网站时,会弹出提示更新Flash软件,但实际提供的是伪装成Flash升级包的恶意程序,用户如果不慎下载执行就会中招。
下图为用户访问该水坑站点时,攻击者的JS代码生成的提示用户下载执行伪造Flash升级包的页面。
该组织的专业之处还体现在,水坑攻击会识别访问来源的操作系统平台,并根据客户端返回的系统信息,返回针对不同平台的恶意代码。在Windows平台下我们使用不同的浏览器访问该页面都会提示下载名为“install_flashplayer.exe”的更新文件;当操作系统为Mac OS时,水坑则向Safari浏览器推送能在MAC OS环境中运行的恶意更新程序“install_flashplayer_mac.zip”。
2) 水坑B
被入侵的网站是一个政府站点,主要面向海洋相关研究类人员、专家提供文献下载、研究项目发稿和相关时事通告等功能。OceanLotus组织入侵网站以后修改了网站的程序,在用户访问公告信息时会被重定向到一个攻击者控制的网站,提示下载某个看起来是新闻的文件,比如在新疆522暴恐事件的第二天网站就提示和暴恐事件相关的新闻,并提供“乌鲁木齐7时50分发生爆炸致多人伤亡.rar”压缩包给用户下载,而该压缩包文件内含的就是OceanLotus组织的特种木马。 在该政府网站上,当用户点击某个通告链接时会提示文件下载,如下图:
提示框中的download.mail-attach.net为组织控制的服务器,将下载的“乌鲁木齐7时50分发生爆炸致多人伤亡.rar”压缩包文件解压后,可以看到文件夹内包含显示为JPG图片图标的exe可执行文件。若此时目标用户点击该文件,系统就会被感染。如下为部分下载回来的文件列表:
与此同时,在该服务器水坑文件同级目录下还发现存放了部分用于鱼叉攻击的恶意代码,证实了这起水坑攻击与之前提及的鱼叉攻击为同一组织发起。如下是部分文件列表:
通过对该组织水坑式攻击手法的跟踪分析,发现该组织如果有机会入侵与目标相关的服务器,就会尽可能替换服务器上可能被下载的正常程序,诱骗用户下载并执行伪造的应用升级包。
下表为部分水坑服务器中出现的恶意文件:
文件名 | 文件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天的攻击更加有效,就需要考虑攻击目标会在一周中的哪些天更容易访问水坑网站。由于中国政府和研究机构的工作人员往往有在星期一、二登录办公系统查询重大内部新闻和通知的习惯,所以在一周的前两天发动水坑攻击,效果相对更好。
四、 域名变换
为了隐藏自己的真实身份,OceanLotus组织经常变换下载服务器和C2服务器的域名和IP。统计显示,在过去的3年中,该组织至少使用了C2服务器域名35个,相关服务器IP地址19个。而且大多数域名为了抵抗溯源都开启了Whois域名隐藏,使得分析人员很难知道恶意域名背后的注册者是谁。下图给出了OceanLotus注册各个域名时间点信息。
通过对攻击活动相关域名的统计,我们按注册时间的先后顺序对各个域名做了排序。时间线疏密程度显示该组织在2014年2月至2014年4月申请了大量的新域名。域名的生命周期如下图所示:
这些恶意域名的注册地和服务器也分布在世界各地。从注册地来看,最大的注册地是巴哈马10个,其次是美国4个,尼日利亚3个。从服务器实际所在地来看,美国和乌克兰最多,各5个,其次是瑞典4个,以色列3个。
按时间先后顺序排列,部分较活跃的域名详情如下:
域名 | 绑定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)。
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的计划任务属性的截图。
整个木马的加载过程,实际上就是一个木马与安全软件进行对抗的过程。不过,除了上述内容外,Encryptor还采用了填充垃圾数据的方法与安全软件进行对抗。例如用0x00或其它随机字符填充了十几M的文件内容,使得文件体积过大,从而避免样本被云系统上传,如下图所示。
三、 OceanLotus Cloudrunner
Cloudrunner木马最早被截获于2014年11月。完全不同于之前Encryptor木马,Cloudrunner木马只是一个体量很小的可执行文件,木马本身不显现任何恶意特征,在完成初始的感染以后但却会自动的从指定的服务器上下载其他木马程序到被感染的电脑上。这种攻击方式具有明显的云控特点。攻击者可以根据不同的需要,向被感染电脑上发送各种不同的木马,从而使攻击更加隐蔽,也更具危险性。下图为查看该类木马文件的属性截图。
下面以某个样本为例,说明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个小组,其基本能力及任务分工大致如下:
此外,考虑到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文件夹的路径。
生成0x40个字节的密钥,用来加密自身资源文件:
把获取到的密钥转化为HEX为下次所用,然后加密资源里的数据区段。
进入这个加密函数可以看到其在读取自身,把读取到的数据放入缓冲区。
从特定的位置用0x40长的密钥对数据进行加密,执行加密的第一个函数,加密的内容是0x12345678,这是一个标志,用于解密时验证密码和数据的正确性,是否可以开始下面的操作。
把加密后的数据做修改,写入到temp文件里,temp文件路径为:%temp%/2c.tmp[文件名是随机的2字节],下面通称此文件为temp文件。
传递参数“—ping+【运行的文件全路径】+【\t】 + 密钥”,执行起来temp文件。
如果命令行参数里带有“—ping”字段,执行下面的流程,就是temp运行起来的时候,执行这个函数。
释放资源里的加密好的docx文件,解密成docx文件,放到运行木马的目录,docx的名字和木马的名字一样,然后通过API:ShellExectue打开docx文件,让用户感觉一切正常。
得到刚才传递的密钥,开始解密过程:
判断解密后这个位置的值是不是等于0x12345678 如果是的话说明这次解密的数据和密钥是匹配的,然后执行下面的释放恶意代码的流程。
进入释放木马文件的操作:
开始释放解密后数据,写成“qq.exe”文件作为伪装,释放的路径为“%Applation Data%\Tencent\QQ\qq.exe”,这文件其实就是一个loader。
开始释放木马dll文件,文件路径为: “%Applation Data%\Tencent\QQ\Plugin\Com.Tencent.DriectShow\Bundle.rdb”
木马代码都在这里面。
如果有2个字节的进程,就运行起来“qq.exe”,执行起来木马,然后创建计划任务,指向“qq.exe”。
木马安装的过程到此结束。
“qq.exe”的功能主要是提权后从注册表读取木马dll的路径,通过判断传递过来的命令行参数,判断是注入进程启动或者是自身LoadLibrary启动木马dll程序。
Dllmain直接创建工作的线程,执行木马的通信。
通过字符串拼出上线域名,提取样本中的域名如下: zone.mizove.com
sin04s01.listpaz.com
active.soariz.com
拼串相关的代码如下:
连接成功任何一个域名,进入关键函数,开始进行木马通信。
连接完成以后客户端会接收并执行命令,主要功能是根据接收到的头部的168字节中偏移第60-64字节的内容决定。主要功能如下表,有些指令的功能的函数都是动态调用的,会动态地从服务端获取数据。已知的一些指令字对应的功能如下:
4字节指令 | 执行的功能 |
---|---|
0xB58D7 | 创建目录 |
0x54A1A | 获取电脑的基本信息发送出去 |
0xB592A | 删除文件 |
0xB8237 | 结束指定进程 |
0xB3F0A | 传输文件到控制端 |
0xB4052 | 从主控端下载文件到服务端 |
0x7B572 | 枚举注册表键值 |
0x793D3 | 获取指定的注册表内容 |
0x7B135 | 设置注册表内容 |
0x54A1A | 获取电脑的基本信息发送出去 |
0xB4092 | 获取文件列表 |
0xB3B46 | 加载插件注入进程 |
相关的代码:
木马使用一种自定义的协议格式进行控制端与受控端的通信。示例:如下。
受控端到控制端的回应示例:
二、 OceanLotus Cloudrunner
例子样本MD5:3b6ba05d5d0f236cf0867f1d7fe1a25e
执行细节
样本会创建一个名字为"9N557T5926632kM8BT8Mj9325k2N6R"的互斥体,如果Windows系统中不存在这个互斥体的话,就会再次运行起来自己。
如果是第一次运行的话,就会再次启动自己。
自身运行起来后,会进入加载Shellcode的流程,从文件固定偏移取到数据与0x15异或解密开执行。
Shellcode动态获取用到的API的地址。
通过InternetOpenA连接dc.jaomao69.info,如果返回失败,则直接退出。
样本成功连接C&C服务器以后会从http://dc.jaomao69.info/jUFF这个URL下载下来加密后的数据。
分配可执行的空间,解密后直接执行代码。
把解密下载下来的数据后,确认是一个dll,其导出模块名是inject_dll.dll,用于注入。
这个dll会通过创建rundll32进程,把该dll资源里包含的另外一个dll注入到rundll32进程里。
被注入的dll,是一个功能较全面的木马,其入口函数。
如下代码获取上线信息。
木马的接收消息循环函数,用于处理来自控制端的命令,采用HTTP隧道进行通信。