LSP劫持及对策

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

浏览器劫持
“浏览器劫持”是个沉重的话题,经常上网的朋友恐怕无一幸免,“浏览器劫持”(Browser Hi jack)是一种流行的网络攻击手段,它主要通过BHO、控件注册、DLL插件、Hook技术、Winsock LSP、远程进程、RootKit等技术渗透到用户的浏览器或操作系统中为所欲为,轻者把用户带到自家门户网站,严重的则会在用户计算机中收集敏感信息,危及用户隐私安全。

但在大多情况下,用户只有在受到劫持后才会发现异常情况,这时候已经太迟了。

目前,浏览器劫持已经成为Internet用户最大的威胁之一,从这个角度看,打响一场浏览器劫持的反击战迫在眉睫了。

BHO(Browser Helper Object,浏览器辅助对象)是微软早在1999年推出的作为浏览器对第三方程序员开放交互接口的业界标准,它是一种可以让程序员使用简单代码进入浏览器领域的“交互接口”。

通过BHO接口,第三方程序员可以自己编写代码获取浏览器的一些行为(Action)和事件通知(Event),如“后退”、“前进”、“当前页面”等,甚至可以获取浏览器的各个组件信息,像菜单、工具栏、坐标等。

由于BHO的交互特性,程序员还可以使用代码去控制浏览器的行为,比如常见的修改替换浏览器工具栏,在浏览器界面上添加自己的程序按钮等操作,而这些操作都被视为“合法”的,这就是一切罪恶的根源。

防御一:到BHO软件安装文件夹或控制面板中去看一看有没有卸载程序,如果有就直接卸载了。

防御二:通过IE自带的工具“管理加载项”(只有Windows XP SP2的IE6中才有,SP 1或Windows 2000下的用户可用3721IE修复专家中的“高级修复”),把其中一些不常见或是自己不知道的加载项禁用。

禁用成功后,可重启计算机,然后到相应的文件夹下,把该程序删除即可。

如果到这一步能成功,那就“谢天谢地了”。

如果不成功,到安全模式下,再用上面的方法试一试。

防御三:用HiJackThis工具清除。

HiJackThis是国外程序员写得相当不错的系统检查程序,它能够检查系统中几乎所有可以隐藏不良程序的角落,让他们现出原形,因此大家可以下载学习一下,尤其对于中高级用户进行手工清除时,这个工具可以说是必不可少的。

对于BHO可以先用它进行系统扫描,列出的就是BHO的内容,选择可疑项进行修复。

在正常模式下如果删不掉,也可到安全模式下试一试。

可能有战友会遇到这样的情形,不管在正常模式还是在安全模式下都不能成功禁用BH O,尤其出现删除文件时提示“文件正在被使用,无法删除”,那就还要费些力气。

这是因为BHO是可以被Windows的外壳进程加载的,也就是那个Explorer,进了系统,只要桌面和窗口还在,那么就别想删除掉它。

要解决这个问题,先要尝试用Regsvr32.exe程序来去除它的组件注册信息,Regsvr32.exe是32位系统下的DLL注册和反注册工具。

例如反注册mmsassist.dll,只需要用命令提示符进入文件的目录里,执行Regsvr32.exe /u mmsassi st.dll即可(可以在控制面板中看到,其实有些程序的卸载就是用的这个命令),然后打开任务管理器,把Explorer.exe进程停掉,最后直接在任务管理器里执行cmd,进入文件目录后输入del mmsassist.dll就完成了该文件的清理工作。

揪出潜藏的内鬼
如果清理了恶意劫持,重启机器后却发现它又回来了,这就是Windows系统中自启动技术在给它们“帮忙”。

用HiJackThis软件的混合工具,生成启动项列表,就可以发现自启动程序的地方足足有几十处之多。

也就是说系统提供给程序几十种自启动的方法,给那些别有用心的人以尽情发挥的广阔天地,也让网络用户防不胜防!
但也不用气馁,只要耐心去处理,再借助一些工具软件,还是可以战胜它们的。

