2006年第5期软件|信息安全一个EXE文件引发的危机由于“浏览器劫持”的攻击手段是通过被系统认可的“合法途径”来进行的,因此以目前的软件行为检测技术来说,“浏览器劫持”是防不胜防的,如果我们不小心让这头恶狼驻进了系统,该用什么方法驱逐它呢?实战浏览器劫持小金络程序员小李最近有点忙,公司要做的网页工程项目已经快到尾期了,可是开发小组的进度仍然迟迟跟不上来,为了赶进度,小李去国外下了一些代码回来参考,但那些代码的关键部分都是用了字符编码的形式加密的,小李不想手工一段段地解码,就上网搜索了一个号称能解码脚本字符编码的工具,下载回来的是一个安装包,文件名为“downsoft226.exe”,小李要急着用,看也没看就双击执行了,但是他等了好一会儿也没见安装界面出现,却发现硬盘在狂转、并且机器变得奇慢无比,小李不安地打开了任务管理器——列表里赫然有至少超过50个陌生进程在后台运行!小李赶快手忙脚乱地停止进程,可是仍然有新的进程不断地出现,在他停掉downsoft226.exe这个进程后,系统蓝屏了,计算机重启后跳出好几个IE窗口,每个窗口上都多了一些工具栏,而且更严重的是,IE的空白页也不再空白了。小李顿时只觉得天昏地暗……无处不在的劫持者以上的经历大概许多用户都会遇到,在网络上看到个工具的说明很好,就下载了运行,结果运气好的话在得到工具的同时还“获赠”了一堆所谓的IE“助手”(BHO),运气差的话不但工具没得到,还“引狼入室”搞得系统鸡犬不宁。在这个信任危机的网络时代,你的浏览器随时会被“劫匪”给绑了去。除了BHO劫持以外,如今的劫持方式更有通过DLL插件、Hook技术和WinsockLSP进行的,而这些矛头纷纷指向浏览器的混蛋们,都会被传统的反病毒软件视为正常软件,因为除了恶意软件,还有许多正常软件需要采用这些技术来为IE提供许多功能,要更改这个已经定型的应用环境固然不现实,但是我们必须有自己的“打狼”招数。解雇死缠烂打的秘书:清理BHO虽然一部分BHO是衷心为IE效力的,可是也总有那么一小嘬捣乱分子以简单的理由(增强浏览器特性、保护浏览器安全、上网记录清理等等)让用户放心地执行了安装程序,然后再以复杂的理由(卸载不彻底、不提供卸载、表面上“卸载”等等)死乞白赖在系统中赶不走了。如果遇到这样的无赖,首先,我们要确认一下它的驻留地。一般情况下,BHO文件都在“Windows\DownloadedProgramFiles”目录下。但是请记住不要用资源管理器直接查看这个目录,用以下的命令行或者第三方资源管理器(比网软件-信息.indd1162006-4-2321:36:20)去查看上面的文件夹,你会发现别有洞天:cd\cd%SystemRoot%cd“DownloadedProgramFiles”dir*.*/a值得注意的是,上述目录并不是惟一的BHO可能隐藏的目录,一些BHO会把自己放在“ProgramFiles”目录里。如果你已经看到了不少BHO的文件实体,那么哪个才是赶不走的“助手”呢?既然它一开始就不打算让你轻易卸载它,那么它自然不会告诉你它一共有多少个文件、文件名是什么、分布的目录等关系到自身生死大事的敏感信息。尽管如此,我们还是能够从这些文件的版权信息、文件名等资料中发现蛛丝马迹。一个典型的例子是“中文实名网址”这款工具,它的大部分文件均包含有产品英文缩写“CDN”,而且每个程序文件都在版权信息里清楚地写着“中文实名”,因此用户只要查找包含有“CDN”字符的文件名就能发现个大概了,不过由于系统自身也可能会有几个文件名带有“CDN”字符,所以删除之前请先确认该文件的版权并非Microsoft。一些用户也许会疑惑:为什么有些文件在删除的时候总会提示“文件正在被使用,无法删除”呢?这是因为BHO有一定的特殊性,它是可以被Windows的外壳进程加载的,也就是Explorer。要解决这个问题,我们先要尝试用REGSVR32.EXE程序来去除BHO的组件注册信息,例如反注册HBClient.dll,只需要在命令提示符下进入该文件所在目录,执行REGSVR32.EXE/UHBClient.dll即可,然后打开任务管理器taskmgr.exe,找到Explorer.exe进程并将其停掉,最后直接在任务管理器里执行CMD.EXE,进入对应目录后输入DELHBClient.dll就完成了该文件的清理工作。随着时间的推移和技术的进步,有的BHO不仅使用BHO技术劫持浏览器,还加上了Hook技术、LSP劫持甚至采用了类似于Rootkit的后门保护技术最大限度地保全自己,要对付这些越来越狡猾的劫持者,仅仅用上面的方法是远远不够的。幸运的是,现在已经出现了一批针对“浏览器劫持”的优秀工具,如列出所有浏览器环境组件的HijackThis、直接清理大部分常见恶意软件的RogueCleaner和直接屏蔽IE安装恶意软件功能的Upiea等,许多需要手工清理的恶意软件都可以配合这些工具完成。寻回失落的首页“浏览器劫持”的另一个典型例子就是篡改IE首页,恶意软件把IE首页改为它要带用户去浏览的网址,如某个广告页、带毒页等,即使用户自己把首页设置为“about:blank”,再打开IE用户仍然会发现浏览器在地址为“about:blank”的情况下自己跳转到了那个恶意页面,这就是经常搞得用户人心惶惶最后不得不重装系统的“IE空白页劫持”事件,如果不慎被这种病毒纠缠上了该怎么办呢?首先,我们要理解“空白页劫持”的机制,它一般通过两种方法进行:第一种是利用BHO技术进行劫持,恶意程序员编写了一个能检测当前IE地址的BHO组件,如果该组件截获到地址为“about:blank”,则触发跳转代码,控制浏览器访问该组件内置的地址;另一种是利用IURLSearchHook技术实现的内部跳转,IURLSearchHook被浏览器用来转换一个未知的URL协议地址,当浏览器试图去打开一个未知协议的URL地址时,浏览器首先尝试从这个地址得到当前的协议,如果不成功,浏览器将寻找系统里所有注册为“URLSearchHook”(资源搜索钩子,USH)的对象并把这个IE不能理解的地址发送过去,如果某个USH对象“认识”这个地址,它就返回一个特定的标识告“浏览器劫持”(BrowserHijack)是一种不同于普通病毒木马感染途径的网络攻击手段,它的渗透途径很多,目前最常见的方式有通过BHO、DLL插件、Hook技术、WinsockLSP等载体达到对用户的浏览器进行篡改的目的。这些载体可以直接寄生于浏览器的模块里,成为浏览器的一部分,进而直接操纵浏览器的行为,轻者把用户带到自家门户网站,严重的则会在用户计算机中收集敏感信息,危及用户隐私安全。“浏览器劫持”的后果非常严重,用户只有在受到劫持后才会发现异常情况,但是这时候已经太迟了。目前,浏览器劫持已经成为Internet用户最大的威胁之一。浏览器劫持恶意软件清理工具RogueCleaner报告当前系统的安全状况:该系统已经被多种恶意软件纠缠。很多时候用户如果试图直接删除恶意软件的本体,都会得到因为文件正在使用而无法删除的提示。Windows进程管理、系统配置实用程序都明确指示出该计算机系统被感染了无数恶意软件。被恶意软件纠缠的计算机系统软件-信息.indd1172006-4-2321:36:232006年第5期软件|信息安全果某一个USH“认识”该资源特征,则告诉浏览器它认识这个请求,浏览器就会加载它最终打开目标链接。通常,默认的协议标记被指定为“http”,它是属于urlmon.dll负责的,而属于mshtml.dll负责的“about”协议被用于本地信息输出调试和扩展功能的实现,如果有个恶意的USH对象把“about”协议的解释权抢了过来,用户指定的空白页自然就会被带到某个不知名的地方去了。对于BHO造成的页面劫持,只要用清理BHO的方法去解决就可以了。而如果是被USH劫持的,那么找起来会有点困难,由于USH对象并不像BHO组件那样会轻易露出马脚,对一般用户而言会造成搜索困难。不过如果你理解了上文对USH机制的解释,要找到它们也不困难:一些USH对象实施的是本地跳转,所以产生的页面会带有到自身文件的链接,用户只需查看页面源代码,然后搜索到“res://”开头的那个HTML元素,后面那一连串百分号和字符就是该USH的完整文件地址,它们是用Unicode编码过的,不要看到那一堆类似加密的字符串就退却了,既然浏览器能认识,那我们也就能让它显示出来,在IE浏览器的地址栏里输入这么一句脚本代码:“javascript:document.write(unescape('被Unicode编码的字符串'));”,浏览器就把会它还原回可读字符串了,记下这个文件名并将其删除掉,“空白页劫持”就不复存在了。例如一个字符串为“'%62%62%73%2E%6E%65%74%74%66%2E%6E%65%74”,只需要在浏览器地址栏里输入“javascript:document.write(unescape('%62%62%73%2E%6E%65%74%74%66%2E%6E%65%74'));”,就可以知道它表示什么了,各位可以亲自去试验一下看看效果。对付另一种稍微狡猾点的没有使用本地跳转代码的USH对象,以上方法就行不通了。但是我们也不用怕,由于软件|信息安全Windows的注册表管理机制,任何USH对象都必须通过注册表项目来加载,因此只要运行REGEDIT,定位到以下注册表键:HKEY_CURRENT_USER\Software\Microsoft\InternetExplorer\URLSearchHooks,里面列出的项目就是可能被添加的USH入口,只要将其删除掉即可解除“空白页劫持”危机。让启动更安全:启动项清理有时候,即使我们清理了恶意劫持,一重启机器,却发现它又回来了,或者由劫持带来的弹出窗口广告恶意页面还是依旧出现,这是为什么呢?因为在注册表中,并不是只有与IE有关的地方才会被流氓软件改写,恶意软件还会篡改这3个启动项目:“HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run”、“HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run”和“HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunServices”,更高级的方法是建立“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\policies\Explorer\Run”项,然后从这里启动自身,由于系统配置实用程序并不会检测这个地方,所以常被一些新型后门钻了空子。如何快速筛选正常启动项和恶意启动项一直是普通用户最头痛的问题,俗话说“不打没有准备的仗”,平时我们必须记住系统常有的启动项,到时候就能迅速发现新增加的项目列表了。对于WindowsXP/2003,默认情况下可能会有一些IME开头的启动项,这些项目完全可以删除掉。除了最少启动项,剩下的就是个人安装程序和设备时产生的相应启动项了,所以对启动项的判断只能靠大家平时的观察和记录来进行。但是通常情况下,莫名其妙出现在Windows系统目录或者以Windows系统文件来命名的启动项90%不是什么好东西。例如svchost.exe、C:\WINDOWS\SYSTEM32\CApp.exe等,还有一些DLL类型的Hook组件靠Rundll32.exe进行自启动,例如某著名厂商的BHO就是这么做的,如果这里没能清理干净,那么下次启动的时候,你刚才辛苦清理的“流氓”就又复活了。和李鬼的斗争:清除WinsockLSPLSP全称“WindowsSocketLa