引子
2015年5月底红雨滴团队发布了海莲花APT组织相关活动的报告,揭露了多年来一系列对我国的关键部门进行针对性攻击窃取机密信息的攻击活动。
相关的报告:OceanLotus(APT-C-00)数字海洋的游猎者
APT相关的活动事实上是情报战在网络空间的延伸,其中很大部分属于国家级的对抗,我们的攻击者很多在国门之外,对其的打击已超出了相对简单的技术对抗的范畴。而如果不能从组织和人员的层面上解决问题,那么公开的揭露只会促使其采用的新攻击方式的缓解措施而已,过不多久攻击就会改头换面卷土重来。现实验证了我们的推断,从天眼实验室跟踪的多个APT团伙及其活动来看,从未有什么团伙在被揭露以后而全面停止活动的,从未。
在发布海莲花报告一年多的今天,我们也一直在持续监测着海莲花团伙的活动,从未间断,而更多监控能力的引入使我们把对手的活动看得更清晰。最近的大网数据显示在4月份就发生了数百例新的感染,威胁丝毫没有出现缓解的迹象,本文会通过介绍一个真实的案例来展现相关的细节。
案例
这是一个观察到的真实海莲花新近攻击活动,奇安信集团的天眼威胁感知与天擎终端安全产品使我们能够对网络和主机上发生的事情做集中化的关联分析,让完整攻击活动的来龙去脉实现准实时的感知和展现。
初始进入
小王是一个供职于某个敏感机构的员工,他的部分工作涉及对外的联络,于是他的电子邮箱地址与其他一些同事的一起被公布在单位对外的网站上,后续的取证发现几乎全部这些对外公布的邮箱都被投递了恶意代码。
2016年4月的某一天,他从邮箱里收到一个好像来自上级的邮件,内容很简略,说的是所在单位的审核计划。当然,如我们所知的鱼叉邮件攻击那样,邮件还带了一个文件名为“2016年度上级及内部审核计划.rar”的附件。
不奇怪的,像大多数不太小心的员工那样,小王点击附件打开了RAR压缩包,里面有个名为“关于发布《2016年度上级及内部审核计划》的通知.exe”的文件,在资源管理器里显示的是Microsoft Word文档的图标:
其实这是一个典型的可执行程序,双击就会运行起来。觉得这种直接发可执行程序的方式很低端?事实上大部分的定向攻击并不利用漏洞,更不用说0day漏洞了,它们更多地依赖社会工程学的技巧,利用人性的弱点:恐惧、贪婪和好奇心。如果邮件内容与对象的工作看起来有足够的相关性,即使是一个EXE文件,被点击的可能性也会变得非常大,而且,EXE文件相比漏洞利用型的攻击相比有着无与伦比的环境兼容性。
这时,攻击行动到达了关键点,小王如果有良好的安全意识,知道来历不明的可执行程序不可乱点甚至提交给IT部门做分析确认,那攻击就到此为止了。可惜小王没有丝毫戒心地点击了,以下的事情在电脑后台发生了,而受害者小王对此一无所知。
被执行起来的程序其实就是OceanLotus Encryptor的一个简单变化版本,行为与天眼实验室去年发布报告后有同学对样本做的分析基本一致,详细分析可以参考FreeBuf上的文章:
技术剖析:海莲花OceanLotus Encryptor样本分析
总之,经过层层解密自身,程序最终连接到外部的C&C服务器,接收进一步的指令:从另一个服务器下载执行某个模块以获取进一步的控制或实现持久化或完成特定的功能。
具体的操作:
伪装成QQ程序的qq.exe进程从 hxxp://***.***.***.***/images/logo.png 下载一个看起来是PNG图片的文件。
下载回来打开就会发现这其实是一个Powershell脚本,其主要工作就是把内置的Shellcode加载到内存中执行:
var_code中数据Base64解码以后根据经验可以断定是Shellcode:
最前面0x34字节的Shellcode负责解密0x34偏移后的数据:
从数据的0x34偏移开始为加密段,数据的结构为:
struct CodeData
{
DWORD dwInitXorCode; //初始密钥
DWORD dwLength; //紧跟在后面的恶意代码加密后的长度(解密是和dwInitXorCode异或)
Byte* 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处的数据通过和0x69异或解密,数据长度为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)机制则会立即在相应的终端对恶意代码做查杀,使攻击者完成的初始控制马上失效。
总结起来,对于我们观察到的这次攻击,整体的过程情况可以用如下的图来表示:
观察与结论
从红雨滴团队对大网感染情况的监测,自从去年被我们公开揭露出来以后,只在其后的小一段时间有所沉寂,在确认没有进一步人身威胁以后,海莲花团伙的活动依旧猖獗,甚至超过以往。
总体来看,攻击手法上并没有什么变化,但是可以看到的是,由于Powershell的有效性,APT团伙(或者黑客组织)对其越来越青睐,正如上面的案例所分析的,从初始入侵payload的构建,到后续内网横向移动等一系列行为中,powershell都被积极地使用,而事实也证明了这样的手段非常有效。
以下是海莲花团伙在Lockheed Martin Cyber Kill Chain各环节上特征描述:
攻击阶段 | 特性描述 |
侦察跟踪 | 关注目标(主要是政府和海事相关)网站,尝试入侵,收集相关的电子邮箱 |
武器构建 | 使用多种现成的技术生成绑定木马诱饵程序,当前采用Powershell的Payload非常普遍 |
载荷投递 | 入侵网站构建水坑、发送定向鱼叉邮件 |
突防利用 | 利用似乎工作相关的内容进行社工诱导点击执行诱饵程序 |
安装植入 | 下载第二阶段Shellcode完成控制,以计划任务方式达成持久化 |
通信控制 | 之前使用自有实现的通信协议,当前较多地使用商业化攻击框架Cobalt Strike |
达成目标 | 使用Cobalt Strike进行集成化的自动渗透,不太在乎隐秘性,只要有可能进一步创建更多水坑 |
随着基于天眼和天擎产品在用户环境中部署量的增加,我们看到越来越多的实际攻击案例,网络与终端结合的数据赋予的Visibility让我们对海莲花团伙的TTP(Tactics、Techniques、Procedures)有了更贴近的观察和分析。天眼设备强大的网络层数据记录和还原的能力使我们能够监测到载荷投递、通信控制及数据泄出阶段的迹象,天擎在终端的行为记录能力则有可能让我们看到恶意代码的突破常规防御机制实现持久化植入的活动。
对于APT攻击的防御需要综合性的多层次的方案,没有什么单点的银弹解决方案,包括现在很火的威胁情报。在我们所能观察到所有层面部署记录和监测机制,选用合适的数据分析方法才有可能发现并关联线索,发现攻击,评估损失,尽可能减小暴露在威胁下的时间。