首页
社区
课程
招聘
[翻译]CVE-2017-11826被利用在带有政治主题的RTF文档中
2017-12-8 20:32 5025

[翻译]CVE-2017-11826被利用在带有政治主题的RTF文档中

2017-12-8 20:32
5025

原文链接:《CVE-2017-11826 Exploited in the Wild with Politically Themed RTF Document》

 

最近,FortiGuard Labs(飞塔防御实验室)发现一起有意思的恶意软件行动,使用了今年10月刚被微软修复的文档漏洞CVE-2017-11826

 

基于这次行动中用来引诱受害者的内容,以及载荷的行为,我们有预感这是并不是一次普通的网络犯罪行动,它甚至可能针对特定设施和地区。出于这个原因,我们决定深入研究一下。

 

和这类攻击的手法类似,用于本次行动的C2服务器只在一段很短的时间内存活。这意味着来自动态分析的信息是十分有限的。然而,弄清楚攻击者可以在一个受害者的系统里干什么也是很重要的。这不仅能帮助评估此次行动可能会造成的损失,也可以作为将来针对这类攻击的缓解措施的基础。在这个案例里,关于载荷,我们不得不去求助于静态分析工具,以在某种程度上模拟如果C2服务器活着会发生什么。

政治主题的诱饵

此次行动的攻击媒介是一个恶意的富文本文档(RTF),使用针对性的、带有政治主题的内容去诱使一个用户去打开该文档。当RTF文档执行的时候,它会展示一段关于Aqua Mul Mujahidin,一个主张缅甸若开邦(Rakhine)武装抵抗的圣战组织。

图1:初始文档

 

在利用触发后,另一个诱饵文档被展现给用户。这一次的文本是关于在沙特阿拉伯的权利斗争,这显然是从一篇名为Saudi Arabia’s ‘Game of Thobes’的网上文章中复制的。

图2:诱饵文档

 

我们并不清楚这两个内容之间有什么关联,但这显然是用来诱使一个对这类事件带有特定兴趣或知识的,认为这个文档是友好的人打开该文档。实际上,利用会用它自己的方式在后台运行,以投递一个能够控制不知情的受害者系统的恶意软件。

解剖CVE-2017-11826RTF文档

通常,一个RTF利用使用OLE以将载荷包含在文档内。下面的分析展示了如何用开源工具去定位和提取利用载荷。
Didier StevensRTFdump.py允许列出RTF文档中的所有控制字。我们感兴趣的特定控制字叫做“\object”,它被用来定义嵌入的OLE对象。

E:\rtfdump_V0_0_3>rtfdump.py -d E:\CVE-2017-11826\cve-2017-11826_rtf | findstr /I "object"
 1698  Level  2       c=    3 p=000396d9 l=     217 h=     126 b=       0   u=       4 \object
 1703  Level  2       c=    3 p=000397b3 l=  106721 h=  106600 b=       0   u=      10 \object
 1708  Level  2       c=    3 p=00053895 l=   28897 h=   28776 b=       0   u=      10 \object

E:\rtfdump_V0_0_3>rtfdump.py -d E:\CVE-2017-11826\cve-2017-11826_rtf -s 1698 > object_1698.bin
E:\rtfdump_V0_0_3>rtfdump.py -d E:\CVE-2017-11826\cve-2017-11826_rtf -s 1703 > object_1703.bin
E:\rtfdump_V0_0_3>rtfdump.py -d E:\CVE-2017-11826\cve-2017-11826_rtf -s 1708 > object_1708.bin

列表1:使用rtfdump.py去定位嵌入的对象

 




图3:从RTF利用文档内发现并抽取的3个不同对象的输出

 

#1698这一OLE对象的目的是用来自动加载COM动态库:C:\Windows\system32\msvbvm60.dll,方法是通过在“\oleclsid”关键字内指定CLSID {D5DE8D20-5BB8-11D1-A1E3-00A0C90F2731}到Microsoft Word的进程地址空间内。这个COM动态库并未开启地址空间布局随机化编译选项。因此,利用经常会利用这一优势为有漏洞的office组件构建一个利用链。另一方面,被dump的#1703#1708对象似乎是Word文档,正如上面“\objclass”所指的那样。然而,这些OLE对象以16进制字符串展现,所以我们需要将16进制字符串转化为二进制格式,以便阅读它们。为了实现这一点,我们可以使用Decalageoletools套件中的rtfobj.py

