国外安全研究者爆料中国黑客组织针对越南政府的APT攻击样本

2018-09-17 275114人围观 ,发现 4 个不明物体 网络安全

近日,法国安全研究者兼BotConf和FastIR公司创始人Sebastien Larinier,针对RTF文档相关的CVE-2017–11882漏洞利用专门制作了一条YARA规则,来捕获攻击线索。经过海量数据比对,他发现了一个用来执行APT攻击的恶意RTF文档样本,其中的内容和越南岘港市海洲郡的建设项目相关,文档标题为《Chương trình hoạt động cnit 2018》。据Sebastien Larinier声称,按照该恶意文档表现出来的各项行为指标和特征值,他怀疑该APT攻击文档的幕后使用者为中国的黑客组织1937CN。

本文中,Sebastien Larinier着重描述了该恶意文档的感染攻击机制、网络攻击架构以及攻击者采用的相关TTPs技术。

01.png感染攻击链

Joe sandbox 在线沙盒分析网站对该文档的详细感染行为给出了很好的描述:

02.png该恶意RTF文档利用漏洞会向目标操作系统中写入以下两个文件:

一个名为 RasTls.dll 的dll文件

一个名为dascgosrky.exe的可执行文件

RTF文档分析

在Python的RTF分析工具rtfobj帮助下,可以发现恶意RTF文档中的三个ole对象:一个类名为package的ole对象,以及另两个不良结构的ole对象。

03.png在名为package的ole对象中,存在一个8.t文件的加载路径:

04.png这种技术看似是用来执行 .sct 格式文件,以向网络下载一个可执行程序,植入到目标操作系统中。McAfee安全实验室曾用 .sct文件为样本对这种技术进行过分析。这种技术由于简单有效,并且支持Office相关文档,屡次被很多攻击者进行了在野利用。这以上路径中,可以看到,RTF文档会从系统%TMP% 目录中加载一个 8.t 文件。经分析,8.t 文件为一个加密文件:

05.png经检查,另两个不良结构的ole对象为涉及“Equation Native”流的ole公式对象,其中可以看到CVE-2017–11882漏洞利用的影子:

06.pngole对象末尾,能看到很多API接口的runPE技术调用,这样恶意程序会挂起一个系统进程,并在其中注入恶意执行代码。另外,还发现了对象开始处的有意思的字符串: 7e079a2524fa63a55fbcfe:

07.png该字符串曾在“响尾蛇”APT攻击的ole公式对象中出现过,可能攻击者都使用了同一套恶意程序组装工具。现在有了加载文件8.t ,以及runPE技术的确定。接下来,需要来做更深入的shellcode分析。

逆向ShellCode

在分析伊始,Sebastien认为 Winword.exe 会调用 CreateProcess 函数来创建EQNEDT32.exe进程,所以他决定在CreateProcess 函数的调用处设置一个断点。

但是,后来发现,EQNEDT32.exe 进程是由Winword.exe利用COM Object对象调用的,并不是由 CreateProcess 函数来创建的,而且Winword.exe也不是EQNEDT32.exe的父进程。所以,只好在EQNEDT32.exe启动时附加上调试器。为此,可以采用映像劫持(Image File Execution Options,IFEO)方法来进行分析。

所谓的映像劫持(IFEO)就是Image File Execution Options,位于注册表的 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options 由于这个项主要是用来调试程序用的,对一般用户意义不大。默认是只有管理员和local system有权读写修改。通俗来说,就是比如我想运行a.exe,结果运行的却是b.exe,也就是说在这种情况下,a程序被b给劫持了,即你想运行的程序被另外一个程序代替了。

先在Image File Execution Options的注册表荐中创建了一个名为EQNEDT32.exe的键值:

08.png然后,为它设置一个EQNEDT32.exe执行是启动调试器的变量串值,以此把调试器附加到EQNEDT32.exe进程中去。

09.png当打开恶意RTF文档后,Winword.exe和EQNEDT32.exe两个进程同时启动。

10.png11.png在EQNEDT32.exe进程的入口点处,调试器被附加进入:

12.png现在,检查文件8.t是否在 %TMP% 目录中创建生成,果然8.t被drop到了 %TMP% 目录中:

13.png然后,在函数CreateFile处设置断点,查看漏洞利用的shellcode是否会读取文件8.t。在call eqnedt32.41E5EE处,函数CreateFile被调用。文件路径的参数在堆栈执行push dword ptr ss:[ebp-4]操作被压入堆栈,也即把内存ss:[ebp-4]处存放的双字压入堆栈。

