(一)、软件的下载与安装

  URLScan可以在微软的网站上下载,地址如下:

http://download.microsoft.com/download/iis50/Utility/1.0/NT45XP/EN-US/UrlScan.exe

  和一般软件一样安装,但是,此软件不能选择安装路径,安装完成以后,我们可以在System32/InetSvr/URLScan目录下找到以下文件:

  urlscan.dll:动态连接库文件;
  urlscan.inf:安装信息文件;
  urlscan.txt:软件说明文件;
  urlscan.ini:软件配置文件,这个文件很只要,因为对URLScan的所有配置,均有这个文件来完成。

(二)、软件的配置

  软件的配置由urlscan.ini文件来完成,在配置此文件以前,我们需要了解一些基本知识。

  1、urlscan配置文件的构造形式

  urlscan配置文件必须遵从以下规则:

  (1)此文件名必须为urlscan.ini;

  (2)配置文件必须和urlscan.dll在同一目录;

  (3)配置文件必须是标准ini文件结构,也就是由节,串和值组成;

  (4)配置文件修改以后,必须重新启动IIS,使配置生效;

  (5)配置文件由以下各节组成:

  [Option]节,主要设置节;
  [AllowVerbs]节,配置认定为合法URL规则设定,此设定与Option节有关;
  [DenyVerbs]节,配置认定为非法URL规则设定,此设定与Option节有关;
  [DenyHeaders]节,配置认定为非法的header在设立设置;
  [AllowExtensions]节,配置认定为合法的文件扩展名在这里设置,此设定与Option节有关;
  [DenyExtensions]节,配置认定为非法的文件扩展名在这里设置,此设定与Option节有关;

  2、具体配置

  (1)Option节的配置,因为Option节的设置直接影响到以后的配置,因此,这一节的设置特别重要。此节主要进行以下属性的设置:

  UseAllowVerbs:使用允许模式检查URL请求,如果设置为1,所有没有在[AllowVerbs]节设置的请求都被拒绝;如果设置为0,所有没有在[DenyVerbs]设置的URL请求都认为合法;默认为1;

  UseAllowExtensions:使用允许模式检测文件扩展名;如果设置为 1,所有没在[AllowExtensions]节设置的文件扩展名均认为是非法请求;如果设置为0,所有没在[DenyExtensions]节设置的扩展名均被认为是合法请求;默认为0;

  EnableLogging:是否允许使用Log文件,如果为1,将在urlscan.dll的相同目录设置名为urlscan.log的文件记录所有过滤;

  AllowLateScanning:允许其他URL过滤在URLScan过滤之前进行,系统默认为不允许0;

  AlternateServerName:使用服务名代替;如果此节存在而且[RemoveServerHeader]节设置为0,IIS将在这里设置的服务器名代替默认的“Server”;

  NormalizeUrlBeforeScan:在检测URL之前规格化URL;如果为1,URLScan将在IIS编码URL之前URL进行检测;需要提醒的是,只有管理员对URL解析非常熟悉的情况下才可以将其设置为0;默认为1;

  VerifyNormalization:如果设置为1,UrlScan将校验URL规则,默认为1;此节设定与NormalizeUrlBeforeScan有关;

  AllowHighBitCharacters:如果设置为1,将允许URL中存在所有字节,如果为0,含有非ASCII字符的URL将拒绝;默认为1;

  AllowDotInPath:如果设置为1,将拒绝所有含有多个“.”的URL请求,由于URL检测在IIS解析URL之前,所以,对这一检测的准确性不能保证,默认为0;

  RemoveServerHeader:如果设置为1,将把所有应答的服务头清除,默认为0;

  (2)[AllowVerbs]节配置

  如果UseAllowVerbs设置为1,此节设置的所有请求将被允许,一般设置以下请求:

  GET、HEAD、POST

  (3)[DenyVerbs]节配置

  如果UseAllowVerbs设置为0,此节设置的所有请求将拒绝,一般设置以下请求:

  PROPFIND、PROPPATCH、MKCOL、DELETE、PUT、COPY、MOVE、LOCK、UNLOCK

  (4)[AllowExtensions]节设置

  在这一节设置的所有扩展名文件将被允许请求,一般设置以下请求:

  .asp、.htm、.html、.txt、.jpg、.jpeg、.gif,如果需要提供文件下载服务,需要增加.rar、.zip

  (5)[DenyExtensions]节设置

  在这一节设置的所有扩展名文件请求将被拒绝,根据已经发现的漏洞,我们可以在这一节增加内容,一般为以下设置:
.asa、可执行文件、批处理文件、日志文件、罕见扩展如:shtml、.printer等。

三、总结

  以上两个工具功能强大,可以真正实现对IIS的保护。IIS Lock Tool简单,相对而言,只是被动的防卫;UrlScan设置比较难,建议对IIS非常熟悉的管理员使用,只要设置得当,UrlScan的功能更加强大。在使用UrlScan的时候,切记不要设置一次万事大吉,需要不停跟踪新出现的漏洞,随时修改URLScan的配置文件。
3。高级篇:NT/2000的高级安全设置

1.禁用空连接,禁止匿名获得用户名列表

Win2000的默认安装允许任何用户通过空用户得到系统所有账号/共享列表,这个本来是为了方便局域网用户共享文件的,但是一个远程用户也可以得到你的用户列表并使用暴力法破解用户密码。很多朋友都知道可以通过更改注册表Local_MachineSystemCurrentControlSetControlLSA-RestrictAnonymous = 1来禁止139空连接,实际上win2000的本地安全策略(如果是域服务器就是在域服务器安全和域安全策略中)就有这样的选项RestrictAnonymous(匿名连接的额外限制),这个选项有三个值: 0:None. Rely on default permissions(无,取决于默认的权限 1 :Do not allow enumeration of SAM accounts and shares(不允许枚举SAM帐号和共享) 2:No access without explicit anonymous permissions(没有显式匿名权限就不允许访问) 0这个值是系统默认的,什么限制都没有,远程用户可以知道你机器上所有的账号、组信息、共享目录、网络传输列表(NetServerTransportEnum等等,对服务器来说这样的设置非常危险。 1这个值是只允许非NULL用户存取SAM账号信息和共享信息。 2这个值是在win2000中才支持的,需要注意的是,如果你一旦使用了这个值,你的共享估计就全部完蛋了,所以我推荐你还是设为1比较好。 好了,***者现在没有办法拿到我们的用户列表,我们的账户安全了
2。禁止显示上次登陆的用户名HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsNTCurrentVersionwinlogon项中的Don’t Display Last User Name串数据改成1,这样系统不会自动显示上次的登录用户名。将服务器注册表HKEY_LOCAL_ MACHINESOFTWAREMicrosoft
WindowsNTCurrentVersionWinlogon项中的Don't Display Last User Name串数据修改为1,隐藏上次登陆控制台的用户名。其实,在2000的本地安全策略中也存在该选项
Winnt4.0修改注册表:
HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrent VersionWinlogon 中增加DontDisplayLastUserName,将其值设为1。


2.预防DoS:

在注册表HKLMSYSTEMCurrentControlSetServicesTcpipParameters中更改以下值可以帮助你防御一定强度的DoS*** SynAttackProtect REG_DWORD 2
EnablePMTUDiscovery REG_DWORD 0 NoNameReleaseOnDemand REG_DWORD 1
EnableDeadGWDetect REG_DWORD 0 KeepAliveTime REG_DWORD 300,000
PerFORMRouterDiscovery REG_DWORD 0 EnableICMPRedirects REG_DWORD 0

在Win2000中如何关闭ICMP(Ping)

  3.针对ICMP***
ICMP的全名是Internet Control and Message Protocal即因特网控制消息/错误报文协议,这个协议主要是用来进行错误信息和控制信息的传递,例如著名的Ping和Tracert工具都是利用ICMP协议中的ECHO request报文进行的(请求报文ICMP ECHO类型8代码0,应答报文ICMP ECHOREPLY类型0代码0)。
  ICMP协议有一个特点---它是无连结的,也就是说只要发送端完成ICMP报文的封装并传递给路由器,这个报文将会象邮包一样自己去寻找目的地址,这个特点使得ICMP协议非常灵活快捷,但是同时也带来一个致命的缺陷---易伪造(邮包上的寄信人地址是可以随便写的),任何人都可以伪造一个ICMP报文并发送出去,伪造者可以利用SOCK_RAW编程直接改写报文的ICMP首部和IP首部,这样的报文携带的源地址是伪造的,在目的端根本无法追查,(***者不怕被抓那还不有恃无恐?)根据这个原理,外面出现了不少基于ICMP的***软件,有通过网络架构缺陷制造ICMP风暴的,有使用非常大的报文堵塞网络的,有利用ICMP碎片***消耗服务器CPU的,甚至如果将ICMP协议用来进行通讯,可以制作出不需要任何TCP/UDP端口的***(参见揭开***的神秘面纱三)......既然ICMP协议这么危险,我们为什么不关掉它呢?

  我们都知道,Win2000在网络属性中自带了一个TCP/IP过滤器,我们来看看能不能通过这里关掉ICMP协议,桌面上右击网上邻居->属性->右击你要配置的网卡->属性->TCP/IP->高级->选项->TCP/IP过滤,这里有三个过滤器,分别为:TCP端口、UDP端口和IP协议,我们先允许TCP/IP过滤,然后一个一个来配置,先是TCP端口,点击"只允许",然后在下面加上你需要开的端口,一般来说WEB服务器只需要开80(www),FTP服务器需要开20(FTP Data),21(FTP Control),邮件服务器可能需要打开25(SMTP),110(POP3),以此类推......接着是UDP,UDP协议和ICMP协议一样是基于无连结的,一样容易伪造,所以如果不是必要(例如要从UDP提供DNS服务之类)应该选择全部不允许,避免受到洪水(Flood)或碎片(Fragment)***。最右边的一个编辑框是定义IP协议过滤的,我们选择只允许TCP协议通过,添加一个6(6是TCP在IP协议中的代码,IPPROTO_TCP=6),从道理上来说,只允许TCP协议通过时无论UDP还是ICMP都不应该能通过,可惜的是这里的IP协议过滤指的是狭义的IP协议,从架构上来说虽然ICMP协议和IGMP协议都是IP协议的附属协议,但是从网络7层结构上ICMP/IGMP协议与IP协议同属一层,所以微软在这里的IP协议过滤是不包括ICMP协议的,也就是说即使你设置了“只允许TCP协议通过”,ICMP报文仍然可以正常通过,所以如果我们要过滤ICMP协议还需要另想办法。

  刚刚在我们进行TCP/IP过滤时,还有另外一个选项:IP安全机制(IP Security),我们过滤ICMP的想法就要着落在它身上。

打开本地安全策略,选择IP安全策略,在这里我们可以定义自己的IP安全策略。一个IP安全过滤器由两个部分组成:过滤策略和过滤操作,过滤策略决定哪些报文应当引起过滤器的关注,过滤操作决定过滤器是“允许”还是“拒绝”报文的通过。要新建IP安全过滤器,必须新建自己的过滤策略和过滤操作:右击本机的IP安全策略,选择管理IP过滤器,在IP过滤器管理列表中建立一个新的过滤规则:ICMP_ANY_IN,源地址选任意IP,目标地址选本机,协议类型是ICMP,切换到管理过滤器操作,增加一个名为Deny的操作,操作类型为"阻止"(Block)。这样我们就有了一个关注所有进入ICMP报文的过滤策略和丢弃所有报文的过滤操作了。需要注意的是,在地址选项中有一个镜像选择,如果选中镜像,那么将会建立一个对称的过滤策略,也就是说当你关注any IP->my IP的时候,由于镜像的作用,实际上你也同时关注了my IP->any IP,你可以根据自己的需要选择或者放弃镜像。再次右击本机的IP安全策略,选择新建IP过滤策略,建立一个名称为ICMP Filter的过滤器,通过增加过滤规则向导,我们把刚刚定义的ICMP_ANY_IN过滤策略指定给ICMP Filter,然后在操作选框中选择我们刚刚定义的Deny操作,退出向导窗口,右击ICMP Filter并启用它,现在任何地址进入的ICMP报文都会被丢弃了。
  虽然用IP sec能够对ICMP报文进行过滤,不过操作起来太麻烦,而且如果你只需要过滤特定的ICMP报文,还要保留一些常用报文(如主机不可达、网络不可达等),IP sec策略就力不从心了,我们可以利用Win2000的另一个强大工具路由与远程访问控制(Routing & Remote Access)来完成这些复杂的过滤操作。

  路由与远程访问控制是Win2000用来管理路由表、配置×××、控制远程访问、进行IP报文过滤的工具,默认情况下并没有安装,所以首先你需要启用它,打开"管理工具"->"路由与远程访问",右击服务器(如果没有则需要添加本机)选择"配置并启用路由及远程访问",这时配置向导会让你选择是什么样的服务器,一般来说,如果你不需要配置×××服务器,那么选择"手动配置"就可以了,配置完成后,主机下将出现一个IP路由的选项,在"常规"中选择你想配置的网卡(如果你有多块网卡,你可以选择关闭某一块的ICMP),在网卡属性中点击"输入筛选器",添加一条过滤策略"from:ANY tANY 协议:ICMP 类型:8 :编码:0 丢弃"就可以了(类型8编码0就是Ping使用的ICMP_ECHO报文,如果要过滤所有的ICMP报文只需要将类型和编码都设置为255)

  细心的朋友刚才可能已经发现,在输入、输出过滤器的下面,还有一个"碎片检查"功能,这个功能使用来应付IP碎片***的,这已经超出了本文所讨论的范围,我会在以后的拒绝服务***的文章中继续和大家一起探讨的。Win2000的路由及远程访问是一个功能非常强大的工具集

4.改变windows系统的一些默认值(例如:数据包的生存时间(TTL)值,不同系统有不同的值,有经验的人可以根据TTL的不同的值判断对方使用的是何种操作系统(例如windows 2000默认值128),我改改改,看你怎么看)

HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesTcpipParameters

DefaultTTL REG_DWORD 0-0xff(0-255 十进制,默认值128)

说明:指定传出IP数据包中设置的默认生存时间(TTL)值.TTL决定了IP数据包在到达
目标前在网络中生存的最大时间.它实际上限定了IP数据包在丢弃前允许通过的路由
器数量.有时利用此数值来探测远程主机操作系统.

5.防止ICMP重定向报文的***
HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesTcpipParameters

EnableICMPRedirects REG_DWORD 0x0(默认值为0x1)

说明:该参数控制Windows 2000是否会改变其路由表以响应网络设备(如路由器)发送给它的ICMP重定向消息,有时会被利用来干坏事.Win2000中默认值为1,表示响应ICMP重定向报文.

6.禁止响应ICMP路由通告报文
HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesTcpipParametersInterfacesinterface
PerFORMRouterDiscovery REG_DWORD 0x0(默认值为0x2)

说明:“ICMP路由公告”功能可造成他人计算机的网络连接异常,数据被窃听,计算机被用于流量***等严重后果.此问题曾导致校园网某些局域网大面积,长时间的网络异常.因此建议关闭响应ICMP路由通告报文.Win2000中默认值为2,表示当DHCP发送路由器发现选项时启用

7.防止SYN洪水***
HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesTcpipParameters

SynAttackProtect REG_DWORD 0x2(默认值为0x0)

说明:SYN***保护包括减少SYN-ACK重新传输次数,以减少分配资源所保留的时
间.路由缓存项资源分配延迟,直到建立连接为止.如果synattackprotect=2,
则AFD的连接指示一直延迟到三路握手完成为止.注意,仅在TcpMaxHalfOpen和
TcpMaxHalfOpenRetried设置超出范围时,保护机制才会采取措施.

8.禁止C$、D$一类的缺省共享
HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServiceslanmanserverparameters
AutoShareServer、REG_DWORD、0x0

9.禁止ADMIN$缺省共享
HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServiceslanmanserverparameters
AutoShareWks、REG_DWORD、0x0
10.限制IPC$缺省共享
HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlLsa

restrictanonymous REG_DWORD 0x0 缺省
0x1 匿名用户无法列举本机用户列表
0x2 匿名用户无法连接本机IPC$共享
说明:不建议使用2,否则可能会造成你的一些服务无法启动,如SQL Server

11.不支持IGMP协议
HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesTcpipParameters

IGMPLevel REG_DWORD 0x0(默认值为0x2)

说明:记得Win9x下有个bug,就是用可以用IGMP使别人蓝屏,修改注册表可以修正这个
bug.Win2000虽然没这个bug了,但IGMP并不是必要的,因此照样可以去掉.改成0后用
route print将看不到那个讨厌的224.0.0.0项了.

12.设置arp缓存老化时间设置
HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServices:TcpipParameters

ArpCacheLife REG_DWORD 0-0xFFFFFFFF(秒数,默认值为120秒)
ArpCacheMinReferencedLife REG_DWORD 0-0xFFFFFFFF(秒数,默认值为600)

说明:如果ArpCacheLife大于或等于ArpCacheMinReferencedLife,则引用或未引用的ARP缓存项在ArpCacheLife秒后到期.如果ArpCacheLife小于阿ARPCacheMinReferencedLife,未引用项在ArpCacheLife秒后到期,而引用项在ArpCacheMinReferencedLife秒后到期.每次将出站数据包发送到项的IP地址时,就会引用ARP缓存中的项。

13.禁止死网关监测技术
HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServices:TcpipParameters

EnableDeadGWDetect REG_DWORD 0x0(默认值为ox1)

说明:如果你设置了多个网关,那么你的机器在处理多个连接有困难时,就会自动改用备份网关.有时候这并不是一项好主意,建议禁止死网关监测.

14.不支持路由功能
HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServices:TcpipParameters

IPEnableRouter REG_DWORD 0x0(默认值为0x0)

说明:把值设置为0x1可以使Win2000具备路由功能,由此带来不必要的问题.

15.做NAT时放大转换的对外端口最大值
HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServices:TcpipParameters

MaxUserPort REG_DWORD 5000-65534(十进制)(默认值0x1388--十进制为5000)

说明:当应用程序从系统请求可用的用户端口数时,该参数控制所使用的最大端口数.正常情况下,短期端口的分配数量为1024-5000.将该参数设置到有效范围以外时,就会使用最接近的有效数值(5000或65534).使用NAT时建议把值放大点.
16.修改MAC地址
HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlClass

找到右窗口的说明为"网卡"的目录,
比如说是{4D36E972-E325-11CE-BFC1-08002BE10318}

展开之,在其下的0000,0001,0002...的分支中找到"DriverDesc"的键值为你网卡的说明,比如说"DriverDesc"的值为"Intel(R) 82559 Fast Ethernet LAN on Motherboard"然后在右窗口新建一字符串值,名字为"Networkaddress",内容为你想要的MAC值,比如说是"004040404040"然后重起计算机,ipconfig /all看看.

17.防止密码被DUMP,你只需在服务里面关掉Remote regisitery services



如果您的服务器正在受ASP***的困扰,那么希望这篇文章能帮您解决您所面临的问题。
目前比较流行的ASP***主要通过三种技术来进行对服务器的相关操作。
一、使用FileSystemObject组件
FileSystemObject可以对文件进行常规操作
可以通过修改注册表,将此组件改名,来防止此类***的危害。
HKEY_CLASSES_ROOTScripting.FileSystemObject改名为其它的名字,如:改为FileSystemObject_ChangeName
自己以后调用的时候使用这个就可以正常调用此组件了
也要将clsid值也改一下
HKEY_CLASSES_ROOTScripting.FileSystemObjectCLSID项目的值
也可以将其删除,来防止此类***的危害。
注销此组件命令:RegSrv32 /u C:WINNTSYSTEMscrrun.dll
禁止Guest用户使用scrrun.dll来防止调用此组件。
使用命令:cacls C:WINNTsystem32scrrun.dll /e /d guests
二、使用WScript.Shell组件
WScript.Shell可以调用系统内核运行DOS基本命令
可以通过修改注册表,将此组件改名,来防止此类***的危害。
HKEY_CLASSES_ROOTWScript.Shell及
HKEY_CLASSES_ROOTWScript.Shell.1改名为其它的名字,如:改为WScript.Shell_ChangeName或WScript.Shell.1_ChangeName
自己以后调用的时候使用这个就可以正常调用此组件了
也要将clsid值也改一下
HKEY_CLASSES_ROOTWScript.ShellCLSID项目的值
HKEY_CLASSES_ROOTWScript.Shell.1CLSID项目的值
也可以将其删除,来防止此类***的危害。
三、使用Shell.Application组件
Shell.Application可以调用系统内核运行DOS基本命令
可以通过修改注册表,将此组件改名,来防止此类***的危害。
HKEY_CLASSES_ROOTShell.Application及
HKEY_CLASSES_ROOTShell.Application.1改名为其它的名字,如:改为Shell.Application_ChangeName或Shell.Application.1_ChangeName
自己以后调用的时候使用这个就可以正常调用此组件了
也要将clsid值也改一下
HKEY_CLASSES_ROOTShell.ApplicationCLSID项目的值
HKEY_CLASSES_ROOTShell.ApplicationCLSID项目的值

也可以将其删除,来防止此类***的危害。
禁止Guest用户使用shell32.dll来防止调用此组件。
使用命令:cacls C:WINNTsystem32shell32.dll /e /d guests
注:操作均需要重新启动WEB服务后才会生效。
四、调用Cmd.exe
禁用Guests组用户调用cmd.exe
cacls C:WINNTsystem32Cmd.exe /e /d guests
通过以上四步的设置基本可以防范目前比较流行的几种***,但最有效的办法还是通过综合安全设置,将服务器、程序安全都达到一定标准,才可能将安全等级设置较高,防范更多非法***