乌龙的CVE-2017-8570样本及背后的狗血首席安全官频道

所谓的CVE-2017-8570样本

上周360天眼实验室发现了有国外黑客在Github上发布了CVE-2017-8570漏洞的利用代码,首席安全官频道但随即删除,以此之后发现了不少标注为CVE-2017-8570的Office恶意样本,比如下面这个VirusTotal上被标记为CVE-2017-8570的样本。

乌龙的CVE-2017-8570样本及背后的狗血

乌龙的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。

乌龙的CVE-2017-8570样本及背后的狗血

乌龙的CVE-2017-8570样本及背后的狗血

而Script Moniker正是微软4月份的补丁中禁用掉的两个Moniker之一: 

乌龙的CVE-2017-8570样本及背后的狗血

乌龙的CVE-2017-8570样本及背后的狗血

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的影响。

乌龙的CVE-2017-8570样本及背后的狗血

乌龙的CVE-2017-8570样本及背后的狗血

红框部分为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的漏洞利用代码成功触发的截图:

乌龙的CVE-2017-8570样本及背后的狗血

乌龙的CVE-2017-8570样本及背后的狗血

上例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

*本文作者:360天眼实验室,转载请注明FreeBuf.Com

2017-08-11 15:53 阅读:171