自从计算机以网络方式被连接开始,网络安全就成为一个重大问题,随着INTERNET的发展,安全系统的要求也与日俱增,其要求之一就是入侵检测系统。
本文旨在介绍几种常见的入侵检测系统及其理论和实践,需要指出的是,本文仅仅是一篇介绍性的文章,即使我推荐了许多可能的系统,在你相信其可靠性前,最好还是深入的研究一下他们。(NND,烦死我了,要敲4个字,以后我就简称ID得了。入侵检测系统就是IDS :-) )
一、什么是入侵检测。
入侵检测是指监视或者在可能的情况下,阻止入侵或者试图控制你的系统或者网络资源的那种努力。
简而言之,它的工作方式是这样的:你有台机器,被连接到网络上,也许就是被连到了INTERNET上,出于可以理解的原因,你也愿意为被授权者设置从网络上访问你的系统的许可。比如,你有以台连接到INTERNET上的WEB服务器,愿意让客户、职员和潜在客户可以访问存储在WEB服务器上的页面。
然而,你并不愿意那些未经授权的职员、顾客或者其他未经授权的第三方访问系统。比如,你不愿意除了公司雇佣的网页设计人员以外的人员可以修改储存在机器上的页面。典型的做法之一就是使用防火墙或者某种认证系统来防止未经授权的访问。
但是,在一些情况下,简单的使用防火墙或者认证系统也可以被攻破。入侵检测就是这样以种技术,它会对未经授权的连接企图作出反应,甚至可以抵御以部分可能的入侵。
二、为什么要使用ID呢?
以下给出了使用ID的理由:
(1)你需要保护自己的数据安全和系统,而事实是在现在的INTERNET环境下,如果你仅仅使用普通的密码和文件保护方式,你不可能永远保证你数据和系统的安全性。
(2)对于保护数据来说,没有什么比系统的安全更重要了,想就这么把你的机器连上INTETNET而不作任何防护,甚至连管理员密码都不设,就指望这台机器会太平无事,那简直是近乎于痴心妄想。同样,系统对核心文件或者授权数据库(比如NT的SAM和UNIX的/ETC/PASSWord或者/ETC/SHADOW)的保护也是非常重要的。
(3)在通过局域网连接到INTERNET的环境下,经常会采用防火墙或者其他保护措施,如果在NT环境下,如果开放了文件共享,或者允许TELNET,这台机器就需要更好的保护,比如在防火墙中对137-139端口(属于TCP/UDP),SMB协议下的NT文件共享加以限制、使用SSH取代UNIX环境下的TELNET连接。
(4)ID还有进一步的作用,由于被放置在防火墙和被保护的系统之间,ID等于是在系统之上增加了以层保护。比如,通过ID对敏感端口的监测就可以判断防火墙是否已经被攻破,或者防护措施已经被灭了。
三、ID有哪些种类呢?
ID可以分为两大类,
(1)基于网络的系统:这种ID放置于网络之上,靠近被检测的系统,它们监测网络流量并判断是否正常。
(2)基于主机的系统:这种系统经常运行在被监测的系统之上,用以监测系统上正在运行的进程是否合法。我还想补充最近出现的一种ID:位于操作系统的内核之中并监测系统的最底层行为。所有这些系统最近已经可以被用于多种平台。
基于网络的ID
简介
基于网络的IDS是指监测整个网络流量的系统,一块网卡就可能会有两种用途:
普通模式: 受数据包里面所包含的MAC地址决定,数据被发送到目的主机。
任意模式(Promiscuous mode):所有可以被监测到的信息均被主机接收。
网卡可以在普通模式和任意模式之间进行切换,同样,使用操作系统的低级功能就可以完成这种变换。基于网络的IDS一般是需要把网卡设置成后以种模式。
包嗅探和网络监测
包嗅探和网络监测最初是为了监测以太网的流量而设计的,最初的代表性产品就是NOVEL的LANALYSER和MS的NETWORK MONITOR。
这些产品一般会拦截它们在网络上可疑拦截的一切数据包,当一个数据包被拦截后,可能会有以下几种情况:
对包进行累加,在截取的时间段内对数据包进行累加,用以确定该时间段内网络的负载,LANALYSER和MS的NM都在网络负载的表示界面方面有很好的表现。
对数据包进行分析:比如,当你想对抵达一个WEB服务器的数据进行分析时,你往往会先捕获一些数据,然后进行分析。
包嗅探工具在近年有了长足的发展,象ETHEREAL和新版的MSNM都可以对数据包进行详尽的分析。
[1] [2] [3]
最后罗嗦以句(NND,洋人就是P多):工具本身无善恶,全在人心,通过对连接到UNIX的TELNET连接进行包嗅探,就可能可以截取用户的密码,任何一个入侵者一旦得手,首先的事情就是会安装包嗅探器(NND,那是说高手,象俺最多在自己的机器上装个嗅探器,嘿嘿)
包嗅探与任意模式
所有包嗅探都需要网卡被设置为任意模式,因为仅在此模式下,所有通过网卡的数据可以被传送到嗅探器,包嗅探的使用前提是安装他的机器上使用者具有管理员权限
还有一点需要引起注意的是交换机的使用,请注意,不是HUB(NND,当我们中国人没见过交换机啊!),在交换机内,一个接口所接收的数据并不是一定会转发到另一个接口,所以,在这种情况下,包嗅探器并不一定可以发挥其作用。
基于网络的ID:嗅探器的发展
不幸的是,从安全的角度来看,包嗅探器好处有限。要去捕获每一个数据包,然后是分析、手工采取行动,实在是一件烦琐之至的事情,但是,如果用软件来代替我们的劳动呢?
这就是基于网络的ID要干的活。比如经常使用的ISS RealSecure Engine和Network Flight Recorder.
以下给出RealSecure Engine这种ID的作用:
监测网络上的数据传输情况。
如果数据为正常数据,允许其通过(或者留待以后分析),如果数据包被认为可能会危害目的地系统的安全,则发出"connection closed"(使用TCP协议时)或者"port unreachable’(使用ICMP时)以截断数据发送方和接收方之间的连接。
这种情况下,RealSecure可以在防火墙后建立起以个有效的阻止系统,当然,也有在防火墙的位置直接使用RS的,而我(原作者-不是土鳖我啊!)不建议大伙采用这种方法。
基于网络的ID还有一些别的功能,比如:
监测明显的端口扫描。在攻陷系统之前,攻击者一般会扫描系统以发现系统的缺陷,一般说来,INTERNET上来自以台主机的端口扫描往往是有人开始攻击的先兆。
对常见的攻击方式加以监测。通过80端口连接到以台WEB服务器应该看来是以件很正常的事情,但是有些同样通过80端口进行的连接就可能是祸心内藏哦,看看这个命令你就知道了:
“GET /../../../etc/passwd HTTP/1.0”
鉴别各种IP欺骗。用于完成IP和MAC地址之间转换的ARP协议往往是攻击的重点,通过在以太网上向目的地址发布载有虚假ARP数据的数据包,入侵者可以将自己伪装成位于另外一个系统上,这样的结果就是各种拒绝服务攻击,当大型服务器(如DNS或者身份认证服务器)遭到攻击时,入侵者可以将数据包转发到自己的系统上。基于网络的IDS通过登记ARP包,对信息源(以太网地址)进行认定,如果确认信息来自于已经被攻陷的系统,则会对入侵者进行拦截。
如果探测到了有问题的行动,基于网络的ID会自行采取行动,包括重新配置附近的防火墙以拦截所有来自入侵者的数据流.
基于主机的ID
简介
当数据包抵达目的主机后,防火墙和网络监控已经无能为力了,但是还有以个办法可以试试,那就是“基于主机的ID”
基于主机的ID又可以分成两大类:
网络监测:这种监测对抵达主机的数据进行分析并试图确认哪些是潜在的威胁,任何连接都可能是潜在的入侵者所为,请注意,这点与基于网络的ID不同,因为它仅仅对已经抵达主机的数据进行监测,而后者则是对网络上的流量进行监控。如次一来就不需要把网卡设置成××模式了。
主机监测:任何入侵企图(或者成功的入侵)都会在监测文件、文件系统、登录记录或其他主机上的文件中留下痕迹,系统管理员们可以从这些文件中找到相关痕迹。
外来连接监测:
主机可以在数据包真正抵达主机之前对试图进入主机的数据包进行监测,以避免其进入系统后可能造成的损害。
可供选择的处理方式有:
监测未经授权的试图通过TCP或者UDP端口进行的连接,比如如果有人试图通过未开放任何服务的端口进行连接,就往往意味着有人在寻找系统漏洞。
监测端口扫描:在此我再推荐一种方式:调整防火墙或者调整本地IP配置(可以使用Linux下的IPCHAINS)以拒绝来自可能的入侵者的连接请求。
值得推荐的两个文件是ISS的RealSecure Agent和PortSentry.
注册行为监测
即使网管做了最大的努力,安装了最新的IDS,入侵者也有可能使用无法被监测到的的手段来入侵系统,造成这种情况的重要可能之一就是入侵者使用包嗅探恩公工具已经取得了用户密码并能够合法登录系统。
HOSTSENTRY这样的产品的任务之一就是寻找系统的不寻常操作,对用户试图进行注册和注销进行监控,并就这些活动中不正常或者未曾预料的部分向系统管理员报警。
根操作监控
入侵者的最终目的是为了掌握被入侵主机上的根用户权限,如果一台WEB服务器规划的好的话,除了极少数的计划好的维修时间以外,根用户应该很少会有什么操作,但是根用户们也很少按照计划去进行检修,而是逮空就干,但是即使是这样,入侵者也很有可能在兔子都不拉屎的时间或者地方干出些什么事情来。
需要防御的战线还有以条:监视根用户或系统管理员的任何操作。许多UNIX系统允许根用户执行包括登录、监测在内的所有运算,而象LOGCHECK这样的工具则可以对这些登录记录加以监控并提请网管注意。
如果使用了开放源代码的操作系统,网管们只有一个选择:改进内核。如何改进不在本文的讨论范围之内,毕竟INTERNET网上这样的资源很多。
监测文件系统
不管你的愿望如何良好,ID怎么卖命,你也不敢保证系统固若金汤,而系统一旦被攻陷,入侵者就会立即开始更改系统的文件,或者更改一些设置以废掉ID们的武功(哦!要练神功,必先自宫!!)
[1] [2] [3]
软件的安装过程中,不可避免的会更改系统设置,这些设置更改一般会在系统的文件或者LIBRARY的变化中体现出来。
类似于TRIPWIRE,FCHECK和AIDE的程序被设计用于检测系统内的文件变动,并向系统管理员报告。
在所有系统文件上使用MD5或者其他的加密、校验和等手段,将这些设置储存进数据库,当文件变化时,校验和也会发生变化。
注意所有文件的创建和修改时间,以及它们的时戳。
对SUID命令的使用加以监控,任何变化或者新的SUID命令被安装、删除,都可能会是问题的征兆。
不管Tripwire, Fcheck, AIDE玩得怎么花,它们的工作原理就是上面那些东西,它们的作用是保证那些数据库和加密的校验和没出问题。因为不排除这样一种可能,入侵者水平很高,高到足以理解操作系统和IDS,直接就把加密的校验和数据库都改得天衣无缝。
基于内核的ID
基于内核的ID还是以种新生事务,但是成长很快,尤其是在和LINUX的配合方面。
现在有两种基于LINUX的不同的基于内核的ID,它们是OPENWALL和LIDS。它们在防止缓冲区溢出方面有了长足进展,增强了文件系统的保护,拦截信号并使入侵系统变得更加困难。LIDS也采取了一定措施以防止根用户执行一些操作,比如安装嗅探器或者更改防火墙规则等等。
内核保护和文件系统保护
显而易见的是,虽然最终效果相近,LIDS系统和TRIPWIRE系统差别很大,它们都可以用于阻止入侵者出于未经授权的目的使用系统。
乍看之下,虽然象TRIPWIRE这样的系统确实是一个监测文件系统的好东西,人们也可能会认为他意义不大,人们的共识是:一旦你的系统被内在的入侵者攻陷,最好的办法就是关机重装系统。损失已然造成,系统已然玩完,你还是老老实实从恢复盘上重装系统得了。而LIDS提供的服务则更有诱惑一些,如果说一般的家伙是在屋子里面已经被糟践得一塌糊涂后才来跑来告诉你门开着的话,LIDS可能会使你的系统免遭损失。
从理论上说,我也同意以上分析,但是如果将LIDS和TRIPWIRE同时运行,肯定会带来更好的安全性。虽然LIDS在保护文件系统方面有着独到之处,但是如果再加上象TRIPWIRE这样的文件系统监视器,用他作为一个“独立的”审计方,效果肯定会更好,因为HACKER有可能会挫败LIDS的努力。
小结
使用最新的工具可能会抵御一切已知形式的入侵,不幸的是,随着日常实践,新的威胁和软件的安全漏洞却在不断的被发现。
在任何环境下,非常重要的一点是知道你可能面对的所有威胁,要警惕你系统里面可能存在的潜在漏洞并加以修补,以免遭受基于这些漏洞的攻击。
举个例子来说,以台通过防火墙被连接到INTERNET 的主机可以说会免于大多数种攻击,但是机器里的CGI程序则会使机器暴露出脆弱的以面,要尤其注意并确定CGI程序已经被合适的配置,数据在执行前已经被确认合法有效。而一个ID程序则会被放在WEB服务器和防火墙之间以拦截任何可疑的连接。
使用什么软件呢?
以上我们已经探讨了好几种有着不同功能的工具。为了尽量保证你的环境的安全性,根据功能来选择工具就变得非常重要。工具之间“尺有所短,寸有所长”的情况很突出,所以,你的安全防线的第以关应该就是防火墙,然后,在防火墙后侧安装基于网络的IDS用于监视防火墙,再以后呢(老外就是TMD烦),就应该是连接监测工具,比如PORTSEBTRY或者HOSTSENTRY之类的,最后呢,你还可以用LOGCHECK之类的工具来监测那些最终的进入者。
(出处:http://www.sheup.com)
[1] [2] [3]
(出处:http://www.sheup.com)
[1] [2] [3] [4]
使用什么软件呢?
以上我们已经探讨了好几种有着不同功能的工具。为了尽量保证你的环境的安全性,根据功能来选择工具就变得非常重要。工具之间“尺有所短,寸有所长”的情况很突出,所以,你的安全防线的第以关应该就是防火墙,然后,在防火墙后侧安装基于网络的IDS用于监视防火墙,再以后呢(老外就是TMD烦),就应该是连接监测工具,比如PORTSE局域网RY或者HOSTSENTRY之类的,最后呢,你还可以用LOGCHECK之类的工具来监测那些最终的进入者。
(出处:http://www.sheup.com)
[1] [2] [3] [4] [5]