网络安全 频道

遏制小浩 擒获大猩猩,扫光U盘病毒

    【IT168专稿】8月中旬,名为“小浩”蠕虫病毒出现在网络上,可以感染 *.exe可执行程序,可感染各种网页脚本程序,插入带毒网址,被感染后的*.exe文件将遭到破坏,无法恢复。

    不久之后,“大猩猩”病毒又现身于互联网,其虽在技术上并无特别之处,却是一个使用病毒技术较为全面的病毒。

    这两种病毒的共同点是U盘成为病毒的重要传播工具。无论是用户双击中毒电脑的U盘还是硬盘,病毒都将被激活。尤其是后者,病毒运行后,尝试使用Taskkill /f /im命令关闭近百种杀毒软件和安全工具的进程,以达到躲避查杀的目的。病毒具有重定向劫持功能,通过写注册表中的 IFEO 键值来阻止100款杀毒软件和安全工具的运行;还通过修改操作系统的Hosts表,禁止用户登陆数十家反病毒厂商的网址,阻止杀毒软件升级病毒库。该病毒还会修改注册表相关键值,禁用系统“显示隐藏文件”功能隐藏自身,破坏系统安全模式,使得中毒用户无法进入安全模式下杀毒。

    “小浩”和“大猩猩”病毒的出现并非偶然。随着近年来移动存储设备,如移动硬盘、MP3等的普及,移动存储设备已经成为病毒传播的另一重要传播途径。去年闹得最欢的“熊猫烧香”病毒,也利用了这种传播方法,足见其危害程度。

    如何防范成为众多企业网络管理者急需处理的问题。笔者在提出预防此类病毒新方法的同时,详细介绍如何利用delphi编程语言加以实现。

    病毒在 Windows操作系统下,通过移动存储设备传播的手段和方法,并由此提出预防病毒的新方法,以及用delphi编程语言实现。

    1  依赖移动存储设备传播型病毒传播方式

    当移动设备连接到电脑上后,病毒拦截Windows硬件改变消息,并拷贝自身到移动设备,修改AutoRun.inf文件,当同样的移动设备再次插入别的计算机后,病毒通过系统的自动运行或者用户直接从盘符双击进入启动,进一步感染系统。通过这样的过程的重复,已经感染的计算机重新感染别的计算机,就使病毒的传播范围越来越大。

    2  AutoRun.inf文件原理

    2.1 AutoRun.inf由来

    AutoRun.inf这个文件是很早就存在的,在WinXP以前的其他windows系统(如Win98,2000等),需要让光盘、U盘插入到机器自动运行的话,就要靠AutoRun.inf。这个文件是保存在驱动器的根目录下的(是一个隐藏的系统文件),它保存着一些简单的命令,告诉系统这个新插入的光盘或硬件应该自动启动什么程序,也可以告诉系统让系统将它的盘符图标改成某个路径下的icon。所以,这本身是一个常规且合理的文件和技术。该文件在实际中的应用也有很多,如一些软件光盘利用这个文件,制作了方便快捷的安装指示文件。

    2.2 AutoRun.inf怎样被病毒利用

    病毒利用AutoRun.inf文件启动,主要利用两个字段:“open”和“shellexecute”,利用这两个字段,病毒会在移动设备插入时自动运行,或者用户双击移动设备盘符时启动。具体的AutoRun.inf文件表现如下:

open=RavMon.exe
shellexecute=RavMon.exe

    另外,病毒还有可能关联右键菜单,在点击相应的选项的时候,就有可能是病毒加载,表现如下:

shell\Auto\command=RavMon.exe

     3 如何预防依赖移动存储设备传播型病毒的感染

    根据依赖移动设备传播的病毒的行为,我们可以采用针对各个步骤地预防方案。

    3.1 停止系统的自动播放光碟,插入的移动设备

    当移动设备插入时,如果有对应AutoRun.inf的存在,系统会自动运行对应的内容。所以,禁止此文件的自动播放,这是预防病毒的第一步。查阅了相关文献,相关控制选项在注册表的这个位置:  KEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer。

    其中的NoDriveTypeAutoRun子键限制着Autorun的作用范围,默认为95(16进制)如果设置为255,将会阻止光盘和移动设备的自动读取,从而防止病毒的自动运行。

    3.2 停止使用双击打开盘符,改用右键--资源管理器或者从资源管理器左边的磁盘列表中进入。

    双击打开盘符会使系统自动调用根目录地下的AutoRun.inf文件,如果使用右键--资源管理器或者从资源管理器左边的磁盘列表中进入的方式,那么就可以避开AutoRun.inf文件的加载,病毒便不能运行。

    3.3 在系统运行病毒之前,利用AutoRun.inf文件的固有特征,检验并且删除病毒。

    如果病毒利用U盘传播,那么在AutoRun.inf文件中必须有所体现,那么在这个文件中会有不正常的条目,利用这些条目的特征,就可以定位病毒位置,并且删除病毒。

    4 编程实现

    针对这种病毒的传播方式,我们可以根据病毒的固有特征来定位其所在,并且在病毒启动之前删除,防止感染。

    4.1 检测移动设备的插入

    在这里,用到了一个Windows的消息:WM_DEVICECHANGE,设备变更消息。在系统的盘符设备发生变化的时候,系统会自动向系统里运行每一个运行的程序发送这个消息,如果捕捉的这个消息,就可以检测移动设备的插入,从而进行下一步的检验。具体实现的关键delphi代码如下,已经加了注释。

Uses  Messages / /在程序头部引用消息单元
  procedure WMDeviceChange( var Msg:Tmessage);message WM_DEVICECHANGE ;//创建接受过程
  const
   BDT_DEVICEARRIVAL=$8000; //定义移动设备插上时的消息
//整个接受消息和检测过程
procedure TForm1.WMDeviceChange(var Msg:Tmessage);
var
i:integer;
begin
    case Msg.WParam of
        BDT_DEVICEARRIVAL:       //移动设备插上事件
           begin
         for  i:=97 to 122 do
begin 
  killvirus(chr(i));//从a到z盘,每个盘符调用病毒查杀过程
end;
           end;
    end;
end;

    4.2 判断病毒是否存在,如果存在病毒,分离路径,删除病毒

    病毒如果存在,就会在autorun.inf文件中有所体现,会产生类似OPEN=XXX.EXE或者SHELLEXECUTE=XXX.EXE的条目,如果存在这些特征,我们就可以检测它,从而定位病毒并删除。

procedure killvirus(str:string);
var
n:integer;
T: Textfile;  //文件变量,用来读取autorun.inf文件
path,S: String;
   procedure delvirus(str,content:string);//删除病毒过程
     begin
           FileSetAttr(str+':\autorun.inf',faArchive);//取消autorun.inf的只读属性
           deletefile(str+':\autorun.inf');  //删除文件
           path:=str+':\'+copy(content,pos('=',content )+1,pos('.',content)-pos('=',content)+3) ;  //得到包含病毒的路径
           if FileExists(path) then
           begin
           FileSetAttr(path,faArchive);//取消只读属性
           deletefile(path );     //删除文件
           end;
     end;
begin
if FileExists(str+':\autorun.inf') then
 begin
  AssignFile(T, str+':\autorun.inf');    //文件变量与文件名关联
  Reset(T);
   while not EoF(T) do begin     //如果不是到文件末
    ReadLn(T, S);//读取一行文件
    n:=Pos('open=',lowerCase(s));  //定位第一个病毒特征
      if n<>0 then     //如果存在
      begin
         CloseFile(T);     //关闭文件变量
         delvirus(str,s); //调用删除病毒过程
         exit;
      end;
    n:=Pos('shellexecute=',lowerCase(S));   //定位第二个病毒特征
      if n<>0 then        //如果存在
      begin
         CloseFile(T);
         delvirus(str,s); //调用删除病毒过程
         exit;
      end;
    end;
    CloseFile(T);   //关闭文件变量
  end;
end;

    上述内容仅向你提供了预防这种类型病毒的通用方法。用这种与特定病毒无关的通用检测方式,使检查未知病毒十分有效且易于软件实现。但是这种方法其中还存在很多问题,如怎样区别正常程序利用Autorun.inf或是病毒的引导文件,这将影响到用户对系统的正常使用,还有待于解决。

0
相关文章