一. 一个EXE引起的危机
网络程序员小李最近有点忙,公司要作的网页工程项目已经快到尾期了,但是开发小组的进度仍然迟迟跟不上来,为了赶进度,小李去国外下了一些代码回来参考,但那些代码的关键部分都是用了字符编码的形式加密的,小李不想手工一段段的解码,就上网搜索了一个号称能解码脚本字符编码的工具,下载回来的是一个安装包,文件名为“downsoft226.exe”,小李要急着用,看也没看就双击执行了,可是他等了好一下子也没见安装界面出现,反而感受到硬盘在狂转,机器奇慢,小李有些不安的打开了任务管理器——列表里赫然有至少超过50个进程在后台执行!
小李赶快手忙脚乱的中止进程,但是仍然有新的进程不断的出现,在他停掉downsoft226.exe这个进程后,系统蓝屏了,计算机重启后跳出好几个IE窗口,每一个窗口上都多了一些工具栏,并且更严重的是,IE的空白页也再也不空白了。小李只以为天昏地暗:完了,恶狼又找上门来了……
二. 无处不在的劫持者
以上的经历大概许多用户都会遇到,在网络上看到个工具的说明很好,就下载了运行,结果运气好的在获得工具的同时还“获赠”了一堆所谓的“IE助手”(BHO),运气差的不但工具没获得,还引狼入室给本身惹来一身臊。在这个信任危机的网络时代,你的浏览器随时会被“劫匪”给绑了去。
QUOTE知识回顾:浏览器劫持
“浏览器劫持”(Browser Hijack)是一种不一样于普通病毒木马感染途径的网络攻击手段,它的渗透途径不少,目前最多见的方式有经过BHO、DLL插件、Hook技术、Winsock LSP等载体达到对用户的浏览器进行篡改的目的。这些载体能够直接寄生于浏览器的模块里,成为浏览器的一部分,进而直接操纵浏览器的行为,轻者把用户带到自家门户网站,严重的则会在用户计算机中收集敏感信息,危及用户隐私安全。“浏览器劫持”的后果很是严重,用户只有在受到劫持后才会发现异常状况,可是这时候已经太迟了。目前,浏览器劫持已经成为Internet用户最大的威胁之一。
因为“浏览器劫持”的攻击手段是能够经过被系统承认的“合法途径”来进行的,以目前的软件行为检测技术来讲,“浏览器劫持”是防不胜防的,即便你天天都很当心的设置安全级别、对浏览器弹出的安装插件提示看了又看,你仍然不可避免会由于下载安装了一些工具而让“劫持者”登堂入室。若是咱们不当心让这头恶狼驻扎了进来,该用什么方法驱逐它呢?
QUOTE知识回顾:为何“浏览器劫持”是“合法入侵”
为何说“浏览器劫持”能够说是合法的呢?由于大部分浏览器劫持的发起者,都是经过一种被称为“BHO”(Browser Helper Object,浏览器辅助对象)的技术手段植入系统的。
BHO是微软早在1999年推出的做为浏览器对第三方程序员开放交互接口的业界标准,它是一种可让程序员使用简单代码进入浏览器领域的“交互接口”(INTERACTIVED Interface)。经过BHO接口,第三方程序员能够本身编写代码获取浏览器的一些行为(Action)和事件通知(Event),如“后退”、“前进”、“当前页面”等,甚至能够获取浏览器的各个组件信息,像菜单、工具栏、坐标等。因为BHO的交互特性,程序员还可使用代码去控制浏览器的行为,好比常见的修改替换浏览器工具栏、在浏览器界面上添加本身的程序按钮等操做,而这些操做都被视为“合法”的,这就是一切罪恶根源的开始。
BHO的出现帮助程序员更好的打造个性化浏览器或者为本身的程序实现了方便简洁的交互功能,能够说,若是没有BHO接口的诞生,咱们今天就不能用一些工具实现个性化IE的功能了。从某一方面来看,BHO的确是各类缤纷网络互动功能的幕后功臣,可是一切事物都是有两面性的,这个恒古不变的真理一样对BHO有效,因而就有了今天让安全界头痛的“浏览器劫持”的攻击手段诞生。
除了BHO劫持之外,现在的劫持方式更有经过DLL插件、Hook技术和Winsock LSP进行的,而这些矛头纷纷指向浏览器的小坏蛋们,都会被传统的反病毒软件视为正常的,由于除了恶意软件,还有许多正常软件须要采用这些技术来为IE提供许多功能,所以出现了“鱼与熊掌”的尴尬局面,要更改这个已经定型的环境当然不现实,那么,要想在这个危机重重的环境下保全本身,咱们就必须掌握一套“除狼”的技术了。
三. 代号35:营救IE行动
1. 解雇死缠烂打的秘书——BHO的清理
虽然一部分BHO是衷心为IE效力的,但是也总有那么一小嘬捣乱分子以简单的理由(加强浏览器特性、保护浏览器安全、上网记录清理等等等等……)让用户放心的执行了安装程序,而后再以复杂的理由(卸载不完全、不提供卸载、表面上“卸载”等等等等……)死活赶不走了,若是遇到这样的无赖,用户该怎么办呢?
首先,要确认一下它的驻留地,通常状况下,BHO文件都在Windows目录下的“Downloaded Program Files”目录下,记住永远不要用资源管理器进去,它们会骗人的,咱们必须用最原始的命令提示符(CMD.EXE)进去,只须要这几个命令:
QUOTEcd \
cd %SystemRoot%
cd “Downloaded Program Files”
dir *.* /a
你就会发现命令提示符和Windows资源管理器的巨大差别,若是实在用不惯命令提示符也不要紧,有不少工具能够不偏袒任何一方的显示出最真实的状况,例如Total Commander这款强大的文件管理工具。可是这里并非惟一的BHO目录,一些BHO会把本身放在系统根目录下的“Program Files”目录里,而且创建有自身所属的文件管理目录。
既然看到这么多BHO的文件实体了,那么哪一个才是赶不走的“助手”呢?既然它一开始就不打算让你卸载的,那么天然不会告诉你它一共有多少个文件、文件名是什么、分布的目录等关系到自身生死大事的敏感信息,这就意味着对于计算机不熟练的用户来讲,要驱逐它们并不是那么容易,可是大部分设计者都会被一种“自我”的心理暗示,所以设计出的程序文件通常都会注明版权信息,文件名也会包含有厂商的缩写或者该工具的英文缩写等特征字符,有了这些因素存在,用户要本身寻找这些不受欢迎的客人就好办多了,一个典型的例子是“中文实名网址”这款工具,它的大部分文件均包含有产品英文缩写“CDN”,并且每一个程序文件都在版权信息里清楚的写着“中文实名”,所以用户只要查找包含有“CDN”字符的文件名就能发现个大概了,不过因为系统自身也可能会有几个文件名带有“CDN”字符,因此删除以前请先确认该文件的版权并不是Microsoft所属。
一些用户也许会疑惑,为何有些文件要删除的时候总会提示“文件正在被使用,没法删除”,这是由于BHO有必定的特殊性:它是能够被Windows的外壳进程加载的,也就是那个Explorer,只要你进了系统,只要你的桌面和窗口还在,那么你就别想删除它了。要解决这个问题,咱们先要尝试用REGSVR32.EXE程序来去除它的组件注册信息,例如反注册HBClient.dll,只须要用命令提示符进入文件的目录里,执行REGSVR32.EXE /U HBClient.dll便可,而后打开任务管理器taskmgr.exe,找到Explorer.exe进程停掉,最后直接在任务管理器里执行CMD.EXE,进入文件目录后输入DEL HBClient.dll就完成了该文件的清理工做。若是这个BHO组件位于Program Files目录下的某一子目录里,你还能够放心的直接执行DEL *.*命令一窝端掉。
随着时间的流逝和技术的进步,许多BHO已经再也不简单,有的BHO不只使用BHO技术劫持浏览器,还加上了Hook技术、LSP劫持甚至采用了相似于Rootkit后门的保护技术最大限度的保全本身,要对付这些愈来愈狡猾的劫持者,仅仅用上面的方法大概是远远不够的。
幸运的是,如今已经出现了一批针对“浏览器劫持”的优秀工具,如列出全部浏览器环境组件的HijackThis、直接清理大部分常见恶意软件的RogueCleaner和直接屏蔽IE安装恶意软件功能的Upiea等,许多须要手工清理的恶意软件均可以经过它们配合完成,事半功倍。
2. 寻回我遗失的首页
“浏览器劫持”的另外一个显著特征就是篡改IE首页,首先,恶意软件把IE首页改成它要带用户去浏览的网址,如某个广告页、带毒页等,即便用户本身把首页设置为“about:blank”(空白页),再打开IE仍然会发现浏览器在地址为“about:blank”的状况下本身跳转到了那个恶意页面,这就是常常搞得一批用户人心惶惶最后不得不重装系统的“IE空白页劫持”事件,若是不慎被这种恶意软件纠缠上了该怎么办呢?
首先,咱们要理解“空白页劫持”的机制,它通常经过两种方法进行,第一种是利用BHO技术进行劫持的,恶意程序员编写了一个能检测当前IE地址的BHO组件,若是该组件截获到地址为“about:blank”,则触发跳转代码,控制浏览器访问该组件内置的地址去;另外一种是利用了IURLSearchHook技术实现的内部跳转,IURLSearchHook被浏览器用来转换一个未知的URL协议地址,当浏览器企图去打开一个未知协议的URL地址时,浏览器首先尝试从这个地址获得当前的协议,若是不成功,浏览器将寻找系统里全部注册为“URL Search Hook”(资源搜索钩子,USH)的对象并把这个IE不能理解的地址发送过去,若是某个USH对象“认识”这个地址,它就返回一个特定的标识告诉IE它知道怎么打开这个地址,而后IE就根据约定的方法调用它,最终打开这个地址。
这样描述也许很模糊,举个例子就好理解了,例如,当用户输入一个不带协议标记的资源地址时(资源定位协议规定标准格式为协议标记://资源所在地址/目录/文件名),浏览器自身并不认识它的,因此它会枚举全部在系统注册的USH对象,并把资源请求逐条传递过去,若是某一个USH“认识”该资源特征,则告诉浏览器它认识这个请求,浏览器就会加载它最终打开目标链接。一般,默认的协议标记被指定为“http”,它是属于urlmon.dll负责的,而属于mshtml.dll负责的“about”协议被用于本地信息输出调试和扩展功能的实现(你们能够尝试在浏览器里输入about:<a%20href=mailto:lk007@163.com>小金</a>@<a%20href=bbs.nettf.net>网络技术论坛</a> 看看效果),若是有个恶意的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\Internet Explorer\URLSearchHooks,里面列出的项目就是可能被添加的USH入口,只要删除掉便可解除“空白页劫持”危机。
3. 不应有你的世界——启动项的清理
有时候,即便咱们清理了恶意劫持,一重启机器,却发现它又回来了,或者由劫持带来的开机自弹广告恶意页面仍是依旧出现,这是为何呢?由于在注册表中,并非只有与IE有关的地方才会被流氓软件改写的,另外一处最多见的加载入口——启动项也经常被它们光临,恶意软件还会篡改这三个启动项目“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”项,而后从这里启动自身,因为系统配置实用程序并不会检测这个地方,因此常被一些新型后门钻了空子。
如何快速筛选正常启动项和恶意启动项一直是普通用户最头痛的问题,俗话说“不打没有准备的仗”,平时咱们必须记住系统常有的启动项,到时候就能迅速发现新增长的项目列表了,通常来讲,最干净的系统启动项只有两个,甚至只有一个:
QUOTEWindows 2000最少启动项:
启动项目:Synchronization Manager 命令:mobsync.exe /logon 做用:系统数据管理同步
启动项目:Internat 命令:Internat.exe 做用:输入法指示器
Windows XP/2003 最少启动项:
启动项目:CTFMON 命令:CTFMON.exe 做用:输入法指示器
对于XP/2003,默认状况下可能会有一些IME开头的启动项,可是这些项目彻底能够删除掉。除了这几个项目,剩下的就是根据各人安装程序和设备时产生的相应管理启动项了,因此只能靠各用户平时的观察和记录来判断了,可是一般状况下,莫名其妙出如今Windows系统目录或者以一些Windows系统文件来命名的启动项90%不是什么好东西(若是你安装了涉及系统管理的程序组件除外)!例如svchost.exe、C:\WINDOWS\SYSTEM32\CApp.exe等,还有一些DLL类型的Hook组件靠Rundll32.exe进行自启动,例如某著名厂商的某某BHO就是这么作的,若是这里没能清理干净,那么下次启动的时候,你刚才辛苦清理的流氓们就又复活了。
4.和李鬼的斗争——Winsock LSP的清除
LSP全称为“Windows Socket Layered Service Provider”(分层服务提供商),这是Winsock 2.0才有的功能,它须要Winsock支持服务提供商接口(Service Provider Interface,SPI)才能实现,SPI是一种不能独立工做的技术,它依赖于系统商已经存在的基本协议提供商,如TCP/IP协议等,在这些协议上派分出的子协议即为“分层协议”,如SSL等,它们必须经过必定的接口函数调用,LSP就是这些协议的接口。
近年来采用LSP技术进行浏览器劫持的恶意软件也慢慢浮出水面了,使用LSP的好处在于,这类浏览器劫持方案能够不分浏览器“种族”的进行,即便你不用IE,你的Opera、NC、Firefox等非IE内核的浏览器也难逃厄运,由于LSP是直接从Winsock获取信息的,而全部浏览器最终的数据传输都必须创建在Winsock接口上,因此一旦LSP层被恶意劫持,用户的全部请求都有可能被控制了。
LSP服务接口位于注册表的“HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WinSock2\Parameters\NameSpace_Catalog5\Catalog_Entries”项目内,全部接口都经过一串长数字项表示。普通状况下,系统就已经带有了两个LSP接口分别负责TCP/IP组件(rnr20.dll)和NTDS组件(winrnr.dll)的正常工做,而LSP劫持则是把本身加入该项目内,并把优先权提升(用长数字项表示),例如默认状况下TCP/IP组件的优先权为000000000001,若是发生了LSP劫持,恶意LSP可能会把自身改成000000000001,而系统原有的LSP项目就被日后推为000000000002等,以便数据包轮寻的时候能优先被恶意LSP处理。
要清理LSP劫持不能简简单单的直接把鼠标往“NameSpace_Catalog5”项目上点“删除”完事,这样作之后你就会发现系统也不能使用任何网络功能了,由于系统自身也必须依赖两个内置的LSP进行工做,这种架构看起来的确很麻烦,可是若是微软连本身提出的技术本身都不去使用的话,还期望别人会用?
因此,正确的清理步骤必须这样进行:
确认LSP劫持已经发生,能够经过手工检查上文提到的注册表键值判断,或者使用HijackThis作一次全面扫描。
查找并删除LSP驱动文件,可直接经过相应LSP项目的“LibraryPath”子项获得。
删除相应的LSP组件项目,它是用一长串数字表示的。
重命名正常的LSP组件项目,TCP/IP为000000000001,NTDS为000000000002,若是还有其余的话,依次排序。
重启计算机,再用HijackThis扫描一下恶意LSP是否已经完全清理掉。
5.不得不恨——迎战驱动形式的浏览器劫持
原本已经不想说这个恶心的东西了,看看“驱动”两个字,你想起了什么?没错,这是Rootkit的代名词!这个东西本来就不属于浏览器劫持范畴的,但是自从一些厂商和我的首次采用并尝到“甜头”后,这股风气逐渐蔓延开来,我不得不暗自庆幸现在能真正写出好用的Rootkit的人还没那么多,不然之后通常用户的日子更很差过了,这类劫持一般不作主要工做,它只负责隐藏恶意BHO文件、启动项和进程信息等,这样即便咱们用上面的几个方法清理了流氓软件,几秒钟后它就又回来了,或者直接就不给你删除文件!既然为了损害用户利益把劫持技术研究到这种地步了,为什么不去作正事呢?
QUOTE知识回顾:什么是Rootkit
随着安全技术的发展和计算机用户群的技术提升,通常的木马后门愈来愈难生存,因而一部分有能力的后门做者把眼光投向了系统底层——Ring 0。位于Ring 0层的是系统核心模块和各类驱动程序模块,因此位于这一层的木马也是以驱动的形式生存的,而不是通常的EXE。后门做者把后门写成符合WDM规范(Windows Driver Model)的驱动程序模块,把自身添加进注册表的驱动程序加载入口,便实现了“无启动项”运行,通常的进程查看器都只能枚举可执行文件EXE的信息,因此经过驱动模块和执行文件结合的后门程序便得以生存下来,因为它运行在Ring 0级别,拥有与系统核心同等级的权限,所以它能够更轻易的把本身隐藏起来,不管是进程信息仍是文件体,甚至通信的端口和流量也能被隐藏起来,在如此强大的隐藏技术面前,不管是任务管理器仍是系统配置实用程序,甚至系统自带的注册表工具都失去了效果,这种形式的后门被称为Rootkit。
要清理这类劫持并不是HijackThis和其余同类软件能作到的了,手工查找也比较困难,这时候咱们必须请出IceSword了,主要关心的位置是“进程”和“SSDT”(顺便提一下,IceSword也能看系统当前注册的BHO信息),注意找被IceSword标注为红色的项目,它们就是罪魁祸首,对于进程列表里的红色进程,先尝试用“结束进程”中止掉该进程运行,而后看看它还会不会“复活”,我不推荐用户直接删除红色进程的文件,由于这些进程虽然是被Rootkit出于某种目的隐藏起来的,可是它们也有多是被Rootkit借来驻留的系统进程载体(例如线程注射),随便删除容易致使系统出错。
确认没有红色进程后,咱们来看“SSDT”,SSDT意为“系统服务描述表”,里面存放着最底层的接口函数,Rootkit要实现各类隐藏都要修改这个地方实现对系统底层函数的控制和转移,正常状况下SSDT的函数都是从ntoskrnl.exe导出的,若是有Rootkit控制了部分函数,在IceSword里就会表示为红色的,而且指出该函数被哪一个文件掳走了(一些杀毒软件为了查杀Rootkit,也会在这里留下本身的痕迹,如卡巴斯基的klif.sys等,检查的时候要注意看文件版权信息以避免误杀),咱们先要记下该文件名,而后进入注册表的“HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services”里查找该文件并删除对应的子项名称,从新启动计算机后再用IceSword检查,若是没有再出现红色,那么恭喜一下,这场反劫持战争咱们终于胜利了!
四. IE,为何受伤的老是你
也许是由于浏览器的访问直接表明着利益关系,因此愈来愈多人把眼光投向浏览器,使用户替代他们完成诸如访问流量、广告点击等工做,不知道继“网络钓鱼”、“浏览器劫持”之后,广大的网络用户明天又该会面对什么样的危机?
浏览器的战争,会有休止的那一天吗?javascript