(http://www.netadmin.com.cn/experience/20050112/4091.asp)
本文出自《网管员世界》2005年第1期 杀毒防毒 栏目
为了保护自己,木马会想尽办法来隐藏自己。以往,木马通常会通过“开始”菜单的“启动”项或注册表的HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionRun项和HKEY_LOCAL_MACHINESoftwareMicrosoftWindowsCurrentVersionRun项来启动自己,也有的木马会注册为系统的“服务”程序,而那些老旧的方法,比如在Autoexec.bat、Config.sys、Winstart.bat、Win.ini、System.ini、Wininit.ini等文件中加载木马程序,大家更是耳熟能详。
不过,随着木马技术的发展,木马的隐藏方法已经变得越来越高明了。所谓“知己知彼,百战不殆”,要想防“马”,当然要先“知”马。下面,笔者就为您介绍一些鲜为人知的木马隐藏方法。
“组策略”中的木马
通过“组策略”来加载木马这种方式非常隐蔽,不易为人发现。具体方法是:
点击“开始”菜单中的“运行”,输入Gpedit.msc,打开“组策略”。在“本地计算机策略”中顺次点击“用户配置”→“管理模板”→“系统”→“登录”,然后双击“在用户登录时运行这些程序”子项,出现对话框,如图1所示。
图 1
在这里进行属性设置,选定“设置”中的“已启用”,单击“显示”按钮,会弹出“显示内容”窗口。单击“添加”按钮,出现“添加项目”窗口,在其中的文本框中输入要自动运行的文件所在的路径,单击“确定”按钮后重新启动计算机,系统便会在登录时自动运行所添加的程序。
提示:如果自启动的文件不是位于%Systemroot%目录中,则必须指定文件的完整、有效路径。
如果我们刚才在“组策略”中添加的是木马,就会出现一个“隐形”的木马。在“系统配置实用程序”Msconfig中,我们是无法发现该木马的,因为在注册表项中,如HKEY_ CURRENT_USERSoftwareMicrosoftWindowsCurrentVersion Run项和HKEY_LOCAL_MACHINESoftwareMicrosoft WindowsCurrentVersionRun项,根本找不到相应的键值。所以说,这种加载木马的方式是非常隐蔽的,对普通用户的危胁也非常大。
实际上,通过这种方式添加的自启动程序依然会被记录在注册表中,只不过不是在我们所熟悉的那些注册表项下,而是在注册表的HKEY_CURRENT_USERSoftware Microsoft WindowsCurrentVersionPoliciesExplorerRun项中加载。所以,如果您怀疑自己的电脑中有木马,却找不到它躲在哪儿,可以到上述的注册表项中去看一看,或者到“组策略”的“用户配置→管理模板→系统→登录”下的“在用户登录时运行这些程序”中查看一下,也许会有所发现。
暗藏杀机的注册表项
利用注册表项加载木马一直是木马的最爱,也是我们所熟知的一种手段,不过,有一种新的利用注册表来隐藏木马的方法您可能还不知道。具体方法是:
点击“开始”菜单中的“运行”,输入Regedit,打开注册表编辑器。展开注册表到HKEY_CURRENT_USERSoftware MicrosoftWindows NTCurrentVersionWindows项,新建一个字符串值,命名为“load”,把它的键值改为要自启动程序的路径即可。
提示:要使用文件的短文件名,即“C:Program Files”应该写为“C:Progra~1”,且自启动程序的后面不能带有任何参数。如果改在注册表HKEY_USERS用户ID号Software MicrosoftWindows NTCurrentVersionWindows项加载,则本方法对其他用户也有效,否则换个用户名登录就不管用了。
用这种方法加载木马,在Windows优化大师的“开机速度优化”选项中将无法看到有木马程序被加载,如果被有心人利用在这里加载恶意程序或木马,对大家的威胁将很大。
建议大家以后检查木马及病毒程序时特别注意这部分,不给别人可乘之机。另外,这个方法只对Windows 2000/XP/2003有效,使用Windows 9x的用户不用担心。
利用AutoRun.inf加载木马
经常使用光盘的朋友都知道,某些光盘放入光驱后会自动运行,这种功能的实现主要靠两个文件,一个是系统文件之一的Cdvsd.vxd,一是光盘上的AutoRun.inf文件。Cdvsd.vxd会随时侦测光驱中是否有放入光盘的动作,如果有,便寻找光盘根目录下的AutoRun.inf文件。如果存在,就执行里面的预设程序。
不过,AutoRun不仅能应用于光盘中,同样也可以应用于硬盘中(要注意的是,AutoRun.inf必须存放在磁盘根目录下才能起作用)。让我们一起看看AutoRun.inf文件的内容吧。
打开记事本,新建一个文件,将其命名为AutoRun.inf,在AutoRun.inf中键入以下内容:
[AutoRun]
Icon=C:WindowsSystemShell32.DLL,21
Open=C:Program FilesACDSeeACDSee.exe
其中,“[AutoRun]”是必须的固定格式,一个标准的AutoRun文件必须以它开头,目的是告诉系统执行它下面几行的命令;第二行“Icon=C:WindowsSystemShell32.DLL,21”是给硬盘或光盘设定一个个性化的图标,“Shell32.DLL”是包含很多Windows图标的系统文件,“21”表示显示编号为21的图标,无数字则默认采用文件中的第一个图标;第三行“Open=C:Program FilesACDSeeACDSee.exe”指出要运行程序的路径及其文件名。
如果把Open行换为木马文件,并将这个AutoRun.inf文件设置为隐藏属性,我们点击硬盘时就会启动木马。
为防止遭到这样的“埋伏”,可以禁止硬盘AutoRun功能。在“开始”菜单的“运行”中输入Regedit,打开注册表编辑器,展开到HKEY_CURRENT_USERSoftware MicrosoftWindowsCurrentVersionPoliciesExploer主键下,在右侧窗口中找到“NoDriveTypeAutoRun”,就是它决定了是否执行CDROM或硬盘的AutoRun功能。将其键值改为9D,00,00,00就可以关闭硬盘的AutoRun功能,如果改为B5,00,00,00则禁止光盘的AutoRun功能。修改后重新启动计算机,设置就会生效。
屏幕保护也可能成为木马的帮凶
Windows的屏幕保护程序对应的是.scr文件,它是PE格式的可执行文件,在默认情况下保存在Windows的安装目录下。如果把.scr更名为.exe文件,该程序仍然可以正常启动,.exe文件更名为.scr文件也照样可以运行。顺便提一下,把.exe文件改名为.com、.pif、.bat后,exe文件仍旧可以自由运行。这在exe文件关联丢失后非常有用。
在屏幕保护程序中,我们可以设定它的等待时间,这个启动时间其实是可以在注册表中设定的。在注册表项 HKEY_USERS.DEFAULTControl Paneldesktop下面的字符串值ScreenSaveTimeOut记录的就是屏保程序的等待时间,时间单位为秒,从60秒开始记录,如果记录时间小于60秒,则自动定为1分钟。
提示:是否选择了屏幕保护程序可以在system.ini文件中看出来。在“开始”菜单的“运行”中输入msconfig,找到System标签,找到里面的[boot]小节,可以看到有“SCRNSAVE.EXE=”这一行。在它后面是屏保文件的路径。如果您设定了屏保程序,这一行前面就会有一个“√”,反之则没有“√”。
由上面的介绍可以产生一种联想:如果把.exe文件重命名为.scr文件(假设改为trojan.scr),并在System.ini中添加“SCANSAVE.EXE=C:Program files rojan.scr”,然后修改注册表中的HKEY_USERS.DEFAULTControl Paneldesktop下的字符串值ScreenSaveTimeOut,把其键值改为60,则系统只要闲置一分钟该文件就会被启动。
防范这种攻击的方法就是禁止使用屏幕保护功能。要想一次性取消屏幕保护功能,可以通过修改注册表来实现。打开注册表编辑器,找到HKEY_CURRENT_USER ControlPaneldesktopScreenSaveActive子键,将“ScreenSaveActive”改为“0”,就可以禁止使用屏幕保护功能。
控制面板中的木马
控制面板的各个选项实际上是以后缀名为cpl的文件单独存在的,再加上Windows安装目录中的control.exe和control.ini文件,就构成控制面板的全部组成部分。
每一个cpl文件都对应“控制面板”中的一个选项,例如desk.cpl对应“桌面属性”、inetcpl.cpl对应“Internet属性”等。由于.cpl文件的特殊性,需要使用RunDll32.exe来启动该文件,换句话说,控制面板中的任何一个选项都可以通过RunDll32.exe来调用。
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就会在用户机器启动的时候被调用。(注:如果mycpl.cpl保存在默认目录中,可以不加路径直接调用,否则必须加上路径。)控制面板在执行的时候会加载System子目录中的所有*.cpl文件,所以只要把这个cpl木马放在System(Windows 9x)或System32(Windows 2000/XP)子目录中就可以达到目的。要提醒大家的是,如果mycpl.cpl真是木马的话,那么别人一定会给它改个名字,或替换掉系统中那些不常用的cpl文件,使您疏于察觉。
是不是只有把cpl文件放到System(Windows 9x)或System32(Windows 2000/XP)子目录下才会被加载呢?答案是否定的。如果您的控制面板程序不在Windows目录,假设在D:ok下,想让它在控制面板里显示,只需编辑control.ini文件,在[MMCPL]小节里面加入“mycpl.cpl=D:okmycpl.cpl”就可以了。如果不想让cpl文件显示在控制面板中,依然要从control.ini文件入手,只需在[don't load]小节中加入“mycpl.cpl=no”,这个mycpl.cpl文件就不会被加载了。
如果有人利用这种方式进行攻击,防范方法是经常检查注册表的启动项,发现用RunDll32.exe调用的.cpl文件就杀无赦。在将这个注册表键值删除后,还要按键值提供的路径找到这个cpl文件,把它也删除掉。
可怕的超长目录中隐藏的木马
给我们下木马的人要想在我们的电脑中隐藏木马文件,会绞尽脑汁,利用Windows系统建立超长目录然后在其中隐藏木马就是手段之一。
我们可以做这样一个试验:打开“资源管理器”,在任意一个磁盘(假设是E盘)下建立一个目录,假设为good,然后进入此目录,在下面再建立一个子目录,假设为123,然后在123子目录下建立一个子目录test,现在test这个目录的绝对路径就是:E:goodS est。接下来把您要隐藏的目录和文件都拷贝test子目录下。然后点击“向上”按钮,来到123子目录,对着它点击鼠标右键,在弹出菜单中选择“重命名”,把这个123子目录改名为“1111……1111”,能写多长就写多长。接下来点击“向上”按钮,来到good目录,用同样的办法把它也重命名,假设改名为goodluck123,现在test子目录的绝对路径就是E:goodluck123I1……1111 est。这时,当您想访问该目录时,会出现一个提示:无法访问此文件夹,路径太长,如图2所示。
图2
而且,这个目录在视窗界面下无法看到里面的内容,在DOS下同样如此,所以,该目录和里面的文件就被巧妙地隐藏起来了。谁能想到里面会有个test子目录呢,谁能想到test子目录下还有文件和文件夹呢?木马文件就这样巧妙地隐藏起来了。
为什么会这样呢?其实,这只是利用了Windows系统的一个小Bug,即Windows目录的绝对路径不能超过254个字符,如果您建立的目录的绝对路径超过254个字符的话,系统是看不到的。反过来讲,系统也不允许您直接建立一个绝对路径长度超过254个字符的目录,而我们前面所做的就是迂回地建立了一个目录,其绝对路径超过了254个字符,所以别人就无法访问里面包含的子目录和文件了,变相地把目录和文件隐藏了起来。更妙的是,整个目录根本无法直接删除,进行删除操作时会弹出一个窗口,提示我们“无法删除*.*:找不到文件。请确定指定的路径及文件名是否正确”,在DOS下或是使用工具软件Windows Commander等也同样无法删除该目录。
让我们再用其他软件来检视一下利用这种方法来隐藏木马的效果如何。大家知道,一般的隐藏文件或目录的方法,如特殊空格法、给文件夹设定一个空白图标法、修改注册表隐藏目录法等,都会在文件管理软件Windows Commander、看图软件ACDSee或压缩软件WinZIP或WinRAR中显露原形。而用本方法隐藏的目录不会被显示在上述软件中,它们只能看到受保护文件夹的上一层目录,而无法看到里面隐藏的内容。
以ACDSee为例,左上窗口有Windows树型目录结构,右边主窗口能显示文件夹中的文件,包括具有“隐藏”属性的文件。找到我们隐藏目录和文件的那个E盘,看,根本无法看到goodluck123文件夹里面的test目录,如图3所示。同理,使用杀毒软件也无法扫描该文件夹的内容,在资源管理器中也无法删除该目录。
为了更好地隐藏木马文件,入侵者还可能在此方法的基础上略微变通一下。比如,进入C: ecycled(回收站)目录下,用文中刚开始提到的方法建立超长目录,并把要隐藏的木马文件移动到其中,选定这些文件后按右键,在弹出菜单中选择“属性”,将其属性设置为“隐藏”,这样,在Windows中就看不到这些文件了,清空回收站也依然存在。而且,入侵者利用特殊文件夹同样可以取得这样的功效,比如C:windows onts等。
图3
接下来修改一下注册表,让文件更彻底地隐藏起来。在“开始”菜单的“运行”中输入Regedit,打开注册表编辑器,展开到HKEY_LOCAL_MACHINESoftwareMicrosoftWindows CurrentVersionexplorerAdvancedFolderHiddenSHOWALL分支,修改DWORD值CheckedValue的键值为0(默认为1,如果没有该DWORD值,可以新建),如图4所示,关闭注册表编辑器,按F5键刷新桌面,这些文件就隐藏得更深了。我们进入隐藏文件的那个回收站后,将什么都看不到。
图4
利用这种方法隐藏目录和文件非常巧妙,原因有三:一是别人想不到回收站中藏有秘密;二是修改注册表后这些隐藏起来的文件和目录更隐蔽了,在Windows下根本发现不了;三是即便发现了这些隐藏的目录和文件,也会由于绝对路径太长而无法进入该目录查看文件。这就让木马可以在我们的电脑中“安居乐业”了。
对方要在我们的电脑中建立如此特殊的目录,必定要进行远程操作,所以我们平时必须要及时给系统打补丁,把系统漏洞都堵上,再安装上网络防火墙,不随意浏览不了解的网页,不随意查看陌生的电子邮件,做到这些,对普通用户来说就会安全多了。
如果发现系统中有这样特殊的文件夹存在,只要给最外层的目录改名,比方说将goodluck123改名为g,然后就可以进入下一级目录,进而可以进入test子目录,进行相关的操作。当然,您也可以自己编写一个程序来读这个目录。
木马对文件关联的利用
我们知道,在注册表HKEY_LOCAL_MACHINE SoftwareMicrosoftWindowsCurrentVersionRun下可以加载程序,使之开机时自动运行,类似“Run”这样的子键在注册表中还有几处,均以“Run”开头,如RunOnce、RunServices等。除了这种方法,还有一种修改注册表的方法也可以使程序自启动。
具体说来,就是更改文件的打开方式,这样就可以使程序跟随您打开的那种文件类型一起启动。举例来说,打开注册表,展开注册表到HKEY_CLASSES_ROOTexefileshell
opencommand,这里是exe文件的打开方式,默认键值为:“%1”%*。如果把默认键值改为Trojan.exe“%1”%*,您每次运行exe文件,这个Trojan.exe文件就会被执行。木马灰鸽子就采用关联exe文件的打开方式,而大名鼎鼎的木马冰河采用的是也与此相似的一招——关联txt文件。
对付这种隐藏方法,主要是经常检查注册表,看文件的打开方式是否发生了变化。如果发生了变化,就将打开方式改回来。最好能经常备份注册表,发现问题后立即用备份文件恢复注册表,既方便、快捷,又安全、省事。
木马对设备名的利用
大家知道,在Windows下无法以设备名来命名文件或文件夹,这些设备名主要有aux、com1、com2、prn、con、nul等,但Windows 2000/XP有个漏洞可以以设备名来命名文件或文件夹,让木马可以躲在那里而不被发现。
具体方法是:点击“开始”菜单的“运行”,输入cmd.exe,回车进入命令提示符窗口,然后输入md c:con/命令,可以建立一个名为con的目录。默认请况下,Windows是无法建立这类目录的,正是利用了Windows的漏洞我们才可以建立此目录。再试试输入md c:aux/命令,可以建立aux目录,输入md c:prn/可以建立prn目录,输入md c:com1/目录可以建立Com1目录,而输入md c: ul/则可以建立一个名为nul的目录。在资源管理器中依次点击试试,您会发现当我们试图打开以aux或com1命名的文件夹时,explorer.exe失去了响应,而许多“牧马人”就是利用这个方法将木马隐藏在这类特殊的文件夹中,从而达到隐藏、保护木马程序的目的。
现在,我们可以把文件复制到这个特殊的目录下,当然,不能直接在Windows中复制,需要采用特殊的方法,在CMD窗口中输入copy muma.exe /.c:aux/命令,就可以把木马文件muma.exe复制到C盘下的aux文件夹中,然后点击“开始”菜单中的“运行”,在“运行”中输入c:aux muam.exe,就会成功启动该木马。我们可以通过点击文件夹名进入此类特殊目录,不过,如果您要试图在资源管理器中删除它,会发现这根本就是徒劳的,Windows会提示找不到该文件。
由于使用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窗口一闪而过,下木马者一般来说会对其进行改进,方法有很多,可以利用开机脚本,也可以利用cmd.exe的autorun:在注册表HKEY_LOCAL_ MACHINESoftwareMicrosoftCommand Processor下建一个字串AutoRun,值为要运行的.bat文件或.cmd文件的路径,如c:winntsystem32auto.cmd,如果建立相应的文件,它的内容为@/.c:con,就可以达到隐蔽的效果。
对于这类特殊的文件夹,发现后我们可以采用如下方法来删除它:先用del /.c:con.exe命令删除con.exe文件(该文件假设就是其中的木马文件名),然后再用rd /.c:aux命令删除aux文件夹即可。
好了,文章到这里就结束了。由于水平有限,文中如有不正确或值得商榷的地方欢迎大家批评指点,另外,写作时曾参阅过网上高手们的帖子,受益匪浅,在此一并谢过!