经典的启动菜单
单击“开始→程序”,你会发现一个“启动”菜单,这就是经典的Windows启动位置,右击“启动”菜单选择“打开”即可将其打开,其中的程序和快捷方式都会在系统启动时自动运行。

最常见的启动位置当前用户的自启动文件夹,所有用户的自启动文件夹。

注册表的启动键
注册表是启动程序藏身之处最多的地方,主要有以下几项。

1.Run键
Run键是病毒最青睐的自启动之所,该键位置是[HKEY_CURRENT_USER \Software\Microsoft\Windows\CurrentVersion\Run]和[HKEY_LOCAL_MACHI NE\Software\M-icrosoft\Windows\CurrentVersion\Run],其下的所有程序在每次启动登录时都会按顺序自动执行。

还有一个不被注意的Run键,位于注册表[H KEY_CURRENT_USER\Software\Mirosoft\Windows\CurrentVersion\Policies\ Explorer\Run]和
和[HKEY_LOCAL_MACHINE\SOFTWARE\Mi-crosoft\Windows\CurrentVersio n\Policies\Explorer\Run],由于系统配置实用程序并不会检测这个地方,常被一些新型后门钻空子,加载项会随着Explorer一起运行,也要仔细查看。

注册表是最常见的启动藏身之所,很多程序会选择在Run键里面落户。

所以这里基本上是入门级的监控对象!
2.RunOnce键
RunOnce键在注册表中的位置是[HKEY_CURRENT_USER\Software\Micr osoft\Wind-ows\CurrentVersion\RunOnce]和[HKEY_LOCAL_MACHINE\Softw are\Microsoft\Windows\CurrentVersion\RunOnce]键,与Run不同的是,RunO nce下的程序仅会被自动执行一次。

3.RunServicesOnce键
RunServicesOnce键位于[HKEY_CURRENT_USER\Software\Microsoft\Wi ndows\CurrentVersion\RunServ-icesOnce]和[HKEY_LOCAL_MACHINE\So-ft ware\Microsoft\Windows\CurrentVersion\RunServicesOnce]下,其中的程序会在系统加载时自动启动执行一次。

4.RunServices键
RunServices继RunServicesOnce之后启动的程序,位于注册表如下位置:[HKEY_CURRENT_USER\Software\Micr-osoft\Windows\CurrentVersion\Run Services]和[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Curre ntVersion\Run-Services]键。

5.RunOnceEx键
该键是Windows XP/2003特有的自启动注册表项,在注册表的具体键值位置是:[HKEY_CURRENT_USER\SOFTWARE\Mi-crosoft\Windows\CurrentVe rsion\RunOnceEx]和[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windo ws\CurrentVersion\RunOn-ceEx]。

6.Load键
[HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersi on\Windows]的load键值里面的程序也可以实现自启动。

7.Winlogon键
该键位于注册表[HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windo ws NT\CurrentVersion\Winlog-on]和[HKEY_LOCAL_MACHINE\SOFTWA-RE \Microsoft\Windows NT\CurrentVersi-on\Winlogon],注意下面的Notify、Useri nit、Shell键值也会有自启动程序,而且其键值可用逗号分隔,从而实现登录的时候启动多个程序。

8.其他键值
其它注册表位置还有一些其他键值,经常会有一些程序在这里自动运行,如:[HKEY_CURRENT_USER\Software\Micro-soft\Windows\CurrentVersion\Polic ies\System\Shell]、[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Window s\CurrentVersion\ShellServiceObjectDelayLoad]、[HKEY_CURRENT_USER\ Software\Policies\Microsoft\Windows\System\Scripts]、[HKEY_LOCAL_MACH INE\Software\Policies\Microsoft\Windows\System\Scripts]等。

常用的系统配置文件启动
古老的批处理启动
从DOS时代过来的朋友肯定知道autoexec.bat(位于系统盘根目录)这个自动批处理文件,它会在电脑启动时自动运行,早期许多病毒就看中了它,使用d eltree、format等危险命令来破坏硬盘数据。

