加强WEB服务器的安全主要从三个方面入手。1).其所处的网络;2).运行的操作系统;3).服务器上运行的应用程序。本文我将详细介绍一些工具,你可以使用这些工具来加强自己WEB服务器的安全。
对于WEB服务器的测试最好能够采用结构化的方式。如果你是管理的是一个小网络,你可能对于每台服务器使用的操作系统和运行的程序有比较清楚的了解。但是对于一个大型网络,要对每台服务器都有清楚的了解是非常困难的。在这种情况下,可以采取以下四个步骤,进行了解:
指纹特征分析:扫描主机的操作系统、运行的应用程序和提供的服务。
缺陷分析:分析操作系统、应用程序、系统服务的潜在安全缺陷。
入侵测试:尝试利用上一步发现的缺陷进行攻击。
加固系统:修补上一步发现的缺陷,尽量减小系统的脆弱性。
本文将集中讨论前两步。
指纹特征分析
在网络安全规划中,指纹特征分析总是首先要做的。也就是说,在进行实际的测试之前,你不许知道测试目标使用的操作系统、运行的应用程序和提供的服务。这些细节可以帮助你发现潜在的安全缺陷。要知道这些细节,首先要判断系统的操作系统和打开的端口。
判断操作系统
nmap是一个伟大的端口扫描和操作系统检测工具,使用nmap可以非常有效地发现检测目标使用的操作系统:
#nmap -sT -O 192.168.1.1
Starting nmap V. 2.54BETA5 ( www.insecure.org/nmap/ )
TCP Sequence Prediction: Class=truly random
Difficulty=9999999 (Good luck!)
Remote operating system guess: Linux 2.0.32-34
从输出可以看出目标使用Linux操作系统。nmap是通过分析收到的报文议判断操作系统的类型的。
端口扫描
然后,我们进行端口扫描来判断目标打开的端口。如果可以和系统的某个服务建立连接,那么在端口上监听的服务进程就存在安全缺陷就可能被利用。
#nmap -sT 192.168.1.1
Starting nmap V. 2.54BETA5 ( www.insecure.org/nmap/ )
Intesting ports on 192.168.1.1 (206.135.57.167):
(The 1529 ports scanned but not shown below are in state: closed)
Port State Service
19/tcp open chargen
21/tcp open ftp
23/tcp open telnet
25/tcp open smtp
37/tcp open time
79/tcp open finger
80/tcp filtered http
113/tcp open auth
443/tcp filtered https
1723/tcp filtered pptp
Nmap run completed -- 1 IP address (1 host up) scanned in 12 seconds
扫描完毕TCP端口之后,我们还要找出打开的UDP端口:
#nmap -sU 192.168.1.1
Starting nmap V. 2.54BETA5 ( www.insecure.org/nmap/ )
Port State Service
37/udp open time
53/udp open domain
67/udp open bootps
69/udp open tftp
94/udp open objcall
111/udp open sunrpc
从端口扫描结果反县可以发现系统巡行ftp、http、auth、https、pptp、telnet、chargen、smtp、finger、time、domain、bootps、tftp、objcall、sunrpc。现在,我们把注意力转到Linux操作系统和检测目标提供的这些服务中存在的安全缺陷。完成了以上的信息收集,下面我们还需要判断WEB服务器是否能够正常提供服务。
netcat
netcat(nc)是一个简单的UNIX网络工具,它可以使用TCP或者UDP协议通过网络连接读写数据。它被设计为一个稳定的后端(back-end)工具,能够直接由其它程序和脚本轻松驱动。同时,它还是一个具有丰富功能的网络调试和探测工具,它能够建立你需要的几乎所有类型的连接,还有几个很有意思的内置功能。现在,我们使用nc建立到WEB服务器的连接,并发出一个HTML头请求:
#nc 192.168.1.2 80
GET HEAD/HTTP1.0
HTTP/1.1 400 Bad Request
Server: Microsoft-IIS/4.0
Date: Wed, 06 Dec 2000 00:45:56 GMT
Content-Type: text/html
Set-Cookie: ASPSESSIONIDQGGQQQPO=MJMCGMIAPIHOGLBNLFJPKCAH; path=/
Cache-control: Private
通过收到的信息,我们可以确定测试目标使用的WEB服务器是Microsoft IIS4。现在,我们能够把我们的安全规划限制在操作系统、WEB服务器版本、以及服务器上的应用程序了。
从上面的扫描中,我们可以看到服务器中还有其它的一些端口也打开了。这些打开的端口可能有许多缺陷。在服务器中,打开的端口应该有严格的限制,否则对带来很多安全缺陷。在知道了上面这些信息之后,我们可以进入下一步进行缺陷分析了。
缺陷分析
缺陷分析可以集中于两个方面:操作系统和应用程序。不过,这里我们只关心应用程序,也就是WEB服务器软件。
缺陷扫描
有些缺陷扫描程序能够综合已知的WEB安全缺陷。下面我们就使用这类程序对网站进行缺陷扫描。
whisker
whisker是一个非常好的WEB服务器缺陷扫描软件。它能够进行大量的缺陷扫描,而且升级非常频繁,能够很快地加入对新缺陷的检查。
#./whisker.pl -h 192.168.1.2 -i -v
-- whisker / v1.4.0 / rain forest puppy / www.wiretrip.net --
- Loaded script database of 1968 lines
= - = - = - = - = - =
= Host: 192.168.1.2
+ 404 Object Not Found: HEAD /
= Server: Microsoft-IIS/4.0
- Appending ::, %2E, or 0x81 to URLs may give script source
- Also try +.htr and %20%20.htw tricks
- Security settings on directories can be bypassed if you use 8.3 names
+ 404 Object Not Found: GET /cfdocs/
+ 403 Access Forbidden: GET /scripts/
+ 403 Access Forbidden: GET /scripts/cfcache.map
+ 404 Object Not Found: GET /cfcache.map
+ 404 Object Not Found: GET /cfide/Administrator/startstop.html
+ 404 Object Not Found: GET /cfappman/index.cfm
+ 404 Object Not Found: GET /cgi-bin/
+ 404 Object Not Found: GET /whisker.ida
+ 404 Object Not Found: GET /whisker.idc
+ 404 Object Not Found: GET /whisker.idq
+ 404 Object Not Found: GET /whisker.htw
+ 404 Object Not Found: GET /whisker.htr
+ 403 Access Forbidden: GET /scripts/cpshost.dll
+ 404 Object Not Found: GET /samples/search/queryhit.htm
+ 404 Object Not Found: GET /adsamples/config/site.csc
+ 403 Access Forbidden: GET /scripts/counter.exe
+ 404 Object Not Found: GET /scripts/repost.asp
+ 404 Object Not Found: GET /scripts/postinfo.asp
+ 403 Access Forbidden: GET /scripts/fpadmcgi.exe
+ 403 Access Forbidden: GET /scripts/samples/
+ 403 Access Forbidden: GET /scripts/samples/search/webhits.exe
+ 403 Access Forbidden: GET /scripts/iisadmin/
+ 403 Access Forbidden: GET /scripts/iisadmin/ism.dll
+ 404 Object Not Found: GET /msadc/
+ 404 Object Not Found: GET /Sites/
+ 404 Object Not Found: GET /SiteServer/Publishing/viewcode.asp
+ 404 Object Not Found: GET /advworks/equipment/catalog_type.asp
+ 404 Object Not Found: GET /iisadmpwd/aexp4b.htr
+ 403 Access Forbidden: HEAD /scripts/samples/details.idc
+ 403 Access Forbidden: HEAD /scripts/samples/ctguestb.idc
+ 200 OK: HEAD /scripts/tools/newdsn.exe
- this can be used to make DSNs, useful in use with our ODBC exploit
- and the RDS exploit (with msadcs.dll)
+ 403 Access Forbidden: GET /scripts/iisadmin/bdir.htr
+ 404 Object Not Found: HEAD /carbo.dll
+ 403 Access Forbidden: HEAD /scripts/proxy/
+ 403 Access Forbidden: HEAD /scripts/proxy/w3proxy.dll
+ 404 Object Not Found: HEAD /prd.i/pgen/
+ 404 Object Not Found: HEAD /cgi-win/
+ 403 Access Forbidden: HEAD /scripts/nlog-smb.cgi
+ 403 Access Forbidden: HEAD /scripts/wwwboard/
+ 404 Object Not Found: HEAD /wwwboard/
+ 403 Access Forbidden: HEAD /scripts/wwwboard.pl
+ 403 Access Forbidden: HEAD /scripts/wwwboard/wwwboard.pl
+ 403 Access Forbidden: HEAD /scripts/wwwboard.cgi
+ 403 Access Forbidden: HEAD /scripts/wwwboard/wwwboard.cgi
+ 404 Object Not Found: HEAD /logs/
+ 404 Object Not Found: HEAD /database/
+ 404 Object Not Found: HEAD /databases/
+ 403 Access Forbidden: HEAD /scripts/campas
+ 403 Access Forbidden: HEAD /scripts/guestbook.cgi
+ 403 Access Forbidden: HEAD /scripts/guestbook.pl
+ 403 Access Forbidden: HEAD /scripts/edit.pl
+ 403 Access Forbidden: HEAD /scripts/webbbs.cgi
+ 403 Access Forbidden: HEAD /scripts/whois_raw.cgi
+ 404 Object Not Found: HEAD /webcart/
+ 404 Object Not Found: HEAD /webcart-lite/
+ 403 Access Forbidden: HEAD /scripts/AnyBoard.cgi
+ 403 Access Forbidden: HEAD /scripts/admin.php
+ 403 Access Forbidden: HEAD /scripts/code.php
+ 403 Access Forbidden: HEAD /scripts+ 403 Access
Forbidden: HEAD /scripts/bnbform.cgi
从输出结果中,我们可以看到有三种基本的检测结果:200 OK、403 Access Forbidden和404 Object Not Found。这些结果表示:
200 OK
这个输出表示攻击检查成功。服务器存在这个缺陷。这些缺陷包括:newdsn.exe、htr和URL扩展字符串。攻击者可能利用这些缺陷侵入服务器。
403 Access Forbidden
表示whisker已经发现了可以用于攻击检查的文件,但是哟高呼没有对它的访问权限。在这种情况下,攻击者暂时无法通过这些可能的缺陷侵入服务器,但是如果将来权限设置出现失误就可能给攻击者以可乘之机。