3721清除方法详解
近日接到内网用户来报,在上到某些站点的时候,会被提示安装一个叫3721中文实名的插件,部分用户在不知情的情况下误点"安装"选项,导致该病毒驻留于硬盘上难以杀除。天缘虽是网络管理员,但是对Windows操作系统的确使用得不多,从来也没有用过这个名为3721的插件,但看到用户们焦急地神情,于是答应尽力而为。经过几番努力,终于将其斩于马下。 以下是杀除该病毒得经历及病毒解决方案......
天缘使用一台windowsxp机器,访问用户提供的站点,下载并执行了该插件。该插件为中文,自动安装后重新启动机器后生效,并自带卸载功能。通过安装/卸载前后的对比观察,其驻留性、自身保护性及对系统性能的大量损耗,让天缘确定了该插件确是病毒无疑!  

  病毒发作现象:  

  自动将浏览器的"搜索"功能重定向到一个叫www。3721。com的网站,该站点为中文站,且无法修改; 

  强行在用户ie上添加"情景聊天"、"上网加速"等几个图标;  

  不断刷新注册表相关键值,以达到成功驻留和大量消耗用户主机资源的目的;  

  每次启机加载,并自带进程保护功能,在正常地windows启动下难以杀除;  

  带自动升级功能,每次用户上网使用ie时,该病毒会后台执行升级;

  病毒自身特点:  

  自带卸载功能;该病毒为达到隐藏自身目的,麻痹下载插件用户的目的,提供了卸载程序。但根据天缘的使用情况发现,在卸载后,该病毒程序依然驻留,启动时仍然加载,依然监视、改写注册表;  

  采用网络升级方式;该病毒为了防止用户以及杀毒软件的杀除,采取定期网上升级的方式,这点与近期的其他Windows主流病毒类似,但值得一提的是该病毒建有公开的病毒升级站点www。3721。com,且站点风格酷似门户、服务类站点,具有极大的欺骗性;

  以驱动模式加载;该特性可说是近段时期以来病毒编写的一次技术飞跃,采用驱动模式加载配合挂接hook的方式,在windows下极难查杀(详细技术讨论见后);  

  提供在浏览器地址栏中输入中文后转到其站点进行关键字查询的搜索服务。前段时间的冲击波克星病毒也曾在感染用户机器后自动连接用户的机器到update.Microsoft.com下载补丁,看来新的病毒越来越多地喜欢提供一些另类功能了;  

  被动方式传播:利用一些站点来进行传播,而不是主动感染其他机器,这点与当前热门的"美女图片"病毒的方式相近。从主动转向被动,可说是今年一些病毒的新特点。

