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

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

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加载到内存中执行:

![p1](http://drops.javaweb.org/uploads/images/66081c6dcc7f04caba54a31e5a3b98105fff0996.jpg)

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

![p2](http://drops.javaweb.org/uploads/images/40e56081dd95cf1f408e6089fc3ecd97adb1a0a2.jpg)

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

![p3](http://drops.javaweb.org/uploads/images/1aac397cf2b8fd2dfe354747fc55c48da7c5d51b.jpg)

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

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

“`

![p4](http://drops.javaweb.org/uploads/images/dd43159b9377dcc22ba85e04b19dbd8d55844d95.jpg)

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

“`
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

© 版权声明
THE END
喜欢就支持一下吧
点赞0赞赏 分享
评论 抢沙发

请登录后发表评论

    请登录后查看评论内容