Linux的安全防护离不开各种工具,Linux的开源性也促进了这些优秀的安全防护工具的发展。
目前在Linux环境下的安全工具林林总总,种类繁多。本文精选一些比较常用的、具有代表性的加以介绍,它们包括系统管理工具和网络管理工具。它们基本都是开源的,一般都随着诸如Red Hat Linux、Debian Linux等发行套件而发布,一些发行套件里面没有的,用户可以按照本文所提供的方式下载使用。由于篇幅的关系,本文只对这些工具的用途、原理和使用作指导性的介绍,要了解更加详细的使用情况,读者可以根据文中的介绍去查找和使用。
协议分析工具――Ethereal
Ethereal是一个有名的网络端口探测器,是可以在Linux、 Solaris、SGI等各种平台运行的网络监听软件,它主要是针对TCP/IP协议的不安全性对运行该协议的机器进行监听。其功能相当于Windows 下的Sniffer,都是在一个共享的网络环境下对数据包进行捕捉和分析,而且还能够自由地为其增加某些插件以实现额外功能。
其最常用的功能是被攻击者用来检测被攻击电脑通过23(telnet)和110 (pop3)端口进行的一些明文传输数据,以轻松得到用户的登录口令和邮件账号密码。一般说来,Ethereal基本上是为破坏者所利用的工具,而对于网络管理员来说,也可以通过捕包分析,来确定一些异常的流量和局域网内部的非正常用户与外界的通信,比如说对于现在比较占用网络带宽的诸如Bit Torrent 等P2P应用软件流量,通过使用该软件确定这些流量,网络管理员就可以使用流量控制(TC)的方法来规范、合理的分配带宽资源,提高网络的利用率。
ethereal可以在http://www.ethereal
.com/download.html上下载,该软件有极其方便和友好的图形用户界面,并且能够使得用户通过图形界面的配置和选择,针对多块网卡、多个协议进行显示,效果非常好。目前最新版本为:ethereal 0.10.12。
# cp ethereal-0.10.12.tar.bz2 /usr/local/src/
# cd /usr/local/src/
# bzip2 -d ethereal-0.10.12.tar.bz2
# tar xvf ethereal-0.10.12.tar
另外,同Tcpdump一样,在编译Ethereal之前应先确定已经安装pcap库(libpcap),这是编译Ethereal时所必需的。如果该库已经安装,就可以执行下面的命令来编译并安装Ethereal:
# cd ethereal-0.10.12
# ./configure
# make
# make install
当编译并安装好Ethereal后,就可以执行“ethereal”命令来启动 Ethereal。在用 Ethereal截获数据包之前,应该为其设置相应的过滤规则,可以只捕获感兴趣的数据包。Ethereal使用与Tcpdump相似的过滤规则,并且可以很方便地存储已经设置好的过滤规则。
Ethereal和其他的图形化嗅探器使用基本类似的界面,整个窗口被分成三个部分:最上面为数据包列表,用来显示截获的每个数据包的总结性信息;中间为协议树,用来显示选定的数据包所属的协议信息;最下边是以十六进制形式表示的数据包内容,用来显示数据包在物理层上传输时的最终形式。使用Ethereal可以很方便地对截获的数据包进行分析,包括该数据包的源地址、目的地址、所属协议等。
网络端口扫描工具――nmap
nmap是用来对一个比较大的网络进行端口扫描的工具,它能检测该服务器有哪些 TCP/IP端口目前正处于打开状态。用户可以运行它来确保和查证系统目前打开了哪些端口和外界进行通信,从而禁止掉不该打开的不安全的端口号,比如一些特别占用带宽的P2P端口和一些具有漏洞的应用端口。nmap设计的初衷是系统管理员可以方便地了解自己的网络运行情况,例如有多少台主机在运行、分别提供什么样的服务等。因此,它扫描的速度非常快,尤其适合大型网络。在对网络进行扫描时,nmap主要利用ICMP echo探测主机是否开启。nmap的主页为:http://www.insecure.org/nmap/index.html,目前网上最新版本为: nmap-3.93.tar.bz2,可按照如下步骤进行安装:
#bzip2 -cd nmap-3.93.tar.bz2 | tar xvf -
#cd nmap-3.93
#./configure
#make
#make install
下面给出一个探测本机的简单例子:
# nmap 127.0.0.1
Starting nmap V. 2.54BETA22 ( www.insecure.org/nmap/ )
Interesting ports on localhost (127.0.0.1):
(The 1540 ports scanned but not shown below are in state: closed)
Port State Service
22/tcp open ssh
2401/tcp open cvspserver
Nmap run completed -- 1 IP address (1 host up) scanned in 0 seconds
上面通过查看本机的端口使用情况,发现该机器打开了22以及2401端口,且都为TCP服务,另外,1540端口也为该软件扫描到,但是该端口的状态为关闭,所以没有列出来。当然,该软件的功能很强大,还有很多复杂和高级的选项,用户可以自己到该软件的主页上学习。
密码分析工具――John the ripper
在Linux中,密码以hash格式被存储,用户不能反向从该hash数据表中分析出密码,因为该hash函数是单向的。但是,用户可以对一组单词进行hash加密,然后和保存的密码进行比较,如相同就说明猜测出密码。所以要选取一个很难被猜测的、非常有效的密码是非常关键的。一般地来说,决不能用字典存在的某个单词作为密码,那是相当容易被猜测出来的。另外也不能用一些常见的有规则性的字母数字排列作为密码。
为了验证用户所选取的密码是否能由较高的安全性,我们可以使用一些Linux下的密码分系统工具来对这些密码进行分析确认,具有一定的指导意义。在这当中,John the ripper是一个经典、高效的易于使用的密码猜测程序,其主页为:http://www.openwall.com/john/,目前最新版本为 John the Ripper 1.6。下面给出其安装步骤:
下载tar.gz格式的Unix版的程序,然后执行如下命令即可:
#tar xzvf john-1.6.tar.gz
#cd john-1.6/src
#make linux-x86-any-a.out
#cd john-1.6/run
上述命令完成了该软件的解压缩以及编译,使用起来非常方便。在进行密码分析的过程中,有如下几个常用选项:
● Single:破解单一口令文件。
● Worldlist:file:利用该软件使用词典文件破解口令,也叫字典攻击。
● Rules:使用规则库,允许该软件对词典单词做相应变化来破解口令。
● Incremental:根据john-1.6/run目录下的john.ini文件中定义的参数启用递增或者强行模式。
● Restore:file:继续一次被中断的破解过程。
● Session:file:允许定义存储破解信息的文件名。
● Show:显示上次破解过程所破解出来的口令信息。
在实际的密码分析过程中,推荐如下步骤和方法:
(1)首先,运行以下命令看破解了哪些口令:
#john――single 待破解的口令文件名
#john――show
(2)然后,采用字典攻击,破解口令:
#john――w:字典名 待破解的口令文件名
#john――show
(3)如果上述字典攻击不成功,则进行强行攻击:
#john――待破解的口令文件名
#john -show
日志检查工具――Logcheck
Logcheck是用来自动检查系统安全入侵事件和非正常活动记录的工具,它分析各种Linux下的日志文件,比如前文所介绍过的/var/log/messages、/var/log/secure、/var/log/maillog 等等,然后生成一个可能有安全问题的问题报告自动发送电子邮件给管理员。能设置它基于每小时或者每天用crond来自动运行。
Logcheck是一个软件包,用来实现自动检查日志文件,以发现安全入侵和不正常的活动。Logcheck用logtail程序来记录读到的日志文件的位置,下一次运行的时候从记录下的位置开始处理新的信息。所有的源代码都是公开的,实现方法也非常简单。
Logcheck SHELL脚本和logtail.c程序用关键字查找的方法进行日志检测。在这儿提到的关键字就是指在日志文件中出现的关键字,会触发向系统管理员发的报警信息。Logcheck的配置文件自带了缺省的关键字,适用于大多数的Unix系统。但是最好还是自己检查一下配置文件,看看自带的关键字是否符合自己的需要。
Logcheck脚本是简单的SHELL程序,logtail.c程序只调用了标准的ANSI C函数。Logcheck要在cron守护进程中配置,至少要每小时运行一次。脚本用简单的grep命令来从日志文件检查不正常的活动,如果发现了就发送电子邮件给管理员。如果没有发现异常活动,就不会收到电子邮件。
logcheck工具的主页在http://logcheck.org/,用户可以在上面下载其最新版本: logcheck-1.1.1.tar.gz。下载后用tar xvfz logcheck-1.1.1.tar.gz命令解开到一临时目录下,然后用make linux自动生成相应的文件到/usr/local/etc、/usr/local/bin/等目录下。用户可能需要更改设置,如发送通知到谁的邮件账号等,默认发送到root。
利用logcheck工具分析所有logfile,避免每天经常手动地检查它们,节省了时间,提高了效率。
后门工具――rootkit
rootkit是一种比普通木马后门更为隐秘和危险的木马后门。它主要通过替换系统文件来达到目的,这样就会更加隐蔽,使检测变得比较困难。传统的rootkit主要针对Unix平台,例如Linux、AIX、SunOs 等操作系统,有些rootkit可以通过替换DLL文件或更改系统来攻击Windows平台。rootkit并不能让攻击者直接获得权限,相反它是在用户通过各种方法获得权限后才能使用的一种保护权限的措施,在攻击者获取系统根权限(根权限即root权限,是Unix系统的最高权限)以后,rootkit 提供了一套工具用来建立后门和隐藏行迹,从而让攻击者保住权限,在任何时候都可以使用root权限登录到系统。
rootkit主要有两种类型:文件级别和系统级别,下面分别加以简要介绍。
1.文件级rootkit
rootkit威力很大,可以轻而易举地在系统中建立后门。最一般的情况就是它们首先进入系统然后修改系统的重要文件来达到隐藏自己的目的。合法的文件被木马程序替代。通常情况下,合法的程序变成了外壳程序,而其内部就是隐藏着的后门程序。下面列出的程序就是经常被木马程序利用掩护自己的Linux rootkit:login、 ls、ps、 find、who、 netstat。
其中,当我们访问Linux时(不管是本地还是远程登录),/bin/login程序都会运行,系统将通过 /bin/l ogin来收集并核对用户的账号和密码。rootkit使用一个带有根权限后门密码的/bin/login来替换系统的/bin/login,这样攻击者输入根权限后门的密码,就能进入系统。就算管理员更改了原来的系统密码或者把密码清空,仍能够使用后门密码以根用户身份登录。在攻入Linux系统后,入侵者通常会进行一系列的攻击动作,如安装嗅探器收集重要数据,而Linux中也会有些系统文件监视这些动作,比如ifconfig等系统命令。所以,为了避免被发现,攻击者会想方设法替换一下这些系统文件,通常被rootkit替换的系统程序有login、ifconfig、du、find、ls、 netstat、ps等。这些命令都能在正常情况下查看系统一些重要的进程、文件和网络情况的信息,而一旦被替换,则无法发现rootkit已经在系统中工作。所以,如果攻击者将所有用户经常使用的命令都替换了的话,他不但能在系统中建立后门,而且还可以隐藏自己的踪迹。所以通过rootkit可以达到双重目的,攻击者可以随时进入系统,并且我们还不能对他的行为进行检测。
rootkit功能如此强大,所以必须好好进行防范。实际上,最有效的防御方法是定期对重要系统文件的完整性进行核查,这类工具很多,像Tripwire就是一个非常不错的文件完整性检查工具。该软件可以检测出一段时间内,系统中哪些文件发生了变化,如果一旦被替换,那么肯定能够反映出来。(该软件的使用方法请参阅本报2005 年4月18日第14期C10版《使用Tripwire保护Linux文件系统》一文,或访问 www2.ccw.com.cn/05/0514/d/0514d04_1.asp)而一但使用该软件发现系统遭受到rootkit攻击,必须完全重装所有的系统文件、部件和程序,以确保安全性。
下面给出一些目前常用的文件级rootkit工具,用户可以选择使用:TrojanIT、Lrk5、Ark、Rootkit(有很多个不同的版本)、TK。
2.内核级rootkit
在大多数操作系统中(各种Unix和Windows),内核是操作系统最基本的部件,它控制着对网络设备、进程、系统内存、磁盘等的访问。例如当你打开一个文件时,打开文件的请求被发送到内核,内核负责从磁盘得到文件的比特位并运行文件浏览程序。内核级 rootkit使攻击者获得对系统底层的完全控制权。攻击者可以修改系统内核,大多数内核级rootkit都能进行执行重定向,即截获运行某一程序的命令,将其重定向到入侵者所选中的程序并运行此程序。也就是说,用户或管理员要运行程序A,被修改过的内核假装执行A,实际却执行了程序B。
对于工作在文件级的rootkit来说,它们非常容易被检测到。而内核级 rootkit工作在一个很低的内核级上。它们经常依附在内核上,并没有修改系统的任何文件,于是tripwire工具就不能检测到它的使用。因为它并没有对系统的任何文件进行修改,攻击者可以对系统为所欲为而不被发现。系统级rootkit为攻击者提供了很大的便利,并且修复了文件级rootkit的一些错误。所以建议用户要做好前期的安全防范工作。例如将最小权限的原则应用到整个系统当中,这样攻击者就很难在系统中运行内核级的rootkit,因为运行它首先需要取得root权限。另外,可以模仿攻击者的攻击方式来确认系统是否已经受到内核级rootkit的威胁。以系统管理员的身份来运行攻击者一般需要运行的命令,如果系统对这些命令有所反应,那么基本可以确定系统已经被入侵了。不过做好前期的防范工作始终是最重要的,事后的弥补比较困难,而且显得有些捉襟见肘。
下面给出一些目前常用的内核级rootkit工具,用户可以选择使用:Knark、Adore。
由于上述的rootkit的工具种类繁多,所以这里不再介绍其安装以及使用的步骤,网上有很丰富的资源,读者可以参看。
系统管理工具――sudo
sudo是允许系统管理员让普通用户执行一些或者全部的root命令的一个工具,如 halt、reboot、su 等等。这样不仅减少了root用户的登陆和管理时间,同样也提高了安全性。如果用户在系统中需要每天以root身份做一些日常工作,经常执行一些固定的几个只有root身份才能执行的命令,那么用sudo是非常适合的。
sudo不是对shell的一个代替,它是面向每个命令的。它的特性主要有这样几点:
● sudo能够限制用户只在某台主机上运行某些命令。
● sudo提供了丰富的日志,详细地记录了每个用户干了什么。它能够将日志传到中心主机或者日志服务器。
● sudo使用时间戳文件来执行类似的“检票”系统。当用户调用sudo并且输入它的密码时,用户获得了一张存活期为5分钟的票(这个值可以在编译的时候改变),过了这个时间,用户所获得的权限将失效。
● sudo的配置文件是sudoers文件,它允许系统管理员集中管理用户的使用权限和使用的主机。它所存放的位置默认是在/etc/sudoers,属性必须为0411。
sudo的主页为:http://www.sudo.ws/sudo/,当前最新的稳定版本为sudo 1.6.8p9。可以从该网站下载文件sudo-1.6.8p9.tar.gz后进行解压安装,如下步骤所示:
#tar xzvf sudo-1.6.8p9.tar.gz
#cd sudo-1.6.8p9
在笔者所使用的版本中,将该软件解压后即可使用,也不需要编译,直接进入sudo-1.6.8p9中使用sudo命令即可。如下所示:
[root@localhost root]# su liyang
[liyang@localhost root]$ sudo reboot
Password:******
上述例子中,用户liyang使用sudo命令来行使root的权限,重新启动系统。因为通常情况下,一般用户并没有这个权限。系统提示输入该用户的密码加以确认。另外,为了达到该目的,还需要root用户修改一下上述的sudo的配置文件sudoers,将其中的相关选项改为如下内容:
# User privilege specification
root ALL=(ALL) ALL
liyang ALL=(ALL) ALL
这里,liyang用户具有和root同样的权限,当然在实际应用中不能这么做,而只能将部分权限赋给用户。
其他工具
本文上面介绍的几款安全工具是在实际应用中经常使用的,他们的功能非常强大。在当前环境下,这些工具以及工具的变种层出不穷。比如一些被黑客用来进行攻击的后门和特洛伊木马工具、Sadmind攻击工具、DoS攻击工具(Targa)、 DdoS攻击工具等等。虽然这些是黑客工具,但是也可以用来对系统某方面的漏洞进行测试攻击,从而采取打补丁、升级系统、加固系统的方法来保障系统安全。特别是系统管理员要有这种超前的意识,应该多采用和有针对性地选用一些黑客攻击工具,对系统的安全进行分析、评价和保护,这是一项长期的、艰巨的任务。
虽然一些工具是黑客工具,但是也可以用来对系统某方面的漏洞进行测试攻击,从而采取打补丁、升级系统、加固系统的方法来保障系统安全。系统管理员要有一种超前的意识,应该多采用和有针对性地选用一些黑客攻击工具,对系统的安全进行分析、评价和保护,这是一项长期的、艰巨的任务。
本文出自 “MySQL中文网”博客 http://www.imysql.cn/