14.png15.pngShellcode使用函数CreateFile把文件8.t创建生成到%TMP% 目录下,现在,可以在调用函数处返回用户代码。

16.png深入分析之后,进入shellcode区域,其地址空间已经发生改变。以下即为漏洞利用代码的shellcode段:

17.png在函数CreateFile调用之后, 函数GetFileSize被调用以获取文件大小:

18.png之后就是一个VirtualAlloc函数。VirtualAlloc是一个Windows API函数,该函数的功能是在调用进程的虚地址空间,预定或者提交一部分页,也可理解为申请内存空间。这里的VirtualAlloc函数在1FD0000 (eax value)处申请创建了一个内存页面,用它来加载文件8.t:

19.pngVirtualAlloc函数之后,创建的内存页面由EAX操作指向:

20.png分配的内存页面:

21.png然后,用函数ReadFile去读取文件8.t:

22.png接着,文件8.t被读取加载到了分配的内存页面 1FD0000 处,以下为文件8.t在内存页面中的样式:

23.png在0066C82A内存处,shellcode会对文件8.t进行编码解密,解密循环是围绕解密密钥进行的一系列异或(XOR)操作,解密开始,解密密钥被设置到了7BF48E63中。以下为解密循环:

24.png之后,执行异或(XOR)操作,解密密钥被设置到了EAX寄存器中:

25.png如果检查异或(XOR)操作的目的地ds:[edx+ebx],可以发现,在01FD0000处发生了文件8.t加载行为,两步执行解密之后,终于可以在内存区开头看到神奇的字符串“MZ”了,MZ为window的PE文件标志。

26.png解密循环结束之后,我们会在内存01FD0000处得到一个PE程序,到此,文件8.t被解密了:

27.png接下来,shellcode使用VirtualAlloc函数在02070000处创建了一个内存页面:

28.png之前,在内存01FD0000处解密得到的PE程序被拷贝到了这个地址处:

29.png在EQNEDT32.exe运行过程中,shellcode调用GetModuleFileNameA函数来获取自身文件的完整路径。之后,shellcode将正常的EQNEDT32.exe进程进行分支,创建出另一个独立的EQNEDT32.exe进程,并把它执行挂起状态:

30.png然后在地址02070000处把该进程进行覆盖:

31.png以下为NTWriteVirtualMemory写入内存时涉及的堆栈:

32.png之后,shellcode会把挂起状态的进程重启,以此执行新注入的PE程序。所以,可以发现在OLE对象开头处存在所有的API调用,并且存在runPE方法来启动新注入的 EQNEDT32.exe 程序。

EQNEDT32.exe独立进程的分支创建分析

前面提过,被注入覆盖的新进程EQNEDT32.exe会在目标操作系统中写入以下两个文件:

一个名为 RasTls.dll 的dll文件

一个名为dascgosrky.exe的可执行文件

如果把EQNEDT32.exe进程剥离出来,把它放到IDA中分析,可以发现该进程在sub_00401150处释放文件的方法函数,把它命名为dropFiles。

33.png在该方法开始,存在一个xor循环:

34.png之后,会调用压缩方法函数zlib:

35.png在sub_4012D0处,文件释放函数dropFiles会被两次调用。

36.png检查整个流程,可以发现,函数dropFiles只会被sub_4012D0进行调用,如下:

37.png由于EQNEDT32.exe每次的执行,都会由函数CreateFile的onstaticcache.dat文件启动,所以,在函数CreateFile处设置了一个断点:

38.png然后,回到用户代码中,在函数dropFiles初次被调用的0040159A处再设置一个断点,以便进行静态分析:

39.png这样,就能分析第二遍解密循环了,先要来初始化解密函数:

40.png接着,可以发现xor异或和把结果储存在esi+eax中操作:

41.png解密循环第一步中,结果被写入EQNEDT32.exe进程地址空间的411BC0:

42.png循环完成之后,可以得到zlib压缩对象的头信息:

43.png在内存页面021E0000中,会被分配存储dll文件:

44.png同时,在其中一个PE进程dascgosrky.exe会被解压缩:

45.png之后,RasTls.dll文件由以下路径被创建,并被储存在ebx寄存器中:

L”C:\\Users\\IEUser\\AppData\\Roaming\\Microsoft\\Windows\\Network Shortcuts\\RasTls.dll”

在此过程中,函数dropFiles被两次调用进行解密和PE文件的解压缩操作。EQNEDT32.exe进程的文件存储偏移位于00434EF8 ,而其PE解压缩程序dascgosrky.exe存储在025D0020处。如下图所示:

46.png之后,dascgosrky.exe释放到以下系统路径中,其基地址ebx为005DA228

