发信人: Hopper()
整理人: hahalee(2000-02-28 20:03:57), 站内信件
|
http://www.sina.com.cn 2000年1月18日 13:28 王波
安全工具
虽然只使用FreeBSD基本系统提供的功能,就能将计算机系统设置为具有非常 高的安全性的系统。然而网络上也存在各种用于增强或检查系统安全性的软件工 具,有些工具是标准程序的更安全替代品,增强了系统安全性,有些是对系统或 网络进行监视和检查的工具。使用这些工具,毫无疑问会进一步增强系统的安全 性。FreeBSD的Packages Collection或Ports Collection通常将这些工具放在se curity子类中。
系统工具软件
虽然FreeBSD系统本身提供了对访问的认证、控制和记录,然而由于在Unix系 统中,服务程序基本上是独立的,使用标准的安全控制方式的服务程序能从Free BSD的认证控制机制中获益,但是有些服务程序并没有使用这些安全认证方式。对 于独立进行认证控制的软件,除了使用其本身的控制能力之外,还有一些独立的 软件具备为其他程序服务的控制访问功能。
还有一些系统工具,能用于自动检查系统,帮助管理员发现系统中存在的问 题,这些软件也是非常有用的工具。此外,还有一些工具软件属于系统工具,但 对于增进系统安全也有很大意义,例如sudo,能在一定程度上增加root口令的安 全性。
TcpWrapper
tcp_wrapper对于多种服务器软件是非常有用的访问控制工具,它能以统一的 方式保护各种不同服务器。对于没有受防火墙保护的独立主机系统,tcpwrapper 的保护更为重要。因为配置了tcp_wrapper之后,任何向inetd发起的连接首先是 连接到tcp_wrapper提供的tcpd上之后,再连接到具体的服务进程上,这样tcpd就 有机会查看远程系统是否被允许访问,并能将连接的情况通过syslog记录下来, 包括请求的种类,时间和连接的来源地址。
这个程序事实上代替了系统提供的守护进程,来轻松和高效的监控外部网络 与服务器的连接。由于它提供了详细的日志记录,也是用于抓住入侵者,并提供 可靠的证据的一种方法。tcpwrapper的思想与代理型防火墙的思路是相同的,都 是通过替换正常服务器的做法来完成控制任务。
当使用Packages Collection安装了tcpwrapper之后,它的守护进程tcpd就被 安装到了/usr/local/libexec目录下,然后就能使用tcpd来代替原有的守护进程 提供网络服务了。
FreeeBSD 3.2-RELEASE之后,tcp_wrapper进入了FreeBSD的基本系统中,而 不再需要额外安装。
有几种不同的使用tcpd的办法,最基本的办法是通过更改inetd.conf来启动 tcpd。例如要想让tcpd来保护 fingerd,那么就需要将inetd.conf中对应finger d的设置更改为tcpd:
finger stream tcp nowait/3/10 nobody /usr/local/libexec/tcpd finge rd -s
tcpd能在标准的系统文件目录中查找正确的守护进程以提供服务,如果进程 不在标准的目录路径下,就需要在最后一列中指定所要执行文件的全路径,如/u sr/libexec/fingerd。此后,对finger端口的访问,将被记录进系统的日志文件 ,具体为syslog.conf中对auth指定的记录文件,例如下面的syslog设置将tcpd的 信息发送到/var/log/auth.log 文件中(需要保证auth.log文件已存在)。
auth.* /var/log/auth.log
tcpd使用/usr/local/etc/目录下的hosts.allow和hosts.deny文件来控制对 服务器的访问,访问控制是基于IP 地址和域名的。以下为一个hosts.allow控制 文件的例子。可以看出设置文件比较简单易懂,tcpwrapper也提供了一个程序tc pdchk,来检查用户更改过的设置文件是否正确。
ALL: domain.com
telnet: 192.168.3.0/255.255.255.0 EXCEPT 192.168.3.10
此外有着相似功能,但用于替换inetd的软件为xinetd,它能用于代替原有的 inetd来启动各种服务程序,但提供了更详细的日志记录。
系统安全检查工具
Internet上针对每个系统均报告了大量的安全相关的问题,如果将这些已知 的安全问题有效的组织起来,使用程序对系统自动进行检查,就能极大的帮助网 络管理员查找现有的问题,使得系统更为安全。网络上存在多种这类的工具,如 Satan、cops,就用于这个目的。然而由于它们的强大功能,这些工具也能被企图 入侵他人系统的使用者利用,因此为了避免入侵者,系统管理员应该尽早使用这 些软件,以起到预防作用。
cops是一个由系统管理员运行,检查系统内部设置的程序。它针对已知的Un ix存在问题进行检查,如检查系统中是否存在没有口令的帐户,是否有非法SetU ID程序,以及是否存在Internet上已经报告过的系统漏洞,是否存在有问题的软 件等等。系统管理员能使用cops来检查系统的配置有无问题。
Satan则与cops不同,Satan是从系统外部进行检查系统是否存在安全问题的 程序,它能对网络存在的脆弱性自动进行搜索、分析并提供安全报告。这种从外 部分析系统的软件一般称为扫描器,由于Satan功能强大并提供了可扩展的框架, 因此在Internet上十分流行。它的另一个特点就是它通过Web浏览器工作,使用者 只需指明要搜索的主机以及搜索深度和相近规则的级别,Satan就能自动收集尽可 能多的目标信息。
由于Santa是一个安全工具,因此它对扫描目标计算机并没有刻意隐藏,这样 就在目标计算机的系统日志中留下了大量的扫描连接记录,尤其是当目标计算机 使用了tcpwrapper的时候。这些日志能用于标识是否遭到扫描攻击。一些更隐蔽 的软件工具能通过不进行完全连接等方式隐藏扫描记录,要发现它们就更为困难 ,因而对系统安全更为危险。
加密数据传输
一般情况下,用户需要从客户机上访问服务器,数据是以透明的方式通过网 络传输的,这样数据包经过的网络中的计算机都有可能截取传送的信息。由于这 个问题来源于低层网络的结构,只能通过协议的加密来防止信息泄露。然而当前 大部分网络协议并不支持加密传送,因此使用窥探的方式获取网络上的信息,虽 然是一种被动的方式,却是对网络安全的重要威胁。
Tcpdump
任何事情都具有两面性,事实上能够获得网络上传输的数据的工具对于维护 网络运行也非常重要,网络需要这些工具软件来帮助分析网络状态、解决各种网 络故障,它们是网络工程师的好帮手。在市场上销售的有好几种专用的网络分析 设备,来实现截获数据并进行分析的目的。虽然这些硬件实现的设备虽然功能强 大,但价格昂贵,而使用软件通过标准计算机的网络接口来实现这种功能,相对 来讲对于一般使用者还是可以承受的。
tcpdump就是一种免费的网络分析工具,尤其其提供了源代码,公开了接口, 因此具备很强的可扩展性,对于网络维护和入侵者都是非常有用的工具。tcpdum p存在于基本的FreeBSD系统中,由于它需要将网络界面设置为混杂模式,普通用 户不能正常执行,但具备root权限的用户可以直接执行它来获取网络上的信息。 因此系统中存在网络分析工具主要不是对本机安全的威胁,而是对网络上的其他 计算机的安全存在威胁。
普通情况下,直接启动tcpdump将监视第一个网络界面上所有流过的数据包。
bash-2.02# tcpdump
tcpdump: listening on fxp0
11:58:47.873028 202.102.245.40.netbios-ns > 202.102.245.127.netbios-ns : udp 50
11:58:47.974331 0:10:7b:8:3a:56 > 1:80:c2:0:0:0 802.1d ui/C len=43
0000 0000 0080 0000 1007 cf08 0900 0000
0e80 0000 902b 4695 0980 8701 0014 0002
000f 0000 902b 4695 0008 00
11:58:48.373134 0:0:e8:5b:6d:85 > Broadcast sap e0 ui/C len=97
ffff 0060 0004 ffff ffff ffff ffff ffff
0452 ffff ffff 0000 e85b 6d85 4008 0002
0640 4d41 5354 4552 5f57 4542 0000 0000
0000 00
^C
tcpdump支持相当多的不同参数,如使用-i参数指定tcpdump监听的网络界面 ,这在计算机具有多个网络界面时非常有用,使用-c参数指定要监听的数据包数 量,使用-w参数指定将监听到的数据包写入文件中保存,等等。
然而更复杂的tcpdump参数是用于过滤目的,这是因为网络中流量很大,如果 不加分辨将所有的数据包都截留下来,数据量太大,反而不容易发现需要的数据 包。使用这些参数定义的过滤规则可以截留特定的数据包,以缩小目标,才能更 好的分析网络中存在的问题。tcpdump使用参数指定要监视数据包的类型、地址、 端口等,根据具体的网络问题,充分利用这些过滤规则就能达到迅速定位故障的 目的。请使用man tcpdump查看这些过滤规则的具体用法。
显然为了安全起见,不用作网络管理用途的计算机上不应该运行这一类的网 络分析软件,为了屏蔽它们,可以屏蔽内核中的bpfilter伪设备。一般情况下网 络硬件和TCP/IP堆栈不支持接收或发送与本计算机无关的数据包,为了接收这些 数据包,就必须使用网卡的混杂模式,并绕过标准的TCP/IP堆栈才行。在FreeBS D下,这就需要内核支持伪设备bpfilter。因此,在内核中取消bpfilter支持,就 能屏蔽tcpdump之类的网络分析工具。
并且当网卡被设置为混杂模式时,系统会在控制台和日志文件中留下记录, 提醒管理员留意这台系统是否被用作攻击同网络的其他计算机的跳板。
May 15 16:27:20 host1 /kernel: fxp0: promiscuous mode enabled
虽然网络分析工具能将网络中传送的数据记录下来,但是网络中的数据流量 相当大,如何对这些数据进行分析、分类统计、发现并报告错误却是更关键的问 题。网络中的数据包属于不同的协议,而不同协议数据包的格式也不同。因此对 捕获的数据进行解码,将包中的信息尽可能的展示出来,对于协议分析工具来讲 更为重要。昂贵的商业分析工具的优势就在于它们能支持很多种类的应用层协议 ,而不仅仅只支持tcp、udp等低层协议。
从上面tcpdump的输出可以看出,tcpdump对截获的数据并没有进行彻底解码 ,数据包内的大部分内容是使用十六进制的形式直接打印输出的。显然这不利于 分析网络故障,通常的解决办法是先使用带-w参数的tcpdump 截获数据并保存到 文件中,然后再使用其他程序进行解码分析。当然也应该定义过滤规则,以避免 捕获的数据包填满整个硬盘。FreeBSD提供的一个有效的解码程序为tcpshow,它 可以通过Packages Collection来安装。
# pkg_add /cdrom/packages/security/tcpshow*
# tcpdump -c 3 -w tcpdump.out
tcpdump: listening on fxp0
# tcpshow < tcpdump.out
---------------------------------------------------------------------- -----
Packet 1
TIME: 12:00:59.984829
LINK: 00:10:7B:08:3A:56 -> 01:80:C2:00:00:00 type=0026
<*** No decode support for encapsulated protocol ***>
---------------------------------------------------------------------- -----
Packet 2
TIME: 12:01:01.074513 (1.089684)
LINK: 00:A0:C9:AB:3C:DF -> FF:FF:FF:FF:FF:FF type=ARP
ARP: htype=Ethernet ptype=IP hlen=6 plen=4 op=request
sender-MAC-addr=00:A0:C9:AB:3C:DF sender-IP-address=202.102.245.3
target-MAC-addr=00:00:00:00:00:00 target-IP-address=202.102.245.3
---------------------------------------------------------------------- -----
Packet 3
TIME: 12:01:01.985023 (0.910510)
LINK: 00:10:7B:08:3A:56 -> 01:80:C2:00:00:00 type=0026
<*** No decode support for encapsulated protocol ***>
tcpshow能以不同方式对数据包进行解码,并以不同的方式显示解码数据,使 用者可以根据其手册来选择最合适的参数对截获的数据包进行分析。从上面的例 子中可以看出,tcpshow支持的协议也并不丰富,对于它不支持的协议就无法进行 解码。
除了tcpdump之外,FreeBSD的Packages Collecion中还提供了Ethereal 和S niffit两个网络分析工具,以及其他一些基于网络分析方式的安全工具。其中Et hereal运行在X Window 下,具有不错的图形界面,Sniffit使用字符窗口形式, 同样也易于操作。然而由于tcpdump对过滤规则的支持能力更强大,因此系统管理 员仍然更喜欢使用它。
对于有经验的网络管理员,使用这些网络分析工具不但能用来了解网络到底 是如何运行的,故障出现在何处,还能进行有效的统计工作,如那种协议产生的 通信量占主要地位,那个主机最繁忙,网络瓶颈位于何处等等问题。因此网络分 析工具是用于网络管理的宝贵系统工具。
为了防止数据被滥用的网络分析工具截获,关键还是要在网络的物理结构上 解决。常用的方法是使用交换机或网桥将信任网络和不信任网络分隔开,可以防 止外部网段窃听内部数据传输,但仍然不能解决内部网络与外部网络相互通信时 的数据安全问题。
如果没有足够的经费将网络上的共享集线器升级为以太网交换机,可以使用 FreeBSD系统执行网桥任务。这需要使用option BRIDGE编译选项重新定制内核, 此后使用bridge命令启动网桥功能。
ssh
由于网络上的数据传输是不安全,因此出现了S/key等方式来保护口令的安全 。然而这些认证系统只是保证了口令等特别敏感信息的安全,而不能保证连接之 后的传输数据安全性。为了保证数据传输的安全性,就必须先将数据加密之后再 进行传输。
对传输加密可以从两个方面入手,一个是在网络低层进行加密,应用程序不 需了解加密的细节,因此可以兼容现有的应用程序,这种考虑方式包括建立虚拟 专用网(VPN)的各种协议,如PPTP、L2TP,以及以后将采用的IPSec 协议。另一 种考虑方式是从网络应用程序入手,应用程序首先加密信息然后在进行传输,通 过特定的服务程序和客户程序来建立安全连接,这种方式的代表就是ssh,此外还 包括支持SSL(加密Socket层)的各个应用程序,如Telnet SSL,ApachSSL等。
SSL在FreeBSD下的实现为openssl,它是在FreeBSD之类的免费操作系统下安 装其他基于SSL应用程序的基础。
PGP也是一个具备重要影响的加密程序,其本身虽然是为网络环境而设计的, 但其程序本身不涉及网络。通常它和电子邮件的客户程序合作,构成安全的电子 邮件系统。
这些加密程序一般要使用Ports Collection下载安装,而没有现成的二进制 软件包,主要原因是这些软件使用的公开密钥算法在美国有专利限制,其专利属 于RSA研究所,因此FreeBSD就不将它们作成二进制软件包,以避免法律纠纷。即 使使用Ports Collection下载这些软件的时候,也需要设定一个环境变量USA_RE SIDENT ,以区分是不是美国居民,make程序好决定从何处下载这些程序,当然, 手工下载就不必顾及这些。RSA 算法在其他国家没有专利限制,因此可以随意使 用。
如果需要反复安装这些加密工具,可以更改/etc/make.conf中的设置,使其 自动设置这个变量,以方便安装过程。
在这些工具中,最重要的还是ssh,因为它提供了Unix系统最基本访问功能的 安全实现,如终端访问、文件传输功能。当使用ssh访问服务器时,服务器首先发 送自己的公用密钥,客户可以使用这个密钥加密自己产生的随机密码,此后客户 和服务器使用这个密码,用传统的算法,如IDEA、DES等方法来加密通信数据。对 于任何希望增强安全性的系统来讲,使用ssh来代替telnet,ftp以及rlogin,rsh, rcp等命令,都是最优先要考虑的措施。网络安全敏感的系统一般都要屏蔽telne t,rlogin等方式,而使用ssh提供远程访问。
ssh有两个不同的版本,ssh1和ssh2,这两个版本互不兼容。由于ssh1更为流 行,在非Unix系统之外也拥有不同的客户程序,一般需要使用ssh1,否则就会遇 到与其他ssh的服务器系统和客户软件不兼容的问题。ssh2 功能更为强大,然而 其提供的额外功能一般不需要,ssh1提供的能力已经是绰绰有余的了。Ports Co llection中这两个版本使用同样的安装位置,不能同时安装。
安装了ssh之后,ssh将自动产生它所使用的公用密钥,这个密钥和ssh的设置 文件保存在/usr/local/etc/ 目录中,不需要改动这些设置,直接启动ssh守护进 程sshd就可以正常提供ssh登录服务了。通过Ports Collection安装的ssh的sshd 位置为/usr/local/sbin/sshd。启动sshd之后,ssh客户程序就能登录和使用这台 系统,可以 立即使用命令ssh来连接本地系统。
bash-2.02$ ssh localhost
wb@localhost's password:
Last login: Wed May 19 08:14:13 1999 from 202.102.245.72
Copyright (c) 1980, 1983, 1986, 1988, 1990, 1991, 1993, 1994
The Regents of the University of California. All rights rese rved.
FreeBSD 3.1-RELEASE (wb) #6: Thu Apr 22 18:29:12 CST 1999
Welcome to FreeBSD!
Ports Collection会在/usr/local/etc/rc.d目录下放置ssh的启动文件sshd .sh ,用以在系统启动时自动启动sshd。
sshd使用端口22来监听用户的连接请求,需要调整网络中防火墙系统的设置 ,打开对ssh服务器端口22的连接请求,以便让网络之外的客户能够发送请求并建 立连接。由于ssh系统相当安全,不必担心这样作会带来安全问题。
当在低速网络上使用ssh的时候,就会希望网络连接的效率更高,可以在客户 端启动ssh时使用压缩选项-C,这将使用与gzip相同的压缩算法对数据先进行压缩 再传输,能用来提高传输非压缩数据的效率。
同样文件传输也能通过加密的方式进行,ssh提供了scp用于复制远程文件, 它的参数与rcp使用的参数相同,用与email地址相似的方式标识远程主机及确定 的用户,然后再是文件位置。
bash-2.02$ scp vpn.txt wb@remotehost:vpn.txt
wb@mx's password:
vpn.txt | 1 KB | 1.5 kB/s | ETA: 00:00:00 | 100%
对于使用Windows系统的客户,可以从Internet中下载运行在Windows下的ss h客户程序。支持ssh的仿真终端软件有:
TTSSH http://www.zip.com.au/~roca/ttssh.html
SecureCRT http://www.vandyke.com/
F-Secure http://www.DataFellows.com)
ssh的另一项强大能力是可以在客户机和服务器之间建立加密传输通道,从而 能将本地的数据转发到远端的服务器上。这种功能最常用于将X Window的数据包 进行转发,以便能在本地X服务器上通过ssh连接到远程,然后在ssh的连接终端上 启动远程计算机上的X应用程序,但显示到本地X服务器上。此时X系统的通信数据 是通过ssh建立的加密通道进行传输的,而不是普通情况下直接通过网络进行的传 输,因此就保证了安全性。这种X11转发功能不需要任何设置,包括设置DISPLAY 环境变量或-dislay参数,因此同时兼具安全性和方便性。
bash-2.02$ ssh remotehost /usr/X11R6/bin/xterm
wb@remotehost's password:
Waiting for forwarded connections to terminate...
The following connections are open:
X11 connection from remotehost port 3979
此外,还可以使用ssh转发其他不同的TCP连接,这样就不必担心数据在通过 不安全的网络部分时的安全问题了。这首先需要使用ssh的-L参数定义本地端口和 要转发的远程服务器端口的对应关系。
bash-2.02$ ssh remotehost -L 1234:192.168.3.1:23
wb@remote's password:
如果使用上例建立ssh连接之后,任何对本地端口1234的连接请求,将首先转 发给ssh,然后再由ssh服务器连接远端计算机的相应端口上。
使用ssh和ppp建立安全连接
由于ssh能在客户和服务器之间建立加密连接,因此它能和其他程序合作,如 ppp,建立安全的网络通道。这种建立VPN的方式虽然不符合任何标准,然而却十 分有效。对于FreeBSD系统之间,以及FreeBSD与其他Unix 系统之间,都可以使用 这种方式建立虚拟专有网络连接。
无论使用ppp或者是pppd,都能用于和ssh协作建立VPN。然而ppp更易于使用 和设置,FreeBSD 下,通常使用ppp程序建立ppp连接,因此这里就介绍使用ppp程 序建立虚拟安全连接的方法。
在/etc/ppp/目录下的ppp缺省配置文件ppp.conf中,已经提供了一个和外部 程序协作,建立安全ppp连接的基本例子。就是由ppp启动外部程序建立连接,通 过认证之后自动在远端执行ppp服务器,从而建立ppp 连接。这种方法中ppp通过 set device命令设置使用管道启动外部命令,但是这种管道方法不能和ssh很好的 合作。因为进行认证的口令是ssh直接从终端设备上读取的,而在通道方式中ppp 供应口令是通过标准输入/输出进行的,因此这些认证信息到达不了ssh中,就造 成不能通过ssh认证建立连接。
为了修正这个问题,让ppp程序能够建立ssh加密连接,一个解决办法是使用 外部拨号程序,首先使用外部程序首先进行ssh认证,认证之后再将标准输入输出 交回ppp,而外部程序可以生成伪设备文件直接控制ssh进行验证,然而需要使用 者进行一些编程工作,并使用这个伪设备文件作为通信设备。另一种方式是通过 设置ssh系统信任,使其不需要进行标准方式的口令认证(可以使用事先分发的公 开密钥进行认证),显然这不是一个简单且安全的解决办法。更好、更简单的办 法是使用ssh的TCP/IP转发能力,结合ppp建立IP通道的能力,从而建立安全的专 有连接。
为了建立ssh转发条件下的安全专有连接,首先回顾使用ppp建立IP通道的方 法,这个方法在前面设置ppp 时介绍过。可以根据这些设置来设置客户端ppp配置 文件ppp.conf,建立与本机的IP通道。
vpnclient:
set timeout 0
set log phase chat connect lcp ipcp
set dial
set ifaddr 192.168.4.10 192.168.4.1 255.255.255.0
set device localhost:3333
上面vnpclient的拨号设备设置为本地端口3333,与建立标准IP通道时的设置 是不同,这里设置的是本地计算机的端口。而服务器端的设置为:
vpnserver:
set timeout 0
set log phase lcp ipcp command
set ifaddr 192.168.4.1 192.168.4.10 255.255.255.0
allow mode direct
enable proxy
为了建立安全连接,与设置IP通道类似,服务器端也需要设置使用inetd之类 的超级服务器程序来启动ppp 服务器,回应客户端的请求以在IP通道上建立PPP连 接。需要修改/etc/services,增加启动ppp服务器的端口号。
ppploop 6671/tcp # loopback ppp daemon
然后修改/etc/inetd.conf文件,增加对ppp服务器启动的支持,并重新启动 inetd。
ppploop stream tcp nowait root /usr/sbin/ppp ppp -direct vpnserver
但是,由于ppp客户是向本地计算机发送连接请求,而非直接将请求发送给P PP服务器,因此就需要启动ssh,并建立相应的数据包转发功能,将转发的目标端 口设置为服务器上ppp监听的端口。
bash-2.02$ ssh remotehost -L 3333:remotehost:6671
wb@remotehost's password:
此后,可以在本地使用ppp连接本地的转发端口,直接建立安全连接。
bash-2.02# ppp -b vpnclient
Working in background mode
Using interface: tun0
PPP enabled.
bash-2.02# ifconfig tun0
tun0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1500
inet 192.168.4.10 --> 192.168.4.1 netmask 0xffffff00
未完,待续。。。
-- 小多子:你知道我们佟家百年不衰的道理么?
那就是,不要一条路走到黑!
※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 202.96.190.123]
|
|