C:\Python27\Lib\site-packages\oletools\rtfobj.py -s all E:\CVE-2017-11826\object_1703.bin
rtfobj 0.50 - http://decalage.info/python/oletools
THIS IS WORK IN PROGRESS - Check updates regularly!
Please report any issue at https://github.com/decalage2/oletools/issues

===============================================================================
File: 'E:\\CVE-2017-11826\\object_1703.bin' - size: 106713 bytes
---+----------+-------------------------------+-------------------------------
id |index     |OLE Object                     |OLE Package
---+----------+-------------------------------+-------------------------------
0  |0000004Ch |format_id: 2                   |Not an OLE Package
   |          |class name: 'Word.Document.12' |
   |          |data size: 53248               |
---+----------+-------------------------------+-------------------------------
Saving file embedded in OLE object #0:
  format_id  = 2
  class name = 'Word.Document.12'
  data size  = 53248
  saving to file E:\\CVE-2017-11826\\object_1703.bin_object_0000004C.doc

C:\Python27\Lib\site-packages\oletools\rtfobj.py -s all E:\CVE-2017-11826\object_1708.bin
rtfobj 0.50 - http://decalage.info/python/oletools
THIS IS WORK IN PROGRESS - Check updates regularly!
Please report any issue at https://github.com/decalage2/oletools/issues

===============================================================================
File: 'E:\\CVE-2017-11826\\object_1708.bin' - size: 28889 bytes
---+----------+-------------------------------+-------------------------------
id |index     |OLE Object                     |OLE Package
---+----------+-------------------------------+-------------------------------
0  |0000004Ch |format_id: 2                   |Not an OLE Package
   |          |class name: 'Word.Document.12' |
   |          |data size: 14336               |
---+----------+-------------------------------+-------------------------------
Saving file embedded in OLE object #0:
  format_id  = 2
  class name = 'Word.Document.12'
  data size  = 14336
  saving to file E:\CVE-2017-11826\object_1708.bin_object_0000004C.doc

列表2:将Word文档从16进制转化为2进制格式的输出

 

总结一下,两个被提取的文档都是内嵌DOCX的OLE文件,它们是以“Package”作为其流名的,基于XML的压缩文档。我们可以使用Didier Stevensoledump.py来dump Package的内容:

E:\Oledump\oledump_V0_0_3oledump.py E:\CVE-2017-11826\object_1703.bin_object_0000004C.doc
 1:      114 '\x01CompObj'
 2:        6 '\x03ObjInfo'
 3:    50517 'Package'

E:\Oledump\oledump_V0_0_3>oledump.py -s 3 -d E:\CVE-2017-11826\object_1703.bin_object_0000004C.doc > object_1703_Package.docx

E:\Oledump\oledump_V0_0_3>oledump.py E:\CVE-2017-11826\object_1708.bin_object_0000004C.doc
 1:      114 '\x01CompObj'
 2:        6 '\x03ObjInfo'
 3:    11304 'Package'

E:\Oledump\oledump_V0_0_3>oledump.py -s 3 -d E:\CVE-2017-11826\object_1708.bin_object_0000004C.doc > object_1708_Package.docx

列表3:dump内嵌在DOC文档内的DOCX文档的结果

 

基于来自oledump.py的结果,我们可以断定object_1703_Package.docx是作为一个堆喷射组件,这是一种用攻击者所控制的,利用来自ActiveX对象的数据(例如:activeX.1)来申请一大块连续内存地址的技术。我们可以在解压后的docx文档中看到它们:

E:\CVE-2017-11826\object_1703_Package>dir .\word\activeX\activeX*
 Volume in drive E is Seagate Expansion Drive
 Volume Serial Number is 1E12-60A4

 Directory of E:\CVE-2017-11826\object_1703_Package\word\activeX

