对于位于网络中的计算机系统来说,一个端口就是一个潜在的通信通道,也就是一个入侵通道。对目标计算机进行端口扫描,能得到许多有用的信息从而发现系统的安全漏洞。通过其可以使系统用户了解系统目前向外界提供了哪些服务,从而为系统用户管理网络提供了一种参考的手段。
从技术原理上来说,端口扫描向目标主机的 TCP/UDP 服务端口发送探测数据包,并记录目标主机的响应。通过分析响应来判断服务端口是打开还是关闭,就可以得知端口提供的服务或信息。端口扫描也可以通过捕获本 地主机或服务器的流入流出 IP 数据包来监视本地主机的运行情况,不仅能对接收到的数据进行分析,而且能够帮助用户发现目标主机的某些内在的弱点,而不会提供进入一个系统的详细步骤。一 般说来,端口扫描的目的通常是如下的一项或者多项:
- 发现开放端口:发现目标系统上开放的 TCP 或 UDP 端口;
- 了解主机操作系统信息:端口扫描可以通过操作系统的“指纹”来推测被扫描操作系统或者应用程序的版本等信息;
- 了解软件或者服务版本:软件或服务版本可以通过“标志获取”或者应用程序的指纹来识别获得;
- 发现脆弱的软件版本:识别软件和服务的缺陷,从而有助于发起针对漏洞的攻击。
端口扫描主要有经典的扫描器(全连接)以及所谓的 SYN(半连接)扫描器。此外还有间接扫描和秘密扫描等。TCP 扫描方式是通过与被扫描主机建立标准的 TCP 连接,因此这种方式最准确,很少漏报、误报,但是容易被目标主机察觉、记录。SYN 方式是通过与目标主机建立半打开连接,这样就不容易被目标主机记录,但是扫描结果会出现漏报,在网络状况不好的情况下这种漏报是严重的。
nmap 是一个网络探测和安全扫描程序,系统管理者和个人可以使用这个软件扫描大型的网络,获取那台主机正在运行以及提供什么服务等信息。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 名、主机地址是否是欺骗地址、以及其它一些东西。
在使用之前,我们需要下载该软件的源码包进行安装。目前,作者下载到的最新版本为: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 |
扫描实施第一步:发现活动主机
使用 nmap 扫描整个网络寻找目标,已确定目标机是否处于连通状态。通过使用“-sP”命令,进行 ping 扫描。缺省情况下,nmap 给每个扫描到的主机发送一个 ICMP echo 和一个 TCP ACK,主机对任何一种的响应都会被 nmap 得到,扫描速度非常快,在很短的时间内可以扫描一个很大的网络。该命令使用如下所示:
# nmap -sP 10.1.4.0/24 Nmap finished: 256 IP addresses (125 hosts up) scanned in 7.852 seconds |
通过该扫描,可以发现该公司网络中有 125 台主机是活跃的,也就是说有机可趁,下一步就是要进行更详细的扫描,来扫描这些主机到底有些什么活动端口。
扫描实施第二步:扫描端口扫描
通常情况下,当 nmap 的使用者确定了网络上运行的主机处于连通状态,下一步的工作就是进行端口扫描,端口扫描使用 -sT 参数。如下面结果如示:
# nmap -v -sT 10.1.4.0/24 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 MAC Address: 00:1E:65:F0:78:CA (Unknown) |
可以清楚地看到,端口扫描采用多种方式对网络中主机的 TCP 活动端口进行了全面的扫描,由于扫描的主机数太多(125 台),上面仅仅给出了 2 台主机的 TCP 端口情况,也就是主机 10.1.4.1 和 10.1.4.11,并且,主机 10.1.4.1 打开的端口非常多,网络服务也相对比较丰富,并且从 IP 地址的构成来看,该主机极有可能是网关(一般网关的 IP 地址设定为 X.X.X.1),我们于是就锁定了这台主机进行后续的扫描。
扫描实施第三步:主机操作系统识别
通常一个入侵者可能对某个操作系统的漏洞很熟悉,能很轻易地进入此操作系统的机器。一个常见的选项是 TCP/IP 上的指纹,带有"-O"选项决定远程操作系统的类型。这可以和一个端口扫描结合使用,但不能和 ping 扫描结合使用。nmap 通过向主机发送不同类型的探测信号,缩小查找的操作系统的范围。如下面的扫描结果所示:
# nmap -O 10.1.4.1 Interesting ports on 10.1.4.1: 。。。 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 系列的操作系统,并且提供了一些比较常用的网络服务。
扫描实施第四步:扫描总结归纳
通过上述 3 步的扫描实施,可以逐步总结得出了如下几点结论和经验:端口扫描的步骤是先发现活动主机,然后发现活动主机的活动端口,从而确定需要重点关注或者需要供给 的主机,一般这些主机是服务端口开得多的主机;再然后对重点关注的主机实行操作系统扫描,从而确定操作系统类型,以便从操作系统层面来寻找突破口;一般情 况下,如果是 Windows 操作系统的话,那么就有比较大的攻击或者是安全维护的空间。
除了上述几个常用的扫描选项外,在扫描过程中还需要综合采用其他 -T 之类的选项,以保证扫描不被对方发现,否则对于具有丰富管理经验的管理员来说,很容易发现这种扫描行为,引起反追踪甚至是报复性的攻击等。当然,对于内网的网管性的维护工作来说,就没有这个风险。
另外,通常 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 必须等待的时间。这个选项主要用于降低网络的负载。
漏洞扫描就是对计算机系统或者其它网络设备进行安全相关的检测,以找出安全隐患和可被黑客利用的漏洞。显然,漏洞扫描软件是把双刃剑,黑客利 用它入侵系统,而系统管理员掌握它以后又可以有效的防范黑客入侵。因此,漏洞扫描是保证系统和网络安全必不可少的手段,必须仔细研究利用。
漏洞扫描通常采用两种策略,第一种是被动式策略,第二种是主动式策略。所谓被动式策略就是基于主机之上,对系统中不合适的设置,脆弱的口令以 及其他同安全规则抵触的对象进行检查;而主动式策略是基于网络的,它通过执行一些脚本文件模拟对系统进行攻击的行为并记录系统的反应,从而发现其中的漏 洞。利用被动式策略扫描称为系统安全扫描,利用主动式策略扫描称为网络安全扫描。
Nessus 是一个功能强大而又易于使用的远程安全扫描器,它不仅免费而且更新极快。安全扫描器的功能是对指定网络进行安全检查,找出该网络是否存在有导致对手攻击的 安全漏洞。该系统被设计为 client/sever 模式,服务器端负责进行安全检查,客户端用来配置管理服务器端。在服务端还采用了 plugin 的体系,允许用户加入执行特定功能的插件,这插件可以进行更快速和更复杂的安全检查。在 Nessus 中还采用了一个共享的信息接口,称之知识库,其中保存了前面进行检查的结果。检查的结果可以 HTML、纯文本、LaTeX(一种文本文件格式)等几种格式保存。
Nessus 的优点在于:
- 其采用了基于多种安全漏洞的扫描,避免了扫描不完整的情况。
- 它是免费的,比起商业的安全扫描工具如 ISS 具有价格优势。
安装和启动 Nessus 服务器端
用户可以到 http://www.nessus.org/download.html 去下载 nessus 服务器的最新版本。目前其最新版本为:Nessus-4.2.0-es5.i386.rpmNessus,使用如下的命令对其进行安装即可:
# rpm -ivh Nessus-4.2.0-es5.i386.rpm |
安装成功后,还需要添加用户来对其进行操作,步骤如下所示:
# /opt/nessus//sbin/nessus-adduser |
// 添加用户
Login : root |
// 设置密码
Login password : Login password (again) : |
启动 nessus 非常简单,使用如下命令即可:
#/sbin/service nessusd start |
安装 Nessus 客户端
nessus 的客户端有两个版本,JAVA 版本及 C 版本,JAVA 版本的可以在多个平台中运行,C 版本的支持 Windows,有了这两个客户端的版本就可以在局域网的任何的一台机器上进行安全检查了。为了使用的简单起见,我们选择了一款 Windows 系统下的 Nessus 4 客户端版本进行安装和使用,也就是使用 Windows 客户端来控制运行于 Linux 下的 Nessus 服务器端来对局域网里面的机器进行漏洞扫描,这也是目前 Nessus 使用的非常流行的一种方式。具体的安装如同 Windows 下任何一款应用软件的安装方式相同,非常简单,这里不再赘述。
下面来看看使用 nessus 进行扫描的步骤以及效果,一般来说,使用 Nessus 进行扫描需要有如下 5 个步骤:
1)设置服务器连接:如图 1 所示,首先需要设置 Nessus 客户端来连接 Nessus 服务器,在图 1 中,配置好相应的主机名和端口,以及登陆所需要使用的用户名和密码。
图 1. 设置服务器连接
2)设置 IP 范围:如图 2 所示,设置为 IP Range。当然,这里还有其他的选项可提供选择,包括图中所示的 Single Host、Subnet 等,可以根据实际情况来选择。
图 2. 设置扫描的 IP 范围
3)点击 scan now,开始对设定范围进行扫描:如图 5 所示。
图 3. 开始扫描
查看大图。
4)扫描的整体效果:如图 4 所示,扫描给出了对 172.31.12.188 这台主机(Linux 操作系统,RHEL 5.0 版本)的扫描结果,可以很清晰看出操作系统的版本以及开放的端口,同时,也能够将开放的端口详细信息列出来。
图 4. 扫描的整体结果
查看大图。
5)查看具体的漏洞信息:如图 5 所示,如果想查看具体的漏洞信息报告以及漏洞等级等详细信息时,可以点开图中所示的对应开放端口信息,并针对具体信息采取相应的措施来对该漏洞进行修补等操作。
图 5. 具体的漏洞信息