如“C盘杀手”就是用一句“deltree / y c:\*.*”命令,让电脑一启动就自动删除C盘所有文件,害人无数。

在Windows的配置文件(包括Win.ini、System.ini和wininit.ini文件)也会加载一些自动运行的程序。

1.Win.ini文件
使用“记事本”打开Win.ini文件,在[windows]段下的“Run=”和“LOAD=”语句后面就可以直接加可执行程序,只要程序名称及路径写在“=”后面即可。

不同的是“load=”后面的程序在自启动后最小化运行,而“run=”后程序则会正常运行。

2.System.ini文件
使用“记事本”打开System.ini文件,找到[boot]段下“shell=”语句,该语句默认为“shell=Explorer.exe”,启动的时候运行Windows外壳程序explorer.exe。

病毒可不客气,如“妖之吻”病毒干脆把它改成“shell=c:\yzw.exe”,如果你强行删除“妖之吻”病毒程序yzw.exe,Windows就会提示报错,让你重装Windows,吓人不?也有客气一点的程序,如将该句变成“shell=Explorer.exe 其他程序名”,看到这样的情况,后面的其他程序名一定是恶意程序。

3.wininit.ini文件
这个文件是很容易被许多电脑用户忽视的系统配置文件,因为该文件在Wi ndows启动时自动执后会被自动删除,这就是说该文件中的命令只会自动执行一次。

该配置文件主要由软件的安装程序生成,对那些在Windows图形界面启动后就不能进行删除、更新和重命名的文件进行操作。

若其被病毒写上危险命令,那么后果与“C盘杀手”无异。

如果不知道它们的存放位置,按F3键打开“搜索”对话框进行搜索;单击“开始→运行”,输入sysedit回车,打开“系统配置编辑程序”也可以方便地对上述文件进行查看与修改。

定时的任务计划启动
在默认情况下,“任务计划”程序随Windows一起启动并在后台运行。

如果把某个程序添加到计划任务文件夹,并将计划任务设置为“系统启动时”或“登录
时”,这样也可以实现程序自启动。

通过“计划任务”加载的程序一般会在任务栏系统托盘区里有它们的图标。

大家也可以双击“控制面板”中的“计划任务”图标查看其中的项目。

用控制面板中的“任务计划”工具和HiJackThis的混合工具箱能够看到当前计划任务,如果有不明的任务计划,一定要删除,有些恶意软件会在这里放置某个自启动任务,容易让人们忽略。

智能的脚本启动
在Windows 2000/XP中,单击“开始→运行”,输入gpedit.msc回车可以打开“组策略编辑器”,在左侧窗格展开“本地计算机策略→用户配置→管理模板→系统→登录”,然后在右窗格中双击“在用户登录时运行这些程序”,选“已启用”,单击“显示”按钮,在“登录时运行的项目”下就显示了自启动的程序。

更高级的DLL注入启动
还有更高级的方法是建立以下项:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersio n\Windows\AppInit_DLLs
[ 资料]系统中主要常用的几个DLL如下:
PostBootReminder:WINDOWS\system32\SHELL32.dll
CDBurn:WINDOWS\system32\SHELL32.dll
WebCheck:WINDOWS\system32\webcheck.dll
SysTray:WINDOWS\system32\stobject.dll
WPDShServiceObj:WINDOWS\system32\WPDShServiceObj.dll
除了上述文件此外,如果再有加载项,就要引起注意了,AppInit_DLLs项处注册的DLL文件可以让系统运行DLL文件中的DllMain函数来达到启动不良程序的目的。

因为它是内核级调入的,对这个DLL的稳定性有很大要求,稍有错误就会导致系统崩溃,很少看到这种程序(如求职信病毒)。

如果要详细分析自己系统中的加载项,请使用系统自带的MSConfig,也可利用startup.cpl、Start Stop、StartupMonitor、Autoruns、HiJackThis等工具。