17/09/2017  05:12 PM         2,099,200 activeX1.bin
17/09/2017  05:12 PM               299 activeX1.xml
17/09/2017  05:12 PM               299 activeX10.xml
17/09/2017  05:12 PM               299 activeX11.xml
17/09/2017  05:12 PM               299 activeX12.xml
17/09/2017  05:12 PM               299 activeX13.xml
17/09/2017  05:12 PM               299 activeX14.xml
17/09/2017  05:12 PM               299 activeX15.xml
17/09/2017  05:12 PM               299 activeX16.xml
17/09/2017  05:12 PM               299 activeX17.xml
17/09/2017  05:12 PM               299 activeX18.xml
17/09/2017  05:12 PM               299 activeX19.xml
17/09/2017  05:12 PM               299 activeX2.xml
17/09/2017  05:12 PM               299 activeX20.xml
17/09/2017  05:12 PM               299 activeX21.xml
17/09/2017  05:12 PM               299 activeX22.xml
17/09/2017  05:12 PM               299 activeX23.xml
17/09/2017  05:12 PM               299 activeX24.xml
17/09/2017  05:12 PM               299 activeX25.xml
17/09/2017  05:12 PM               299 activeX26.xml
17/09/2017  05:12 PM               299 activeX27.xml
17/09/2017  05:12 PM               299 activeX28.xml
17/09/2017  05:12 PM               299 activeX29.xml
17/09/2017  05:12 PM               299 activeX3.xml
17/09/2017  05:12 PM               299 activeX30.xml
17/09/2017  05:12 PM               299 activeX31.xml
17/09/2017  05:12 PM               299 activeX32.xml
17/09/2017  05:12 PM               299 activeX33.xml
17/09/2017  05:12 PM               299 activeX34.xml
17/09/2017  05:12 PM               299 activeX35.xml
17/09/2017  05:12 PM               299 activeX36.xml
17/09/2017  05:12 PM               299 activeX37.xml
17/09/2017  05:12 PM               299 activeX38.xml
17/09/2017  05:12 PM               299 activeX39.xml
17/09/2017  05:12 PM               299 activeX4.xml
17/09/2017  05:12 PM               299 activeX40.xml
17/09/2017  05:12 PM               299 activeX5.xml
17/09/2017  05:12 PM               299 activeX6.xml
17/09/2017  05:12 PM               299 activeX7.xml
17/09/2017  05:12 PM               299 activeX8.xml
17/09/2017  05:12 PM               299 activeX9.xml
              41 File(s)      2,111,160 bytes
               0 Dir(s)  357,963,862,016 bytes free

列表4:#1703 DOCX文档解压后的内容

 

除此之外,object_1708_Package.docx包含多个XML文件,你可以在解压这个DOCX文档后轻易看到它们,这个文档是用来被Word解析的。基于我们过去的经验,该文件内应该有能触发CVE-2017-11826漏洞的被恶意构造的XML文件。由于在一个DOCX文档中往往包含多个XML文件,逐个查看这些XML文件是很费时间的。所以我们决定祭出调试器来找出元凶。

理解CVE-2017-11826漏洞的根本原因

请注意,接下来的分析基于wwlib.dll 14.0.7182.5000,软件版本为Microsoft Word 2010 32位版本

 

下面的列表5显示了当使用调试器在一个能触发漏洞的winword.exe中打开object_1708_Package.docx的崩溃上下文:

First chance exceptions are reported before any exception handling.
This exception may be expected and handled.
eax=088888ec ebx=00000000 ecx=00000000 edx=00000004 esi=054cb29c edi=1014c8cc
eip=68bb962d esp=001c3358 ebp=001c33c4 iopl=0         nv up ei pl nz na po nc
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000             efl=00010202
*** ERROR: Symbol file could not be found.  Defaulted to export symbols for C:\Program Files\Microsoft Office\Office14\wwlib.dll - 
wwlib!DllGetClassObject+0xf2e3d:
68bb962d ff5104          call    dword ptr [ecx+4]    ds:0023:00000004=????????
*** ERROR: Symbol file could not be found.  Defaulted to export symbols for C:\Program Files\Common Files\Microsoft Shared\office14\mso.dll - 
0:000> kb
ChildEBP RetAddr  Args to Child              
WARNING: Stack unwind information not available. Following frames may be wrong.
001c33c4 68ad1a32 00000000 001c3438 00000000 wwlib!DllGetClassObject+0xf2e3d
001c3418 66524316 0000ffff 0000001a 0b648a94 wwlib!DllGetClassObject+0xb242
001c3458 6634929f 11940fe4 0bf3ffac 00000027 mso!Ordinal6611+0x120
001c34a8 71689441 0fb7ef6c 0b20dfb0 80000005 mso!Ordinal4512+0xa9d
001c3514 7168941f 00000004 0b648a9c 0b648a90 msxml6!Reader::ParseElementN+0x379 [d:\w7rtm\sql\xml\msxml6\mx\reader\reader.cxx @ 3032]
001c3560 7168941f 00000003 0b648a9c 0b648a90 msxml6!Reader::ParseElementN+0x268 [d:\w7rtm\sql\xml\msxml6\mx\reader\reader.cxx @ 2964]
001c35ac 7168941f 00000002 0b648a9c 0b648a90 msxml6!Reader::ParseElementN+0x268 [d:\w7rtm\sql\xml\msxml6\mx\reader\reader.cxx @ 2964]
001c35f8 7168941f 00000001 0b648a9c 0b648a90 msxml6!Reader::ParseElementN+0x268 [d:\w7rtm\sql\xml\msxml6\mx\reader\reader.cxx @ 2964]
001c3644 7168941f 0b648a9c 0b648a90 00000000 msxml6!Reader::ParseElementN+0x268 [d:\w7rtm\sql\xml\msxml6\mx\reader\reader.cxx @ 2964]
001c3690 716871df 0b648a90 00000000 00000000 msxml6!Reader::ParseElementN+0x268 [d:\w7rtm\sql\xml\msxml6\mx\reader\reader.cxx @ 2964]
001c36a0 7168711b 83515133 0b648a90 0b5c0fe8 msxml6!Reader::ParseDocument+0x97 [d:\w7rtm\sql\xml\msxml6\mx\reader\reader.cxx @ 2747]
001c36dc 71689e2b 835150f3 001c3738 001c3788 msxml6!Reader::Parse+0xb1 [d:\w7rtm\sql\xml\msxml6\mx\reader\reader.cxx @ 1482]
001c371c 71687dcb 0b648a90 119a000d 001c48a8 msxml6!Reader::parse+0x162 [d:\w7rtm\sql\xml\msxml6\mx\reader\reader.cxx @ 938]
001c376c 6634877d 0b648a90 119a000d 001c48a8 msxml6!SAXReader::parse+0x145 [d:\w7rtm\sql\xml\msxml6\mx\om\saxreader.cxx @ 828]
001c379c 6652455b 00000000 119a000d 001c48a8 mso!Ordinal318+0x8a3
001c37d4 68acede0 11940fe0 11b99ff0 0ffbcfec mso!Ordinal2664+0x234
001c48a8 68acd3c5 0fbf0948 00000000 0fa1eff0 wwlib!DllGetClassObject+0x85f0
001c5d80 68acc2db 001c603c 10198fe8 054cb250 wwlib!DllGetClassObject+0x6bd5
001c6024 68acbeca 001c603c 40280000 00000030 wwlib!DllGetClassObject+0x5aeb
001c609c 68acabee 0000000c 04012000 001c77a8 wwlib!DllGetClassObject+0x56da
001c7794 68ac984d 0000000c 00000000 04012000 wwlib!DllGetClassObject+0x43fe
001c7c3c 68b90b55 001c8584 00000001 00000000 wwlib!DllGetClassObject+0x305d
001c9010 68b8f6ff 001c9334 001c932c 04012000 wwlib!DllGetClassObject+0xca365
001c905c 68e53819 001c9334 001c932c 04012000 wwlib!DllGetClassObject+0xc8f0f
001ca5b0 690b404a 001ca60c 00000824 00000000 wwlib!DllGetClassObject+0x38d029
001cb65c 6890e9c5 001cbb50 ffffffff 00000001 wwlib!DllGetClassObject+0x5ed85a
001cbb24 688ff4f7 00000003 001cbb50 00000001 wwlib!DllMain+0x11dd4
001cdb94 6924b641 001cdc72 0000000a 001cdbfc wwlib!DllMain+0x2906
*** ERROR: Symbol file could not be found.  Defaulted to export symbols for winword.exe - 
001cfd08 2fdd1c68 2fdd0000 00000000 023aefc9 wwlib!FMain+0x491
001cfd2c 2fdd1ec2 2fdd0000 00000000 023aefc9 winword!wdGetApplicationObject+0x63a
001cfdbc 76a4ef8c 7ffdc000 001cfe08 7755367a winword!wdGetApplicationObject+0x894
001cfdc8 7755367a 7ffdc000 76598307 00000000 kernel32!BaseThreadInitThunk+0xe
001cfe08 7755364d 2fdd2045 7ffdc000 ffffffff ntdll!__RtlUserThreadStart+0x70
001cfe20 00000000 2fdd2045 7ffdc000 00000000 ntdll!_RtlUserThreadStart+0x1b
0:000> ub . l10
wwlib!DllGetClassObject+0xf2e13:
68bb9603 752d            jne     wwlib!DllGetClassObject+0xf2e42 (68bb9632)
68bb9605 8bb6f0170000    mov     esi,dword ptr [esi+17F0h]
68bb960b 8b06            mov     eax,dword ptr [esi]
68bb960d 8b10            mov     edx,dword ptr [eax]
68bb960f 4a              dec     edx
68bb9610 4a              dec     edx
68bb9611 8bce            mov     ecx,esi
68bb9613 e8ee70d4ff      call    wwlib!DllMain+0x3b15 (68900706)
68bb9618 8b4044          mov     eax,dword ptr [eax+44h]
68bb961b 8b4044          mov     eax,dword ptr [eax+44h]
68bb961e 8b4f44          mov     ecx,dword ptr [edi+44h]
68bb9621 894144          mov     dword ptr [ecx+44h],eax    // EAX=088888ec
68bb9624 8b4744          mov     eax,dword ptr [edi+44h]
68bb9627 8b4044          mov     eax,dword ptr [eax+44h]
68bb962a 8b08            mov     ecx,dword ptr [eax]
68bb962c 50              push    eax
68bb962d ff5104          call    dword ptr [ecx+4]    ds:0023:00000004=????????

