随着Internet的迅猛发展,网络已无处不在,但是,它可能随时受到来自各方的攻击。了解哪些人正在访问资源、哪些人正在享受服务、哪些人正在发送大量垃圾等,对网络管理员来说是非常必要的。利用Solaris中较常见的网络安全分析工具Tcpdump、Nmap和IP Filter 、ethereal、gftp,可以使网络管理工作更加轻松。Etherea和 Tcpdump主要是截获通过本机网络接口的数据,用以分析。Nmap是强大的端口扫描工具,可扫描任何主机或网络。lsof可用来检查本机当前提供的服务及状态。IP Filter是开源的防火墙工具。这几个者各有所长,结合起来,就可以比较透彻地了解网络状况。
一、使用Tcpdump
Tcpdump能够截获当前所有通过本机网卡的数据包。它拥有灵活的过滤机制,可以确保得到想要的数据。由于Tcpdump只能收集通过本机的数据,因此它的应用受到了一些限制,大多应用在网关或服务器自我检测上。
1. 软件下载和安装:
Libpcap能 独立地 通过主机协议发送和接受数据,如同TCP-IP。这就意味着Libpcap不能阻止、过滤或操纵同一机器上的其他应用程序的通讯:它仅仅能简单地"监视"在网络上传输的数据包。所以,它不能提供类似网络流量控制、服务质量调度和个人防火墙之类的支持。
#wget http://mirrors.easynews.com/sunfreeware/i386/10/libpcap-0.8.3-sol10-intel-local.gz
#pkgadd -d libpcap-0.8.3-sol10-intel-local.pkg
使用Solaris pkg-get 工具安装gftp
pkg_get,由blastwave.org推出的,是一个用来自动获得www.sunfreeware.com网站上的软件包工具. 模拟了Debian linux上的"apt-get 工具” 。安装 CSW (Community SoftWare) 软件包非常方便。
#wget http://www.blastwave.org/pkg_get.pkg
#pkgadd -d pkg_get.pkg all
# pkg_get –i tcpdump
2 软件使用
例如,在作为网关的主机上,想知道本地网络中IP地址为192.168.0.2的主机现在与外界通信的情况,就可以使用如下命令:
tcpdump -i pcn0 src host 192.168.0.2 > 115.txt
如图1 。

图1 把tcpdump重定向到文件再进行分析
在默认情况下,Tcpdump会将数据输出到屏幕。如果数据量太大,可能根本看不清具体的内容,这时我们可以把它重定向到文件再进行分析。
把115.txt文件打开可以就可以清楚地了解刚才用户的一举一动:
首先到2911.net的SMTP服务器发送邮件:
06:08:03.434544 IP cjh.32899 > mail.2911.net.smtp: S 800489075:800489075(0) win 49640 <mss 1460,nop,wscale 0,nop,nop,sackOK>
06:08:03.454318 IP cjh.32899 > mail.2911.net.smtp: . ack 3379070854 win 50400
06:08:03.475770 IP cjh.32899 > mail.2911.net.smtp: . ack 31 win 50400
06:08:03.477207 IP cjh.32899 > mail.2911.net.smtp: P 0:18(18) ack 31 win 50400
06:08:03.497277 IP cjh.32899 > mail.2911.net.smtp: . ack 163 win 50400
然后访问了IT168的主页:
06:08:39.594065 IP cjh.32950 > gjjdial.bta.net.cn.domain: 20696+ AAAA? subject.it168.com. (35)
06:08:39.635189 IP cjh.32901 > 202.99.120.124.80: P 439:941(502) ack 621 win 50400
06:08:39.635867 IP cjh.32900 > 202.99.120.122.80: . ack 66554 win 50400
对于普通的网络分析,这些信息已经足够了。这就是Tcpdump的基本功能,其它高级功能都是在这一基础上的细化和增强。
例如,我只想知道192.168.0.2当前正在访问哪些Web站点,可以用下面这条命令:
./tcpdump -i pcn0 src host 192.168.0.5 and dst port 80
该命令的目的是截获所有由eth0进入、源地址(src)为192.168.0.2的主机(host),并且(and)目标(dst)端口(port)为80的数据包。显然,通过and或者not这些逻辑组合,就可以得到特定的数据。Tcpdump还可以监听不同的数据类型(如TCP、UDP),以用不同的网络范围(如Host主机、Net网络),甚至用Ether直接指定物理地址。
表1 Tcpdump常用命令行选项