L”C:\\Users\\IEUser\\AppData\\Roaming\\Microsoft\\Windows\\Network Shortcuts\\dascgosrky.exe”

由此,可以在网络行为中监测到以下两个文件释放到操作系统中:

47.pngdll劫持

表面来看,dascgosrky.exe程序是一个赛门铁克公司签发的合法可信文件:

48.png它为了加载RasTls.dll,会调用sub_401940处的 LoadLibrary 和 GetProcaddress 方法,来实现其恶意行为。以下为其加载的恶意行为:

49.png攻击者利用的网络架构

攻击者利用的域名为wouderfulu.impresstravel.ga,解析对应IP地址为192.99.181.14:

50.png在该IP地址中,存在多个越南语相关的对应域名,这些域名还和IP地址176.223.165.122有关联:

51.png其中两个越语域名有点意思:

halong.dulichculao.com 曾在对越某些机构发起的网络攻击中用过,Fortinet曾对这类攻击做过详细分析,并把其追溯为中国的黑客组织-1937CN。

把这两次攻击的各项TTP指标进行对比,发现基本相似,攻击者都使用了RTF文档作为前期入侵,而用DLL劫持作为后期payload加载。

此次攻击中的另外一个域名cat.toonganuh.com,是toonganuh.com的子域名,也曾被发现和中国黑客组织-1937CN注册过的邮箱florence1972@scryptmail.com有关联。

总结

基于以上发现,Sebastien Larinier推断,中国黑客组织 1937CN 以同样的TTPs手法和更新过的工具组件,针对越南政府部门开展着持续的网络攻击。Sebastien认为,1937CN创建RTF恶意文档的特性和“响尾蛇”APT组织相似。Sebastien Larinier声称将会在后续的分析中给出更多证据。

IOC

域名:

dn.dulichbiendao.org

gateway.vietbaotinmoi.com

web.thoitietvietnam.org

hn.dulichbiendao.org

halong.dulichculao.com

cat.toonganuh.com

new.sggpnews.com

dulichculao.com

coco.sodexoa.com.

thoitiet.malware-sinkhole.net

wouderfulu.impresstravel.ga

toonganuh.com

coco.sodexoa.com

IP地址:

192.99.181.14

176.223.165.122

RTFs:

42162c495e835cdf28670661a53d47d12255d9c791c1c5653673b25fb587ffed

8.t:

2c60d4312e4416745e56048ee35e694a79e1bc77e7e4d0b5811e64c84a72d2d7

PE:

f9ebf6aeb3f0fb0c29bd8f3d652476cd1fe8bd9a0c11cb15c43de33bbce0bf68 (exe)

9f5da7524817736cd85d87dae93fdbe478385baac1c0aa3102b6ad50d7e5e368 (dll)

Update:

The payload is PlugX. Thanks to Gabor Szappanos https://twitter.com/GaborSzappanos/status/1024622354582908928

Update IOCs:

597c0c6f397eefb06155abdf5aa9a7476c977c44ef8bd9575b01359e96273486 59.rtf

11f38b6a69978dad95c9b1479db9a8729ca57329855998bd41befc364657d654 RasTls.dll

f9ebf6aeb3f0fb0c29bd8f3d652476cd1fe8bd9a0c11cb15c43de33bbce0bf68 RasTls.exe

b70069e1c8e829bfd7090ba3dfbf0e256fc7dfcefc6acafb3b53abcf2caa2253 b7.rtf

77361b1ca09d6857d68cea052a0bb857e03d776d3e1943897315a80a19f20fc2 spoolsver.exe

9fba998ab2c1b7fec39da9817b27768ba7892c0613c4be7c525989161981d2e2 vsodscpl.dll

9d239ddd4c925d14e00b5a95827e9191bfda7d59858f141f6f5dcc52329838f0 9d.rtf

087d8bee1db61273a7cd533d52b63265d3a8a8b897526d7849c48bcdba4b22ec RasTls.dll

f9ebf6aeb3f0fb0c29bd8f3d652476cd1fe8bd9a0c11cb15c43de33bbce0bf68 RasTls.exe

332aa26d719a20f3a26b2b00a9ca5d2e090b33f5070b057f4950d4f088201ab9 rtf

93aa353320a8e27923880401a4a0f3760374b4d17dcd709d351e612d589b969d vsodscpl.dll

77361b1ca09d6857d68cea052a0bb857e03d776d3e1943897315a80a19f20fc2 ScnCfg.exe

*参考来源:medium ,clouds 编译,转载请注明来自 FreeBuf.COM

这些评论亮了

发表评论

已有 4 条评论

取消
Loading...
css.php