病毒详细分析:  

  当用户访问站点的时候,弹出一个控件下载窗口提示用户下载安装,表面上称自己是提供中文实名服务,引诱用户安装;  

  在安装过程中多处修改用户文件及注册表;

  添加文件:  

  在Documents and SettingsAll Users「开始」菜单程序网络实名 目录下添加:  

  了解网络实名详细信息。url 86 字节  

  清理上网记录。url 100 字节  

  上网助手。url 99 字节  

  卸载网络实名。lnk 1,373 字节  

  修复浏览器。url 103 字节  

  在WINDOWSDownloaded Program Files 下添加:
  
  assis.ico 5,734 字节  

  cns02.dat 1,652 字节  

  CnsHook.dll 56,320 字节  

  CnsMin.cab 116,520 字节  

  CnsMin.dll 179,712 字节  

  CnsMin.inf 378 字节  

  sms.ico" 6,526 字节  

  yahoomsg.ico 5,734 字节  

  在WINDOWSSystem32Drivers 目录下添加:  

  CnsminKP.sys  

  添加注册表键值:  

  增加HKEY_LOCAL_MACHINESOFTWARE3721 主键,下设多子键及属性值;  

  在HKEY_LOCAL_MACHINESOFTWAREClassesCLSID 主键下增加  

  两个子键  

  在HKEY_LOCAL_MACHINESOFTWAREClasses主键下增加  

  CnsHelper.CH  

  CnsHelper.CH.1  

  CnsMinHK.CnsHook  

  CnsMinHK.CnsHook.1四个子键  

  在HKEY_LOCAL_MACHINESOFTWAREClassesInterface主键下增加子键  

  在HKEY_LOCAL_MACHINESOFTWAREClassesTypeLib主键下增加  

  在HKEY_LOCAL_MACHINESOFTWAREMicrosoftInternet ExplorerAdvancedOptions主键下增加!CNS子键  

  在HKEY_LOCAL_MACHINESOFTWAREMicrosoftInternet ExplorerExtensions 主键下增加  

  五个子键  

  在HKEY_LOCAL_MACHINESOFTWAREMicrosoftInternet ExplorerSearch主键下增加  

  CustomizeSearch  

  OcustomizeSearch  

  SearchAssistant  

  OsearchAssistant 四个子键  

  在HKEY_LOCAL_MACHINESOFTWAREMicrosoft WindowsCurrentVersionExplorerShellExecuteHooks主键下增加子键  

  在HKEY_LOCAL_MACHINESOFTWAREMicrosoft WindowsCurrentVersionRun下增加CnsMin子键  

  在HKEY_LOCAL_MACHINESOFTWAREMicrosoft WindowsCurrentVersionRunOnce下增加EK_Entry 子键 (提示,这个键将在下次启动机器的时候生效,产生最令人头疼的部分,后文会叙述)  

  在HKEY_LOCAL_MACHINESOFTWAREMicrosoft WindowsCurrentVersionUninstall下增加CnsMin 子键
 
  在HKEY_CURRENT_USERSoftware下增加3721子键  

  在HKEY_CURRENT_USERSoftwareMicrosoftInternet ExplorerMain下增加  

  CNSAutoUpdate  

  CNSEnable  

  CNSHint  

  CNSList  

  CNSMenu  

  CNSReset  

  在重新启动计算机后,上面提到的RunOnce下的EK_Entry生效,在注册表中多处生成最为邪恶的CnsMinKP键值,同时在系统盘的windows/system32/drivers目录下生成CnsMinKP.sys文件,噩梦由此开始。  

  由于win2k/xp在启动的时候(包括安全模式)默认会自动运行windows/system32/drivers下面的所有驱动程序,于是CnsMinKP.sys被加载,而这个驱动的作用之一,就是保证windows/ Downloaded Program Files目录下的Cnshook.dll和CnsMin.dll以及其自身不被删除;Cnshook.dll的作用则是提供中文实名功能,CnsMin.dll作用在于使其驻留在ie进程内的时候。CnsMin为了保证自己的优先级最高,用了一个定时器函数反复安装钩子,因此造成系统性能下降,在天缘测试的那台机器上,使得性能大概下降了20%左右。而且由于hook强行挂接的原因,当用户使用断点调试程序的时候将会导致频繁出错,这一点与早期版本的cih导致winzip操作和无法关机类似(关于详细的技术细节,可参看题目为《[转载]3721驻留机制简单研究》一文,原作者Quaful@水木清华)