用Tcpdump在网络中获取信息如此清晰,是不是有一种一览无余的感觉。正是因为Tcpdump功能过于强大,连个人隐私和敏感数据的保护都成了问题,所以通常只有root用户能够使用这一工具。
二、使用Nmap
1 nmap简介
Nmap设计的初衷是系统管理员可以方便地了解自己的网络运行情况,例如有多少台主机在运行、分别提供什么样的服务。因此,它扫描的速度非常快,尤其适合大型网络。在对网络进行扫描时,Nmap主要利用ICMP echo探测主机是否开启。凡是了解TCP/IP协议的都知道,对于一个TCP端口,无论是否使用防火墙进行过滤,该主机都会对该端口发出的请求做出一定响应。所以即使配置了严格的防火墙规则,nmap照样可以找到这些主机。
2 软件下载安装
#pkgadd -d pkg_get.pkg all
# pkg_get –i nmap
3 软件使用
探测一台主机是否在线用Nmap探测试试看,如图2 。

图2 nmap -sP 192.168.0.1
探测结果好像该主机还开着呢!这里,-sP指定使用Ping echo 进行扫描(Scan)。 利用这一特点,可以很快知道目的网络究竟有多少主机处于运行状态:
nmap -sP 192.168.0.1/24 //24表明目标是一个网络而非单个主机
既然已经知道了哪些主机还开着,就可以进一步探测这些主机的信息,如开启的端口、提供的服务及操作系统类型等。从上面扫描的结果可以知道,192.168.0.5这台机器正在运行。想要了解该主机的详细信息,可以执行:
nmap 192.168.0.5
稍后会显示如图3的内容:

图3 了解该主机的详细信息
由上可以断定,这是一台运行Windows操作系统的主机,因为它开启了80端口还提供了IIS网络服务等。这些信息如果被不怀好意的人得到,就可以采用对应的攻击办法。其实,强大的Nmap本身就可以依据TCP/IP的指纹特征猜测对方使用的操作系统。我们可以用-O来开启这一选项:
nmap -O 192.168.0.5
得到的结果是:
Starting nmap V. 2.54BETA22 ( www.insecure.org/nmap/ )
Interesting ports on www.somewhere.net (192.168.0.5):
(The 1536 ports scanned but not shown below are in state: closed)
Port State Service
80/tcp open http
135/tcp open loc-srv
139/tcp open netbios-ssn
443/tcp open https
1032/tcp open iad3
1433/tcp open ms-sql-s
Remote operating system guess: Microsoft NT 4.0 Server SP5 + 2047 Hotfixes
Nmap run completed -- 1 IP address (1 host up) scanned in 2 seconds
它猜测的远程主机类型是Microsoft NT 4.0 Server SP5 + 2047 Hotfixes,并且相当准确和详尽。 另外nmap既可在Shell下运行,也可以通过一个叫nmapfe的图形界面来运行,这个图形界面是基于Gtk库的。运行nmapfe(要运行所有功能需要超级用户权限): #nmapfe ,如图4 。

