揪出系统中秘密隐藏的木马

2011-4-3 王健宇 转载

木马为了生存会想尽办法隐藏自己,早期的木马通常会采用以下方式来实现自启动,比方说通过“开始”菜单的“启动”项来加载自己,通过注册表的有关项目来启动木马,还有的木马会注册为系统服务来迷惑我们。不过,除此之外木马还有多种隐藏自己的方法,所以我们绝不能掉以轻心。知己知彼,方能百战不殆,下面我们就谈谈这些鲜为人知的木马隐藏方法。

“组策略”中的木马

通过“组策略”来加载木马非常隐蔽,不易为人所发现。具体方法是:点击“开始”菜单中的“运行”,输入“Gpedit.msc”并回车,这样就可以打开“组策略”,在“本地计算机策略”中顺次点击“用户配置→管理模板→系统→登录”(图1),然后双击“在用户登录时运行这些程序”子项,出现如图所示对话框(图2),在这里进行属性设置,选定“设置”中的“已启用”,接下来单击“显示”按钮,会弹出“显示内容”窗口(图3),再单击“添加”按钮,出现“添加项目”窗口(图4),在其中的文本框中输入要自动运行的文件所在的路径,最后单击“确定”按钮,然后重新启动计算机就可以了,系统在登录时会自动启动我们添加的程序。注意:如果自启动的文件不是位于%Systemroot%目录中,则必须指定文件的完整路径。

如果我们刚才在“组策略”中添加的是木马,就会诞生一个“隐形”的木马!这是因为在“系统配置实用程序”Msconfig中你是无法发现该木马的,在大家周知的注册表项如HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run项和HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run项你也无法找到相应的键值,所以这种加载木马的方式还是非常隐蔽的,对普通用户来说威胁也更大一些

难道这种加载木马的启动方式就那么无懈可击吗?当然不是!其实,通过这种方式添加的自启动程序依然被记录在注册表中,只不过不是在我们所熟悉的那些注册表项下,而是在在注册表的HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run项中。所以,如果你怀疑电脑中可能有木马,却找不到它躲在哪儿,那就到上述注册表项目或者组策略选项中看看,也许你会有所发现!

暗藏杀机的注册表项

利用注册表项加载木马一直是木马的最爱,我们也很熟悉它们的这种手段了,不过有一种新的利用注册表来隐藏木马的方法您可能还不知道,具体方法是:点击“开始”菜单中的“运行”,输入Regedit回车,打开注册表编辑器。展开注册表到HKEY_CURRENT_USER\Software\Microsoft\Win dowsNT\CurrentVersion\Windows项,新建一个字符串值,命名为“load”,把它的键值改为自启动程序的路径即可。注意:要使用文件的短文件名,即“C:\Program Files”应该写为“C:\Progra~1”,且自启动程序的后面不能带有任何参数。另外要提醒大家注意的是,如果改为在注册表的HKEY_USERS\用户ID号\Software\Microsoft\Windows NT\CurrentVersion\Windows项加载,则本方法对其他用户也有效,否则换个用户名登陆就不管用了。

建议大家以后检查木马及病毒程序时也要注意这里,免得被人有机可乘。另外,这个方法只对Windows 2000/XP/2003有效,使用Windows 9x的用户不用担心。

利用AutoRun.inf加载木马

经常使用光盘的朋友都知道,某些光盘放入光驱后会自动运行,这种功能的实现主要靠两个文件,一个是系统文件之一的Cdvsd.vxd,一是光盘上的AutoRun.inf文件。Cdvsd.vxd会随时侦测光驱中是否有放入光盘的动作,如果有的话,便开始寻找光盘根目录下的AutoRun.inf文件。如果存在AutoRun.inf文件则执行它里面的预设程序。

这个貌似神奇的功能其实很简单,不仅能应用于光盘中,同样也可以应用于硬盘中(要注意的是AutoRun.inf必须存放在磁盘根目录下才能起作用)。让我们一起看看AutoRun.inf文件的内容吧。打开记事本,新建一个文件,将其命名为AutoRun.inf,在AutoRun.inf中键入以下内容:

[AutoRun]

Icon=C:\Windows\System\Shell32.DLL,21

Open=C:\Program Files\ACDSee\ACDSee.exe

解释一下:一个标准的AutoRun文件必须以[AutoRun]开头,第二行Icon=C:\Windows\System\Shell32.DLL,21用来给硬盘或光盘设定一个图标。Shell32.DLL是Windows系统文件,里面包含了很多Windows的系统图标。数字21表示显示编号为21的图标;第三行Open=C:\Program Files\ACDSee\ACDSee.exe指出要运行程序的路径及其文件名。