防删除特性:  

  该病毒虽然自带一个所谓的"卸载程序",但事实上核心部分的程序/注册表键值依然没有删除。而且该病毒更是利用各种技术手段,具有极其强大的反删除特性。  

  windows系统启机(包括安全模式下)便会加载windows/system32/drivers下的CnsMinKP.sys,该驱动该驱动程序过滤了对其自身及相关重要文件和注册表的删除操作。每当试图删除3721的关键文件和注册表项时,直接返回一个TRUE,使Windows认为删除已经成功,但文件和注册表实际上还是在那里。  

  技术亮点:  

  天缘不得不承认,3721这个病毒插件可称我作为网管以来面对的最难清除的病毒。近几年来病毒有几次质的突破:cih感染可升级的bios、红色代码打开windows的共享扩大战果、meliza让我们见识了什么是看得到源程序的病毒、mssqlserver蠕虫让我们留意到计算机病毒能***的不光是节点还有网络设备、冲击波病毒让我们认识到大量使用同一种操作系统时在出现安全漏洞时的可怕、美女图片病毒让我们知道了将欺骗艺术与软件漏洞结合的威力、而这次3721病毒首次展现了病毒强大的反删除特性,可说是在windows环境下无法杀除的病毒。虽然这是个良性病毒,对系统并没有破坏特性,但依据病毒的发展史,可以预见,这种几近完美的反删除技术将很快被其他病毒所利用,很快将被其他病毒所利用。届时结合网络传播,局网感染带强大反删除功能的病毒或许会让目前windows平台下的杀毒软件遭遇到最大的考验。而这次经历,也让我意识到微软的windows操作系统在人性化、美观化、傻瓜化的背后的危机。作为it同行,我个人对3721病毒作者所使用的种种技术表示钦佩,但新型病毒的潘多拉魔盒,已经被他们打开。  

  在目前已知的病毒历史上,之前只有几种病毒利用过windows nt下的system32/drivers 下的程序会被自动加载的特性来进行传播,但那些病毒本身编写地不够完善,会导致windows nt系统频繁蓝屏死机,象3721插件病毒这样完美地加载、驻留其他进程,只消耗主机资源,监测注册表及关键文件不导致系统出错的病毒,国内外尚属首次,在技术上比以前那些病毒更为成熟;  

  如同天缘和大家曾经探讨过的没打sp2以上patch的win2k如何上网下载sp4再安装补丁这样的连环套问题一样。由于drivers目录下的CnsMinKP.sys启机必定加载,而欲不加载它,只有在windows启动后,进注册表改写相应的CnsMinKP键值或者删除该文件,但由于CnsMinKP.sys过滤了对其自身及相关重要文件和注册表的删除操作。每当试图删除3721的关键文件和注册表项时,直接返回一个TRUE,使Windows认为删除已经成功,但文件和注册表实际上还是在那里。使得注册表无法修改/文件无法被删除,让我们传统的杀除病毒和***的对策无法进行。  

  驻留ie进程,并自动升级,保证了该病毒有极强大的生命力,想来新的杀除方法一出现,该病毒就会立即升级。Windows上虽然还有mozilla等其他浏览器,但由于微软的捆绑策略和兼容性上的考虑,绝大多数用户一般只安装有ie.上网查资料用ie,寻找杀除3721资料的时候也用ie,如此一来,3721抢在用户前面将自身升级到最新版本以防止被杀除的可能性大大增加,更加增添了杀除该病毒的难度。或许在本文发出后,病毒将会在最短时间内进行一次升级。  

  附带其他"实用"功能。天缘记得早年在dos下的时候曾遇到一些病毒,在发作的时候会自动运行一个可爱的屏幕保护,或者是自动替用户清理临时文件夹等有趣的功能;后来在windows平台上也曾见过在病毒发作时自动提醒"今天是xx节,xx年前的今天发生了xx历史典故"这样的带知识教育意义的病毒;而3721病毒则是提供了一个所谓的中文域名与英文域名的翻译功能。随着病毒的发展,这样带隐蔽性、趣味性和欺骗性的病毒将越来越多。例如最近的邮件病毒以微软的名义发信,或以re开始的回信格式发信,病毒编写的发展从原来的感染传播、漏洞传播、后门传播逐步向欺骗传播过渡,越来越多的病毒编写者意识到社会工程学的重要性。或许在不久的将来,就会出现以简单的网络游戏/p2p软件为掩饰的病毒/***。  

  极具欺骗性:该插件在win98下也能使用,但使用其自带的卸载程序则可比较完美地卸载,而在win2k/xp平台下卸载程序则几乎没用。由此可以看出病毒编写者对社会工程学极其精通:当一个人有一只表时他知道时间;而当他有两只表时则无从判断时间。当在论坛/bbs上win2k/xp的用户提到此病毒无法删除的时候,其他win2k/xp用户会表示赞同,而win98用户则会表示其不存在任何问题属于正常程序的反对意见。两方意见的对立,影响了旁观者的判断。  

  商业行为的参与。据传该病毒是由某公司编写的,为的是进一步推销其产品,增加其访问量和申请用户。这点上与某些×××站点要求用户下载xx插件,之后不断利用该插件弹出窗口进行宣传的方式很象。天缘不由得想起一个典故。话说当年某公司公司工作人员(当然也有可能是不法者冒充该公司的工作人员)经常打电话恐吓大型的企业单位,无外乎说其中文域名已被xx公司抢注,如不交钱将会导致xx后果云云。兄弟学校中似乎也有受到此公司骚扰的经历:该公司员工打电话到某高校网络中心,起初是建议其申请中文域名,其主任很感兴趣但因价格原因未果。第二次打来的时候,就由劝说变成了恐吓,说该校中文名字已经被xx私人学校注册,如果该校不交钱申请就会有种种可怕后果云云。谁想该校网络中心主任吃软不吃硬,回话:"你既然打电话到此,想来你也知道在中国,xx大学就我们一所是国家承认的,而你们公司在没有任何官方证明的情况下就替申请我校中文域名的私人学校开通,就这点上就可见你们的不规范性,那么如果我私人交钱申请xxx国家领导的名字做个人站点是不是贵公司也受理?遇到类似冒用我校名义行骗及协助其行骗的公司,我们一贯的做法是寻找法律途径解决!"回答甚妙,当然此事后果是不了了之。从相关报道中不难看到,计算机犯罪逐步开始面向经济领域。侵犯私人隐私,破坏私人电脑的病毒与商业结合,是病毒编写由个人行为到商业行为的一次转变,病毒发展的历史由此翻开了新的一章。

病毒查杀方案:  

  由于网管专题的栏目作用主要是"授人与渔",天缘把病毒查杀过程经历一并写下,大家共同探讨。  

  第一回合:  

  当初见此病毒的时候,感觉不过如此,普通***而已。依照老规矩,先把注册表里相关键值删除,再把病毒文件一删,然后重新启动机器,等待万事ok.启机一看,注册表完全没改过来,该删除的文件也都在。  

  结局:病毒胜,天缘败。  

  第二回合:
  
  换了一台机器,下了个卸载帮助工具,以方便监视注册表/文件的改变。我下的是Ashampoo UnInstaller Suite这个软件,能监视注册表/文件/重要配置文件。Ok,再次安装3721插件,把对注册表的改变/文件的改变都记录下来。(值得注意,因为注册表run和runonce的键是下次启动的时候生效的,因此在重新启动后,还要对比一下文件/注册表的改变才能得到确切结果)。然后对比记录,把3721添加的键全部记下来,添加的文件也记录下来。之后我计划是用安全模式启动,删除文件和注册表,所以写了一个save.reg文件来删除注册表里的相关键值(写reg文件在网管笔记之小兵逞英雄那讲有介绍,等一下在文末我提供那个reg文件给大家参考),写了一个save.bat来删除相关文件,放到c盘根目录下。重新启动机器,进入安全模式下,我先用regedit /s save.reg 导入注册表,然后用save.bat删除相关文件。重新启动机器,却发现文件依然存在,注册表也没有修改成功。通常对付***/病毒的方式全然无效,令我产生如临大敌之感。

  结局:病毒胜,天缘败。
  
  第三回合:  

  重新启动机器,这次我采用手工的方式删除文件。发现了问题——对system32/drivers目录下的CnsMinKP.sys,WINDOWSDownloaded Program Files 目录下的Cnshook.dll和CnsMin.dll都"无法删除"。这样说可能有点不妥当,准确地说法是——删除之后没有任何错误报告,但文件依然存在。于是上网用google找找线索——在绿盟科技找到了一则文章(名字及url见前文),于是明白了这一切都是CnsMinKP.sys这东西搞得鬼。那么,只要能开机不加载它不就行了??但试了一下2k和xp的安全方式下都是要加载system32/drivers下的驱动,而如果想要取消加载,则需要修改注册表,但由于在加载了CnsMinKP.sys后修改注册表相关值无效,导致无法遏制CnsMinKP.sys这个程序的加载。当然,有软驱的朋友可以利用软盘启动的方式来删除该文件,但如果跟天缘一样用的是软驱坏掉的机器怎么办呢?记得绿盟上的文章所说的是——"目前无法破解"。在这一步上,天缘也尝试了各种方法。  

  我尝试着改这几个文件的文件名,结果没成功;  

  我尝试着用重定向来取代该文件,如dir * > CnsMinKP.sys ,结果不成功;

  我尝试着用copy con <文件名> 的方式来覆盖这几个文件,结果发现三个文件中Cnshook.dll可以用这样的方法覆盖成功,但是在覆盖CnsMinKP.sys和CnsMin.dll的时候,居然提示"文件未找到"!?熟悉copy con用法的朋友都该了解,无论是文件是否存在,都应该是可以创建/提示覆盖的,但居然出来这么一个提示,看来CnsMinKP.sys着实把系统都骗过了,强!!跟它拼到这里的时候,回想到了在dos下用debug直接写磁盘的时代了,或许用它才能搞定吧?  

  仔细一想,win2k/xp下似乎没有了debug程序了,而或许问题解决起来也不是那么复杂。再又尝试了几种方法后,终于得到了启示:既然文件不允许操作,那么##作目录如何?  

  我先把windowssystem32drivers目录复制一份,取名为drivers1,并将其中的CnsMinKP.sys删除(注意,因为是drivers1中的,所以可以被成功地真正删除掉);

  重新启动机器,到安全模式下;  

  用drivers1目录替代原来的drviers目录  

  cd windowssystem  

  ren drivers drivers2  

  ren drivers1 drivers  

  之后重新启动机器,然后进到windows后先把drivers2目录删除了,然后慢慢收拾残余文件和清理注册表吧。在这里天缘提供一个reg文件,方便各位删除注册表:  

  Windows Registry Editor Version 5.00(用98的把这行改成regeidt4)  

  [-HKEY_LOCAL_MACHINESOFTWARE3721]  

  [-HKEY_LOCAL_MACHINESOFTWAREClassesCLSID]  

  [-HKEY_LOCAL_MACHINESOFTWAREClassesCLSID]  

  [-HKEY_LOCAL_MACHINESOFTWAREClassesCnsHelper.CH]  

  [-HKEY_LOCAL_MACHINESOFTWAREClassesCnsHelper.CH.1]  

  [-HKEY_LOCAL_MACHINESOFTWAREClassesCnsMinHK.CnsHook]  

  [-HKEY_LOCAL_MACHINESOFTWAREClassesCnsMinHK.CnsHook.1]  

  [-HKEY_LOCAL_MACHINESOFTWAREClassesInterface]  

  [-HKEY_LOCAL_MACHINESOFTWAREClassesTypeLib]  

  [-HKEY_LOCAL_MACHINESOFTWAREClassesTypeLib]  

  [-HKEY_LOCAL_MACHINESOFTWAREMicrosoftInternet ExplorerAdvancedOptions!CNS]  

  [-HKEY_LOCAL_MACHINESOFTWAREMicrosoftInternet ExplorerExtensions]  

  [-HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows CurrentVersionUninstallCnsMin]  

  [-HKEY_LOCAL_MACHINESOFTWAREMicrosoftInternet ExplorerExtensions]  

  [-HKEY_LOCAL_MACHINESOFTWAREMicrosoftInternet ExplorerExtensions]  

  [-HKEY_LOCAL_MACHINESOFTWAREMicrosoftInternet ExplorerExtensions]  

  [-HKEY_LOCAL_MACHINESOFTWAREMicrosoftInternet ExplorerExtensions]  

  [-HKEY_LOCAL_MACHINESOFTWAREMicrosoftInternet ExplorerExtensions]  

  [-HKEY_CURRENT_USERSoftware3721]  

  [-HKEY_LOCAL_MACHINESOFTWAREMicrosoftInternet ExplorerSearchOCustomizeSearch]  

  [-HKEY_LOCAL_MACHINESOFTWAREMicrosoftInternet ExplorerSearchOSearchAssistant]  

  [-HKEY_LOCAL_MACHINESOFTWAREMicrosoftInternet ExplorerSearchCustomizeSearch]  

  [-HKEY_LOCAL_MACHINESOFTWAREMicrosoftInternet ExplorerSearchSearchAssistant]  

  [-HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows CurrentVersionExplorerShellExecuteHooks]  

  [-HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows CurrentVersionRunCnsMin]  

  [-HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows CurrentVersionRunOnceEK_Entry]  

  [-HKEY_USERSS-1-5-21-789336058-764733703-1343024091-1003SoftwareMicrosoftInternet ExplorerMainCNSAutoUpdate]  

  [-HKEY_USERSS-1-5-21-789336058-764733703-1343024091-1003SoftwareMicrosoftInternet ExplorerMainCNSEnable]  

  [-HKEY_USERSS-1-5-21-789336058-764733703-1343024091-1003SoftwareMicrosoftInternet ExplorerMainCNSHint]  

  [-HKEY_USERSS-1-5-21-789336058-764733703-1343024091-1003SoftwareMicrosoftInternet ExplorerMainCNSList]  

  [-HKEY_USERSS-1-5-21-789336058-764733703-1343024091-1003SoftwareMicrosoftInternet ExplorerMainCNSMenu]  

  [-HKEY_USERSS-1-5-21-789336058-764733703-1343024091-1003SoftwareMicrosoftInternet ExplorerMainCNSReset]  

  结局:病毒败,天缘胜。

  (虽然是成功地删除了它,但是感觉赢得好险,如果该病毒加一个禁止上级文件改的功能那么就真的没折了,为了预防类似的情形,最后还是找到了彻底一点的办法,见下)  

  第四回合:

  聪明的读者大概已经想到,既然没有办法在硬盘启动对于c盘是fat32格式的机器,想到这里已经找到了解决办法——用win98启机软盘启动机器,然后到c盘下删除相关文件,然后启动到安全模式下用save.reg把注册表搞定就行了。问题是——大多数win2k/xp都使用的是新的ntfs格式,win98启机软盘是不支持的!怎么办?有软驱的机器可以做支持NTFS分区操作的软盘,用ntfsdos这个软件就能做到。而跟天缘一样没有软驱的朋友,别忘记了win2k/xp开始加入的boot,不光是能够选择操作系统而已,而是跟linux下的lilo和grub一样,是一个操作系统引导管理器——换句话说,如果我们能在硬盘上做一个能读写NTFS的操作系统,再用boot进行引导,那么不是就可以在无软驱的情形下实现操作c盘的目的了么?在网络上找到vFloppy.exe 这个软件,它自带一个支持读写ntfs的镜象文件,并且使用简单,非常傻瓜化。然后删除3721的相关文件,重新启动后清理注册表和删除相关文件就行了。  

  到此,我们终于把3721这个阴魂不散地幽灵彻底赶出了我们的硬盘!!