图4 nmapfe扫描程序
nmapfe支持种类繁多的扫描技术,例如,TCP connect()扫描是最基本的TCP扫描方式;TCP SYN扫描通常称为半开扫描;UDP扫描目标系统,提供UDP服务的端口;系统识别扫描需要超级用户权限;ping扫描是隐蔽扫描;还有Ident扫描(Ident Scanning)等。 从扫描技术看,nmap是众多端口扫描器中的极品。此外,它还提供了一些高级的特征,例如,高速、秘密、系统指纹特征识别、诱饵扫描、碎片扫描等。
三、使用lsof
1 lsof简介
使用 lsof,您可以检查打开的文件,并根据需要在卸载之前中止相应的进程。同样地,如果您发现了一个未知的文件,那么可以找出到底是哪个应用程序打开了这个文件。在 UNIX 环境中,文件无处不在,这便产生了一句格言:“任何事物都是文件”。通过文件不仅仅可以访问常规数据,通常还可以访问网络连接和硬件。在有些情况下,当您使用 ls 请求目录清单时,将出现相应的条目。在其他情况下,如传输控制协议 (TCP) 和用户数据报协议 (UDP) 套接字,不存在相应的目录清单。但是在后台为该应用程序分配了一个文件描述符,无论这个文件的本质如何,该文件描述符为应用程序与基础操作系统之间的交互提供了通用接口。
因为应用程序打开文件的描述符列表提供了大量关于这个应用程序本身的信息,所以能够查看这个列表将是很有帮助的。完成这项任务的实用程序称为 lsof,它对应于“list open files”(列出打开的文件)。几乎在每个 UNIX 版本中都有这个实用程序。
2 lsof下载安装
#wget ftp://ftp.sunfreeware.com/pub/freeware/intel/10/lsof-4.77-sol10-x86-local.gz
#gunzip lsof-4.77-sol10-x86-local.gz
#pkgadd -d lsof-4.77-sol10-x86-local

图5 是安装成功界面
3 lsof的使用
只需输入 lsof 就可以生成大量的信息,如图6 所示。因为 lsof 需要访问核心内存和各种文件,所以必须以 root 用户的身份运行它才能够充分地发挥其功能。

每行显示一个打开的文件,除非另外指定,否则将显示所有进程打开的所有文件。Command、PID 和 User 列分别表示进程的名称、进程标识符 (PID) 和所有者名称。Device、SIZE/OFF、Node 和 Name 列涉及到文件本身的信息,分别表示指定磁盘的名称、文件的大小、索引节点(文件在磁盘上的标识)和该文件的确切名称。根据 UNIX 版本的不同,可能将文件的大小报告为应用程序在文件中进行读取的当前位置(偏移量)。图6来自一台可以报告该信息的 Sun Solaris 10 计算机,而 Linux 没有这个功能。
查找网络连接
网络连接也是文件,这意味着可以使用 lsof 获得关于它们的信息。假设您已经知道 PID,但是有时候并非如此。如果您只知道相应的端口,那么可以使用 -i 参数利用套接字信息进行搜索。
# lsof -i :22
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
ssh 605 root 5u IPv4 0x300010ea640 0t0 TCP *:ssh (LISTEN)
搜索活动的连接
# lsof -i @192.168.1.10
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 1934 root 6u IPv6 0x300046d21c0 0t1303608 TCP sun:ssh->linux:40379
(ESTABLISHED)
sshd 1937 root 4u IPv6 0x300046d21c0 0t1303608 TCP sun:ssh->linux:40379
(ESTABLISHED)
在这个示例中,sun 和 linux 之间有两个 IPv6 连接。对其进行更仔细的研究可以看出,这些连接来自于两个不同的进程,但它们却是相同的,这是因为两台主机是相同的,并且端口也是相同的(ssh 和 40379)。这是由于进入主进程的连接分叉出一个处理程序,并将该套接字传递给它。您还可以看到,名为 sun 的计算机正在使用端口 22 (ssh),而 linux 具有端口 40379。这表示,sun 是该连接的接收者,因为它关联于该服务的已知端口。40379 是源或临时端口,并且仅对这个连接有意义。
以上这些表明,利用网络分析工具了解网络的状况非常简单,几乎不费什么力气就可以获取很多有用的数据。
|