系统服务加载启动
还有另外一种加载启动项的方法,就是注册为系统服务。

这样的程序编写时要符合服务的规范,对作者的要求就更高一些。

作为服务运行的程序会较早的获得控制权。

因此,很多不良程序都会将一个模块注册为服务,来达到隐藏或保护主程序的目的。

有好多IE工具栏,BHO的程序都加了服务保护。

查看系统中的服务,可以用Windows控制面版的“管理工具”打开服务列表,看一看各个服务是否有可疑分子,如果有就可把它禁用。

防御:使用IceSword
当然也可用工具去分析,例如可用HiJackThis就可分析出除系统本身常用服务之外的服务项,IceSword也是比较好用的一个工具,用它可以列表形式显示出所有服务的状态及文件路径,一目了然,这只是IceSword的一个小功能,下面介绍更深层次的东西还会用到IceSword。

当然,还有其它的工具,大家可以自己去实践。

如果你已经将可疑服务停止并禁用,而且将注册表、启动文件、启动目录中相关的自启动加载项都清理干净后,重启计算机,然后再返回去处理BHO不能禁用和文件删不掉的情况,大部分情况下能够大功告成。

可是可怕的事情还是发生了,在禁用服务时,禁不住;刚删除掉的自启动项又出现了;BHO不管用什么工具也禁不了;虽然找到不良程序文件所在,但就是删不掉……它就如梦魔一样如影随形,挥之不去!这是怎么回事啊?其实这可能遇到了顽固派,他们应用了更加高级的后台保护技术——RootKit技术。

不择手段的驱动级保护
有些程序为了达到有效保护自身不被清除的目的,不惜应用各种手段,他们已经不能满足只用上面介绍的方法了,转而使用更加隐蔽的方法,也是一种技术含量高的方法,那就是——RootKit(驱动级保护)。

对于程序员来讲,他们会知道“驱动”二字意味着什么意思。

驱动程序工作在系统核心级——Ring 0。

编写驱动必须严格遵守系统的规范,稍有不慎,系统就会瘫痪。

因此编写这类程序,需要对系统结构有清楚的了解,难度相当高。

通过学习Windows系统结构可知,位于Ring 0层的是系统核心模块和各种驱动程序模块,所以位于这一层的不良程序也是以驱动的形式生存的,而不是一般的EXE。

程序作者把后门写成符合WDM规范(Windows Driver Model)的驱动程序模块,把自身添加进注册表的驱动程序加载入口,便实现了“无启动项”运行,一般的
进程查看器都只能枚举可执行文件EXE的信息,所以通过驱动模块和执行文件结合的后门程序便得以生存下来,由于它运行在Ring 0级别,拥有与系统核心同等级的权限,因此它可以更轻易的把自己隐藏起来,无论是进程信息还是文件体,甚至通讯的端口和流量也能被隐藏起来,在如此强大的隐藏技术面前,无论是任务管理器还是系统配置实用程序,甚至系统自带的注册表工具都失去了效果。

这类程序(驱动)通常不做主要工作,它只负责隐藏恶意BHO文件、启动项和进程信息等,但也不能排除今后它们不会用到别的方面,因为它们的权限太高了。

它们主要通过控制系统核心库(ntoskrnl.exe)中的相关函数,如NtDeleteFile,NtDeleteKey等,来达到保护实体文件的目的。

庆幸的就是,如今真正写出好用的Rootkit的人还没那么多,但既然有人能够实现了,就有理由担心它会受到广泛的推崇,甚至已经在报道中看到,有人写出了能够绕过操作系统,针对CPU(AMD)的病毒。

要清理这类程序并非HijackThis和其他同类软件能做到的了,手工查找也比较困难,这时候必须请出IceSword了(工具的使用方法请参见帮助,里面已经介绍的很清楚了),大家主要关心的是“进程”和SSDT(IceSword也能看系统当前注册的BHO、服务、LSP等信息,前面已经提到过)。

