解密百度阅读器远程执行任意文件漏洞
图/文 爱无言
百度阅读器是一款向用户提供文字阅读功能的工具性软件,它支持主流文档格式,如txt、pdf、doc、ppt等,还支持在线阅读书籍,可以借助网络阅读更多的文档。该软件的使用界面也十分清爽,如图1所示。
图1
在使用百度阅读器阅读文档的时候,该软件模拟真实书籍阅读方式,将文档展现在用户面前,从这一方面来讲,确实非常让人喜欢,如图2所示。
图2
在将百度阅读器安装进系统的时候,该软件自带了一个ActiveX控件,文件名为“BRIEPlugin1. 1.0.274.dll”。使用ComRaider查看该控件提供的所有外部接口,如图3所示。
图3
从图3中看到,“BRIEPlugin1.1.0.274. dll”提供的外部接口非常丰富,在我们的测试中发现,出现问题的外部接口较多,而这里最引起我们关注的是一个名为“OpenPage”的外部接口。该外部接口的函数原型为:
Sub OpenPage ( ByVal strPageURL As String )
从函数原型我们发现,“OpenPage”的参数只有一个,其属于字符串型。面对这种参数,一般情况下,我们都会考虑对其进行缓冲区溢出测试,但是,这里我们却不这样考虑。借助OllyDbg我们对“BRIEPlugin1.1.0.274.dll”文件进行了反汇编分析,发现其中调用了一个不安全函数“ShellExecuteW”,如图4所示。
图4
“ShellExecuteW”是一个可以运行任何文件的系统函数,我们怀疑该函数在某种情况下,通过调用“BRIEPlugin1.1.0.274.dll”文件的外部接口可以触发该函数。很幸运,“OpenPage”这个外部接口就是“ShellExecuteW”函数的调用者。我们可以写一个简单的测试网页代码来证明这个分析,网页代码如下。
<object classid="clsid:4EA36CDF-1236-45E8-B7E8-B6140C617A21" name="evil" ></object> <script> document.write(evil.OpenPage("cmd.exe")); </script>
保存上面的代码为index.htm,上传该网页文件到服务器上,用IE访问该网页,效果如图5所示。
图5
图5的画面已经足以说明一切,“BRIEPlugin1.1.0.274.dll”文件的“OpenPage”确实调用了“ShellExecuteW”函数,而“strPageURL”这个参数就代表了被运行文件的名称。现在,我们可以发挥自己的想象力来构造出任意的exploit网页,例如,使用死循环调用程序造成用户系统死机、采用欺骗页面诱使用户运行远程木马等。
百度阅读器出现的这个安全漏洞,从实质上说是一个执行任意文件的安全漏洞,危害较大,尤其是漏洞发生在ActiveX控件上,这就使得该漏洞可以实现远程攻击的效果。编程人员在设计该ActiveX控件的时候,可能没有仔细考虑到安全方面的要求,疏忽了对系统函数的调用进行安全封装。“ShellExecuteW”函数的作用不仅仅限于运行可执行文件,凡是系统注册、有相关联类型的文件都可以被成功运行,还有协议类,如mailto。面对这样的函数,编程人员应该对用户提交的参数进行严格审核,微软在2010年就对“ShellExecuteW”函数出现的安全漏洞进行了修补,其性质类似于此。所以,希望本文能够引起百度公司的注意,及时修补该漏洞。
最后,本文旨在讨论安全技术,请勿利用文中技术进行任何违法操作,否则作者与杂志概不负责。