如果把Open行换为木马文件,并将这个AutoRun.inf文件设置为隐藏属性(不易被发现),则点击硬盘就会启动木马!反过来讲,这倒的确是一种很不错的程序自启动方式。

为防止遭到这样的“埋伏”,可以禁止硬盘AutoRun功能。打开注册表编辑器,展开到HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Exploer主键下,在右侧窗口中找到“NoDriveTypeAutoRun”,就是它决定了是否执行CDROM或硬盘的AutoRun功能。将其键值改为9D,00,00,00就可关闭硬盘的AutoRun功能,把它的键值改为B5,00,00,00则可禁止光盘的AutoRun功能。注意改后要重新启动计算机才能生效。

屏幕保护也可能成为木马的帮凶 

Windows的屏幕保护程序对应的是.scr文件,在默认情况下保存在Windows的安装目录下。如果把.scr更名为.exe文件,则该程序仍然可以正常启动。与此类似,.exe文件更名为.scr文件也照样可以运行!顺便提一下,把.exe文件改名为.com、.pif、.bat后,exe文件仍旧可以自由运行!这在exe文件关联丢失后非常有用,我们可以把exe文件的扩展名改为上述扩展名程序就可以运行了。

在屏幕保护程序中,我们可以设定它的等待时间,这个启动时间其实是可以在注册表中设定的: HKEY_USERS\.DEFAULT\Control Panel\desktop,其下的字符串值ScreenSaveTimeOut记录的就是屏保程序的等待时间,时间单位为秒,从60秒开始记录,如果记录时间小于60秒,则自动定为1分钟。是否选择了屏幕保护程序可以在system.ini文件中看出来。在“开始”菜单的“运行”中输入msconfig,找到System标签,找到里面的[boot]小节,你可以看到有“SCRNSAVE.EXE=”这一行。在它后面是屏保文件的路径。如果你设定了屏保程序,这一行前面就会有一个“√”,反之则没有“√”。

由上面的介绍可以产生一个联想:如果把.exe文件重命名为.scr文件(假设改为trojan.scr),并在SYSTEM.INI中添加“SCANSAVE.EXE=C:\Program files\trojan.scr”,然后修改注册表中的HKEY_USERS\.DEFAULT\Control Panel\desktop下的字符串值ScreenSaveTimeOut,把其键值改为60,则系统只要闲置一分钟该文件就会被启动!由此可以看出,如果这种方法被木马或病毒等恶意程序所利用,后果非常可怕。防范这种攻击的方法就是禁止使用屏幕保护功能!

控制面板中的木马

控制面版是Windows的基本组件,控制面板中的各个选项实际上是以cpl为后缀名的文件单独存在的,根据操作系统的不同这些文件所在的位置也有所不同,Windows 9x/Me下这些cpl文件位于Windows安装目录下的System子目录中,而Windows NT/2000/XP下则位于Windows安装目录下的System32子目录中。这些cpl文件再加上Windows安装目录中的control.exe和control.ini文件,就是控制面板的全部组成部分。

每一个cpl文件都对应“控制面版”中的一个选项,例如desk.cpl对应“桌面属性”、inetcpl.cpl对应“Internet属性”等等。由于.cpl文件的特殊性,需要使用RunDll32.exe来启动该文件,换句话说,控制面板中的任何一个选项都可以通过RunDll32.exe调用。RunDll32.exe是Windows动态连接库(DLL)管理工具,可以用来在命令行下执行动态链接库中的某个函数或者功能模块(DLL是Windows系统的另外一种可执行文件,是Dynamic Link Library的缩写。DLL是Windows的基础,所有的API函数都是在DLL中实现的。它本身并没有程序逻辑,只是由多个功能函数构成,不能独立运行,必须由其它进程加载并调用)。另外Windows安装文件夹下还有一个RunDll.exe,也是动态连接库理工具。虽然不同版本的Windows都提供RunDll.exe和RunDll32.exe文件,但是在Windows NT/2000/XP下却只支持32位的RunDll32.exe,只有Windows 9x/Me这种16位和32位混合使用的操作系统才同时对二者提供支持。