列表5:Microsoft Word崩溃上下文

0:000> r
eax=088888ec ebx=00000000 ecx=00000000 edx=00000004 esi=054cb29c edi=1014c8cc
eip=68bb962d esp=001c3358 ebp=001c33c4 iopl=0         nv up ei pl nz na po nc
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000             efl=00010202
wwlib!DllGetClassObject+0xf2e3d:
68bb962d ff5104          call    dword ptr [ecx+4]    ds:0023:00000004=????????
0:000> dc 088888ec 
088888ec  00000000 00000000 00000000 00000000  ................
088888fc  00000000 00000000 00000000 00000000  ................
0888890c  00000000 00000000 00000000 00000000  ................
0888891c  00000000 00000000 00000000 00000000  ................
0888892c  00000000 00000000 00000000 00000000  ................
0888893c  00000000 00000000 00000000 00000000  ................
0888894c  00000000 00000000 00000000 00000000  ................
0888895c  00000000 00000000 00000000 00000000  ................

列表6:一个非法的函数调用解引用导致的内容为空的虚表

 

简而言之,位于0x88888ec处的一个虚表在执行wwlib!DllMain+3b15函数后被返回。这个虚表在随后部分的代码中(位于0x68BB962D地址处)被解引用。当代码通过call指令解引用一个函数指针时,由于虚表处的内容为空,导致发生一处访问违例,如列表6中所示的那样。

 

在执行漏洞文件若干次后,我们观察到相同的0x88888ec地址被上面所说的函数所返回。对该函数的一次快速审视揭示了它基本上会返回一个指向某未知对象的指针。然而,由于微软没有提供Microsoft Office二进制文件的符号,想要了解被返回的是何种对象需要更多逆向工程方面的努力。因此,我们决定采用另一种可选方法。幸运的是,基于列表5中的栈回溯,我们能够辨认出一些有趣的XML解析函数,例如msxml6!Reader::ParseDocumentmsxml6!Reader::ParseElementN,这些函数与XML文件的解析相关,正如它们的名字所示的那样。最终,我们能够缩小我们分析的区间(感谢微软提供的msxml6.dll符号文件!)

 

在一番逆向工程后,位于Reader::ParseElementN内的Scanner::GetTokenValueQName函数映入了我们的眼帘。基本上,它的目的是获取标签名称(例如:标签名称会是w:body),这是Office Open XML使用的技术。为了缩短我们的分析时间,我们决定设置一些在函数被调用时可打印标签名的调试断点。

列表7:使用调试断点去发现有问题的XML段名称

 

如上述列表所示,出现问题的名称似乎是o:idmap。我们可以马上在DOCX文档中的所有XML文件中查找有问题的名称,以锁定相关的XML文件:

 

