Windows启动安全隐患详解
在Windows 9x下,由于System.ini只指定了Windows的外壳文件Explorer.exe的名称,而并没有指定绝对路径,所以Windows 9x会搜索Explorer.exe文件。搜索顺序如下:
首先搜索当前目录;如果没有搜索到Explorer.exe则系统会获取
[HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment\Path]
的信息获得相对路径;如果还是没有文件,系统则会获取
[HKEY_CURRENT_USER\Environment\Path]
的信息并获得相对路径。
其中,
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment\Path]
和
[HKEY_CURRENT_USER\Environment\Path]
所保存的相对路径的键值为:“%SystemRoot%\System32;%SystemRoot%”和空。
所以,由于当系统启动时,“当前目录”肯定是“%SystemDrive%\”(系统驱动器),这样系统搜索Explorer.exe的顺序应该是:
%SystemDrive%\(例如C:\) %SystemRoot%\System32(例如C:\Winnt\System32) %SystemRoot%(例如C:\Winnt)
此时,如果把一个名为Explorer.exe的文件放到系统根目录下,这样在每次启动时,系统就会自动先启动根目录下的Explorer.exe而不启动Windows目录下的Explorer.exe了。
在Windows NT系列下,Windows NT/2000更加注意了Explorer.exe的文件名放置的位置,把系统启动时要使用的外壳文件Explorer.exe的名称放到了:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\Winlogon\Shell]
作为默认这个位置是不存在的,默认为是Explorer.exe。
注意:一定要确定根目录下的Explorer.exe要能启动Windows目录下的Explorer.exe,否则会导致Windows无法启动!现在流行的病毒CodeRed就会在C:\和D:\目录下放置两个约8KB的Explorer.exe的文件!
2.屏幕保护启动方式
Windows的屏幕保护程序是一个.scr文件。这是一个PE格式的可执行文件。如果把屏幕保护程序.scr更名为.exe的文件,则该程序仍然可以正常启动。类似的.exe文件更名为.scr文件也是一样可以被运行!
.scr文件默认存在于C:\Windows目录中,它的名字就是在“显示”属性中的“屏幕保护程序”中的名称。在C:\Windows目录下的所有.scr文件都会被Windows的“屏幕保护程序”显示,而文件路径本身保存在System.ini中的“Scrnsave.exe =”的这条中。
有意思的是在“Scrnsave.exe =”这条中,其规定的路径也包含了目录名称。即如果我们想安装一个.scr文件时,其安装路径为D:\SCR\1.scr,而D:\SCR\这个目录中还有2.scr,则在这个目录中的所有.scr(1.scr,2.scr)文件都会被显示在“屏幕保护程序”设置中。如果屏幕保护程序设为“(无)”,则“Scrnsave.exe =”这条不存在。但如果“Scrnsave.exe=”这条所指的文件或目录是错误的,则在“屏幕保护程序设置”中仍然会显示“(无)”。
屏幕保护程序的启动时间保存在注册表中的这个位置上:
HKEY_USERS\.DEFAULT\Control Panel\desktop\ScreenSaveTimeOut
时间单位为秒,不过虽然是秒,可启动时间却为分,即从60秒开始记录,如果记录时间小于60秒,则自动定为1分钟。
屏幕保护是否设置密码的键值为:
HKEY_USERS\.DEFAULT\Control Panel\desktop\ScreenSaveUsePassword
有密码则值为1,没有密码则值为0。
由此可见,如果有人把自己所作的.exe程序更名为.scr的程序,并使程序能够在System.ini中添加“Scrnsave.exe=/%Path%/file.scr”(/%Path%/file.scr为所需要设置的文件的路径和文件名,如C:\Program files\trojan.scr),修改注册表中的HKEY_USERS\.DEFAULT\Control Panel\desktop\ScreenSaveTimeOut,定时间为60,则系统只要闲置一分钟该文件就会被启动!
另外一个简单的破坏方式就是可以随机产生屏幕保护密码并写入相应文件的相应位置,定时间为1分钟,则系统只要闲置一分钟则会被被锁!
注意:由于“Scrnsave.exe=”还会定义.scr文件的路径,所以最好不要把要启动的文件放置在.scr文件较多的一些目录,否则容易引起怀疑。(Windows目录除外)
五、自动启动相关
1.代启动
这种启动方式其实只是一个方法的问题。即可以用启动一个正常文件来启动另一个文件,SubSeven就用过启动Windos.exe从而启动SubSeven的Sever文件的方法。
2.Start启动
在“运行”中或“MS-DOS”方式中输入“start”(回车),则会显示:
Runs a Windows program or an MS-DOS program. START [options] program [arg…] START [options] document.ext /m[inimized] Run the new program minimized (in the background). /max[imized] Run the new program maximized (in the foreground). /r[estored] Run the new program restored (in the foreground). [default] /w[ait] Does not return until the other program exits.
如果要启动的程序配合这个命令,则可以更加隐蔽,如:
start/m file.exe
3.控制面板启动
这是利用控制面板程序可以被类似DLL执行,从而达到启动目的。
在控制面板中,.cpl文件是控制面板的原文件。默认的这些文件都会被放置在/%Windows%/System/目录下的,如desk.cpl是桌面属性、inetcpl.cpl是Internet选项之类。但这些.cpl文件全都是PE格式文件,也就是说如果用户把一个可执行的类似DLL的.cpl文件放入%\Windows%\System\中,则在控制面板中可看到其图标,并可执行!
由于.cpl文件的特殊性,需要使用rundll32.exe来启动该文件。Rundll32.exe是Windows用来调用动态连接库函数时所使用的文件,在运行中输入:
rundll32 shell32.dll,Control_RunDLL /%path%/desk.cpl,,X
其中shell32.dll为被调用的DLL文件,意思为调用shell32.dll中的Control_RunDLL来打开desk.cpl文件;/%path%/为.cpl文件的路径,默认为C:\Windows\System;最后的X为desk.cpl文件的页数:从0开始,0为第一页(如显示属性的“背景”),1为第二页(如桌面属性的“屏幕保护程序”),依此类推。
但如果照上面的方法做,则该文件会在控制面板中被显示。有两种方法可以不让其显示:
不要把自己的.cpl文件放在C:\Windows\System中,因为默认的情况下Windows会加载的所有.cpl文件。如果想让其显示则打开C:\Windows\下的Control.ini文件,在[MMCPL]中写入类似:file.cpl=D:\path\file.cpl的命令,从而达到显示的目的。
当你看到Control.ini文件的时候一定可以看到在[MMCPL]上面的[don''t load]。是的,如果把你的文件以“file.cpl=no”的格式写入到这里面,那么文件就不被加载了。反之恢复。
4.其他
注册表中
HKEY_USERS\.DEFAULT\Software\Microsoft\Windows\CurrentVersion\
Explorer\Advanced的“HideFileExt”这个键值是确定Windows是不是显示扩展名的值,如果其值为1就隐藏扩展名,为0则不隐藏。
EXE文件中
如SirCam蠕虫一样,*.EXE文件的扩展名可以改名称为.BAT、.COM、.PIF、.SCR等,并且运行效果一样,反过来不一定。但.EXE文件并不能更名为.LNK文件,这也许也是SirCam的一个BUG