# 海莲花的反击——一个新近真实攻击案例的分析

Author: 乌云历史资料库 (@wooyun_archive)
Published: 2016-05-17T09:11:00Z
Canonical: https://wepostx.com/topics/259

> 乌云历史资料归档
>
> **原始作者：** 360安全卫士
> **原始编号：** superkieran-wooyundrops:1205
> **原始发布时间：** 2016-05-17 17:11
> **声明：内容仅用于技术研究和个人使用，版权归 wooyun.org。**

---

# 0x00 引子

人在做，天在看。
2015年5月底360天眼实验室发布了海莲花APT组织的报告，揭露了一系列长期对我国的关键部门进行针对性攻击窃取机密数据的攻击活动。
相关的报告：[https://ti.360.com/upload/report/file/OceanLotusReport.pdf](https://ti.360.com/upload/report/file/OceanLotusReport.pdf)
其实，我们知道对于APT团伙如果不从人员这个根本点上解决问题，那么公开的揭露只是促使其采用的新攻击方式的缓解措施而已，过不多久就会改头换面卷土重来。从天眼实验室跟踪的多个APT团伙及其活动来看，从未有什么团伙在被揭露以后而全面停止活动的，从未。正如传统情报领域的谍战对抗，网络空间只是另外开辟的一个新战场，对抗永远都会存在，强度也会一再增强。
发布报告一年左右的今天，我们还在持续监测着海莲花团伙的活动，最近的大网数据显示在4月份就发生了数百例新的感染，威胁并没有出现缓解的迹象，本篇会通过介绍一个真实的案例来展现相关的细节。

# 0x01 案例

这是一个观察到的真实海莲花新近攻击活动，360的天眼威胁感知与天擎终端安全产品使我们能够对网络和主机上发生的事情做集中化的关联分析，让完整攻击活动的来龙去脉做准实时的感知和展现成为了可能。

### 初始进入
小王是一个供职于某个敏感机构的员工，他的工作有部分内容涉及对外的联络，于是他的电子邮箱地址被公布在单位对外的网站上。
2016年4月的某一天，他从邮箱里收到一个好像来自上级的邮件，内容很简略，涉及所在单位的审核计划。当然，如我们所知的鱼叉邮件攻击那样，邮件还带了一个文件名为“2016年度上级及内部审核计划.rar”的附件。
不奇怪的，像大多数不太小心的员工那样，小王点击附件打开了RAR文件，里面有个名为“关于发布《2016年度上级及内部审核计划》的通知.exe”的Word程序图标的文件（应该叫程序）。这时，攻击行动到达了关键点，小王如果有点安全意识，知道来历不明的EXE文件不可乱点，那攻击就到此为止了。可惜小王没有丝毫戒心地点击了，以下的事情在电脑后台发生了，而受害者小王对此一无所知。
程序其实就是OceanLotus Encryptor的一个简单变化版本，执行以后行为与天眼实验室在去年发布报告后有同学做的样本分析基本一致，详细分析可以参考文章：技术剖析：[海莲花OceanLotus Encryptor样本分析](http://www.freebuf.com/articles/system/69356.html)
总之，经过层层解密程序最终连接外部的C&C服务器，从此服务器获取了进一步的指令：从一个服务器下载执行某个模块以获取进一步的控制。
具体的操作
伪装成QQ程序的qq.exe进程从 hxxp://xxx.xxx.xxx.xxx/images/logo.png 下载一个看起来是PNG图片的文件。
文件名：logo.png
下载回来打开就会发现这其实是一个Powershell脚本，其主要工作就是把内置的Shellcode加载到内存中执行：

![原文图片](/media/2016/06/180c64474054700b1bcc8991610a7159)

var_code中数据Base64解码以后根据经验可以断定是Shellcode：

![原文图片](/media/2016/06/83f8bafb499994534ea3b9c14e02fa3e)

最前面0x34字节的Shellcode负责解密0x34偏移后的数据：

![原文图片](/media/2016/06/69e84e6b66585a8cf73abba08f7c6e11)

从数据的0x34偏移开始为加密段，数据的结构为：

```text
#!cpp struct CodeData { DWORD dwInitXorCode; //初始密钥 DWORD dwLength; //紧跟在后面的恶意代码加密后的长度（解密是和dwInitXorCode异或） Byte* bData;//编码的恶意代码的内容 }
```

![原文图片](/media/2016/06/8a656984e0c641a2ecc43f6d99622b60)

解密后确认数据构成一个PE文件，如下代码为解密算法：

```text
#!cpp void Decode() { DWORD dwFirst = 0; DWORD dwSecond = 0; memcpy((void*)&dwFirst, data+0x34, 4); memcpy((void*)&dwSecond, data+0x38, 4); DWORD dwLength = dwSecond ^ dwFirst; DWORD dwXorCode = dwFirst; unsigned char* szNewBuffer = new unsigned char[dwLength]; memset(szNewBuffer, 0, dwLength); for (int i = 0; i<dwLength; i+=4) { DWORD dwBuffer = 0; memcpy((void*)&dwBuffer, data+0x38+4+i, 4); DWORD dwNewBuffer = 0; dwNewBuffer = dwBuffer^dwXorCode; dwXorCode = dwXorCode^dwNewBuffer; memcpy(szNewBuffer+i, (void*)&dwNewBuffer, 4); //szNewBuffer为解密后的数据 } }
```
解密后的文件是DLL模块：

![原文图片](/media/2016/06/29254badddda243e356e5d9637b5d65e)

DLL文件的导出模块名为beacon_dll.dll：

![原文图片](/media/2016/06/6389715f916fffa4936d54b1f6c2eec1)

通过对该DLL的分析发现，入口处会把0x1002e040处的数据通过和0x69异或解密，数据长度为1552字节；如图：

![原文图片](/media/2016/06/501e524f1c717dc5477b92e45dbd121f)

解密后可以看到配置信息，里面包含进行通信的C&C地址、Url、UserAgent和亚马逊的域名（为了填充远控协议的HTTP头的host字段）等配置信息：

![原文图片](/media/2016/06/74da274e33eba6d07a877294d3b5bc19)

抓包发现木马在进行HTTP隧道通信的时候还耍了点小花招，在请求的Host字段填了知名站点的网址，传输的内容经过编码后放到Cookies字段里，试图混淆视听绕过监测，而伪装的host就是在配置信息里；如图：

![原文图片](/media/2016/06/48598479dc58a096c3fa031cd73918d5)

数据包的HTTP头的Host字段为www.amazon.com，而连接的IP地址为xxx.xxx.xxx.xxx，该IP为木马的C&C地址，Host字段填的为知名网站，如图：

![原文图片](/media/2016/06/63fd4d2c6a313927dd5e34bd1228c2ef)

而xxx.xxx.xxx.xxx这个IP从来就没有绑定过域名www.amazon.com。

### 渗透工具
分析到这儿对现在泛滥成灾的基于Powershell的攻击框架熟悉的同学可能已经看出来了，这个攻击荷载就是大名鼎鼎的商业渗透工具Cobalt Strike生成的，去年友商也发现过海莲花团伙使用Cobalt Strike框架进行APT攻击。
不管如何，我们的小王点击执行了那个诱饵程序，他的电脑已经默默地连接到了海莲花团伙的控制端，对方看到的操作界面应该是这样的：

![原文图片](/media/2016/06/6be6a14835c47734a30241a6b8060cd7)

框架支持木马数据交互走HTTP、HTTPS、DNS和SMB隧道协议，当前攻击所用到的beacon.dll就支持beacon_http、beacon_dns、beacon_https和beacon_smb这些监听方式：

![原文图片](/media/2016/06/c39174496d81e002d47f6061fa639a55)

框架支持多种类型的攻击荷载生成：

![原文图片](/media/2016/06/23008e6402b35eb272d02dea0f94b069)

由于能够轻松绕过现有的病毒查杀工具，基于Powershell的后门木马大受欢迎，Cobalt Strike的PayLoad Generator功能就支持这个选项：

![原文图片](/media/2016/06/bf69d0dd49403ed6a652cd21458186c0)

攻击框架生成的payload.ps1脚本与我们在这回的攻击中看到的logo.png文件大小存在很大差距：

![原文图片](/media/2016/06/156b7ea45324747316bbd6f40a97c4f9)

区别就在var_code变量的内容：

![原文图片](/media/2016/06/fc3f04d6f9bc02e2c6b9b1057d83be58)

框架产出的payload.ps1脚本中Shellcode功能比较简单，从中可以提取出下载的url地址为：http://xxx.x.x.xxx:808/vQEV，从该网址下载下个阶段的Shellcode执行，如图：

![原文图片](/media/2016/06/79e9f624ac7840b24b14fcfb3403eb0e)

下载回来的数据大小为186KB：

![原文图片](/media/2016/06/b7824f5079d7bf10734bc5714790d967)

下载回来的代码除了后面的加密后的数据段不一样，Shellcode和海莲花组织的Shellcode的代码是一样的，如图为攻击框架下载下来的vQEV模块的解密代码：

![原文图片](/media/2016/06/4f14c0035b8bc6c2f3f34443a93fcf92)

而海莲花的这个名为logo.png的Powershell脚本则直接把需要下载回来的这块代码嵌入到var_code变量中直接执行而不是从网上下载，虽然增大了文件，但减少了由于网络和服务的问题导致的失败。

### 横向移动
控制了小王的电脑，在单位里建立了立足点，海莲花团伙开始使用Cobalt Strike在内网里横向移动。Cobalt Strike框架不仅用来构造初始入侵的Payload投递工具，在获取内网节点的控制以后自动化地扫描发现内网系统各类漏洞及配置问题加以利用以扩大战果，比如我们看到控制者往小王的机器上传了用于扫描SMB服务工具nbtscan.exe，然后立即运行起来对内网执行扫描。
一天以后，内网中的另外几台机器被攻陷，因为受感染机器发出了对外的C&C的连接。其中包括了一台内网办公用服务器，接着我们又看到了非常熟悉的手法：服务器中的两个重要可执行文件被绑上了木马程序同时提供假的Flash升级包并在用户访问的时候提示下载，这样就把服务器变成了水坑。
以后的几天，我们陆续发现内网中其他几台客户端通过访问这个服务器系统下载执行木马而被感染，因为网络中的天眼系统看到了其对外发出的C&C连接。在安装了天擎终端安全产品的客户端在执行下载回来的木马时，虽然做了免杀处理，但基于天眼网络层的威胁情报联动，天擎的终端检测与防御（EDR）机制则会立即对恶意代码做查杀，使攻击者完成的初始控制马上失效。
总结起来，对于我们观察到的这次攻击，整体的过程情况可以用如下的图来表示：

![原文图片](/media/2016/06/c07ce199e9befacf6aaa26fb9192da3f)

# 0x02 TTP

从360天眼实验室对大网感染情况的监测，自从去年被我们公开揭露出来以后，只在其后的小一段时间有所沉寂，在确认没有进一步人身威胁以后，海莲花团伙的活动依旧猖獗，甚至超过以往。
随着基于天眼天擎产品在用户环境中部署量的增加，我们看到越来越多的实际攻击案例，网络与终端结合的数据赋予我们的Visibility让我们对海莲花团伙的TTP（Tool、Technique、Procedure）有了更贴近的观察和分析。总体来看，攻击手法上并没有什么变化，但是可以看到的是，由于Powershell天生的有效性，APT团伙（或者黑客组织）对其越来越青睐，正如上面的案例所分析的，从初始入侵payload的构建，到后续内网横向移动等一系列行为中，powershell都被积极地使用，而事实也证明了这样的手段非常有效。
以下是海莲花团伙在Lockheed Martin Cyber Kill Chain各环节上特征描述：
攻击阶段特性描述
侦察跟踪关注目标（主要是政府和海事相关）网站，尝试入侵，收集相关的电子邮箱
武器构建使用多种现成的技术生成绑定木马诱饵程序，当前采用Powershell的Payload非常普遍
载荷投递入侵网站构建水坑、发送定向鱼叉邮件
突防利用利用似乎工作相关的内容进行社工诱导点击执行诱饵程序
安装植入下载第二阶段Shellcode完成控制，以计划任务方式达成持久化
通信控制之前使用自有实现的通信协议，当前较多地使用商业化攻击框架Cobalt Strike
达成目标使用Cobalt Strike进行集成化的自动渗透，不太在乎隐秘性，只要有可能进一步创建更多水坑

## Replies