先在“进程”工具处,注意找被IceSword标注为红色的项目,它们就是罪魁祸首,对于进程列表里的红色进程,先尝试用“结束进程”停止掉该进程运行,然后看看它还会不会“复活”,尽量不要直接删除红色进程的文件,因为这些进程虽然是被Rootkit出于某种目的隐藏起来的,但是它们也有可能是被Rootkit借来驻留的系统进程载体(例如线程注入),随便删除容易导致系统出错。

确认没有红色进程后,来看SSDT,SSDT意为“系统服务描述表”,里面存放着最底层的接口函数,Rootkit要实现各种隐藏都要修改这个地方实现对系统底层函数的控制和转移,正常情况下SSDT的函数都是从ntoskrnl.exe导出的,如果有Rootkit(.sys文件)控制了部分函数,在IceSword里就会表示为红色的,并且指出该函数被哪个文件掳走了(一些杀毒软件为了查杀Rootkit,也会在这里留下自己的痕迹,如瑞星的hookbase.sys等,检查的时候要注意看文件版权信息以免误杀),大家先要记下该文件名,然后进入注册表的“HKEY_LO CAL_MACHINE\SYSTEM\CurrntControlSet\Services”里查找该文件并删除对应的子项名称,重新启动计算机后再用IceSword检查,如果没有再出现红色,那就清除RootKit成功。

如果用系统的Regedit清除RootKit时还清不掉的话,可能RootKit加了Regedit编辑保护,在这种情况下就可以用IceSword中的注册表工具进行清除,它的用法基本上和Regedit一样。

然后,再用前面介绍的方法再进行服务的禁用,自启动项的清除,控件的反注册,BH O的禁用与文件的删除(一定要注意顺序)。

认识Winsock LSP
除了上面介绍的劫持方法外,近年来采用LSP技术进行浏览器劫持的恶意软件也慢慢浮出水面了。

LSP全称为“Windows Socket Layered Service Provider”(分层服务提供商),这是Winsock 2.0才有的功能,它需要Winsock服务提供商接口(Service Provider I nterface,SPI)才能实现,SPI是一种不能独立工作的技术,它依赖于已经存在的基本协议,如TCP/IP协议等,在这些协议上派分出的子协议即为“分层协议”,如SSL等,它们必须通过一定的接口函数调用,LSP就是这些协议的接口。

使用LSP的好处在于,这类浏览器劫持方案可以不分浏览器“种族”的进行,即使不用I E,Opera、NC、Firefox等非IE内核的浏览器也难逃厄运,因为LSP是直接从Winsock 获取信息的,而所有浏览器最终的数据传输都必须建立在Winsock接口上,所以一旦LSP 层被恶意劫持,用户的所有数据传输都有可能被劫持了。

LSP服务接口位于注册表的HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\ Services\WinSock2\Parameters\Protocol_Catalog9\Catalog_Entries\项目内,所有接口都通过一串长数字项表示。

普通情况下,XP系统(Windows 2000可能会有所不同)就已经带有了两个LSP接口分别负责TCP/IP组件(mswsock.dll)和NTDS组件(winrnr.dll)的正常工作,而LSP劫持则是把自己加入该项目内,并把优先权提高(用长数字项表示),例如默认情况下TCP/IP组件的优先权为000000000001,如果发生了LSP劫持,恶意LSP可能会把自身改为000000000001,而系统原有的LSP项目就被往后推为000000000002等,以便数据包轮寻的时候能优先被恶意LSP处理。

要清理LSP劫持不能简简单单的直接删除注册表中的键,这样做以后就会发现系统也不能使用任何网络功能了,因为系统自身也必须依赖两个内置的LSP进行工作,所以,正确的清理步骤必须这样进行:
第一步:确认LSP劫持已经发生,可以通过检查上文提到的注册表键值判断,或者使用HijackThis做一次全面扫描。

HiJackThis自带的LSPFix工具也很好用,并且可以进行自动修复。

