- ·上一篇文章:网络系统安全漏洞分类研究(上)
- ·下一篇文章:揪出系统中秘密隐藏的木马(上)
揪出系统中秘密隐藏的木马(下)
控制面板中的木马
控制面版是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的基本组件,控制面板中的各个选项实际上是以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文件把它删除。



