网络安全咨询服务越来越热,目前已经形成产业,大成科技等已做的相当不错。由于个人爱好,把以前做网络安全评估时的一点心得写出来,供大家参考。
1确定安全评估对象
先建立信心,绝大多数的网络,安全状况堪忧。只要细心找,肯定可以找到缺陷和漏洞。
对一个企业或者单位客户来说,他们并不关心下属员工或者学生所用PC机的,所以一般我们会把注意力集中在三类:
1.公共数据服务器
2.网络设备
3.独自研发的各种管理系统
其中各种数据服务器是重中之重,所以下面就主要以数据服务器为对象,介绍一下网络安全评估的一般步骤。
2公共数据服务器的安全评估
2.1获得服务器列表
2.1.1因特网踩点获得列表
利用互联网上的各种数据库进行对该单位的查询,往往可以获得很多意外的信息。常用的方法有Whois查询、搜索引擎、该单位主页上的相关信息三种方式。其中Whois查询,多个网址可以查询。
由于对于客户要求的网络评估要求,最好在短时间内就给出效果,所以Whois和搜索引擎的查找方法最好在去该单位以前提前查询完毕,一旦在单位现场进行网络安全评估,单位主页上的相关信息最直接最有效。去一个单位或者学校的主页,一般会有公共的FTP服务器或者邮件服务器的提示供我们利用。
2.1.2利用DNS的区域传输获得列表
很有效并屡试不爽的一个办法就是利用DNS的区域传输获得公共服务器的列表。一般的单位内,会有2到3个DNS服务器提供域名解析,这些DNS服务器中,一般会有一台服务器能够提供DNS的区域传输,而区域传输的结果能够使我们得到单位内所有的服务器列表,包括域名、地址、甚至操作系统的类型(HINFO)。
方法也很简单,拿XXXX的DNS来说明一下:
在windows或者linux下执行nslookup如下,蓝色字体为注释。
C:\>nslookup
Default Server: ns2.abcd.com
Address: 10.72.66.36
> set type=ANY
//得到所有类型
> ls -d abcd.com > DNS.txt
//得到后缀是abcd.com的所有相关域名,并存放到DNS.txt文件里
[ns2.abcd.com]
#
Received 509 records. //我们获得了509条记录
> exit
C:\>
打开该txt文件,摘一部分,看一眼:
(安全起见,图像省略)
之所以我们可以这么容易获得这么多宝贵的信息,原因在于DNS服务器的安全策略设置不当。互联网上的各DNS的服务器组成一个倒立的树状结构,而上一层的DNS允许下一层的DNS来通过区域传输请求来实现更新记录,这样可以保证数据的同步更新,并且增加上层DNS服务器的数据冗余度。
很明显的,正确的配置应该是:DNS服务器只应该对DNS服务器的区域传输请求有回应,而不应该对一台普通的PC的区域传输请求做出回应。
修改这种配置,增加允许区域传输的IP地址列表也比较简单,对于BIND服务器(Unix系列平台下较常用),在named.conf里的allow_transfer选项里添加IP地址列表即可。Windows下DNS服务器里,在安全策略项上可以配置该列表。
打开这个我们获得的DNS.txt,我可以得到500多条主机的记录。一般我们可以向以下类型的机器下手:
数据服务器的测试系统。原因也很简单,测试系统虽然是用来测试的,但是数据都是真的。同时,测试系统不怎么注意安全特性,密码往往容易猜到,而且管理员也不怎么关心谁有登陆进来的倾向和欲望。我们在DNS.txt里可以搜索一下关键字test,可以得到8台极有可能测试服务器的信息,如web-test,登陆到该服务器后果然是一个web服务器的测试系统。各位如果有兴趣可以测试一下这台测试服务器的安全性,有什么漏洞记得告诉公司啊,呼呼
HINFO里有win2k等关键字的系统。有些平台由于种种原因,本身漏洞和缺陷比较多,windows 2000就是一个例子。HINFO的信息是表明该域名对应的PC的操作系统等信息,这些信息不但没有什么帮助,反而给恶意的人所利用。
FTP、EMAIL、Web等应用广泛的公共服务器。找出这些系统的漏洞,甚至攻击她们,让她们服务中止或者得到shell是很有说服力的。
2.1.3扫描获得服务器列表
如果DNS服务器没有区域传输的缺陷,可以利用扫描软件来获得其他服务器地址。只要我们预先知道一个服务器地址,这比较简单,执行ipconfig /all 就可以得到DNS地址。由这个地址,扫描同一个网段的地址,就可以得到部分其他服务器的地址,并且极有可能是比较重要的服务器。原因也比较简单,由通常的安全策略的考虑,往往会把各个服务器放到同一个DMZ区,所以他们的IP地址经常会在同一个地址段。
我们公司的服务器分布也不例外。和DNS服务器同处于一个网段的服务器至少有20多台(由DNS.txt得知)服务器。
扫描的工具推荐nmap,当前linux的主流版本自带,windows下需要下载一个,简单易用,功能强大,居家旅行之必备软件。
在获得服务器列表后,其默认的开放服务对应的端口当然是开放的,如FTP服务器其21端口当然是开发的。需要引起我们注意的是,这些公共服务器上有可能同时提供其他服务,而另外开放的服务习惯性行为就是,安全性远没有她提供的默认服务高。判断开放着哪些服务,就可以使用上边提到的nmap来扫描。举个例子,我司的邮件服务器应该开放着25、110、80端口,其中25和110分别是pop和smtp协议,80支持webmail。我们查看一下还开着其他哪些服务:
C:\>nmap -sS mail.abcd.com -p 1-1024
Starting nmap 3.70 ( http://www.insecure.org/nmap ) at 2005-12-10 19:01 中国标准
时间
Interesting ports on 172.19.1.227:
(The 1006 ports scanned but not shown below are in state: closed)
PORT STATE SERVICE
21/tcp open ftp
22/tcp open ssh
23/tcp open telnet
25/tcp filtered smtp
80/tcp open http
110/tcp open pop3
111/tcp open rpcbind
143/tcp filtered imap
199/tcp open smux
389/tcp open ldap
512/tcp open exec
513/tcp open login
514/tcp open shell
587/tcp open submission
588/tcp open cal
665/tcp open unknown
898/tcp open sun-manageconsole
993/tcp open imaps
Nmap run completed -- 1 IP address (1 host up) scanned in 36.438 seconds
C:\>
这台邮件服务器开放的服务太多了,多开放一个端口就多一份风险。
2.2确定服务器软件类型和版本号
2.2.1利用banner获得服务器软件类型和版本
banner是登陆到服务器后,服务器返回的类似欢迎信息一样的东东,常常,在里面会标识服务器软件的名称,版本号等。利用banner确定服务器软件类型版本,是最简单的方法。但是应用广泛的服务器稍微有一点安全意识,都会屏蔽掉这些banner。
拿公司的EMAIL服务器的举个例子:
C:\>telnet mail.abcd.com 110
+OK Messaging Multiplexor (iPlanet Messaging Server 5.2 HotFix 1.25 (built Mar
3 2004))
由返回信息我们可以轻松得到,服务器软件iPlanet Messaging Server,版本号5.2、补丁1.25,编译时间去年3月。
2.2.2专用工具和命令获得服务器软件类型和版本
对于特殊的服务类型,有专用的工具和命令可以轻松获得软件类型和版本号,各举一个例子。
利用命令获得我们公司的DNS服务器BIND的版本号:
C:\>nslookup
Default Server: ns2.abcd.com
Address: 10.72.66.36
> set type=txt
> set class=chaos
> version.bind
Server: ns2.abcd.com
Address: 10.72.66.36
version.bind text =
"9.2.3"
>
9.2.3版本已经比较高了。
利用特有工具软件获得某PC的RPC服务信息:
[root@localhost ~]# rpcinfo -p 10.165.108.126
程序 版本 协议 端口 进程
100000 2 tcp 111 portmapper
100000 2 udp 111 portmapper
100024 1 udp 32768 status
100024 1 tcp 32769 status
100003 2 udp 2049 nfs
100003 3 udp 2049 nfs
100003 4 udp 2049 nfs
100003 2 tcp 2049 nfs
100003 3 tcp 2049 nfs
100003 4 tcp 2049 nfs
100021 1 udp 32771 nlockmgr
100021 3 udp 32771 nlockmgr
100021 4 udp 32771 nlockmgr
100021 1 tcp 32771 nlockmgr
100021 3 tcp 32771 nlockmgr
100021 4 tcp 32771 nlockmgr
100011 1 udp 898 rquotad
100011 2 udp 898 rquotad
100011 1 tcp 901 rquotad
100011 2 tcp 901 rquotad
100005 1 udp 900 mountd
100005 1 tcp 903 mountd
100005 2 udp 900 mountd
100005 2 tcp 903 mountd
100005 3 udp 900 mountd
100005 3 tcp 903 mountd
[root@localhost ~]#
我们看到nfs、nlockmgr、mountd都存在,所以应该允许了NFS,我们就可以把精力集中在NFS上了。
2.2.3利用RFC获得服务器软件类型和版本
上边标题的说法不是很确切,完整的说,应该是利用RFC没有规定的东西来确定服务器软件类型。RFC里规定的协议是这些服务器程序必须遵守的,是每个服务器的实现都一样的。
而我们利用的是RFC所没有规定的。
拿FTP的各种服务器软件来举个例子,我们分别telnet到3个FTP服务器的21端口,我们输入蓝色字体,返回的是红色字体,注意到,返回的每行信息的前三位数字是RFC规定的,各种服务都是一样的,三位数字后的就五花八门了,我们可以利用这些组合来确定是采用的哪些主流FTP服务器。
1.公司FTP服务器
C:\>telnet ft01-in 21
220-Welcome to Abcd Internal FTP Server
220 ft01-in FTP server ready
USER anonymous
331 Password required for anonymous.
PASS @
530 User anonymous login incorrect.
2.Serv-u FTP服务器(个人测试用)
C:\>telnet 10.165.108.126 secflow 21
220 Serv-U FTP Server v5.1 for WinSock ready...
USER anonymous
331 User name okay, need password.
PASS @
530 Not logged in.
3.VsFTPd服务器(secflow服务器)
C:\>telnet secflow 21
220 (vsFTPd 2.0.1)
USER zz
331 Please specify the password.
PASS PP
530 Login incorrect.
如果服务器允许用户匿名登陆(应用广泛的服务器都允许),那我们可供参考的信息就丰富的多。
我们就靠返回的不同的红色字体组合来确定服务器软件类型。
2.3 通过服务器对command命令的综合返回信息获得服务器类别和版本
简单说,就是通过向服务器发送各种command,由多个command的返回信息,与已知的服务器进行对比,评估出最可能的服务器类型和版本。
本来有一个各种主流ftp服务器对各种command的返回信息table,可惜手头上没有。
2.4得到攻击程序或者程序源码
一旦确定了服务器的软件和版本号,剩下的就是查找攻击程序或者程序源代码了。
推荐几个网站,是攻击源程序极为丰富的几个网址(红色的是极力推荐):
www.milw0rm.com
www.metasploit.com
www.digitalmunition.com
网站上有搜索的功能,你一旦确定了服务器软件,直接搜索关键字,如已知DNS服务器软件用的是BIND,搜索可以得到如下界面:
下面的几个连接对应的是BIND的漏洞,其中每个连接都是攻击的源程序,我们如果有vc或者gcc直接编译,就可以拿来攻击了。
3网络设备和各种管理系统的安全评估
3.1 防火墙
3.1.1用户名检查
防火墙外部连接路由器,所以她是一个企业网内的屏障,外部形形色色不怀好意的人,如果从外部进入企业网内部,防火墙是他们首要研究的目标。而防火墙的用户名和密码的设置就尤其重要,这个一旦被猜出,整个网络出口就被搞定了。
事实上,N多的企业的防火墙的用户名和密码实在是安全性太低了。举几个例子,用户名清一色的admin、root、姓名的简写,而密码更是堪忧,比如某个企业的网址是www.pqjk.com,防火墙的密码就是pqjk,而密码设成6位以下并且是一个固定单词的情况更是常见。
3.1.2安全策略检查
防火墙的安全策略也是比较容易出现缺陷的地方。
无外乎两种情况,设置的太严、太松。太严的见过一个夸张一点的,企业内两条DNS服务器,其中一台企业内近一半用户由于防火墙策略失当,竟然不能访问。
太松的主要是针对DMZ区的服务器的访问权限开的太大。
3.2 交换机路由器
3.2.1本身系统的安全性
交换路由设备的安全性主要集中在本身的系统软件上,由于CISCO产品分布很广,而且设备一放就是几年,软件版本很少升级,所以早先IOS的漏洞也被留了下来,IOS已知的缺陷主要是集中在2003年发现的几个,但是CISCO的设备很少进行版本升级和变动,所以这些缺陷现在依旧适用。
首先应该确定这个网络设备是不是CISCO的,一般情况可以采用两种比较简单的:
1.telnet到CISCO的设备,一般会条件反射一样返回:
User Access Verification
Password:
2.另外可以利用nmap的-O选项来确定
nmap –O –p 13 CISCO_IP
另外,默认配置没有修改,有可能导致信息外露,如果mib默认开放public的读权限。
3.2.2所提供服务的安全性
交换机路由器上除了一般的交换路由功能外,不可避免的提供TELNET、FTP、SSH等服务,这些服务很多都是由别人的软件移植过来,稍加改动后用上去的,所以这些开源软件的BUG也被一起引入过来。
一个比较残酷的例子:我司的在网上的很多使用VRP平台的路由、交换和防火墙产品,普遍有这样一个缺陷:任意权限的一个ftp用户,登陆到设备后,cd 一个超长目录,可以让ftp服务挂起,甚至整机重启。不过这个给用户进行网络评估的时候不说也罢。
3.3各种管理系统
较有实力的企业单位,会组织自己的工作人员或者学生老师来开发自己的管理系统、计费系统等。对这些管理系统的安全评估很大程度上看运气,这些系统安全水平高低差别很大。
如果遇到安全水平稍低的系统,一般可以通过目录的权限设置、QueryString的解码、超长的参数等比较容易出现失误的地方来试探。
Good Luck!