神刀安全网

海莲花重出水面:一个新近真实攻击案例的分析

引子

人在做,天在看。

2015 5 月底 360 天眼实验室发布了海莲花 APT 组织的报告,揭露了一系列长期对我国的关键部门进行针对性攻击窃取机密数据的攻击活动。 相关的报告链接: https://ti.360.com/upload/report/file/OceanLotusReport.pdf

其实,我们知道对于 APT 团伙如果不从人员这个根本点上解决问题,那么公开的揭露只是促使其采用的新攻击方式的缓解措施而已,过不多久就会改头换面卷土重来。从天眼实验室跟踪的多个 APT 团伙及其活动来看,从未有什么团伙在被揭露以后而全面停止活动的,从未。正如传统情报领域的谍战对抗,网络空间只是另外开辟的一个新战场,对抗永远都会存在,强度也会一再增强。

发布报告一年左右的今天,我们还在持续监测着海莲花团伙的活动,最近的大网数据显示在 4 月份就发生了数百例新的感染,威胁并没有出现缓解的迹象,本篇会通过介绍一个真实的案例来展现相关的细节。

案例

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

初始进入

小王是一个供职于某个敏感机构的员工,他的工作有部分内容涉及对外的联络,于是他的电子邮箱地址被公布在单位对外的网站上。

2016 2 月的某一天,他从邮箱里收到一个好像来自上级的邮件,内容很简略,涉及所在单位的审核计划。当然,如我们所知的鱼叉邮件攻击那样,邮件还带了一个文件名为“ 2016 年度上级及内部审核计划 .rar ”的附件。

不奇怪的,像大多数不太小心的员工那样,小王点击附件打开了 RAR 文件,里面有个名为“关于发布《 2016 年度上级及内部审核计划》的通知 .exe ”的 Word 程序图标的文件(应该叫程序)。这时,攻击行动到达了关键点,小王如果有点安全意识,知道来历不明的 EXE 文件不可乱点,那攻击就到此为止了。可惜小王没有丝毫戒心地点击了,以下的事情在电脑后台发生了,而受害者小王对此一无所知。

程序其实就是 OceanLotus Encryptor 的一个简单变化版本,执行以后行为与天眼实验室在去年发布报告后有同学做的样本分析基本一致,详细分析可以参考 FreeBuf 上的文章:

技术剖析:海莲花 OceanLotus Encryptor 样本分析

http://www.freebuf.com/articles/system/69356.html

总之,经过层层解密程序最终连接外部的 C&C 服务器,从此服务器获取了进一步的指令:从一个服务器下载执行某个模块以获取进一步的控制。

具体的操作:

伪装成 QQ 程序的 qq.exe 进程从  hxxp:// *** . *** . ***.*** /images/logo.png  下载一个看起来是 PNG 图片的文件。

文件名: logo.png

下载回来打开就会发现这其实是一个 Powershell 脚本,其主要工作就是把内置的 Shellcode 加载到内存中执行:

海莲花重出水面:一个新近真实攻击案例的分析

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

海莲花重出水面:一个新近真实攻击案例的分析

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

海莲花重出水面:一个新近真实攻击案例的分析

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

struct CodeData

{

DWORD dwInitXorCode; //初始密钥

DWORD dwLength; // 紧跟在后面的恶意代码加密后的长度(解密是和 dwInitXorCode 异或)

B yte* bData;// 编码的恶意代码的内容

}

海莲花重出水面:一个新近真实攻击案例的分析

解密后确认数据构成一个 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<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 模块:

海莲花重出水面:一个新近真实攻击案例的分析

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

海莲花重出水面:一个新近真实攻击案例的分析

通过对该 DLL 的分析发现,入口处会把 0x1002e040 处的数据通过和 0×69 异或解密,数据长度为 1552 字节;如图:

海莲花重出水面:一个新近真实攻击案例的分析

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

海莲花重出水面:一个新近真实攻击案例的分析

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

海莲花重出水面:一个新近真实攻击案例的分析

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

海莲花重出水面:一个新近真实攻击案例的分析

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

渗透工具

分析到这儿对现在泛滥成灾的基于 Powershell 的攻击框架熟悉的同学可能已经看出来了,这个攻击荷载就是大名鼎鼎的商业渗透工具 Cobalt Strike 生成的,去年友商也发现过海莲花团伙使用 Cobalt Strike 框架进行 APT 攻击。

