Upload
dangquynh
View
360
Download
9
Embed Size (px)
Citation preview
我是怎样在Microsoft Office Word中找漏洞的
张仁状
• ⺴⽹网名: Mike Zhang, telnet_mike, telnetgmike…
• 职业⺫⽬目标: 能够成为⼀一个经验⽼老道的漏洞猎⼿手• 现在: ⼀一个独⽴立漏洞猎⼿手• 博客: https://mikedoszhang.blogspot.com
MICROSOFT » OFFICE : VULNERABILITY STATISTICSREF HTTP://WWW.CVEDETAILS.COM/PRODUCT/320/MICROSOFT-OFFICE.HTML?VENDOR_ID=26
3
MICROSOFT»OPEN XML FILE FORMAT CONVERTER:VULNERABILITY STATISTICSREF HTTP://WWW.CVEDETAILS.COM/PRODUCT/15628/MICROSOFT-OPEN-XML-FILE-FORMAT-CONVERTER.HTML?VENDOR_ID=26
4
MICROSOFT» OFFICE COMPATIBILITY PACK: VULNERABILITY STATISTICSREF HTTP://WWW.CVEDETAILS.COM/PRODUCT/14763/MICROSOFT-OFFICE-COMPATIBILITY-PACK.HTML?VENDOR_ID=26
5
6
结果数据• 可利⽤用: 16(⼤大部分已经在更新过补丁的
office2007 +win7 32测试环境中通过验证)• 可能可利⽤用:>10• 可能不可利⽤用:3
7
想法• 从CVE报告数据可以看到多数问题出在ActiveX相关的地⽅方• ⼀一个⼀一个插⼊入操作看看情况
8
9
这个0day的poc验证结果
10
REF HTTP://BLOG.AVIRA.COM/MALICIOUS-OFFICE-MACROS-DEAD/
11
REF HTTP://WWW.PCWORLD.COM/ARTICLE/2866512/MACROBASED-MALWARE-IS-MAKING-A-COMEBACK-RESEARCHERS-WARN.HTML
12
针对国家的攻击REF HTTP://MEDIA.CCC.DE/BROWSE/CONGRESS/2014/31C3_-_6575_-_EN_-_SAAL_2_-_201412272300_-_ROCKET_KITTEN_ADVANCED_OFF-THE-SHELF_TARGETED_ATTACKS_AGAINST_NATION_STATES_-_TW_-_GADI.HTML#VIDEO
13
VBA执⾏行恶意代码的⽅方式• 纯VBA代码调⽤用win api,最原始的宏病毒• VBA代码将⽂文档中存在的内容写⼊入到⼀一个可执⾏行⽂文件或脚本中,⽤用win api启动⽂文件执⾏行恶意代码
• VBA将操作码分配到⾃自⼰己或别的进程内存中,使⽤用win api 开启新的线程进⾏行执⾏行
14
VBA+Office漏洞
• VBA代码中没有那些宏病毒使⽤用的那些win api
• Office⽂文档结构是完好的,因为漏洞是VBA⾃自动化操作Office造成的
15
杀软:“应该没有宏病毒存在,放过。。。”
杀软或Office⽂文档结构检测:“⽂文档结构完整,应该没有问题,放过。。。”
0day 演⽰示…
16
对安全⼚厂商的建议
• 执⾏行前的静态检测很难奏效--shellcode可加密,可分散存储
• 把更多精⼒力放到⾏行为检测,如对⽂文件释放⽅方⾯面的⾏行为审计;从本地操作⾏行为和⺴⽹网络通信⾏行为⻬齐⼊入⼿手进⾏行⾏行为审计
17
对微软的建议
• 加强对⾮非打开即利⽤用的漏洞的挖掘能⼒力,如发现第⼀一个演⽰示的漏洞利⽤用
18
TrustRecordsOffice 2010/2013
19
ref https://technet.microsoft.com/en-us/library/
cc179050(v=office.14).aspx
攻击场景建⽴立21
攻击者 被攻击者
发送没有恶意代码的宏的a.doc
攻击者 被攻击者
发送有恶意代码的宏的a.doc
我怎么才能⾃自动化的测试或者说fuzz程序呢
• 我重复漏洞触发过程,在这个过程中录制宏
22
注册表中的ActiveX Control• dir
REGISTRY::HKEY_CLASSES_ROOT\CLSID -include PROGID -recurse | foreach {$_.GetValue("")}
23
ref http://blogs.msdn.com/b/powershell/archive/2006/06/29/650913.aspx
24
⼯工具的第⼀一个版本
popupkiller
25
ref http://old.peachfuzzer.com/
⼯工具演⽰示…
我需要⼀一个⽅方案来解决这个问题,这样我才能完全⾃自动化的⼀一个接⼀一个的测试所有的activeX控件
“⼀一旦Office崩溃掉,我⽆无法准确的定位到有问题的那次测试条⺫⽬目”
27
⽅方案• ⽤用另⼀一个进程来操作Office中的VBA代码,并监视Office进程
28
具体⽅方案• Windows UI⾃自动化(已实现)– FindWindow, EnumChildWindows, PostMessage,
SendMessage, SendKeys…–MSAA—Microsoft Active Accessibility• AccessibleObjectFromWindow, AccessibleChildren
• Office Interop(另⼀一个选择)–使⽤用前提• File -> Options -> Trust Center -> Trust Center
Settings -> Macro Settings -> Trust Access to the VBA Project Object Model
– VBProject.VBComponents.Add• or Shapes.AddOLEControl 29
SendKeys ⼩小贴⼠士• ENTER ~• SHIFT +• CTRL ^• ALT %• … ref: https://msdn.microsoft.com/en-us/
library/system.windows.forms.sendkeys.send(v=vs.110).aspx
30
SendKeys发送的VBA代码
31
“当触发了⼀一个崩溃问题时怎么记录这个问题呢?”
• ⽅方案 1.将调试器附加到进程上– 1). 使⽤用调试器启动⺫⽬目标进程• _NO_DEBUG_HEAP
– 2). 使⽤用 aedebug 注册的调试器在进程崩溃时附加到⺫⽬目标进程• windbg,cdb
• ⽅方案 2.Windows 调试API(需要⽐比⽅方案 1多的多的代码)
32
_NO_DEBUG_HEAP
33
ref https://msdn.microsoft.com/en-us/library/windows/hardware/hh406274(v=vs.85).aspx
aedebug with cdb
34
“怎样去测试控件对象的内部呢?”• Reflection反射–在python中使⽤用 _oleobj_.GetTypeInfo– pythoncom.VT_*, ⽤用特制的内容给指定的类型属性赋值
–我们也可以⽤用这个⼯工具产⽣生的样本作为⼀一些模糊测试⼯工具的初识变异样本,如Peach Fuzzer
35
测试对象属性
36
清理⼯工作
37
⼯工具演⽰示…
0day 演⽰示…
docx—zip 格式
40
步骤 1添加⼀一个ActiveX 控件ToggleButton,然后保存为docx并关闭
41
步骤 2解压缩docx,在上⾯面的路径中可以找到⼀一个activeX1.bin的⽂文件
42
步骤 3这是⼀一个复合⽂文档格式,和doc⽂文件⼀一样
43
也许微软的测试没有想到这个地⽅方:⽤用⼀一个doc⽂文件替换掉这个⽂文件
步骤 4创建⼀一个a.doc⽂文件,然后替换掉activeX1.bin⽂文件,并将⽂文件名保持为activeX1.bin
44
步骤 5打包⽂文件,并将包⽂文件后缀改为“.docx”
45
步骤 6打开它
46
这就是我想要的结果,⼀一个程序⾮非预期⾏行为
所以,这⾥里可以称为⼜又⼀一个测试点
VBA编写shellcode⼩小贴⼠士• VBA字符串以unicode形式出现在内存中, 使⽤用 StrConv(shellcodestr, vbFromUnicode)
• 解决 [63 ‘?’ 3F] 问题—VBA 使⽤用 ‘?’ 值来表⽰示不认识的符号,所以在unicode表中从0x7F到0xA0⼀一些值并不存在,需要使⽤用另⼀一批对应的unicode字符值进⾏行表⽰示
47
EIP = 0x11505080
EIP = 0x11505063
ref http://msdn.microsoft.com/en-us/goglobal/cc305145.aspx
48
应对⽅方案• 不轻易的接受Office的安全提⽰示• 不要相信别⼈人提供给你操作制定⽂文档的步骤• 如果使⽤用Office 2010/2013定期删除不⽤用的
TrustRecords,并检查是否有不合适的Trusted Locations项⺫⽬目存在
• 使⽤用⼀一些⾏行为检测⽅方⾯面强⼤大的安全产品• ⽇日常使⽤用尽量低的权限账户
49
声明• 该⽂文档只能⽤用作学习和研究• 任何使⽤用它做出违反法律的事情,需⾃自⾏行负责
50
谢谢!
Email:[email protected]: https://mikedoszhang.blogspot.com