下面我们看一个利用RunDll32.exe调用shell32.dll中的Control_RunDLL,来打开desk.cpl的第一个属性页的例子。点击“开始”菜单,选择“运行”,输入:RunDll32 shell32.dll,Control_RunDLL desk.cpl,,0(注意是两个逗号),回车后,将打开“显示 属性”对话框的“背景”窗口(图3)!这说明这些.cpl文件是可执行的。换个思路想一想,如果用户把一个可执行的类似动态连接库DLL的.cpl文件放入System子目录中,则在控制面板中可以看到其这个cpl文件的图标,并且是可以执行的!这里说的“类似动态连接库DLL的.cpl文件”是指这类cpl文件可以像DLL文件那样被其它进程加载并调用,就像我们刚刚看到的那里例子一样。

用RunDll32.exe调用控制面板程序的格式如下:在“开始”菜单的“运行”中或命令行下输入:RunDll32 shell32.dll,Control_RunDLL *.cpl,,X,其中shell32.dll为被调用的DLL文件,意思为调用shell32.dll中的Control_RunDLL来打开desk.cpl文件。而“*.cpl”为你想调用的cpl文件的路径和文件名。最后的“X”为对应cpl文件的页数:从0开始,0为第一页(如desk.cpl,,0代表“显示 属性”的“背景”),1为第二页(如desk.cpl,,1代表“显示 属性”的“屏幕保护程序”),依此类推。 要注意的是:shell32.dll和Control_RunDLL两者之间只能以“,”分隔,逗号之后不能有空格,如果这里出错的话,不会得到任何提示。

根据上面的原理,就可以自己写一个无窗口或隐藏窗口的控制面板程序,将其写进注册表的启动项,使之可以自启动。如果你编写的控制面板程序是木马的话,则不仅中木马者感到不知所然,就连木马克星等软件也会不知所措!

具体步骤就是在注册表启动项中加入RunDll32 shell32.dll,Control_RunDll mycpl.cpl。这样,这个mycpl.cpl就会随用户机器启动的时候被调用—就象DLL文件被执行一样!注意,mycpl.cpl如果保存在默认目录中,可以不加路径直接调用,否则就要加上路径。控制面板在执行的时候会加载System子目录中的所有*.cpl文件,所以只要把这个cpl木马放在System(Win9x)或System32(Win2K/XP)子目录中就可以达到目的。要提醒大家的是,如果mycpl.cpl真是木马的话,那么别人一定会给它改个名字,或替换掉系统中那些不常用的cpl文件,使你疏于察觉。