不管如何,我们的小王点击执行了那个诱饵程序,他的电脑已经默默地连接到了海莲花团伙的控制端,对方看到的操作界面应该是这样的:

海莲花重出水面:一个新近真实攻击案例的分析

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

海莲花重出水面:一个新近真实攻击案例的分析

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

海莲花重出水面:一个新近真实攻击案例的分析

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

海莲花重出水面:一个新近真实攻击案例的分析

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

海莲花重出水面:一个新近真实攻击案例的分析

区别就在 var_code 变量的内容:

海莲花重出水面:一个新近真实攻击案例的分析

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

海莲花重出水面:一个新近真实攻击案例的分析

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

海莲花重出水面:一个新近真实攻击案例的分析

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

海莲花重出水面:一个新近真实攻击案例的分析

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

横向移动

控制了小王的电脑,在单位里建立了立足点,海莲花团伙开始使用 Cobalt Strike 在内网里横向移动。 Cobalt Strike 框架不仅用来构造初始入侵的 Payload 投递工具,在获取内网节点的控制以后自动化地扫描发现内网系统各类漏洞及配置问题加以利用以扩大战果,比如我们看到控制者往小王的机器上传了用于扫描 SMB 服务工具 nbtscan.exe ,然后立即运行起来对内网执行扫描。

一天以后,内网中的另外几台机器被攻陷,因为受感染机器发出了对外的 C&C 的连接。其中包括了一台内网办公用服务器,接着我们又看到了非常熟悉的手法:服务器中的两个重要可执行文件被绑上了木马程序同时提供假的 Flash 升级包并在用户访问的时候提示下载,这样就把服务器变成了水坑。

以后的几天,我们陆续发现内网中其他几台客户端通过访问这个服务器系统下载执行木马而被感染,因为网络中的天眼系统看到了其对外发出的 C&C 连接。在安装了天擎终端安全产品的客户端在执行下载回来的木马时,虽然做了免杀处理,但基于天眼网络层的威胁情报联动,天擎的终端检测与防御( EDR )机制则会立即对恶意代码做查杀,使攻击者完成的初始控制马上失效。

总结起来,对于我们观察到的这次攻击,整体的过程情况可以用如下的图来表示:  

海莲花重出水面:一个新近真实攻击案例的分析

TTP

360 天眼实验室对大网感染情况的监测,自从去年被我们公开揭露出来以后,只在其后的小一段时间有所沉寂,在确认没有进一步人身威胁以后,海莲花团伙的活动依旧猖獗,甚至超过以往。

随着基于天眼天擎产品在用户环境中部署量的增加,我们看到越来越多的实际攻击案例,网络与终端结合的数据赋予我们的 Visibility 让我们对海莲花团伙的 TTP Tool Technique Procedure )有了更贴近的观察和分析。总体来看,攻击手法上并没有什么变化,但是可以看到的是,由于 P owershell 天生的有效性, APT 团伙(或者黑客组织)对其越来越青睐,正如上面的案例所分析的,从初始入侵 payload 的构建,到后续内网横向移动等一系列行为中, powershell 都被积极地使用,而事实也证明了这样的手段非常有效。

以下是海莲花团伙在 Lockheed Martin Cyber Kill Chain 各环节上特征描述:

攻击阶段 特性描述
侦察跟踪 关注目标(主要是政府和海事相关)网站,尝试入侵,收集相关的电子邮箱
武器构建 使用多种现成的技术生成绑定木马诱饵程序,当前采用Powershell的Payload非常普遍
载荷投递 入侵网站构建水坑、发送定向鱼叉邮件
突防利用 利用似乎工作相关的内容进行社工诱导点击执行诱饵程序
安装植入 下载第二阶段Shellcode完成控制,以计划任务方式达成持久化
通信控制 之前使用自有实现的通信协议,当前较多地使用商业化攻击框架Cobalt Strike
达成目标 使用Cobalt Strike进行集成化的自动渗透,不太在乎隐秘性,只要有可能进一步创建更多水坑

*本文作者:360天眼实验室(企业账户),转载须注明来自FreeBuf黑客与极客(FreeBuf.COM)

转载本站任何文章请注明:转载至神刀安全网,谢谢神刀安全网 » 海莲花重出水面:一个新近真实攻击案例的分析

分享到:更多 ()

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址