“工欲善其事,必先利其器”。作为一个合格的系统管理员,要应对可能发生的安全事件,掌握Linux下各种必须的安全工具是首要大事。本文主要介绍Linux上常用的安全工具,例如,Nmap、Snort、Nesseu等安装、使用和维护知识。通过这些工具管理人员能够了解其系统目前存在的安全隐患、入侵者可能利用的漏洞,及时发现入侵,并构造一个坚固的防御体系将入侵拒之门外。
一、安全信息收集软件
对于系统管理员来说,了解和掌握系统当前的安全状态是做到“知己”的第一个步骤。安全信息收集软件就是用来收集目前系统安全状态的有力工具。端口扫描软件和漏洞扫描软件是常用的信息收集软件。入侵者通常通过端口扫描软件来掌握系统开放端口,运行服务器软件版本和操作系统版本等相关信息。而对于管理人员,通过这些软件可以让管理人员从入侵者的角度来审视系统,并且能够根据这些信息进行相应的配置和修改来迷惑入侵者。漏洞扫描软件能够获得具体的漏洞信息,利用这些漏洞信息,入侵者能够轻易地访问系统、获得非授权信息,甚至是获得整个系统的控制权限。而对于管理人员,通过漏洞扫描软件获得的信息能够帮助自己及时对系统进行加固和防御,让入侵者无机可乘。
1、Nmap
Nmap是一个网络探测和安全扫描程序,使用这个软件可以扫描大型的网络,以获取那台主机正在运行及提供什么服务等信息。Nmap支持很多扫描技术,例如UDP、TCPconnect()、TCPSYN(半开扫描)、FTP代理(bounce攻击)、反向标志、ICMP、FIN、ACK扫描、圣诞树(XmasTree)、SYN扫描和null扫描。Nmap还提供了一些高级的特征,例如,通过TCP/IP协议栈特征探测操作系统类型、秘密扫描、动态延时、重传计算和并行扫描,通过并行ping扫描探测关闭的主机、诱饵扫描,避开端口过滤检测,直接RPC扫描(无须端口影射)、碎片扫描,以及灵活的目标和端口设定。
(1)安装
Nmap的安装很简单,Linux各发行版本上通常都已经安装了Namp。这里首先用“nmap-v”查看当前系统所安装的nmap版本号:
#nmap-v
StartingnmapV.4.00.(www.insecure.org/nmap/)
……
由于目前系统所安装的Nmap为4.00,不是最新版本,因此要首先从http://www.insecure.org/nmap/下载最新版本的源代码。目前最新版本为Nmap-5.5.tar.bz2,该文件为源代码压缩包,需要用bzip2进行解压缩。我们将该文件下载并保存在/root/nmap下,以root用户进行安装。
#bzip2–cdnmap-5.5.tar.bz2∣tarxvf-
该命令将Nmap源代码解压缩至目录nmap-5.5。
进入该目录进行配置:
#./configure
配置结束后用make命令进行编译:
#make
编译结束后用makeinstall进行安装:
#makeinstall
(2)使用
◆各种扫描模式与参数
首先需要输入要探测的主机IP地址作为参数。假设一个LAN中有两个节点:192.168.12.1和192.168.12.2
#nmap192.168.12.1
Startingnmap5.5(http://www.insecure.org/nmap/)at2010-01-2415:24CST
Interestingportson192.168.12.1:(The1651portsscannedbutnotshownbelowareinstate:closed)
PORTSTATESERVICE
25/tcpopensmtp
80/tcpopenhttp
135/tcpopenmsrpc
139/tcpopennetbios-ssn
443/tcpopenhttps
445/tcpopenMicrosoft-ds
1025/tcpopenNFS-or-IIS
1033/tcpopennetinfo
1521/tcpopenoracle
2030/tcpopendevice2
3372/tcpopenmsdtc
8080/tcpopenhttp-proxy
MACAddress:00:E0:4C:12:FA:4B(RealtekSemiconductor)
Nmapruncompleted–1IPaddress(1hostup)
Scannedin22.882seconds
上面是对目标主机进行全面TCP扫描的结果,显示了监听端口的服务情况,这一基本操作不需要任何参数。但是,由于在扫描过程中建立了完整的TCP连接,主机可以很容易地监测到这类扫描。该命令是参数开关-sT的缺省。
-sS选项可以进行更加隐蔽地扫描,并防止被目标主机检测到,但此方式需要用户拥有root权限。-sF、-sX和-sN则可以进行一些超常的扫描。假如目标主机安装了过滤和日志软件来检测同步空闲字符SYN,那么-sS的隐蔽作用就失效了,此时可以采用-sF(隐蔽FIN)、-sX(XmasTree)及-sN(Null)方式扫描。
这里需要注意的是,由于微软的实现方式不同,对于运行Win2003,Vista等NT的机器FIN、Xmas或Null的扫描结果都是将端口关闭,由此可作为推断目标主机运行Windows操作系统的一种方法。以上命令都需要有root权限。-sU选项是监听目标主机的UDP,而不是默认的TCP端口。尽管在Linux机器上有时慢一些,比如,输入上面的例子:
#nmap-sU192.168.12.1
Startingnmap5.5(http://www.insecure.org/nmap/)at2010-01-2415:28CST
Interestingportson192.168.12.1:
(The1472portsscannedbutnotshownbelowareinstate:closed)
PORTSTATESERVICE
135/udpopenmsrpc
137/udpopen∣filterednetbios-ns
138/udpopen∣filterednetbios-dgm
445/udpopen∣filteredmicrosoft-ds
500/udpopen∣filteredisakmp
3456/udpopen∣filteredIISrpc-or-vat
MACAddress:00:E0:4C:12:FA:44(RealtekSemiconductor)
Nmapruncompleted–1IPaddress(1hostup)scannedin4.381seconds
◆操作系统探测
使用-O选项可推断目标主机的操作系统,既可与上述的命令参数联合使用,也可单独调用。Nmap利用TCP/IP“指纹”技术来推测目标主机的操作系统。还使用前面的例子:
#nmap-O192.168.12.1
Startingnmap5.5(http://www.insecure.org/nmap/)at2010-01-2416:03CST
Interestingportson192.168.12.1:
(The1651portsscannedbutnotshownbelowareinstate:closed)
PORTSTATESERVICE
25/tcpopensmtp
80/tcpopenhttp
135/tcpopenmsrpc
139/tcpopennetbios-ssn
443/tcpopenhttps
445/tcpopenMicrosoft-ds
1025/tcpopenNFS-or-IIS
1033/tcpopennetinfo
1521/tcpopenoracle
2030/tcpopendevice2
3372/tcpopenmsdtc
8080/tcpopenhttp-proxy
MACAddress:00:E0:4C:12:FA:44(RealtekSemiconductor)
Devicetype:generalpurpose
Running:MicrosoftWindows95/98/ME∣NT/2K/XP
OSdetails:MicrosoftWindowsMillenniumEdition(Me),Windows2000ProorAdvancedServer,orWindowsXP
Nmapruncompleted–1IPaddress(1hostup)scannedin3.398seconds
Nmap提供了一个OS数据库,上例中检测到了该主机运行的操作系统为Windows系列操作系统,可能为Windows98、Windows2000Pro,或者为Windewsvista/Windows7等。
◆更进一步的应用
除了一次只扫描一个目标主机外,还可以同时扫描一个主机群,比如“nmap–sT–O203.187.1.1-50”就可以同时扫描并探测IP地址在203.187.1.1到203.187.1.50之间的每一台主机。当然这需要更多的时间,耗费更多的系统资源和网络带宽,输出结果也可能很长。所以,可以使用下面命令将结果重定向输送到一个文件中:
#nmap-sT-O-oNtest.txt202.96.1.1-50
另外的一些命令参数选项如下:
-I进行TCP反向用户认证扫描,可以透露扫描用户信息;
-iR进行随机主机扫描;
-p扫描特定的端口范围;
-v长数据显示,“-v-v”是最长数据显示;
-h快捷帮助。
下面给一个综合了上述参数的例子:
#nmap-sS-p23,80-oNftphttpscan.txt203.187.53.50-100
◆Nmap图形用户界面
Nmap有一些图形用户前端,比如,NmapFE(GTK界面)网址为
http://codebox.net/nmapfe.html;Kmap(Qt/KDE前端)网址为
http://www.edotorg.org/kde/kmap/;KNmap(KDE前端)网址为
http://pages.infinit.net/rewind/。
2.Nessus
Nessus是一个功能强大而又易于使用的远程安全扫描器,它有免费版本和收费版本,而且更新很快,几乎适应所有常见操作系统。安全扫描器的功能是对指定网络进行安全检査,找出该网络是否存在有导致对手攻击的安全漏洞。该系统被设计为Client/Sever模式,服务器端负责进行安全检查,客户端用来配置管理服务器端。在服务端还采用了plug-in的体系,允许用户加入执行特定功能的插件,该插件可以进行更快速和更复杂的安全检查。在Nessus中还采用了一个共享的信息接口,称之知识库,其中保存了前面进行检査的结果。检查的结果可以HTML、纯文本、LaTeX(一种文本文件格式)等几种格式保存。在未来的新版本中,Nessus将会支持速度更快的安全检查,而且这种检查将会占用更少的带宽,其中可能会用到集群的技术以提高系统的运行效率。
Nessus的主要优点在于其采用了基于多种安全漏洞的扫描,避免了扫描不完整的情况;它是免费的,比起商业的安全扫描工具,如ISS具有价格优势;扩展性强、容易使用、功能强大,可以扫描出多种安全漏洞。
Nessus的安全检查完全是由plug-ins的插件完成的。目前Nessus提供的安全检查插件已达18类多800d个,而且这个数量还会增加。比如,在uselessservices类中,Echoportopen和Chargen插件用来测试主机是否易受到已知的echo-chargen攻击;在backdoors类中,PcAnywhere插件用来检查主机是否运行了BO、PcAnywhere等后台程序。更可喜的是,其中包括了对最近肆虐一时的CodeRed及其变种的检测。
在Nessus主页中不但详细介绍了各种插件的功能,还提供了解决问题的相关方案。有关plug-in的详细说明,请参看http://cgi.nessus.org/plugins/dump.php3?viewby=family。
除了这些插件外,Nessus还为用户提供了描述攻击类型的脚本语言,进行附加的安全测试,这种语言称为Nessus攻击脚本语言(NSSL),用它来完成插件的编写。在客户端,用户可以指定运行Nessus服务的机器、使用的端口扫描器、测试的内容及测试的IP地址范围。Nessus本身是工作在多线程基础上的,所以用户还可以设置系统同时工作的线程数。这样用户在远端就可以设置Nessus的工作配置。安全检测完成后,服务端将检测结果返回到客户端,客户端生成直观的报告。在这个过程当中,由于服务器向客户端传送的内容是系统的安全弱点,为了防止通信内容受到监听,其传输过程还可以选择加密。
(1)安装软件
Nessus由客户端和服务器端两部分组成。首先看服务器端的安装。安装时注意由于屏蔽了我国IP,所以下载界面会跳到注册页面中,无法现在,大家要使用只要跳过这层就可以,你懂得。然后还需要激活码(激活码:6C1A-F33B-60A0-5000-4001)注册成功后方可使用。
◆创建用户
Nessus服务端有自己的用户资料库,其中对每个用户都做了约束。用户可以在整个网络范围内通过nessusd服务端进行安全扫描。用nessus-adduser命令创建用户,根据命令提示创建用户。
Nessus-adduser是Nessusd的附带工具,安装完毕后,在安装目录下会产生这个程序。
◆配置Nessus服务端程序Nessusd
Nessusd的配置文件为nessusd.conf,位于/usr/local/etc/nessus/目录下,一般情况下不需要改动。这里还需要运行nessus-mkcert来生成服务器证书,可以按照默认设置。
◆启动nessusd
在上面的准备工作完成后,以root用户身份用下面的命令启动服务端:
#netssusd–D
Loadingtheplugins...3570(outof5830)
载入完所有插件后将以系统服务进程的身份运行。
(2)使用
按照上面的方法启动Nessus的服务进程后,就可以执行客户端程序进行安全扫描了。
首先提示登录到Nessus服务器,在NessusHost后面输入Nessus服务器所在的Linux机器IP地址,端口号及加密方式不需要做改动。输入用户名,单击“Login”登录。系统会询问是否接受服务器证书,选择第一项,然后单击“YES”接受证书。
一旦登录成功,“Login”按钮会变为“Logout”,对话框的旁边还会有connected的提示。登录后就可以进行相应的漏洞扫描了。下面通过选择Plug-in插件来进行相应的安全扫描。下面是插件所能检査的攻击方法,单击每个攻击方法会弹出一个对话框介绍它的危害性及解决方法。然后选择扫描的目标主机,单击“targetselection”,在窗口中输入目标地址,如上面所输入的192.168.12.2。这里作者用的是一个内部地址,还可以用192.168.6.0/24的方式指定扫描192.168.6.1到192.168.6.255整个网段。
设置完毕后,单击“startscan”开始进行扫描。根据选择的插件数量、扫描的范围扫描时间不等。扫描结束后会有扫描结果。
在窗口的中列出了所有被扫描的网络、主机和主机相应的端口,Nessus给出了安全漏洞的严重等级、问题的产生原因及解决方法。最后,扫描结果还能够以XML、ASCⅡ、HTML、NSR等多种格式存盘,做为参考资料供以后使用。
入侵检测系统(IDS)
1、原理
入侵检测系统(IntrusionDetectionSystem,IDS)是一种主动保护自己免受攻击的一种网络安全技术。作为防火墙的合理补充,入侵检测技术能够帮助系统监测攻击行为,扩展了系统管理员的安全管理能力(包括安全审计、监视、攻击识别和响应),提高了信息安全基础结构的完整性。它从计算机网络系统中的若干关键点收集信息,并分析这些信息。入侵检测被认为是防火墙之后的第二道安全闸门,能够在不影响网络性能的情况下能对网络进行监测,防止或减轻上述的网络威胁。
入侵检测系统有很多种,从部署的位置可以分为以下几种:
◆基于网络的系统,它放置于网络之上,靠近被检测的系统,它们监测网络流量并判断是否正常。
◆基于主机的系统,其经常运行在被监测的系统之上,用以监测系统上正在运行的进程是否合法。
◆最近出现的一种系统,位于操作系统的内核之中,并监测系统的最底层行为。
从检测的技术手段上可以分为以下两种:
◆误用检测是将收集到的数据与预先确定的特征知识库里的各种攻击模式进行比较,如果发现有攻击特征,则判断有攻击。特征知识库是将己知的攻击方法和技术的特征提取出来建立的一个知识库。
◆异常检测则是对收集到的数据进行统计分析。它首先假定所有的攻击行为与正常行为不同,这样发现与正常行为有不同时,则判断存在攻击。它需要建立正常行为的标准,如登录时错误次数为多少时视为正常。
相比而言,误用检测的原理简单,很容易配置,特征知识库也容易扩充。但它存在一个致命的弱点――只能检测到已知的攻击方法和技术。异常检测可以检测出已知的和未知的攻击方法和技术,但是其问题在于正常行为标准只能采用人工智能、机器学习算法等来生成,并且需要大量的数据和时间,同时,由于现在人工智能和机器学习算法仍处于研究阶段。所以现在的入侵检测系统大多采用误用检测的分析方法。
下面给介绍的Snort就是一个基于网络的、采用误用分析技术的入侵检测系统。
2.Snort的安装、配置和使用
Snort是一个开放源码的网络入侵检测系统。Snort的功能包括采用Libpcap捕获数据链路层的分组,并进行协议栈分析(TCP/IP协议)。Snort在内部使用Misused检测模型进行入侵检测,即通过一个完整的入侵规则库来实时匹配,并探测入侵行为。这个规则库非常全面,包含了探测缓冲区溢出、端口扫描、CGI攻击等,并处于不断更新当中。Snort可以轻易发现使用Nmap或Trin00等进行的攻击。Snort也允许用户方便地编写和加人自己的规则。日志可以存储成Tcpdump二进制格式、ASCⅡ格式或数据库格式(包括MYSQL、PostgreSQL),甚至XML格式。
(1)安装
在http://www.snort.org/可以下载最新版本的Snort,目前最新稳定版本是2.8.0,下载文件为Snort-2.8.0RC2.tar.gz。安装的方法同上面介绍的几个软件类似。依次经过解压缩后运行“./configure”、“make”和“makeinstall”。要注意的是,Snort需要libpcap库支持,如果尚未安装可以到http://www.tcpdump.org/下载libpcap源代码进行安装,目前最新版本为0.8.3。
执行文件安装完毕后还需要下载最新的规则文件。Snort采用基于误用的检测技术,需要按照预先定义好的规则同网络当中的流量进行比对,特征一致时认为有入侵事件发生,从而釆取相应动作,因此保持最新的特征库对Snort来说尤其重要。将下载到的规则文件解压缩,得到rules目录,其内容为按照攻击类型和攻击目标划分为不同规则文件。
(2)配置
Snort依靠命令启动时指定的配置文件进行配置,通常是/etc/snort.conf,可以编辑Snort配置文件源文件所在目录下/etc/snort.conf来进行配置。
#vi/root/snort/snort-2.8.0RC2/etc/
其中需要修改的地方如下:
VarHOME_NETyournetwork
VarRULE_PATH/etc/snort/rules
Preprocessorhttp_inspect:global
此外还可以根据需要选择规则集合当中的规则文件,例如:
iis_unicode_map/etc/snort/rules/Unicode.map1252
Include/etc/snort/rules/reference.config
Include/etc/snort/rules/classification.config
yournetwork即为所釆用的IP地址段,规则文件所在目录为刚才下载规则文件解压缩所在目录。
(3)使用
输入下面代码:
#snort–D–c/root/snort/snort-2.8.0RC2/etc/snort.conf
其中,-D参数表明Snort以后台进程方式运行,-c指名所釆用的配置文件位置。启动之后可以查看/var/log/snort/alert内容来检査结果。
#vialert
[**][1:469:3]ICMPPINGNMAP[**]
[Classification:AttemptedInformationLeak][Priority:2]
01/28-17:30:33.813923192.168.100.122->202.12.37.7
ICMPTTL:50TOS:0x0ID:36381IpLen:20Dgmlen:28
Type:8Code:0ID:51597Seq:14292ECHO
[Xref=>http://www.whitehats.com/info/IDS162]
[**][122:1:0](portscan)TCPPortscan[**]
01/28-17:30:33.916752192.168.12.1->202.12.37.7
PROTO255TTL:0TOS:0x0ID:0iplen:20Dgmlen:182DF
由上可以看到,告警文件中记录了网络当中一次Nmap端口扫描的行为。
 
防火墙系统
1、基本原理
防火墙适用于用户网络系统的边界,属于用户网络边界的安全保护设备。所谓网络边界即是釆用不同安全策略的两个网络连接处,比如用户网络和互联网之间连接、跟其它业务往来单位的网络连接及用户内网不同部门之间的连接等。防火墙的目的就是在网络连接之间建立一个安全控制点,通过允许、拒绝或重新定向经过防火墙的数据流,实现对进、出内部网络的服务和访问的审计和控制。
目前,有很多厂商提供各种类型的防火墙平台,通常有几种常用的分类方法:
按照产品形式可分为硬件防火墙和软件防火墙;
按照性能可以分为百兆级和千兆级防火墙;
按照操作模式可分为透明模式、路由模式和NET(网络地址转换);
按照部署位置可分为边界防火墙和主机/个人防火墙;
l按照OSI模型层次可分为包过滤防火墙、状态检测防火墙和应用代理防火墙。
其中包过滤防火墙是最基本的防火墙,由一些基本路由设备通过内部的网络访问控制规则实现。它一般是工作在网络层,但在现代网络结构中,为了实现负载均衡/高可用性,也可能在网络第二层实现。包过滤防火墙的访问控制功能由一套规则集组成,这些规则集是基于网络报文的以下信息实现的源地址、目的地址、流量类型、网络会话特征或物理端口。
下面介绍的iptables就是一款优秀的网络层防火墙用他能很容易构建一个功能强大、性能优异的防火墙系统。
2.iptables的安装、配置和使用
Netfilter/iptablesIP数据包过滤系统是一个功能强大的工具,可用于添加、编辑和除去规则,这些规则是在做数据包过滤决策时防火墙所遵循和组成的规则。这些规则存储在专用的数据包过滤表中,而这些表则集成在Linux内核中。Linux2.4内核提供的防火墙系统实际上由netfilter和iptables组成。netfilter组件是内核的一部分,由一些数据包过滤表组成、这些表包含内核用来控制数据包过滤处理的规则集。iptables组件是一种工具,运行在用户空间,它用来维护存储在内核中的数据包过滤表中的规则。通过iptalbes可以方便地修改、添加和删除规则,也可以构建自己的定制规则。内核根据规则来决定,对来自某些源、前往某些目的地或具有某些协议类型的数据处理,可以是ACCEPT(允许该数据包通过)、DROP(丢弃该数据包),或者是REJECT(阻塞数据包)。
根据规则处理的数据包类型,可以将规则分组在不同链中。处理入站数据包的规则被添加到INPUT链中;处理出站数据包的规则被添加到OUTPUT链中;处理正在转发的数据包的规则被添加到FORWARD链中。这三个链是基本数据包过滤表中内置的缺省主链。
此外,还有其它许多可用链类型,如PREROUTING和POSTROUTING,以及提供用户定义的链。每个链都可以有一个策略,它定义“缺省目标”,也就是要执行的缺省操作,当数据包与链中的任何规则都不匹配时,执行此操作。
建立规则并将链放在适当的位置之后,就可以开始进行真正的数据包过滤工作。这时内核空间从用户空间接管工作。当数据包到达防火墙时,内核先检查数据包的头信息,尤其是数据包的目的地,这个过程称为路由。
如果数据包源自外界并前往系统,而且防火墙是打开的,那么内核将它传递到内核空间数据包过滤表的INPUT链。如果数据包源自系统内部或系统所连接的内部网上的其它源,并且此数据包要前往另一个外部系统,那么数据包被传递到OUTPUT链。类似的,源自外部系统并前往外部系统的数据包被传递到FORWARD链。接下来,将数据包的头信息与它所传递到的链中的每条规则进行比较,看它是否与某条规则全匹配,如果数据包与某条规则匹配,那么内核就对该数据包执行由该规则的目标指定的操作。但是,如果数据包与这条规则不匹配,那么它将与链中的下一条规则进行比较。最后,如果数据包与链中的任何规则都不匹配,那么内核将参考该链的策略来决定如何处理该数据包。
(1)安装
通常的Linux发行版本都支持iptalbes,很多情况下它已经随着操作系统而被安装。如果在安装操作系统时没有选择防火墙支持,那么需要重新编译内核才能使用iptables。对于如何重新编译内核,这里就不再赘述。关于iptables的安装可以参看iptables使用手册,或者相应How-to文档http://www.linuxguruz.com/iptables/howto/iptables-HOWTO.html
(2)配置
下面介绍iptalbes的常用参数。
◆对规则的操作
加入(append)一个新规则到一个链(-A)的最后。
在链内某个位置插入(insert)一个新规则(-I),通常是插在最前面。
在链内某个位置替换(replace)一条规则(-R)。
在链内某个位置删除(delete)一条规则(-D)。
删除(delete)链内第一条规则(-D)。
◆指定源地址和目的地址
通过“――source/--src/-s”可以指定源地址(这里的/表示或者的意思,下同),通过“—destination/--dst/-s”可以指定目的地址。有四种方法可以指定IP地址:使用完整的域名,如www.buaa.educn;使用IP地址,如192.168.1.1;用X.X.X.X/X.X.X.X指定一个网络地址,如192.168.1.0/255.255.255.0;
用X.X.X.X/X指定一个网络地址,如192.168.1.0/24,这里的24表明了子网掩码的有效位数。
◆指定网络接口
使用”—in-interface/-i”或“—out-interface/-o”来指定网络接口。
◆指定协议及端口
通过“――protocol/-p”选项来指定协议,如果是UDP和TCP协议,还可使用“—source-port/--sport”和“—destination-port/--dport”来指明端口。
关于防火墙的具体应用,这里限于篇幅就不详细介绍,在以后的文章中会以一个具体的例子来说明如何利用iptables的防火墙和网络地址转换(NAT)功能来提供一个安全、稳定、可靠的Internet接入。
小结
Linux系统以其强大的功能和开放的平台,为许多安全工具提供支持。除了以上列举到的Nmap、Nessue、Snort、iptables等软件,将这些软件都集成在一起的工具包有BT4/5 以及后续我给大家介绍的Ossim平台。但掌握这些工具的原理、配置和使用对使用Ossim这个工具非常重要。