【51CTO.com独家特稿】俗话说得好:“千里之堤,毁于蚁穴。”一个小小的漏洞造成一旦被攻击者发现,最终后果有可能是整个网络的瘫痪。因此作为管理员应当像黑客一样思考,时刻关注最新的安全技术和系统漏洞,并对照本单位的网络进行检查。而怎么来发现企业网络的安全漏洞呢?需要掌握和采用一些什么关键技术?有什么比较流行和高效的工具可以用来辅助系统管理员来进行漏洞的扫描和发现呢?本文为读者揭开这个谜底。
1、企业网络漏洞扫描概述
随着Internet的不断发展,信息技术已成为促进经济发展、社会进步的巨大推动力:当今社会高度的计算机化信息资源对任何人无论在任何时候、任何地方都变得极有价值。不管是存储在工作站中、服务器里还是流通于Internet上的信息都已转变成为一个关系事业成败关键的策略点,这就使保证信息的安全变得格外重要。
安全扫描技术是一类重要的网络安全技术。安全扫描技术与防火墙、入侵检测系统互相配合,能够有效提高网络的安全性。通过对网络的扫描,网络管理员可以了解网络的安全配置和运行的应用服务,及时发现安全漏洞,客观评估网络风险等级。网络管理员可以根据扫描的结果更正网络安全漏洞和系统中的错误配置,在黑客攻击前进行防范。如果说防火墙和网络监控系统是被动的防御手段,那么安全扫描就是一种主动的防范措施,可以有效避免黑客攻击行为,做到防患于未然。
安全扫描技术主要分为两类:主机安全扫描技术和网络安全扫描技术。网络安全扫描技术主要针对系统中不合适的设置脆弱的口令,以及针对其它同安全规则抵触的对象进行检查等;而主机安全扫描技术则是通过执行一些脚本文件模拟对系统进行攻击的行为并记录系统的反应,从而发现其中的漏洞。
端口扫描技术和漏洞扫描技术是网络安全扫描技术中的两种核心技术,并且广泛运用于当前较成熟的网络扫描器中,如著名的Nmap和Nessus。鉴于这两种技术在网络安全扫描技术中起着的举足轻重作用,本文将对这两种技术进行了非常系统和完整的学习、总结和研究。 #p#
2、端口扫描技术基本原理
对于位于网络中的计算机系统来说,一个端口就是一个潜在的通信通道,也就是一个入侵通道。对目标计算机进行端口扫描,能得到许多有用的信息从而发现系统的安全漏洞。通过其可以使系统用户了解系统目前向外界提供了哪些服务,从而为系统用户管理网络提供了一种参考的手段。
从技术原理上来说,端口扫描向目标主机的TCP/UDP服务端口发送探测数据包,并记录目标主机的响应。通过分析响应来判断服务端口是打开还是关闭,就可以得知端口提供的服务或信息。端口扫描也可以通过捕获本地主机或服务器的流入流出IP数据包来监视本地主机的运行情况,不仅能对接收到的数据进行分析,而且能够帮助用户发现目标主机的某些内在的弱点,而不会提供进入一个系统的详细步骤。一般说来,端口扫描的目的通常是如下的一项或者多项:
◆发现开放端口:发现目标系统上开放的TCP或UDP端口;
◆了解主机操作系统信息:端口扫描可以通过操作系统的“指纹”来推测被扫描操作系统或者应用程序的版本等信息;
◆了解软件或者服务版本:软件或服务版本可以通过“标志获取”或者应用程序的指纹来识别获得;
◆发现脆弱的软件版本:识别软件和服务的缺陷,从而有助于发起针对漏洞的攻击。
端口扫描主要有经典的扫描器(全连接)以及所谓的SYN(半连接)扫描器。此外还有间接扫描和秘密扫描等。TCP扫描方式是通过与被扫描主机建立标准的TCP连接,因此这种方式最准确,很少漏报、误报,但是容易被目标主机察觉、记录。SYN方式是通过与目标主机建立半打开连接,这样就不容易被目标主机记录,但是扫描结果会出现漏报,在网络状况不好的情况下这种漏报是严重的。 #p#
3、快速安装nmap
(1)Nmap简介
map是一个网络探测和安全扫描程序,系统管理者和个人可以使用这个软件扫描大型的网络,获取那台主机正在运行以及提供什么服务等信息。nmap支持很多扫描技术,例如:UDP、TCP connect()、TCP SYN(半开扫描)、ftp代理(bounce攻击)、反向标志、ICMP、FIN、ACK扫描、圣诞树(Xmas Tree)、SYN扫描和null扫描。从扫描类型一节可以得到细节。nmap还提供了一些高级的特征,例如:通过TCP/IP协议栈特征探测操作系统类型,秘密扫描,动态延时和重传计算,并行扫描,通过并行ping扫描探测关闭的主机,诱饵扫描,避开端口过滤检测,直接RPC扫描(无须端口影射),碎片扫描,以及灵活的目标和端口设定。
为了提高nmap在non-root状态下的性能,软件的设计者付出了很大的努力。很不幸,一些内核界面(例如raw socket)需要在root状态下使用。所以应该尽可能在root使用nmap。
nmap运行通常会得到被扫描主机端口的列表。nmap总会给出well known端口的服务名(如果可能)、端口号、状态和协议等信息。每个端口的状态有:open、filtered、unfiltered。
◆open状态意味着目标主机能够在这个端口使用accept()系统调用接受连接;
◆filtered状态表示防火墙、包过滤和其它的网络安全软件掩盖了这个端口,禁止 nmap探测其是否打开。
◆unfiltered表示这个端口关闭,并且没有防火墙/包过滤软件来隔离nmap的探测企图。通常情况下,端口的状态基本都是unfiltered状态,只有在大多数被扫描的端口处于filtered状态下,才会显示处于unfiltered状态的端口。
根据使用的功能选项,nmap也可以报告远程主机的下列特征:使用的操作系统、TCP序列、运行绑定到每个端口上的应用程序的用户名、DNS名、主机地址是否是欺骗地址、以及其它一些东西。
(2)快速安装
在使用之前,我们需要下载该软件的源码包进行安装。目前,作者下载到的最新版本为:nmap-5.00.tgz,下载网址为:http://linux.softpedia.com/get/System/Networking/Nmap-184.shtml。下载完成后,用户执行如下安装命令即可:
(1)解压缩软件包
#tar –xzvf nmap-5.00.tgz
(2)切换到安装目录
#cd nmap-5.00
(3)使用configure命令生成make文件
#./configure
(4)编译源代码
#make
(5)安装相关模块
#make install #p#
4、使用nmap确定开放端口
功能选项可以组合使用。一些功能选项只能够在某种扫描模式下使用。nmap会自动识别无效或者不支持的功能选项组合,并向用户发出警告信息。使用nmap,可以参考使用如下一些常用的选项。
(1)使用主要扫描类型选项
(1)-sT
TCP connect()扫描:这是最基本的TCP扫描方式。connect()是一种系统调用,由操作系统提供,用来打开一个连接。如果目标端口有程序监听,connect()就会成功返回,否则这个端口是不可达的。这项技术最大的优点是,用户不需要root权限。任何Linux用户都可以自由使用这个系统调用。这种扫描很容易被检测到,在目标主机的日志中会记录大批的连接请求以及错误信息。
(2)-sS
TCP同步扫描(TCP SYN):因为不必全部打开一个TCP连接,所以这项技术通常称为半开扫描(half-open)。用户可以发出一个TCP同步包(SYN),然后等待回应。如果对方返回SYN|ACK(响应)包就表示目标端口正在监听;如果返回RST数据包,就表示目标端口没有监听程序;如果收到一个SYN|ACK包,源主机就会马上发出一个RST(复位)数据包断开和目标主机的连接,这实际上有我们的操作系统内核自动完成的。这项技术最大的好处是,很少有系统能够把这记入系统日志。不过,用户需要root权限来定制SYN数据包。
(3)-sF -sF –sN
秘密FIN数据包扫描、圣诞树(Xmas Tree)、空(Null)扫描模式:即使SYN扫描都无法确定的情况下使用。一些防火墙和包过滤软件能够对发送到被限制端口的SYN数据包进行监视,而且有些程序比如synlogger和courtney能够检测那些扫描。这些高级的扫描方式可以逃过这些干扰。这些扫描方式的理论依据是:关闭的端口需要对用户的探测包回应RST包,而打开的端口必需忽略有问题的包。FIN扫描使用暴露的FIN数据包来探测,而圣诞树扫描打开数据包的FIN、URG和PUSH标志。不幸的是,微软决定完全忽略这个标准,另起炉灶。所以这种扫描方式对Windows95/NT无效。不过,从另外的角度讲,可以使用这种方式来分别两种不同的平台。如果使用这种扫描方式可以发现打开的端口,用户就可以确定目标注意运行的不是Windows系统。如果使用-sF、-sX或者-sN扫描显示所有的端口都是关闭的,而使用SYN扫描显示有打开的端口,用户可以确定目标主机可能运行的是Windows系统。现在这种方式没有什么太大的用处,因为nmap有内嵌的操作系统检测功能。还有其它几个系统使用和Windows同样的处理方式,包括Cisco、BSDI、HP/UX、MYS、IRIX。在应该抛弃数据包时,以上这些系统都会从打开的端口发出复位数据包。
(4)-sP
ping扫描:有时用户只是想知道此时网络上哪些主机正在运行。通过向用户指定的网络内的每个IP地址发送ICMP echo请求数据包,nmap就可以完成这项任务。如果主机正在运行就会作出响应。不幸的是,一些站点会主动阻塞ICMP echo请求数据包。然而,在默认的情况下nmap也能够向80端口发送TCP ack包,如果用户收到一个RST包,就表示主机正在运行。nmap使用的第三种技术是:发送一个SYN包,然后等待一个RST或者SYN/ACK包。对于非root用户,nmap使用connect()方法。在默认的情况下(root用户),nmap并行使用ICMP和ACK技术。值得注意的是:nmap在任何情况下都会进行ping扫描,只有目标主机处于运行状态,才会进行后续的扫描。如果用户只是想知道目标主机是否运行,而不想进行其它扫描,才会用到这个选项。
(5)-sU
UDP扫描:如果用户想知道在某台主机上提供哪些UDP服务,可以使用这种扫描方法。nmap首先向目标主机的每个端口发出一个0字节的UDP包,如果我们收到端口不可达的ICMP消息,端口就是关闭的,否则我们就假设它是打开的。
(6)-sA
ACK扫描:这项高级的扫描方法通常用来穿过防火墙的规则集。通常情况下,这有助于确定一个防火墙是功能比较完善的或者是一个简单的包过滤程序,只是阻塞进入的SYN包。这种扫描是向特定的端口发送ACK包(使用随机的应答/序列号)。如果返回一个RST包,这个端口就标记为unfiltered状态。如果什么都没有返回,或者返回一个不可达ICMP消息,这个端口就归入filtered类。注意,nmap通常不输出unfiltered的端口,所以在输出中通常不显示所有被探测的端口。显然,这种扫描方式不能找出处于打开状态的端口。
(7)-sW
对滑动窗口的扫描:这项高级扫描技术非常类似于ACK扫描,除了它有时可以检测到处于打开状态的端口,因为滑动窗口的大小是不规则的,有些操作系统可以报告其大小。这些系统至少包括:某些版本的AIX、Amiga、BeOS、BSDI、Cray、Tru64 UNIX、DG/UX、OpenVMS、Digital UNIX、OpenBSD、OpenStep、QNX、Rhapsody、SunOS 4.x、Ultrix、VAX、VXWORKS。从nmap-hackers邮件3列表的文档中可以得到完整的列表。
(8)-sR
RPC扫描:这种方法和nmap的其它不同的端口扫描方法结合使用。选择所有处于打开状态的端口向它们发出SunRPC程序的NULL命令,以确定它们是否是RPC端口,如果是,就确定是哪种软件及其版本号。因此用户能够获得防火墙的一些信息。诱饵扫描现在还不能和RPC扫描结合使用。
(2)使用高级设置选项
通常,nmap在运行时,能够很好地根据网络特点进行调整。扫描时,nmap会尽量减少被目标检测到的机会,同时尽可能加快扫描速度。然而,nmap默认的适时策略有时候不太适合用户的目标。使用下面这些选项,可以有效地控制nmap的扫描时间。
(1)-T
设置nmap的扫描策略,主要有如下几种:
◆Paranoid:为了避开IDS的检测使扫描速度极慢,nmap串行所有的扫描,每隔至少5分钟发送一个包;
◆Sneaky:和Paranoid差不多,只是数据包的发送间隔是15秒;
◆Polite:不增加太大的网络负载,避免宕掉目标主机,串行每个探测,并且使每个探测有0.4 秒种的间隔;
◆Normal:nmap默认的选项,在不是网络过载或者主机/端口丢失的情况下尽可能快速地扫描;
◆Aggressive:设置5分钟的超时限制,使对每台主机的扫描时间不超过5分钟,并且使对每次探测回应的等待时间不超过1.5秒钟;
◆Insane:只适合快速的网络或者用户不在意丢失某些信息,每台主机的超时限制是75秒,对每次探测只等待0.3秒钟。
用户也可以使用数字来代替上述这些模式,例如:-T 0等于-T Paranoid,-T 5等于-T Insane。并且,上述这些模式不能和下面的选项组合使用。
(2)--host_timeout
设置扫描一台主机的时间,以毫秒为单位。默认的情况下,没有超时限制。
(3)--max_rtt_timeout
设置对每次探测的等待时间,以毫秒为单位。如果超过这个时间限制就重传或者超时。默认值是大约9000毫秒。
(4)--min_rtt_timeout
当目标主机的响应很快时,nmap就缩短每次探测的超时时间。这样会提高扫描的速度,但是可能丢失某些响应时间比较长的包。使用这个选项,可以让nmap对每次探测至少等待用户指定的时间,以毫秒为单位。
(5)--initial_rtt_timeout
设置初始探测的超时值。一般这个选项只在使用-P0选项扫描有防火墙保护的主机才有用。默认值是6000毫秒。
(6)--max_parallelism
设置最大的并行扫描数量。--max_parallelism 1表示同时只扫描一个端口。这个选项对其它的并行扫描也有效,例如ping sweep, RPC scan。
(7)--scan_delay
设置在两次探测之间,nmap必须等待的时间。这个选项主要用于降低网络的负载。
(3)扫描实施第一步:发现活动主机
使用nmap扫描整个网络寻找目标,已确定目标机是否处于连通状态。通过使用“-sP”命令,进行ping扫描。缺省情况下,nmap给每个扫描到的主机发送一个ICMP echo和一个TCP ACK,主机对任何一种的响应都会被nmap得到,扫描速度非常快,在很短的时间内可以扫描一个很大的网络。该命令使用如下所示:
[root@localhost ~]# nmap -sP 10.1.4.0/24 Starting Nmap 5.0 ( http://www.insecure.org/nmap/ ) at 2009-12-17 15:09 CST Host 10.1.4.1 appears to be up. MAC Address: 00:0B:CD:B9:EE:A8 (Compaq (HP)) Host 10.1.4.6 appears to be up. MAC Address: 00:1E:65:F0:48:B8 (Unknown) Host 10.1.4.8 appears to be up. MAC Address: 00:1F:3C:56:00:95 (Unknown) Host 10.1.4.9 appears to be up. MAC Address: 00:13:CE:FA:45:4A (Intel Corporate) Host 10.1.4.14 appears to be up. MAC Address: 00:21:5C:64:0D:07 (Unknown) Host 10.1.4.15 appears to be up. MAC Address: 00:21:5C:77:C1:83 (Unknown) Host 10.1.4.16 appears to be up. MAC Address: 00:1C:BF:A4:02:39 (Unknown) Host 10.1.4.18 appears to be up. MAC Address: 00:1C:BF:D5:30:04 (Unknown) Host 10.1.4.20 appears to be up. MAC Address: 00:1C:BF:95:6F:3C (Unknown) Host 10.1.4.21 appears to be up. MAC Address: 00:1C:BF:95:62:69 (Unknown) Host 10.1.4.22 appears to be up. MAC Address: 00:1F:3A:4C:90:D2 (Unknown) Host 10.1.4.23 appears to be up. Host 10.1.4.25 appears to be up. MAC Address: 00:22:FA:CA:C6:7A (Unknown) Host 10.1.4.26 appears to be up. MAC Address: 00:26:BB:0F:40:01 (Unknown) Host 10.1.4.27 appears to be up. MAC Address: 00:22:FA:B0:BB:D2 (Unknown) Host 10.1.4.28 appears to be up. MAC Address: 00:1E:65:F2:76:96 (Unknown) Host 10.1.4.29 appears to be up. MAC Address: 00:1C:BF:9D:20:F5 (Unknown) 略。。。。。。 Nmap finished: 256 IP addresses (125 hosts up) scanned in 7.852 seconds |
通过该扫描,可以发现该公司网络中有125台主机是活跃的,也就是说有机可趁,下一步就是要进行更详细的扫描,来扫描这些主机到底有些什么活动端口。
(4)扫描实施第二步:扫描端口扫描
通常情况下,当nmap的使用者确定了网络上运行的主机处于连通状态,下一步的工作就是进行端口扫描,端口扫描使用-sT参数。如下面结果如示:
[root@localhost ~]# nmap -v -sT 10.1.4.0/24 Starting Nmap 5.0 ( http://www.insecure.org/nmap/ ) at 2009-12-17 14:19 CST Initiating ARP Ping Scan against 23 hosts [1 port/host] at 14:19 The ARP Ping Scan took 0.51s to scan 23 total hosts. DNS resolution of 12 IPs took 0.29s. Initiating SYN Stealth Scan against 5 hosts [1680 ports/host] at 14:19 Discovered open port 25/tcp on 10.1.4.1 Discovered open port 3389/tcp on 10.1.4.1 Discovered open port 389/tcp on 10.1.4.1 Discovered open port 21/tcp on 10.1.4.1 Discovered open port 13/tcp on 10.1.4.1 Discovered open port 80/tcp on 10.1.4.11 Increasing send delay for 10.1.4.11 from 0 to 5 due to 11 out of 34 dropped probes since last increase. Discovered open port 3372/tcp on 10.1.4.1 Discovered open port 42/tcp on 10.1.4.1 SYN Stealth Scan Timing: About 10.47% done; ETC: 14:24 (0:04:16 remaining) Discovered open port 143/tcp on 10.1.4.1 Discovered open port 993/tcp on 10.1.4.1 Discovered open port 1025/tcp on 10.1.4.1 Discovered open port 445/tcp on 10.1.4.1 Discovered open port 995/tcp on 10.1.4.1 Increasing send delay for 10.1.4.11 from 5 to 10 due to max_successful_tryno increase to 4 Discovered open port 110/tcp on 10.1.4.1 Discovered open port 17/tcp on 10.1.4.1 Discovered open port 2008/tcp on 10.1.4.1 Discovered open port 7/tcp on 10.1.4.1 Discovered open port 9/tcp on 10.1.4.1 Discovered open port 19/tcp on 10.1.4.1 Increasing send delay for 10.1.4.11 from 10 to 20 due to max_successful_tryno increase to 5 Increasing send delay for 10.1.4.11 from 20 to 40 due to max_successful_tryno increase to 6 Discovered open port 6000/tcp on 10.1.4.1 Discovered open port 135/tcp on 10.1.4.1 Discovered open port 1029/tcp on 10.1.4.1 Discovered open port 465/tcp on 10.1.4.1 Discovered open port 139/tcp on 10.1.4.1 Completed SYN Stealth Scan against 10.1.4.1 in 249.12s (4 hosts left) Completed SYN Stealth Scan against 10.1.4.6 in 257.58s (3 hosts left) Completed SYN Stealth Scan against 10.1.4.9 in 258.51s (2 hosts left) Completed SYN Stealth Scan against 10.1.4.11 in 274.71s (1 host left) Discovered open port 139/tcp on 10.1.4.10 The SYN Stealth Scan took 280.28s to scan 8400 total ports. Host 10.1.4.1 appears to be up ... good. Interesting ports on 10.1.4.1: Not shown: 1657 closed ports PORT STATE SERVICE 7/tcp open echo 9/tcp open discard 13/tcp open daytime 17/tcp open qotd 19/tcp open chargen 21/tcp open ftp 25/tcp open smtp 42/tcp open nameserver 110/tcp open pop3 135/tcp open msrpc 139/tcp open netbios-ssn 143/tcp open imap 389/tcp open ldap 445/tcp open microsoft-ds 465/tcp open smtps 993/tcp open imaps 995/tcp open pop3s 1025/tcp open NFS-or-IIS 1029/tcp open ms-lsa 2008/tcp open conf 3372/tcp open msdtc 3389/tcp open ms-term-serv 6000/tcp open X11 MAC Address: 00:0B:CD:B9:EE:A8 (Compaq (HP)) Host 10.1.4.6 appears to be up ... good. All 1680 scanned ports on 10.1.4.6 are filtered MAC Address: 00:1E:65:F0:48:B8 (Unknown) Host 10.1.4.9 appears to be up ... good. All 1680 scanned ports on 10.1.4.9 are filtered MAC Address: 00:13:CE:FA:45:4A (Intel Corporate) Host 10.1.4.10 appears to be up ... good. Interesting ports on 10.1.4.10: Not shown: 1678 filtered ports PORT STATE SERVICE 139/tcp open netbios-ssn 445/tcp closed microsoft-ds MAC Address: 00:22:FA:DB:C3:A8 (Unknown) Host 10.1.4.11 appears to be up ... good. Interesting ports on 10.1.4.11: Not shown: 1673 closed ports PORT STATE SERVICE 80/tcp open http 170/tcp filtered print-srv 179/tcp filtered bgp 218/tcp filtered mpp 736/tcp filtered unknown 1720/tcp filtered H.323/Q.931 5302/tcp filtered hacl-cfg MAC Address: 00:1E:65:F0:78:CA (Unknown) DNS resolution of 1 IPs took 4.01s. Initiating SYN Stealth Scan against 7 hosts [1680 ports/host] at 14:24 Increasing send delay for 10.1.4.20 from 0 to 5 due to 11 out of 11 dropped probes since last increase. Increasing send delay for 10.1.4.20 from 5 to 10 due to 11 out of 11 dropped probes since last increase. SYN Stealth Scan Timing: About 2.66% done; ETC: 14:43 (0:18:18 remaining) Increasing send delay for 10.1.4.20 from 10 to 20 due to 11 out of 36 dropped probes since last increase. SYN Stealth Scan Timing: About 7.69% done; ETC: 14:39 (0:13:50 remaining) 略。。。。。。 |
可以清楚地看到,端口扫描采用多种方式对网络中主机的TCP活动端口进行了全面的扫描,由于扫描的主机数太多(125台),上面仅仅给出了2台主机的TCP端口情况,也就是主机10.1.4.1和10.1.4.11,并且,主机10.1.4.1打开的端口非常多,网络服务也相对比较丰富,并且从IP地址的构成来看,该主机极有可能是网关(一般网关的IP地址设定为X.X.X.1),于是就可以锁定这台主机进行后续的扫描。
(5)扫描实施第三步:主机操作系统识别
通常一个入侵者可能对某个操作系统的漏洞很熟悉,能很轻易地进入此操作系统的机器。一个常见的选项是TCP/IP上的指纹,带有"-O"选项决定远程操作系统的类型。这可以和一个端口扫描结合使用,但不能和ping扫描结合使用。nmap通过向主机发送不同类型的探测信号,缩小查找的操作系统的范围。如下面的扫描结果所示:
[root@localhost ~]# nmap -O 10.1.4.1 Starting Nmap 5.0 ( http://www.insecure.org/nmap/ ) at 2009-12-17 15:28 CST Interesting ports on 10.1.4.1: Not shown: 1657 closed ports PORT STATE SERVICE 7/tcp open echo 9/tcp open discard 13/tcp open daytime 17/tcp open qotd 19/tcp open chargen 21/tcp open ftp 25/tcp open smtp 42/tcp open nameserver 110/tcp open pop3 135/tcp open msrpc 139/tcp open netbios-ssn 143/tcp open imap 389/tcp open ldap 445/tcp open microsoft-ds 465/tcp open smtps 993/tcp open imaps 995/tcp open pop3s 1025/tcp open NFS-or-IIS 1029/tcp open ms-lsa 2008/tcp open conf 3372/tcp open msdtc 3389/tcp open ms-term-serv 6000/tcp open X11 MAC Address: 00:0B:CD:B9:EE:A8 (Compaq (HP)) Device type: general purpose Running: Microsoft Windows 95/98/ME|NT/2K/XP OS details: Microsoft Windows Millennium Edition (Me), Windows 2000 Professional or Advanced Server, or Windows XP Nmap finished: 1 IP address (1 host up) scanned in 68.749 seconds |
通过上述扫描结果可以看到,10.1.4.1这台机器运行的是Windows系列的操作系统,并且提供了一些比较常用的网络服务。
(6)扫描实施第四步:扫描总结归纳
通过上述3步的扫描实施,可以逐步总结得出了如下几点结论和经验:
◆端口扫描的步骤是先发现活动主机,然后发现活动主机的活动端口,从而确定需要重点关注或者需要供给的主机,一般这些主机是服务端口开得多的主机;再然后对重点关注的主机实行操作系统扫描,从而确定操作系统类型,以便从操作系统层面来寻找突破口;一般情况下,如果是Windows操作系统的话,那么就有比较大的攻击或者是安全维护的空间。
◆除了上述几个常用的扫描选项外,在扫描过程中还需要综合采用其他-T之类的选项,以保证扫描不被对方发现,否则对于具有丰富管理经验的管理员来说,很容易发现这种扫描行为,引起反追踪甚至是报复性的攻击等。当然,对于内网的网管性的维护工作来说,就没有这个风险。
◆另外,在使用nmap进行扫描后,对于它提供的开放端口的号及其对应的服务名进行比较对照,以更好地确认端口及其对应的开放服务,从而为下一步的针对性的攻击或者是网络管理作好准备。 #p#
5、 漏洞扫描
nmap虽说不错,能够轻松地实现TCP扫描、UDP扫描、操作系统指纹扫描、隐蔽扫描等方式,也能得到活动的主机及其端口,还能通确认该端口对应的网络或者系统服务,从而通过其他方式来获取这些服务的漏洞发起攻击或者是进行网络安全管理。那么,有没有一种比以nmap为代表的端口扫描技术更加具有针对性的漏洞发现技术呢?
(1)漏洞扫描基本原理
漏洞扫描就是对计算机系统或者其它网络设备进行安全相关的检测,以找出安全隐患和可被黑客利用的漏洞。显然,漏洞扫描软件是把双刃剑,黑客利用它入侵系统,而系统管理员掌握它以后又可以有效的防范黑客入侵。因此,漏洞扫描是保证系统和网络安全必不可少的手段,必须仔细研究利用。
漏洞扫描通常采用两种策略,第一种是被动式策略,第二种是主动式策略。所谓被动式策略就是基于主机之上,对系统中不合适的设置,脆弱的口令以及其他同安全规则抵触的对象进行检查;而主动式策略是基于网络的,它通过执行一些脚本文件模拟对系统进行攻击的行为并记录系统的反应,从而发现其中的漏洞。利用被动式策略扫描称为系统安全扫描,利用主动式策略扫描称为网络安全扫描。
这里进一步介绍漏洞扫描的四种检测技术:
◆基于应用的检测技术,它采用被动的,非破坏性的办法检查应用软件包的设置,发现安全漏洞。
◆基于主机的检测技术,它采用被动的,非破坏性的办法对系统进行检测。通常,它涉及到系统的内核,文件的属性,操作系统的补丁等问题。这种技术还包括口令解密,把一些简单的口令剔除。因此,这种技术可以非常准确的定位系统的问题,发现系统的漏洞。它的缺点是与平台相关,升级复杂。
◆基于目标的漏洞检测技术,它采用被动的,非破坏性的办法检查系统属性和文件属性,如数据库,注册号等。通过消息文摘算法,对文件的加密数进行检验。这种技术的实现是运行在一个闭环上,不断地处理文件,系统目标,系统目标属性,然后产生检验数,把这些检验数同原来的检验数相比较。一旦发现改变就通知管理员。
◆基于网络的检测技术,它采用积极的,非破坏性的办法来检验系统是否有可能被攻击崩溃。它利用了一系列的脚本模拟对系统进行攻击的行为,然后对结果进行分析。它还针对已知的网络漏洞进行检验。网络检测技术常被用来进行穿透实验和安全审记。这种技术可以发现一系列平台的漏洞,也容易安装。但是,它可能会影响网络的性能。
优秀的安全扫描产品应该是综合了以上4种方法的优点,最大限度的增强漏洞识别的精度。
(2)网络漏洞扫描器的构成
网络漏洞扫描器的一种扫描原理和工作原理为:通过远程检测目标主机TCP/IP不同端口的服务,记录目标给予的回答。通过这种方法,可以搜集到很多目标主机的各种信息(例如:是否能用匿名登陆,是否有可写的FTP目录,是否能用Telnet,httpd是否是用root在运行)。在获得目标主机TCP/IP端口和其对应的网络访问服务的相关信息后,与网络漏洞扫描系统提供的漏洞库进行匹配,如果满足匹配条件,则视为漏洞存在。此外,通过模拟黑客的进攻手法,对目标主机系统进行攻击性的安全漏洞扫描,如测试弱势口令等,也是扫描模块的实现方法之一。如果模拟攻击成功,则视为漏洞存在。在匹配原理上,该网络漏洞扫描器采用的是基于规则的匹配技术,即根据安全专家对网络系统安全漏洞、黑客攻击案例的分析和系统管理员关于网络系统安全配置的实际经验,形成一套标准的系统漏洞库,然后再在此基础之上构成相应的匹配规则,由程序自动进行系统漏洞扫描的分析工作。所谓基于规则是基于一套由专家经验事先定义的规则的匹配系统。例如,在对TCP 80端口的扫描中,如果/cgi-bin/phf/cgi-bin/Count.cgi,根据专家经验以及CGI程序的共享性和标准化,可以推知该WWW服务存在两个CGI漏洞。同时应当说明的是,基于规则的匹配系统也有其局限性,因为作为这类系统的基础的推理规则一般都是根据已知的安全漏洞进行安排和策划的,而对网络系统的很多危险的威胁是来自未知的安全漏洞,这一点和PC杀毒很相似。
基于网络的漏洞扫描器,一般有以下几个方面组成:
◆漏洞数据库模块:漏洞数据库包含了各种操作系统的各种漏洞信息,以及如何检测漏洞的指令。由于新的漏洞会不断出现,该数据库需要经常更新,以便能够检测到新发现的漏洞。
◆用户配置控制台模块:用户配置控制台与安全管理员进行交互,用来设置要扫描的目标系统,以及扫描哪些漏洞。
◆扫描引擎模块:扫描引擎是扫描器的主要部件。根据用户配置控制台部分的相关设置,扫描引擎组装好相应的数据包,发送到目标系统,将接收到的目标系统的应答数据包,与漏洞数据库中的漏洞特征进行比较,来判断所选择的漏洞是否存在。
◆当前活动的扫描知识库模块:通过查看内存中的配置信息,该模块监控当前活动的扫描,将要扫描的漏洞的相关信息提供给扫描引擎,同时还接收扫描引擎返回的扫描结果。
◆结果存储器和报告生成工具:报告生成工具,利用当前活动扫描知识库中存储的扫描结果,生成扫描报告。扫描报告将告诉用户配置控制台设置了哪些选项,根据这些设置,扫描结束后,在哪些目标系统上发现了哪些漏洞。
(3)基于B/S架构的网络漏洞扫描器
下面为这种网络漏洞扫描器的一种结构:
图1 基于B/S架构的网络漏洞扫描器结构 |
这种漏洞扫描器是基于浏览器/服务器(B/S)结构。这种网络扫描器的工作原理是:当用户通过控制平台发出了扫描命令之后,控制平台即向扫描模块发出相应的扫描请求,扫描模块在接到请求之后立即启动相应的子功能模块,对被扫描主机进行扫描。通过对从被扫描主机返回的信息进行分析判断,扫描模块将扫描结果返回给控制平台,再由控制平台最终呈现给用户。
(4)基于C/S架构的网络漏洞扫描器
另一种结构的扫描器是采用插件程序结构,客户/服务器模式。插件是由脚本语言编写的子程序,扫描程序可以通过调用它来执行漏洞扫描,检测出系统中存在的一个或多个漏洞。添加新的插件就可以使漏洞扫描软件增加新的功能,扫描出更多的漏洞。插件编写规范化后,甚至用户自己都可以用perl、c或自行设计的脚本语言编写的插件来扩充漏洞扫描软件的功能。这种技术使漏洞扫描软件的升级维护变得相对简单,而专用脚本语言的使用也简化了编写新插件的编程工作,使漏洞扫描软件具有强的扩展性。可以针对某一具体漏洞,编写对应的外部测试脚本。通过调用服务检测插件,检测目标主机TCP/IP不同端口的服务,并将结果保存在一信息库中,然后调用相应的插件程序,向远程主机发送构造好的数据,并也将检测结果保存于信息库,以提供给其它的脚本运行所需的必要信息,这样可提高检测效率。如,在针对某FTP服务的攻击中,可以首先查看服务检测插件的返回结果,只有在确认目标主机服务器开启FTP服务时,对应的针对某FTP服务的攻击脚本才能被执行。采用这种插件结构的扫描器,可以让任何人构造自己的攻击测试脚本,而不用去了解太多扫描器的原理。这种扫描器也可以用做模拟黑客攻击的平台。采用这种结构的扫描器具有很强的生命力,如著名的Nessus 就是采用这种结构。这种网络漏洞扫描器的结构为:
图2 基于C/S架构的网络漏洞扫描器结构 |
其中客户端主要设置服务器端的扫描参数,及收集扫描信息。具体扫描工作由服务器来完成。 #p#
6、快速安装Nessus
(1)Nessus简介
Nessus是一个功能强大而又易于使用的远程安全扫描器,它不仅免费而且更新极快。安全扫描器的功能是对指定网络进行安全检查,找出该网络是否存在有导致对手攻击的安全漏洞。该系统被设计为client/sever模式,服务器端负责进行安全检查,客户端用来配置管理服务器端。在服务端还采用了plug-in的体系,允许用户加入执行特定功能的插件,这插件可以进行更快速和更复杂的安全检查。在Nessus中还采用了一个共享的信息接口,称之知识库,其中保存了前面进行检查的结果。检查的结果可以HTML、纯文本、LaTeX(一种文本文件格式)等几种格式保存。
在未来的新版本中,Nessus将会支持快速更快的安全检查,而且这种检查将会占用更少的带宽,其中可能会用到集群的技术以提高系统的运行效率。
Nessus的优点在于:
◆其采用了基于多种安全漏洞的扫描,避免了扫描不完整的情况。
◆它是免费的,比起商业的安全扫描工具如ISS具有价格优势。
◆Nessus扩展性强、容易使用、功能强大,可以扫描出多种安全漏洞。
Nessus的安全检查完全是由plug-ins的插件完成的。在Nessus主页中不但详细介绍了各种插件的功能,还提供了解决问题的相关方案。有关plug-in的详细说明,请看http://cgi.nessus.org/plugins/dump.php3?viewby=family
除了这些插件外,Nessus还为用户提供了描述攻击类型的脚本语言,来进行附加的安全测试,这种语言称为Nessus攻击脚本语言(NSSL),用它来完成插件的编写。
在客户端,用户可以指定运行Nessus服务的机器、使用的端口扫描器及测试的内容及测试的IP地址范围。Nessus本身是工作在多线程基础上的,所以用户还可以设置系统同时工作的线程数。这样用户在远端就可以设置Nessus的工作配置了。安全检测完成后,服务端将检测结果返回到客户端,客户端生成直观的报告。在这个过程当中,由于服务器向客户端传送的内容是系统的安全弱点,为了防止通信内容受到监听,其传输过程还可以选择加密。
(2)安装和启动Nessus服务器端
用户可以到http://www.nessus.org/download.html去下载nessus服务器的最新版本。目前其最新版本为:Nessus-4.2.0-es5.i386.rpmNessus,使用如下的命令对其进行安装即可:
[root@localhost tmp]# rpm -ivh Nessus-4.2.0-es5.i386.rpm Preparing... ########################################### [100%] 1:Nessus ########################################### [100%] nessusd (Nessus) 4.2.0 [build K9080] for Linux (C) 1998 - 2009 Tenable Network Security, Inc. - Please run /opt/nessus//sbin/nessus-adduser to add a user - Register your Nessus scanner at http://www.nessus.org/register/ to obtain |
安装成功后,还需要添加用户来对其进行操作,步骤如下所示:
[root@localhost tmp]# /opt/nessus//sbin/nessus-adduser //添加用户 Login : root //设置密码 Login password : Login password (again) : Do you want this user to be a Nessus 'admin' user ? (can upload plugins, etc...) (y/n) [n]: y User rules ---------- nessusd has a rules system which allows you to restrict the hosts that root has the right to test. For instance, you may want him to be able to scan his own host only. Please see the nessus-adduser manual for the rules syntax Enter the rules for this user, and enter a BLANK LINE once you are done : (the user can have an empty rules set) Login : root Password : *********** This user will have 'admin' privileges within the Nessus server Rules : Is that ok ? (y/n) [y] y //添加成功 User added |
启动nessus非常简单,使用如下命令即可:
#/sbin/service nessusd start |
(3)安装Nessus客户端
nessus的客户端有两个版本,JAVA版本及C版本,JAVA版本的可以在多个平台中运行,C版本的支持Windows,有了这两个客户端的版本就可以在局域网的任何的一台机器上进行安全检查了。为了使用的简单起见,我们选择了一款Windows系统下的Nessus 4客户端版本进行安装和使用,也就是使用Windows客户端来控制运行于Linux下的Nessus服务器端来对局域网里面的机器进行漏洞扫描,这也是目前Nessus使用的非常流行的一种方式。具体的安装如同Windows下任何一款应用软件的安装方式相同,非常简单,这里不再赘述。 #p#
7、使用Nessus扫描
下面来看看使用nessus进行扫描的步骤以及效果,一般来说,使用Nessus进行扫描需要有如下几个步骤:
(1)设置服务器连接:如图3所示,首先需要设置Nessus客户端来连接Nessus服务器,也就是上面介绍中安装的服务器,在图3中,配置好相应的主机名和端口,以及登陆所需要使用的用户名和密码。
图3 设置服务器连接 |
(2)设置IP范围:如图4所示,设置为IP Range。当然,这里还有其他的选项可提供选择,包括图中所示的Single Host、Subnet等,可以根据实际情况来选择。
图4 设置扫描的IP范围 |
(3)点击scan now,开始对设定范围进行扫描:如图5所示。
图5 开始扫描 |
(4)扫描的整体效果:如图6所示,扫描给出了对172.31.12.188这台主机(Linux操作系统,RHEL 5.0版本)的扫描结果,可以很清晰看出操作系统的版本以及开放的端口,同时,也能够将开放的端口详细信息列出来。
图6 扫描的整体结果 |
(5)查看具体的漏洞信息:如图7所示,如果想查看具体的漏洞信息报告以及漏洞等级等详细信息时,可以点开图中所示的对应开放端口信息,并针对具体信息采取相应的措施来对该漏洞进行修补等操作。
图7 具体的漏洞信息 |
【51CTO.COM 独家特稿,转载请注明出处及作者!】