TAG:高级可持续攻击、APT32、海莲花、漏洞、Denis、CVE-2017-11882、CVE-2017-8570
TLP:白
日期:2018-04-27
概要
“海莲花”,又名APT32和OceanLotus,是越南背景的黑客组织。该组织至少自2012年开始活跃,长期针对中国能源相关企业、海事机构、海域建设部门、科研院所和航运企业等进行网络攻击。除中国外,“海莲花”的目标还包含全球的政府、军事机构和大型企业,以及本国的媒体、人权和公民社会等相关的组织和个人。
微步在线长期监控着“海莲花”的活动动向,曾发布多份关于该团伙的分析报告《“海莲花”团伙的最新动向分析》、《“海莲花”团伙专用后门Denis最新变种分析》和《微步在线发现“海莲花”团伙最新macOS后门》。微步在线监测发现,2018年4月份以来,该团伙攻击活动异常频繁,并开始利用高危Office漏洞来投递其常用特种木马Denis,具体内容包含:
据微步在线威胁情报云监测发现,本月APT32 的攻击活动异常频繁,中国能源和金融相关企业,以及越南周边的柬埔寨等国的相关目标遭到攻击,其中国内是重灾区。
2018年4月以来,APT32开始大量利用CVE-2017-11882和CVE-2017-8570等Office漏洞投递其特种木马Denis,攻击过程中利用了“白利用”技术。
APT32在2018年4月5日前后集中注册了几十个域名,并开始使用后缀为info、club和xyz的顶级域名,且其中部分已被用于真实的攻击。
鉴于此次攻击行动相比之前,目标更广、频次更高,建议国内相关行业(金融、能源和政府)及重点单位及时排查。
微步在线通过对相关样本、IP和域名的溯源分析,共提取59条相关IOC,可用于威胁情报检测。微步在线的威胁检测响应平台(TDP)、威胁情报订阅、API等均已支持此次攻击事件和团伙的检测。
详情
微步在线长期跟踪全球100余黑客组织。近期,微步在线监测到APT32的活动加剧,持续针对中国能源和金融等相关企业,以及越南周边的柬埔寨等国的相关目标发起攻击。微步在线的狩猎系统捕获了一批APT32的最新攻击样本,分析发现这些样本利用了CVE-2017-11882和CVE-2017-8570漏洞投递其专有的特种木马Denis,相关样本如下:
SHA256 | 漏洞 | C2 | 文件名 |
e5c766ad580b5bc5f74acc8d2f5dd028c11495d2ce503de7c7a294f94583849d | CVE-2017-11882 | straliaenollma.xyz andreagahuvrauvin.com byronorenstein.com | Document_GPI Invitation-UNSOOC China.doc |
0d1577802d4560b9ba184a2d13570ba28ed0318eee520f2f7a6c5ef238671dd9 | CVE-2017-11882 | stopherau.com orinneamoure.com ochefort.com | |
3a3bc31afcf2ec82ff9ac0016ce47e10833227665ab056117520bdf097525c63 | CVE-2017-8570 | tsworthoa.com earlase.com aximilian.com | |
abfcba26e50a88c2ce507212b15d2ee24c28fc8b28edeaae27f70faaf6fae700 | CVE-2017-8570 | orinneamoure.com ochefort.com icmannaws.com | Monthly Report 03.2018.doc |
Denis是APT32最常用的特种木马,是一个全功能的后门,包含多种对抗技术,其特征是使用DNS隧道技术与其C2通信。Denis此前主要通过双扩展,虚假Word、Excel、WPS和PDF图标,虚假更新(Adobe、FireFox、Google),以及字体相关工具诱导受害者点击可执行文件进行传播。之前的一些诱饵文件的文件名和图标如下:
文件名 | 图标 |
adobe-font-pack.exe | |
Chi tiet danh sach nhan vien sai quy dinh can xu phat.exe | |
FirefoxUpdate.exe | |
GoogleUpdateSetup.exe | |
TimeTable 27 November - 03 December 2017v4.exe | |
02 Meeting Report for Mar-2018 Cambodia.xls.exe | |
请尽快补充完善《财务部之报告》.exe | |
Thu moi tham du Hoi thao-Final-FRONT-PAGE.exe |
样本分析
以最新捕获的诱饵文档“Document_GPI Invitation-UNSOOC China.doc”为例进行分析,该文档包含CVE-2017-11882漏洞利用,触发漏洞利用之后会交付APT32的特种木马Denis。
1. 该样本的基本信息如下:
文件类型 | rtf |
文件大小 | 3139367 字节 |
文件名 | Document_GPI Invitation-UNSOOC China.doc |
SHA256 | e5c766ad580b5bc5f74acc8d2f5dd028c11495d2ce503de7c7a294f94583849d |
SHA1 | e2d949cf06842b5f7ae6b2dffaa49771a93a00d9 |
MD5 | 02ae075da4fb2a6d38ce06f8f40e397e |
2.该样本在微步云沙箱的分析结果如下图:
微步在线云沙箱检测地址:
https://s.threatbook.cn/report/file/e5c766ad580b5bc5f74acc8d2f5dd028c11495d2ce503de7c7a294f94583849d/?env=win7_sp1_enx86_office2010
3.该文档包含CVE-2017-11882漏洞利用,打开后会显示一模糊图片来迷惑受害者,如下图:
4.该诱饵文档触发CVE-2017-11882漏洞后的整体执行流程如下图,该漏洞的相关分析见附录的“漏洞分析”。
打开文档触发漏洞之后会执行shellcode1,shellcode1会继续执行shellcode2,shellcode2最终会在C:\ Program Files\目录下创建一个隐藏文件夹Microsoft-Windows-DiskDiagnosticResolver_2021325962,向该目录释放三个文件:MicrosoftWindowsDiskDiagnosticResolver.exe、rastls.dll和OUTLFLTR.DAT,然后启动MicrosoftWindowsDiskDiagnosticResolver.exe。MicrosoftWindowsDiskDiagnosticResolver.exe是一个包含Symantec签名的白文件,启动后会加载同目录下的恶意rastls.dll,这是典型的“白利用”技术。rastls.dll最终会交付APT32的特种木马Denis,相关“白利用”技术和Denis木马的详细分析见微步在线发布的报告《“海莲花”团伙专用后门Denis最新变种分析》。
关联分析
微步在线监测发现,近期APT32 的攻击活动加剧,中国能源和金融相关企业,以及越南周边的柬埔寨等国的相关目标遭到定向攻击,其中国内是重灾区。
使用x.threatbook.cn对straliaenollma.xyz、andreagahuvrauvin.com和byronorenstein.com进行关联发现,发现三者的注册信息都使用了隐私保护,于近期注册且注册时间相同。在一个木马中使用多个注册时间相近(多为同一天,且域名服务商多相同)的域名作为C2一直是APT32的习惯。
C2域名 | 域名有效期 | 注册邮箱 |
straliaenollma.xyz | 2018/04/06-2019/04/06 | 隐私保护 |
andreagahuvrauvin.com | 2018/04/06-2019/04/06 | 隐私保护 |
byronorenstein.com | 2018/04/06-2019/04/06 | 隐私保护 |
此外,使用x.threatbook.cn分析另一CVE2017-11882漏洞利用样本的C2 stopherau.com,发现其早已被微步在线识别:
根据微步在线威胁情报云数据,APT32近期(2018/04/04-2018/04/06)注册了几十个域名用作C2,且开始大量注册TLD为club、xyz和info等的域名,详细IOC见附录。其中部分在注册之后不到两周就被用于攻击,这也侧面说明APT32近期攻击活动极为活跃。
附录
查看并下载完整IOC列表,请点击“阅读原文”链接。
Hash
查看完整Hash分析结果,请点击“阅读原文”链接。
漏洞分析
CVE-2017-11882是存在于Office公式编辑器中的一个内存破坏漏洞,漏洞相关分析如下:
(1)公式编辑器是一个独立的可执行程序,由Office启动。这里通过在注册表中设置镜像劫持,然后将调试器设置为ollydbg来分析该程序,具体的路径如下:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\EQNEDT32.exe
(2)首先启动公式编辑器,然后使用ollydbg附加其上,并在地址0x00411655上下一个软件断点0x00411655。这个地址是导致漏洞触发的位置(参考相关分析报告),然后关闭公式编辑器和ollydbg。如下图:
(3)打开漏洞利用样本,当漏洞成功触发后会启动公式编辑器,然后导致ollydb附加其上。如下图:
然后F9让公式编辑器运行起来,接着会触发新的断点,如下图:
栈溢出过程是在第二次,所以再次F9,再次断下来后看一下EDI,ESI的值,如下图:
此时EDI指向的地址位于栈上,如下图:
在没有拷贝数据前,12F250处的值是4115D8,拷贝完成后如下:
对比后会发现0012F250处的返回地址被覆盖为00402114,该地址位于公式编辑器中相关代码如下图,这里只是一个返回指令:
(4)在00402114处下软件断点。00402114处执行完后,会将0012f3D0作为返回地址弹出来,该处的代码如下:
(a)该段代码执行完后会会先获取kernel32的基地址,然后获取所需要的API,所要获取的API如下表:
kernel32.GetModuleHandleW kernel32.LoadLibraryW kernel32.GetProcAddress kernel32.CreateFileW kernel32.SetFilePointer kernel32.ReadFile kernel32.WriteFile kernel32.CloseHandle kernel32.ExpandEnvironmentStringsW kernel32.VirtualAlloc kernel32.VirtualFree kernel32.CreateThread kernel32.WaitForSingleObject kernel32.CopyFileW kernel32.OpenProcess kernel32.GetCurrentProcess kernel32.GetCurrentProcessId kernel32.CreateToolhelp32Snapshot kernel32.Process32FirstW kernel32.Process32NextW kernel32.GetFileSize Kernel32.CreateFileMappingW kernel32.MapViewOfFile kernel32.GetLogicalDriveStringsW kernel32.QueryDosDeviceW kernel32.GetTempPathW kernel32.OutputDebugStringW kernel32.Sleep |
(b)然后调用kernel32.GetProcAddress获取ntdll中的相关函数:
ntdll.ZwQuerySystemInformation
ntdll.ZwDuplicateObject
ntdll.ZwQueryObject
(c)接着获取ole32.dll中的ole32.CoInitialize,ole32.CoCreateInstance。
(d)接着获取oleaut32.VariantInit,oleaut32.GetActiveObject。
(e)接着获取 psapi.GetMappedFileNameW。
(5)查找winword进程,然后遍历系统所有打开的句柄,找到winword打开的样本句柄,然后将这个文件映射到公式编辑器的进程空间,从文件的尾部读取第二段shellcode。具体步骤如下:
(a)调用CreateToolhelp32Snapshot,Process32FirstW,Process32NextW,CloseHandle找到winword进程ID。
(b)调用ZwQuerySystemInformation遍历系统的所有打开的句柄。此时SystemInformationClass = SystemExtendedHandleInformation,通过ZwQueryObject查询对象的类型,找到属于winword打开的文件。然后调用CreateFileMappingW和MapViewOfFile函数将打开的文件映射到公式编辑器的内存空间。然后判断文件尾部是否是以“yyyy”结束,如是则表示是样本本身。接着通过VirtualAlloc重新分配内存将样本尾部的数据拷贝进去,然后跳到该片内存中执行。
(6)文件尾部的shellcode使用了混淆,加密和PE重构等技术。垃圾指令的部分代码如下:
该段shellcode执行后会在内存中构建一个DLL文件,然后修复导入表和重定位表。接着调用这个DLL的DllMain函数完成初始化。然后调用这个DLL的导出函数DllEntry,在这个函数里后从DLL的资源节读取数据然后解压,并向c:\ Program Files\目录下创建一个隐藏文件夹Microsoft-Windows-DiskDiagnosticResolver_2021325962,然后向这个目录下释放三个文件:MicrosoftWindowsDiskDiagnosticResolver.exe、rastls.dll和OUTLFLTR.DAT,之后启动 MicrosoftWindowsDiskDiagnosticResolver.exe。