是不是只有把cpl文件放到System或System32子目录下才会被加载呢?不是的!如果你的控制面版程序不在Windows目录,假设在D:\ok下,而你想让它在控制面版里显示。你只要编辑control.ini文件,在[MMCPL]小节里面加入:mycpl.cpl=D:\ok\mycpl.cpl就可以了。如果不想让cpl文件显示在控制面板中该怎么办呢?依然从control.ini文件入手!打开该文件,在[don't load]小节中加入:mycpl.cpl=no,那么这个mycpl.cpl文件就不被加载了。

如果有人利用这种方式进行攻击,防范方法是经常检查注册表的启动项,发现用RunDll32.exe调用.cpl文件的就杀无赦,斩立决!将这个注册表键值立刻删除,然后按键值提供的路径找到这个cpl文件把它删除。

超长目录中隐藏的木马

给我们下木马的人要想在我们的电脑中隐藏木马文件,会绞尽脑汁,利用Windows系统建立超长目录然后在其中隐藏木马就是手段之一。

请大家和我一起做一个实验。打开“资源管理器”,在任意一个磁盘(假设是E盘)下建立一个目录,假设为good,然后进入此目录,在它的下面再建立一个子目录,假设为123,然后在123子目录下再建立一个子目录test,现在test这个目录的绝对路径就是:E:\good\123\test。接下来把你要隐藏的目录和文件都拷贝test子目录下。然后点击“向上”按钮,来到123子目录,对着它点击鼠标右键,在弹出菜单中选择“重命名”,把这个123子目录改名为1111……1111,这个“1111……1111”字串能写多长就写多长(一直按着数字键1不松手,直到没有反应为止),接下来,再点击“向上”按钮,来到最外层的good目录,用同样的办法把它也重命名,假设改名为goodluck123,现在test子目录的绝对路径就是E:\goodluck123\1111……1111\test。试试看,看你能否进入test子目录,呵呵,会出现一个提示:无法访问此文件夹,路径太长(图5)。既然在视窗界面下无法看到里面的内容,那么到DOS下试试看能否进入此文件夹,还是不行!这样隐藏在里面的目录和文件就被巧妙的隐藏起来了!谁能想到里面会有个test子目录呢?谁能想到test子目录下还有文件和文件夹呢?木马文件就这样堂而皇之的隐藏起来了!
 

关于绝对路径的小提示:大家都知道,在我们平时使用计算机时要找到需要的文件就必须知道文件的位置,而表示文件的位置的方式就是路径,例如只要看到这个路径:c:/apache/cgi-bin/image/photo.jpg我们就知道photo.jpg文件是在c盘的apache目录下的image子目录中。类似于这样完整的描述文件位置的路径就是绝对路径。

为什么会这样呢?其实,这只是利用了Windows系统的一个小Bug,这个Bug就是Windows目录的绝对路径是不能超过254个字符的,如果你建立的目录的绝对路径超过254个字符的话,系统是绝对看不到的。反过来讲,系统也不允许你直接建立一个超过绝对路径长度超过254个字符的目录,而我们前面所做的就是迂回建立了一个目录,其绝对路径超过了254个字符,所以别人就无法访问其里面包含的子目录和文件了,这样变相地把目录和文件隐藏了起来!更妙的是整个目录根本无法直接删除,不信试试看,会弹出一个窗口,提示我们:无法删除*.*:找不到文件,请确定指定的文件名是否正确。换到DOS下试试也无法删除该目录,再试试工具软件Windows Commander等同样无法删除该目录!哈哈,没想到还多了一层保护哦。当然,如果你真的想删除该目录的话,我们也有办法,继续往下看就知道怎么办了。

让我们再用其他软件来检验一下利用这种方法隐藏木马的效果如何。大家知道,一般的隐藏文件或目录的方法,如特殊空格法、给文件夹设定空白图标法、修改注册表隐藏目录法等,都会在文件管理软件Windows Commander、看图软件ACDSee或压缩软件WinZIP或WinRAR中显露原形!而用本方法隐藏的目录不会被显示在上述软件中,它们只能看到受保护文件夹的上一层目录,而无法看到里面隐藏的内容!以ACDSee为例,打开ACDSee,可以看到它的界面与资源管理器很相似。左上窗口有Windows树型目录结构,右边主窗口能显示文件夹中的文件,包括具有“隐藏”属性的文件。找到我们隐藏目录和文件的那个E盘,看,根本无法看到goodluck123文件夹里面的test目录(图6)!同理,使用杀毒软件也无法扫描该文件夹的内容,而且在资源管理器中是无法删除该目录的,所以说这种方法对木马来说是一种非常好的保护方法!

 

为了更好的隐藏木马文件,对方还会在此方法的基础上略微变通一下,这样隐藏效果就会更好!首先,对方会进入C:\recycled(即回收站)目录下,用文中刚开始提到的方法建立超长目录,并把要隐藏的木马文件移动到其中,选定这些文件后按右键在弹出菜单中选择“属性”,将其属性设置为“隐藏”,这样在Windows就看不到这些文件了,并且清空回收站也依然还存在!是不是非得利用回收站才可以呢?当然不是!只要是特殊文件夹就可以起到和回收站同样的功效,如c:\windows\fonts等,所以你也可以把秘密文件和目录放到系统字体目录下。

接下来修改一下注册表,让文件更彻底地隐藏起来。在“开始”菜单的“运行”中输入Regedit,打开注册表编辑器,展开到HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\explorer\Advanced\ Folder\Hidden\SHOWALL分支,修改DWORD值CheckedValue的键值为0(默认为1,如果没有该DWORD值可以新建),如图所示(图7),关闭注册表编辑器,按F5键刷新桌面。现在这些文件隐藏得就更深了,不信你可以看看,看能否看到它们:进入“我的电脑”中,点击“工具”→“文件夹选项”→“查看”→“显示所有文件和文件夹”(图8),本来这样可以查看所有隐藏的文件,但进入隐藏文件的那个回收站后,什么也没有发现!

 

利用这种方法隐藏目录和文件,非常巧妙,原因有三:一是别人想不到回收站中藏有秘密;二是修改注册表后这些隐藏起来的文件和目录更隐蔽了,在Windows下根本发现不了!三是即便发现了这些隐藏的目录和文件,也会由于绝对路径太长而无法进入该目录查看文件!有此三重保护,木马文件在我们电脑中就会“安居乐业”了,所以我们更要小心了!

对方要在我们的电脑中建立如此特殊的目录,必定要远程操作才可以,所以只要平时能及时给系统打补丁,把系统漏洞都堵上,再安装上网络防火墙,不随意浏览不了解的网页,不随意查看陌生的电子邮件,对普通用户来说就会安全多了。如果发现系统中有这样特殊的文件夹存在,只要给最外层的目录改名,比方说将goodluck123改名为g,然后就可以进入下一级目录,进而可以进入test子目录!当然,你也可以自己编写一个程序,来读这个目录。既然可以进入该目录了,说明所有的限制都自动取消了,这样就可以删除该目录及其中的文件了。

木马对文件关联的利用

在注册表HKEY_LOCAL_MACHINE\Soft-ware\Microsoft\Windows\CurrentVersion\ Run下可以加载程序,使之开机则自动运行,类似“Run”这样的子键在注册表中还有几处,均以“Run”开头,如RunOnce、RunServices等。其实,除了这几种方法,还有一种修改注册表的方法可以使程序自启动。具体说来就是更改文件的打开方式,这样就可以使程序跟随你打开的那种文件类型一起启动!举个例子,打开注册表,展开注册表到:HKEY_CLASSES_ROOT\exefile\shell\open\command,这里是EXE文件的打开方式,默认键值为:"%1\" %*。如果把默认键值改为:Trojan.exe "%1\" %*,则你每次运行EXE文件,这个Trojan.exe文件就会被执行!木马“灰鸽子”就可以关联EXE文件打开方式,而大名鼎鼎的木马冰河采用的是与此相似的一招——关联TXT文件!目前这样的文件关联木马越来越多,有呈普遍化之趋势。当然,木马们更改的打开方式不一定只是EXE或TXT文件,其它文件的打开方式也可以这样修改。

对此的防范方法就是经常检查注册表,看文件打开方式是否发生了变化。如果发生了变化就将打开方式改回来。最好能经常备份注册表,发现问题立即用备份文件恢复注册表,既方便快捷又安全省事。

木马对设备名的利用

大家知道,在Windows下无法以设备名来命名文件或文件夹,这些设备名主要有aux、com1、com2、prn等,但Windows 2000/XP有个漏洞可以用设备名来命名文件或文件夹,这样木马就可以躲在那里而不会被我们发现!

具体方法是:首先,点击“开始”菜单的“运行”,输入cmd.exe回车进入命令提示符窗口,然后输入md c:\con\\\命令可以建立一个名为con的目录!而默认请况下Windows是无法建立这类目录的,正是利用了Windows的漏洞我们才可以建立此目录。再试试其他设备名也一样可以建立,而许多“牧马人”就是利用这个方法将木马隐藏在这类特殊的文件夹中,从而达到隐藏、保护木马文件的目的!

现在我们可以把文件复制到这个特殊的目录下,当然不能直接在Windows中复制了,必须用特殊的方法,在CMD窗口中输入如下命令:copy muma.exe \\.\c:\aux\\就可以把木马文件muma.exe复制到C盘下的aux文件夹中,然后点击“开始”菜单中的“运行”,在“运行”中输入c:\aux\muam.exe\就会成功启动该木马!不过如果你试图在资源管理器中删除它,会发现这根本就是徒劳的。Windows会提示找不到该文件(图9)!怎么样,这样隐藏的木马不容易被发现吧?

由于使用"del c:\aux\\命令可以删除其中的muma.exe文件,所以为了达到更好的隐藏和保护效果,下木马者会把muma.exe文件也改名,让我们删也不好删!具体方法就是在复制木马文件到aux文件夹时使用如下命令:copy muma.exe \\.\c:\con.exe\,就可以把木马文件muma.exe复制到aux目录中并且改名为con.exe,而con.exe文件是无法用普通方法删除的!这样就又多了一层保险,对我们普通用户来说就又多了一层危险。

可能有的朋友会问:这个con.exe文件在“开始”菜单的“运行”中无法运行啊,很简单,只要在命令行方式下输入cmd /c \\.\c:\con\,就可以运行这个程序了。在运行时会有一个cmd窗口一闪而过,下木马者一般来说会对其进行改进。

其实,对于这种隐藏木马的方法,一般说来只有能物理接触你的电脑的人才能做到,相对来说比较麻烦。对于这类特殊的文件夹,在发现后我们可以采用如下方法来删除它:首先,用del \\.\c:\con.exe\命令删除con.exe文件(该文件假设就是其中的木马文件名),然后再用rd \\.\c:\aux\命令删除aux文件夹即可。

 

标签: 手动杀毒 木马利用

评论:

jackboo
2011-04-04 21:28
深奥啊……路过
王健宇
2011-04-04 22:30
@jackboo:额,还有感染硬盘引导区,感染可执行文件的…

发表评论:

Powered by emlog sitemap