如要手工修复请继续看下面;
第二步:删除相应的LSP组件项目,它是用一长串数字表示的,当然如系统中安装了其它协议,如RSVP,就会出现rsvpsp.dll,有些有用的工具也会用到LSP,如江民杀毒软件,就在这里设置了一个kvwsp.dll,因此除了上面介绍的两个系统必须的协议文件(mswso ck.dll,winrnr.dll)外,一定要先查询一下,不要一概删除;
第三步:重命名正常的LSP组件项目,TCP/IP为000000000001,NTDS为000000 000002,如果还有其他的话,依次排序,数字串修改完成后,记住一定要将Protocol_Cat alog9下的Num_Catalog_Entries值也进行修正,有多少个长串,这个数就是多少,否则L SP无法正常工作;
第四步:重启计算机,查找并删除LSP驱动文件(DLL),在第一步查看注册表键时注意记下相应LSP项目中的驱动DLL文件的地址;
第五步:再用HijackThis扫描一下恶意LSP是否已经彻底清理掉。

推荐用HiJackThis
的LSPFix工具进行自动修复。

但有些情况下,LSP劫持已经发生并且DLL文件已经注入到系统多个进程中,从而达到保护注册表键的目的。

这时,虽然可按上面的步骤进行处理,但重启后一查就又回来了。

对于这种情况,清除时就要费点儿力气。

实战
某日,用HiJackThis扫描,发现出现了一个叫quartz32.dll的LSP劫持,到网上查了一下原来它是一个叫“罗古”(ADWARE.Roogooo)的广告弹出型流氓软件。

先用本文中介绍的方法进行手工清除,重启计算机后,查看注册表又回来了。

看看服务,看看自启动项等处没什么可疑的地方。

于是再用LSPFix自动修复,显示修复成功,再扫描一下,结果LSP劫持“幽灵”般地再次出现。

想删除syste m32\quartz32.dll,显示“文件正在使用……”。

分析是系统启动时这个DLL文件就同时被一些系统进程加载到内存中,它监控对注册表LSP的修改,并进行保护。

在这种情况下,采取了以下两办法,其中之一都可成功清除LSP劫持。

方法一
对策就是想办法,把quartz32.dll先从系统内存中卸载,再进行修复。

先启动IceSword,再启动自带工具IsHelp,在“进程模块”窗口中,单击“查找模块”,查找quartz32文件,它会列出所有加载这个文件的进程号,记下这些进程号,到IceSword主窗口中的“进程”窗口,根据进程号找到相应的进程,右击选择“模块信息”,找到quartz32.dll,然后单击“卸除”,依次将所含quartz32.dll进程都进行如此操作,就可以把quartz32.dll从内存中卸载掉。

值得注意的是quartz32.dll还插入到了如winlogon.exe这样的系统核心进程中,当在这里卸除模块时,系统会给1分钟时间,然后就自动重启了,一定要把这个进程的卸载放到最后,并且在这一分钟,抓紧使用LSPFix工具自动修复L SP,不用紧张,一分钟足够了;也可用手工修复,估计那样一分钟就不够了。

然后,就让系统重启吧!
重启后再扫描一下,HiJackThis已经不报告010项,修复成功,并到syst em32下把quartz32.dll彻底删除,这下就没有“文件正在使用”的提示了。

方法二
上面的方法有些繁琐,第二种方法就简单一些。

用HiJackThis的混合工具箱中的“删除文件”工具,它可以删除正在使用的文件,但只是打标记,然后重启计算机,重启后就彻底删除了,然后再用LSPFix自动修复或手工修复即可。

请记住,如果只删除文件不修复LSP的话,会造成不能上网的情况。

总结一下:
总体来看,反“浏览器劫持”大体按照以下步骤顺序执行:
1 用HiJackThis,IceSword等工具检查系统;
2 如果有RootKit保护,要先想法把它们去除;
3 禁用相关服务,删除相关自启动项;
4 重启电脑或停掉相关进程;
5 反注册相关控件;
6 修复BHO;
7 删除相关文件。

8 重装系统是最后一招。

相关文档
最新文档