针对MSOffice的木马新变种(毒藤)深度分析_集群智慧网络安全云
全国客户服务热线:4006-054-001 疑难解答:159-9855-7370(7X24受理投诉、建议、合作、售前咨询),173-0411-9111(售前),155-4267-2990(售前),座机/传真:0411-83767788(售后),微信咨询:543646
企业服务导航

针对MSOffice的木马新变种(毒藤)深度分析

发布日期:2024-05-19 浏览次数: 专利申请、商标注册、软件著作权、资质办理快速响应热线:4006-054-001 微信:15998557370


针对MSOffice的木马新变种(毒藤)深度分析

最近FortiGuard实验室研究团队发现Poison Ivy木马(毒藤)新变种开始在感染的ppt文件中传播,Office应用(Word、Excel、PowerPoint、Works等)受此木马影响。我们捕捉到了一个名为Payment_Advice.ppsx的ppt文件,该文件为OOXML格式,一旦受害者利用office办公软件打开此文件,文件中的恶意代码就会执行,它会下载Poison Ivy恶意软件到受害者主机上运行。本文将详细阐述该木马的感染过程、利用的技术以及对受害者主机做了什么。 PPT样本 图一是样本ppt打开时的截图。 图1 打开Payment_Advice.ppsx 可以看到,ppsx文件自动播放,后缀ppsx代表“PowerPointShow”,以演示模式打开,这允许恶意代码自动执行,弹出的警告信息框警告用户可能正在运行不安全的外部程序,提示内容暗示用户点击允许,让我们看一下植入ppt文件中的恶意代码。OOXML文件是一种zip格式文件,解压此文件可以看到它的文件/文件夹结构如下。 图2 PPSX文件结构 进入.\ppt\slides\子目录下看到,slide1.xml是图1中自动展示的幻灯片,.\_rels\slide1.xml.rels文件是关系文件,定义了slide1.xml用到的资源,在slide1.xml文件中有如下xml代码: 这个a标签意味着用户鼠标移动到此元素时,会触发slide1.xml.rels中名为“rld2”的代码,图3展示了它们之前的关系: 图3 rld2中的代码 加入到启动组 rld2中的代码利用了cmd.exe命令来输出vbs代码到开始菜单->Startup文件夹的Thumbs.vbs文件,这样受害者主机启动时Thumbs.vbs文件就会执行。 图4 开始文件夹中的Thumb.vbs文件及内容 下载文件 Thumb.vbs从hxxp://203.248.116.182/images/Thumbs.bmp下载了一个文件并通过msiexec.exe执行,msiexec.exe是微软安装程序,也是.MSI文件的默认句柄,Msiexec.exe可被用来安装/卸载/更新windows软件。MSI文件是包含一个PE文件的安装包,这个PE在msiexec.exe加载它时执行,该PE文件可以被恶意软件替换来绕过反病毒软件的检测。我们也发现,越来越多恶意软件作者开始使用此方法运行他们的恶意软件,MSI文件在微软OLE复合文件格式中,用DocFile阅读器可以看到下载的Thumbs.bmp文件内容。 图5下载的Thumb.bmp文件内容 接下来从流中提取PE文件到一个文件中,利用PE分析工具发现它是一个64位的.Net程序,这意味着该恶意软件只会感染64位Windows系统。 分析运行.Net代码 将提取的这个文件加载到dnSpy之后可以看到入口函数Main(),如图6: 图6 主函数 主函数调用了rGHDcvkN.Exec()函数,该函数拥有一个大数组,数组中的数据其实就是要被新创建的线程作为线程函数执行的代码,图7 展示了数组中的代码执行过程。 图7 .Net程序在大数组中运行一个线程来执行代码 如果代码运行在64位系统IntPtr.Size值就是8,大数组被赋值给array3数组,随后调用rGHDcvkN.VirtualAlloc()来分配内存缓冲区,再调用Marshal.Copy()函数从array3复制代码到新分配的内存,最后调用rGHDcvkN.CreateThread()函数运行代码。在调试器中启动此.Net程序,给CreateThread API下了断点来分析数组中的代码执行时会做什么,每一次分析数组代码都是一次加载过程,主要目的是从内存空间动态加载恶意软件代码到新分配的内存缓冲区,然后根据新基地址修复重定位问题并修正代码主体的API偏移,最后才调用主体代码的入口函数。 反分析技术 1、 所有API都是隐藏的,得到调用时才恢复,以下代码片段是隐藏的CreateRemoteThread的调用。 sub_1B0E6122proc near mov  rax, 0FFFFFFFF88E23B10h neg  rax jmp  rax  ;; CreateRemoteThread sub_1B0E6122endp 2、 所有字符串均经过加密,使用前才解密,比如以下是加密的ntdll字符串: unk_1AFD538C  db 54h, 0B2h, 9Bh, 0F1h, 47h, 0Ch  ; ==> "ntdll" 3、 运行一个线程(命名为ThreadFun6)来检测API是否设置了断点,如果设置了断点则会启用另一个线程来调用TerminateProcess快速退出当前进程,线程函数在以下模块中检查所有的API:“ntdll”, “kernel32”, “kernelbase” 和 “user32”,图8展示了其工作原理: 图8 在ntdll模块中检查API断点 4、 运行一个线程检测是否存在运行的分析工具,通过创建特殊命名的管道来实现。比如管道\\.\Regmon代表注册表监控工具RegMon,管道\\.\FileMon代表本地文件监控工具FileMon,还有管道\\.\NTICESoftIce等等。如果其中一个命名管道无法创建,意味着其中的一个分析工具正在运行,恶意代码就会很快终止进程。 5、 会通过检测所有运行的windows程序是否有包含特殊字符的windows类名来判断有没有运行中的分析工具,比如WinDbgFrameClass是Windbg主windows类名,这种检查也是在线程中进行(命名为Threadfun3),下图9展示了该线程函数的工作过程。 图9 检查windows类名 6、 通过检测是否存在名为“Wireshark-is-running-{…}”的互斥对象(通过调用OpenMutex函数)来采取反抓包手段。 7、 通过调用“IsDebuggerPresent”这个API来检测进程是否运行在调试器中(返回1),这是一种反调试检测,也会调用IsDebuggerPresent来检测执行时间,如果超过了1000毫秒,说明进程是在调试器中或虚拟机中运行的就会退出进程。 以上这些都是该恶意软件采取的反分析技术,这些检测大部分都是在线程中每秒进行一次,任何一次匹配的检测都会导致恶意软件进程停止。为了继续分析该恶意软件,首先需要绕过这些检测,这可以通过动态调试的方式来实现,比如,改变IsDebuggerPresent的返回值为0来绕过“是否在调试器中运行”的检测。 从解密字符串中生成魔术字符串 解密3组字符串并合在一起得到一个魔术字符串”Poison IvyC++”,该字符串存储在全局变量qword_1B0E4A10中,从以下代码片段中可以看到这个魔术字符串的产生过程。 图10 产生魔术字符串 在6个不同模块中隐藏关键功能 该恶意软件从加密数据中加载了几个模块,创建了一个双链接列表并保存和管理这些加载的模块,来自这些模块的导出函数实现了恶意软件的主要功能,这种方式给动态调试带来了挑战,变量qword_1AFE45D0保存双链接列表头部,每一个列表中的对象有如下结构: +00H  pointer to previous object in the list +08H  pointer to next object in the list +18H  for Critical Section object use +28H  the base address of the module this object isrelated to +30H  pointer to export function table 恶意软件随后逐个解密并解压这6个模块,并添加他们到双链接列表中,图11展示了从这6个模块中解密的一个代码片段。 图11解密解压模块 每一个模块都有一个初始化函数,该函数在模块完成解密和解压时被调用,其中3个模块有类似于上文描述的反分析能力,为了继续分析此恶意代码,需要篡改代码来绕过检测函数。随后调用这些模块的导出函数,从unk_1AFE3DA0处的缓冲区解密配置数据,此配置数据在进程运行期间被解密多次,告知恶意代码如何工作,下文会详细阐述配置数据。 恶意软件从配置数据中提取一个字符串“%windir%\system32\svchost.exe”,随后调用CreatProcess来运行svchost.exe,从恶意代码运行内存中注入代码和数据到新创建的svchost.exe中,最后调用注入代码并退出当前运行的进程,恶意代码后续的工作在svchost.exe中完成。 SVCHOST.exe 注入的代码和数据是整个恶意软件的核心,在svchost.exe进程中重新开始,之前发生的每一步会在svchost.exe中重复进行,比如执行反分析检测代码,获取魔术字符串,创建双链接列表,解密模块并加入到双链接列表等。 在执行模块2的01736C2 cmp dword ptr [rdi+0Ch]指令时会选择不同的代码分支,[rdi+0ch]是一个标志位,会在代码初始化完成时传递,标志位值为0时运行svchost.exe并注入代码,标志位值为1时连接C&C服务器,标志位在svchost.exe注入代码执行前被置为1,图12展示了代码分支逻辑。 图12 代码分支片段 从PasteBin获取C&C服务器信息 C&C服务器的IP地址和端口被加密保存在PasteBin网站中,PasteBin是文本代码分享网站,注册用户可以粘贴文本代码并分享给其他人,恶意代码作者创建了4个这样的页面并在页面加入了C&C服务器IP和端口信息,还记得先前提到的加密配置数据吗?它包含4个PasteBin 的URL,分别是: hxxps://pastebin.com/Xhpmhhuy hxxps://pastebin.com/m3TPwxQs hxxps://pastebin.com/D8A2azM8 hxxps://pastebin.com/KQAxvdvJ 图13展示了解密的配置数据。 图13 解密的配置数据 访问其中任何一个URL会看到Python代码,加密的服务器IP地址和端口被隐藏在python代码中,查看主函数有如下代码: win32serviceutil.HandleCommandLine({65YbRI+gEtvlZpo0qw6CrNdWDoev}) 花括号中的数据是加密IP和端口信息,图14是详细信息。 图14 PasteBin中加密的C&C服务器IP和端口 解密后的内容见图15, 图15 解密的IP地址和端口 从图15可以确定解密的C&C服务器IP是172.104.100.53,端口是1BBH也就是443端口。需要注意的是4个页面中的IP和端口都是不一样的,该恶意软件的作者通过简单更新4个PasteBin页面中的python代码就能够更新这些IP地址和端口信息。 与C&C服务器通信 该恶意软件获取到IP和端口信息后就会发起连接并发送数据到C&C服务器,它和服务器之间传输的所有数据包都经过私有算法加密,数据包结构就像这样(前14H字节是头部部分,14H往后是数据部分): +00 4 bytesare a key for encryption or decryption. +04 4 byte,are the packet command. +0c 4 bytes isthe length in bytes of the data portion of the packet. +14 4 bytes.From this point on is the real data. 与服务器建立连接之后,会发送30001指令,服务器通过30003指令应答,30003指令请求客户端收集受害者主机信息,一旦恶意软件收到此指令,就会调用大量API来收集主机信息。 a) 调用GlobalmemoryStatusEx收集系统物理内存和虚拟内存的当前使用情况 b)从系统注册表“HKLM\HARDWARE\DESCRIPTION\SYSTEM\CENTRALPROCESSOR\0\~MHz”中获取CPU速度信息 c) 调用GetDiskFreeSpaceExA获取所有分区的空闲磁盘空间 d)调用GetNativeSysstemInfo获取CPU架构 e) 调用EnumDisplaySetting获取显示设置 f)  从kernel32.dll收集文件信息 g)调用GetComputerName和GetUserName获取当前计算机名和用户名 h) 调用GetSystemTime获取系统时间,调用GetVersionEx获取系统版本信息 i)  最后从解密的配置数据中复制svchost.exe的完整路径和常量字符串PasteBin83(见图13) 图16可以看到收集到的未加密系统信息,图17展示了要被发往C&C服务器的加密数据,前四个字节用来加密或解密以下数据: 图16 从受害者主机收集的信息 图17 加密的受害者主机信息 分析发现,恶意软件持续从PasteBin获取C&C服务器IP并保持与C&C服务器的循环通信(通过Sleep(1000)挂起执行)。到目前为止,只发现指令“030001” 和 “030003”被使用过,后续会持续监控和分析该恶意软件的行为来看它还会做什么。 解决方法 FortiGuard反病毒服务已经能够识别”Payment_Advice.ppsx”文件为MSOFFICE/PoisonIvy.A!tr.dldr病毒,识别”Thumbs.bmp”为MSOFFICE/PoisonIvy.A!tr病毒。 IOC URL: hxxp://203.248.116.182/images/Thumbs.bmp 样本SHA-256哈希: Payment_Advice.ppsx E7931270A89035125E6E6655C04FEE00798C4C2D15846947E41DF6BBA36C75AE Thumbs.bmp A3E8ECF21D2A8046D385160CA7E291390E3C962A7107B06D338C357002D2C2D9 *本文作者:cyj@y5un,转载请注明FreeBuf.COM

针对MSOffice的木马新变种(毒藤)深度分析