在用document.xml进行一些试验后,我们能够确定这就是有问题的XML文件。我们将font name修改如下,然后发现一个不同的地址被(前面提到的函数)所返回:

 

作为结果,我们在调试器里面得到了如下输出:

列表8:在手动修改w:font内容后的调试器输出

 

这一次我们在call指令前得到了访问违例,因为它解引用了0x410041地址,这正是我们在修改后的document.xml中所提供的。因此,我们可以得出结论,漏洞触发的根本原因是o:OLEObject标签名中嵌入的font标签名导致了wwlib!DllMain+3b15函数返回不正确的font对象,从而造成类型混淆。

CVE-2017-11826利用里的ShellCode的分析

正如前面章节所示,通过操纵一个嵌入的font名称的内容,攻击者可以在call指令中指定任意地址。攻击者选择了静态的0x88888ec地址,这是我们在初始的document.xml文档中看到的的font名称被编码成unicode导致的结果,正如在前面的章节解释的那样。

 

这时候就轮到堆喷射出场了。如果堆喷射成功执行,activeX1.bin内的栈置换语句和硬编码的shellcode就会被写到0x88888ec地址空间。ShellCode将会执行下面的步骤:

  • 调用kernel32!VirtualAlloc去创建一个带有可执行属性的内存页
  • 调用一系列kernel32!GetFileSize API,句柄值从0开始,每次调用函数的时候按4递增,直到返回的文件大小位于0xA0000x200000之间,该大小与到RTF文档内利用的部分的大小相等。
  • 在前面步骤中的句柄被找到后,它会调用kernel32!MapViewOfFile以将文件内容映射到内存。
  • 随后shellcode会解析文件内容,寻找“FE FE FE FE FE FE FE FE FE FE FE FE FF FF FF FF”这一标记,然后将紧随标记的的0x150DWORD数据值0xBCAD3333这个密钥进行异或解密。
  • 被解密部分的字节随后会被存储到shellcode在前述阶段申请的具有可执行属性的内存页。然后shellcode将执行流交给可执行页面——第二阶段的shellcode
  • 第二阶段shellcode的目的是释放最终的载荷到%APPDATA%\Microsoft\Word\STARTUP\..wll,这是一个dll,它会释放(文件为vcpkgs.exe)和执行存储在被释放文件的资源表内的下载器。
  • 在成功执行最终的载荷后,诱饵文档会被覆写到原来的RTF文件中(并进行展示)。


图4:WinWord进程释放和执行作为下载器的恶意软件

 

当下载器被执行后,它会连接到http[:]//45.76.36.243/articles去下载带.html扩展名的文件,但事实上这些文件包含的是加密数据。

图5:存储着被分解且被加密的后门恶意软件的网站

 

它首先会下载和解密937933.html文件,该文件包含一个指向其他html文件url列表。其余5个html文件其实是被分解为5部分的被加密的后门服务端文件。被下载的文件随后被存储到%temp%//svchosts.exe。加密这些文件块有效地将它们伪装为了非可执行类型的文件。而且,由于网络扫描器对可执行类型的扫描更加严格与细致,这就有效地绕过了在网络中传统的基于文件类型的扫描。甚至在非常不幸的、文件块被解密的情况下,也只会有一部分可执行文件被扫描,这通常没有足够的信息用于检测。

图6:被加密后的后门文件的第一个文件块

载荷——“IRAFAU”后门分析

这个后门,现在被我们叫做“IRAFAU”,它来自在分析过程中一段被解密的字符串,看着像是来自一个被修改过的UPX壳加壳过的文件。尽管如此,脱壳很简单。

图7:UPX工具识别被修改过的UPX加壳器

 

一旦脱壳,后门恶意软件的行为还是不明显的,因为它的字符串仍然被加密,并且用到的API是动态导入的。

 

所以,该恶意软件做的第一件事是去初始化一个用来存储被解密的字符串的结构体,这个结构体会在接下来的函数调用中被使用。其中包括命令控制服务端(C2)的字符串,函数指针,和将会在整个执行过程中被用到的动态导入的API。这个结构体作为一个参数传给调用的子函数。

 

由于在分析时C2服务器已经无法访问,识别这个结构体有助于去通过静态分析模拟恶意软件的下一步操作。

图8:复制的恶意软件结构体

 

