0x1 概述
2018年8月,Sebdraven在他的博客上披露了一起某黑客组织针对越南的攻击事件,本次攻击仍然使用的是office公式编辑器漏洞CVE-2017-11882。然后通过傀儡进程技术释放dll文件和一个带有签名的文件,并使用白加黑的dll加载机制进行恶意代码的加载,然后通过代码注入的方式实现无文件的攻击。所使用到的负载为Plugx。
Sebdraven在他的博客分析了本次攻击的前一部分。本文将重点分析shellcode利用,为了全文连贯性也将描述前部分的利用。全文分析仅代表个人立场,与任何公司或者组织无关。需要强调的是这次攻击可能发生在2018年上半年。本次分析在2019年9月份。
0x2 攻击链分析
0x3 样本分析
通过rtfobj.py发现Ole对象中存在8.t这样的特殊文件名,而且释放的位置很可疑,位于%temp目录下,当我们查看他的时候,却发现文件是被加密过的。
通过对CVE-2017-11882的分析,此漏洞的溢出位于411658的位置,属于栈溢出漏洞,使用映像劫持的方法挂上od调试,然后单步跳转到shellcode入口点。jmp ecx过后就是真正的shellcode所在了。在上一篇文章中,我们也说到了,公式编辑微软很少进行更新,能够有效的被利用,也是很多在野样本系统次漏洞的原因,与此相同的是CVE-2012-0158和CVE-2018-0802都是诸多APT所钟爱的漏洞。
通过对shellcode的分析,发现shellcode首先会利用Ldr获取相关模块如Kernel32的基地址,然后通过导出表获取相关API函数的地址,在分析中,我们发现,主要会获取如下的API地址。
GetProActive
GetTempPathA
ReadFile
GetFileSize
VirtualAlloc
GetThreadContext
ReadProcessMemory
VirtualQueryEx
VirtualProtect
VirtualAllocEx
WriteProcessMemory
SetThreadContext
ZwUnmapviewOfSection
![mark](http://hacky.wang/blog/20191019/B7P4RqXSjsx6.jpg?imageslim)
![mark](http://hacky.wang/blog/20191019/YXeq5BnwNXjs.jpg?imageslim)
显然,这像是一些进程替换技术所使用到的API函数。首先,shellcode会读取%tmp/8.t到内存,然后使用异或解密的方式解密成合乎规范的PE文件。
然后在利用VirtualProtect,WriteProcessMemory,SetThreadContext等函数注入EQNEDT32.exe进程。
通过转储注入到EQNEDT32.exe进程的PE文件8.t,并对其分析,我们发现8.t的逻辑很简单,就是在C:UsershackyAppDataRoamingMicrosoftWindowsNetwork Shortcuts下写入RasTls.dll和dascgosrky.exe,然后通过WinExec执行dascgosrky.exe,之后就退出,效果如三图
通过进一步的分析,我们发现,dascgosrky.exe是一个具有数字签名的正常文件,同时RasTls.dll是一个系统文件,
通过比较,我们发现差异存在于RasTls.dll文件上,下图,右侧是正常文件的导出信息,存在多个导出函数,右侧是恶意的RasTls.dll文件,只有一个DllEntryPoint函数。
在恶意的RasTls.dll中我们发现了一个有趣的现象,RasTls.dll先将自身复制到了堆区,然后修正自身的重定位信息,最后调转到重定位之前为72E314A0的地址。
在此地址处,我们发现首先调用FreeLibrary函数释放了dll模块,说明这个模块也可能只是一个壳子而已。 然后创建一个线程
我们发现样本通过在注册表SOFTWAREMicrosoftWindowsCurrentVersionRun下写入名为difxapi32的值实现了驻留,接着通过相同的方式入侵了dllhost.exe进程,并将shellcode写入进程中。
我们使用winhex将提取到的shellcode转化成C的格式,然后通过编程实现一个shellcode加载的环节,用于shellcode本身是地址无关的,所以我们无需担心内存地址冲突的问题
0x4 shellcode分析
样本只采用了一段shellcode,但是中间,分别利用VirtualAlloc开辟不同的内存,然后执行。每段开辟的堆区地址不同,为了方便描述,顾将shellcode分为多段。具体如下
通过对shellcode调试分析,我们发现shellcode也同样获取了Kernel32的基地址,然后获取GetProcAddress地址,然后利用明文的方式调用GetProcAddress获取可定的函数地址。
LoadLibrary
VirtualAlloc
FreeLibrary
Sleep
GetLastError
CreateMutex
如下
然后开辟一堆内容,然后将其地址传入sub_42179C中,解密shellcode
接着循环获取特定的API函数地址,并保存在一个全局数组中,以便后续的shellcode能直接使用,然后执行经过解密的shellcode
综上,第一段shellcode的作用只是初始化某些特定的API函数,共后续的调用,然后解密第二段shellcode。
第二段shellcode在线程中执行主要的操作,先创建了名为”{EA917329-DE48-4CC3-B4EF-2FFC9E18C6C7}”通过互斥来判断是否多开。然后将自身保存的数据复制到开辟的堆上,然后异或解密直接复制到堆中的数据,然后执行第三段shellcode。
第二段shellcode的作用是通过互斥方防止多开,然后xor解密下一段(第三段)的shellcode,并执行。
第三段shellcode里面存在大量的花指令,如下
我们发现第四段shellcode是另外一段内存空间,对VirtualAlloc下断。发现开辟了Size = 0x24A0000,地址为490000的内存区域,用于存放下一段shellcode
首先将58h,56h两个字节复制到开辟的堆区中。ascii编码为’XV’,这是日后定性的条件之一。然后循环复制一段数据到新的内容空间4C1000
接着,程序修复IAT,可以看到程序会依次获取Kernel32,User32,AdvApi32等基地址,然后利用GetProcAddress获取指定的API函数地址,然后将这些函数地址保存到指定的地址如4DF000,然后跳转到下一段Shellcode
在第四段shellcode中,首先会获取自身的进程名称,然后与C:ProgramDatagZwJElkSUikCYKmoic.exe比较,如果不相同的话就创建名为Globalkhlodtrlpaoefmt互斥体,其中khlodtrlpaoefmt和gZwJElkSUikCYK字符串都是可以确定样本家族的特征。
读取C:ProgramDatagZwJElkSUikCYKsjzvwqwujwead文件,如果不存在创建一个
在进程缓冲区中发现如下局域网地址和对应的掩码,而这些地址都是本地局域网相关的ip配置。可以推断sjzvwqwujwead文件可能保存的是加密之后的本地信息,然后通过读写C:UsershackyAppDataLocalMicrosoftWindowsTemporary Internet FilesContent.IE5index.dat,用来获取用户浏览记录并把其加密存储在sjzvwqwujwead文件中。创建并设置隐藏属性C:ProgramDatagZwJElkSUikCYKqucvctgvdtmfcwo,同时修改时间为2010.11.21
本地ip:192.168.76.130
255.255.255.0
默认网关:192.168.276.2
255.255.255.255
DHCP:192.168.76.254
DNS:192.168.76.2
如下
之后连接WOUDERFULU.impresstravel.ga,并发送加密之后的数据。然后尝试链接27.0.0.1
样本的功能远不止这些,因为我在分析shellcode中,发现了一些常见且很敏感的API函数,这里记录了其中的一些
通过检查之前提到的特定的字符例如XV
,khlodtrlpaoefmt
和gZwJElkSUikCYK
,我们将此次攻击的载荷确定为Plugx。
本次攻击发生在2018年,C2的信息以及发生更改,没有办法获取到链接C2后具体的行为,但是我们根据一些特定的API函数推测出一些可能的行为
- 创建服务实现驻留
- 枚举服务,包括删除,更改服务的属性
- 枚举进程信息,包括模块信息
- 截图
- 捕获键盘记录信息
- 获取计算机系统,物理,用户信息
- 关闭/注销/重启计算机
- 还有一些网络攻击的行为,获取DNS,Mib等信息
- 具体行为如下:https://www.4hou.com/technology/10394.html
0x5 关联分析
- 之前,我们说过本次共计的时间是在2018年,通过使用微步云沙箱查询域名解析相关信息,发现该域名在2018年绑定的是192[.]99.181.14。并且通过关联,发现一共有有多个域名曾经绑定在该IP上。
- 接着我们查询192.99.181.14的关联信息,发现一共有5个域名同时解析到该IP上,分别是
coco.sodexoa.com cat.toonganuh.com new.sggpnews.com wouderfulu.impresstravel.ga sz-00001935.rn-20404151.id-00000001.v0.tun.vpnoverdns.com
- 并且在关联到的域名cat.toonganuh.com下发现了注册人信息florence1972@scryptmail.com,然后在sz-00001935.rn-20404151.id-00000001.v0.tun.vpnoverdns.com域名下同样的发现了注册人的信息,这次出现的账号是ab83c8cce420a01d52a100088385c27c-88140@contact.gandi.net。