在连接位于saudiedi.toh.infoC2服务器前,这个恶意软件会在被感染的系统里面搜集下列信息,然后将这些信息通过HTTP POST的方式发送给C2服务器

  • 计算机名称
  • MAC地址
  • 本地IP地址
  • 操作系统版本
  • 操作系统语言识别符和地理位置识别符

然后它会通过计算被感染系统{computer name}:{mac address}MD5来生成受害者ID

图9:样本与C2服务器的网络通信

 

被搜集的信息随后被加密并使用下列参数通过HTTP POST发送到C2服务器

 

<center>saudiedi.toh.info/search?q=%{hex}%{hex}%{hex}%{hex}&cvid={numbers}</center>

 

正如前面所提到的,在写本文的时候C2服务器已无法访问,模拟来自服务器的响应将会花很长时间。所以我们转而选择使用前面提及的结构体,去揭示攻击者的选项将会是什么:

图10:来自后门命令函数的代码片段

 

最终,我们发现发现服务器将会发送一个包含命令类型和参数的被加密的数据结构。基于命令类型,后门恶意软件将会执行任意下面的功能:

  • 结束一个进程
  • 创建和删除目录
  • 枚举所有可用的驱动器
  • 查找特定文件
  • 删除文件
  • 移动/重命名文件
  • 下载和上传一个文件
  • 执行一个特定文件
  • 执行远程shell

结论

基于这次行动使用的带有政治主题的社会工程学,我们相信这并不是一款简单地攻击在互联网上的任何人的网络犯罪恶意软件。然而,就这一点而言,我们没有(掌握)哪些设施成为攻击目标的(进一步)数据。

 

这篇文章也证明了如何使用开源工具去帮助进行利用分析,同时也展示了如何利用静态分析去辅助分析一个已经不可访问C2服务器的后门恶意软件。

 

CVE-2017-11826是一个公布时间还非常短的漏洞,可以肯定的是,这次的恶意软件只是利用这个新的攻击媒介的众多行动之一。

 

更新于2017/11/30 – 感谢Dider Stevens (@DiederStevens)修正shellcode的长度

 

-= FortiGuard Lion Team =- (飞塔狮子团队)

FortiGuard Lab(飞塔防御实验室)的防护措施:

文件特征:

  • W32/Reconyc.FTG!tr.dldr
  • W32/Irafau.A!tr.bdr
  • MSWord/CVE20171186.FTG!exploit
  • W32/Irafau.A!tr.bdr

IPS特征:

  • MS.Office.OOXML.Parsing.Type.Confusion.Memory.Corruption

IOC

C2:

  • saudiedi.toh.info
  • http[:]//45.76.36.243/articles

文件:

  • aed93c002574f25dabd1859f080203a2c8f332e92c80db9aa983316695d938d3 (rtf) - MSWord/CVE20171186.FTG!exploit
  • d5b22843aabbbc20af253d579fd1f098138be85e2cff4677f7886e8d31ff00cb (dll) - W32/Reconyc.FTG!tr.dldr
  • 5ae0a582ed5d60324d6d1397be3deb0c704a1d77c9ef3d5f486455f99da32e7f (downloader) – W32/Reconyc.FTG!tr.dldr
  • c75c89e09f7f2dbf5db5174efc8710c806ef6376c6d22512b96c22a0f861735e (backdoor) – W32/Irafau.A!tr.bdr

阿里云助力开发者!2核2G 3M带宽不限流量!6.18限时价,开 发者可享99元/年,续费同价!

最后于 2018-3-26 14:40 被银雁冰编辑 ,原因:
上传的附件:
收藏
点赞1
打赏
分享
最新回复 (3)
雪    币: 5676
活跃值: (1303)
能力值: ( LV17,RANK:1185 )
在线值:
发帖
回帖
粉丝
holing 15 2017-12-8 22:02
2
0
有样本吗
雪    币: 9662
活跃值: (4588)
能力值: ( LV15,RANK:800 )
在线值:
发帖
回帖
粉丝
银雁冰 16 2017-12-8 22:14
3
0
holing 有样本吗
https://bbs.pediy.com/thread-221784.htm
雪    币: 3018
活跃值: (1453)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
MsScotch 2017-12-9 10:49
4
0
告诉我,这只是偶然的.
上传的附件:
游客
登录 | 注册 方可回帖
返回