企业Linux系统主机入侵检测及防御实战

在开源系统中,例如Linux操作系统,从应用到内核层面上提供了3种入侵检测系统来对网络和主机进行防御,它们分别是网络入侵检测系统Snort、主机入侵检测系统LIDS以及分布式入侵检测系统SnortCenter。

企业在实际的入侵检测及防御体系的构建中,有的以网络为主,进行网络威胁的发现和封堵;有的以主机防御为主,主要保证主机不遭受入侵。如果光针对其中一方面进行构建的话,则会存在偏差,建议综合多方面的信息,进行纵深的综合性防御,这样才能起到很好的效果。

在开源系统中,例如Linux操作系统,从应用到内核层面上提供了3种入侵检测系统来对网络和主机进行防御,它们分别是网络入侵检测系统 Snort、主机入侵检测系统LIDS以及分布式入侵检测系统SnortCenter。其中,Snort专注于在网络层面进行入侵检测;LIDS则侧重于在主机层面进行入侵检测和防御;SnortCenter则是为了在分布式环境中提升入侵检测的实时性和准确性的一种分布式检测机制。

在企业的实际应用过程中,经常会忽略LIDS的特殊作用。其实,作为植根于内核层次的主机入侵检测机制,它是开源系统作为主机尤其是服务器不可缺少的安全机制。本文将详细介绍如何使用它进行逐级安全防御。

简介

LIDS是Linux下的入侵检测和防护系统,是Linux内核的补丁和安全管理工具,它增强了内核的安全性,它在内核中实现了参考监听模式以及强制访问控制(Mandatory Access Control)模式。区别于本文在前面部分介绍的Snort入侵检测系统,它属于网络IDS范畴,而LIDs则属于主机IDS范畴。

一般来说,LIDS主要功能包括如下几方面:

重要系统资源保护:保护硬盘上任何类型的重要文件和目录,如/bin、/sbin、/usr/bin、/usr/sbin、/etc/rc.d 等目录和其下的文件,以及系统中的敏感文件,如passwd和shadow文件,防止未被授权者(包括root用户)和未被授权的程序进入。保护重要进程不被终止,任何人包括root也不能杀死进程,而且可以隐藏特定的进程。防止非法程序的I/O操作,保护硬盘,包括MBR保护等等。

入侵检测:LIDS可以检测到系统上任何违反规则的进程。

入侵响应:来自内核的安全警告,当有人违反规则时,LIDS会在控制台显示警告信息,将非法的活动细节记录到受LIDS保护的系统log文件中。LIDS还可以将log信息发到用户的信箱中。并且,LIDS还可以马上关闭与用户的会话。

安装LIDS

第一步:打补丁并配置Linux内核选项安装

LIDS通常需要下载其最新版本的LIDS内核补丁包,然后进行安装。下载的网站为:http://www.lids.org/,目前网站上的最新版本为:lids-2.2.3rc7-2.6.28.patch。首先将下载的LIDS内核补丁包保存到/usr/src目录下,然后以根用户的权限进入命令行模式进行如下步骤地操作:

(1)假设系统内核文件在/usr/src/Linux目录下,通过下列命令安装LIDS内核补丁包:

# cd /usr/src/Linux

# patch p1 < /usr/src/ lids-2.2.3rc7-2.6.28.patch

(2)编辑内核,选取相关选项:

//进入编辑内核界面

# make menuconfig

进入内核编译菜单界面后,建议把有关LIDS的所有项都选中。这样做的目的能让不太熟悉内核编译的用户能省去很多不必要的麻烦,并且将所有的LIDS项都选择上也不会占用多少的内核空间,对加入LIDS后的内核性能也不会产生多少的影响。下面对一些选项进行解释:

Prompt for development and/or incomplete code/drivers

Sysctl support

Linux Intrusion Detection System support.

[ ] Hang up console when raising a security alert

当收到一个安全警告挂起控制台

[ ] Security alert when execing unprotected programs before sealing LIDS

当执行没有受LIDS保护的程序时发送安全警告

[ ] Do not execute unprotected programs before sealing LIDS

在安装LIDS前不执行没有受保护的程序

[ ] Try not to flood logs

尽量不要让日志溢出

[ ] Allow switching LIDS protections

允许转换LIDS保护

[ ] Allow remote users to switch LIDS protections

允许远程用户来转换LIDS保护

[ ] Allow any program to switch LIDS protections

允许任何程序来转换LIDS保护

[ ] Allow reloading config. File

允许重新引导配置文件

[ ] Port Scanner Detector in kernel

内核的端口扫描器

[ ] Send security alerts through network

通过网络发送安全警告

[ ] Hide klids kernel thread

隐藏内核进程

[ ] Use generic mailer pseudo-script

使用通用的邮件发送脚本

(3)在选择好要加入到内核中的LIDS项后,就可以通过下列命令重新编译内核:

# make dep

# make clean

# make bzImage

# make modules

# make modules_install

完成上述内核编译工作后,一个加入了LIDS的内核就重新编译好了。要使加入了LIDS的新内核工作,必需重新启动系统。

第二步:源代码安装LIDS工具包

同样,首先从上述网站上下载LIDS工具包的安装文件,目前网站上的最新版本为:lids-2.3.rc7-2.6.28.patch,然后按如下步骤安装它:

(1)解压缩源码包

# tar -zxvf lids-2.3.rc7-2.6.28.patch

(2)切换目录并生成makefile文件

# cd lids-2.3.rc7-2.6.28

# ./configure

(3)安装

# make

# make install

这样就会将Lidsadm和Lidsconf这两个工具安装到/sbin/目录中,同时会创建一个/etc/lids的目录,并会在此目录下生成一个默认的配置文件。

配置和使用LIDS

基本配置

必须配置LIDS系统,使其符合用户的安全需要。用户可以定义受保护的文件、受保护的进程等等。

首先,更新缺省lids.conf的inode/dev值:

# /sbin/lidsadm –U

然后,获得一个RipeMD-160加密口令:

# /sbin/lidsadm -P

缺省情况下,lidsadm将把缺省配置文件安装到/etc/lids/。用户必须根据自己的需要重新配置。当内核启动时,配置信息就把相关信息读入内核来初始化LIDS系统。需要特别注意该目录中的如下几个相关的配置文件:

lids.conf:这个文件用来存储LIDS ACLs信息。它包括定义对象访问类型的ACLs(访问控制列表);

lids.cap:这个文件包括系统的所有性能,可以编辑这个文件来配置这些性能;

lids.net:这个文件用来配置发给管理员信箱的警告信息。用户可以定义SMTP服务器、端口、消息头等。仅在配置内核时,选择了Send security alerts through network内核配置选项才有该文件;

lids.pw:这个文件存储由“lidsadm –P”命令生成的密码文件。配置内核时需要选择Allow switching LIDS protections选项,就必须有该文件。

Lidsadm工具

Lidsadm是LIDS的管理工具单元,可以用它来管理系统中的LIDS。Lidsadm的作用主要就是启用或停用LIDS,以及封存LIDS到内核中和查看LIDS状态。

使用下列命令可以列出Lidsadm的所有可用选项:

# lidsadm –h

其常用命令参数的具体含义如下:

-s:开关某些保护选项时指示应提交密码;

-I:开关某些保护选项时不提交密码

LIDS_FLAG:为Lidsadm的标志值

-v:显示版本

-V:查看现在LIDS状态

-h:列出所有选项

另外,Lidsadm还包括了许多常用的部分主要功能模块,它们的列表和主要功能说明如表1所示:

表1 Lidsadm主要功能模块说明

企业Linux开源系统主机入侵检测及防御实战

另外,Lidsadm还有如下可用的标志值(Available flags):

LIDS:禁止或激活本地LIDS;

LIDS_CLOBAL:完全禁止或激活LIDS;

RELOAD_CONF:重新加载配置文件。

Lidsconf工具

Lidsconf主要用来为LIDS配置访问控制列表(ACLs)和设置密码。输入以下命令能显示Lidsconf所有的可用选项:

# lidsconf –h

此命令执行后会返回以下命令参数:

-A:增加一条指定的选项到已有的ACL中

-D:删除一条指定的选项

-E:删除所有选项

-U:更新dev/inode序号

-L:列出所有选项

-P:产生用Ripemd-160加密的密码

-V:显示版本

-h:显示帮助

-H:显示更多的帮助

-s [–subject]:指定一个子对像,可以为任何程序,但必须是文件。

-o[object]:可以是文件、目录或功能(capabilities)和socket名称。

-j:它有以下几个参数:

DENY:禁止访问

READONLY:只读

APPEND:增加

WRITE:可写

GRANT:对子对像授与能力

ignore:对设置的对像忽略所有权限

disable:禁止一些扩展特性

其它选项:

-d:目标的可执行domain

-i:继承级别

-t:指定从某一时段到某一时段可以进行怎样的操作

-e:扩展列表

主要使用方法

(1)配置LIDS保护的文件和目录

首先,用户需要根据具体的情况来确定要保护哪些文件。一般情况下,为了保证Linux系统安全,至少需要保护系统二进制文件和系统配置文件,比如:/bin、/sbin/、/usr/、/etc/、/var/log/等。

其次,需要确定以什么方式来保护文件。LIDS提供了如下四种保护类型:

1)拒绝任何人访问:带有DENY标志的文件和目录没有人能够看见,也不能修改。那些非常敏感的文件应该加上DENY标志。其用法如下:

lidsconf -A -o file_to_protected -j DENY

例如,可以使用如下命令来拒绝用户(包括root用户)对/etc/passwd文件的访问:

# lidsconf -A -o /etc/ passwd -j DENY

在重启或重新加载配置文件后,用户将会看到相应的操作遭到LIDS的拒绝,从而保护该文件:

# ls /etc/passwd

ls: /etc/passwd: No such file or directory

2)配制只读文件:任何用户不能改变带有只读标记的文件。比如/etc/passwd、/bin/passwd文件一般属于此类。

其用法如下:

lidsconf -A -o file_to_protect -j READONLY

例如,我们可以保护整个/bin/目录,使之只读,如下命令所示:

# /sbin/lidsconf -A -o /bin/ -j READONLY

也可以保护/etc/passwd文件为只读,如下命令:

# /sbin/lidsconf -A -o /etc/passwd -j READONLY

3)只能追加的文件:一般来说,系统日志文件应定义成此类。比如/var/log/message、/var/log/secure。这些文件只能以追加的模式打开,用户不能修改前面的部分。

其用法如下:

lidsconf -A -o filename_to_protect -j APPEND

例如,我们可以保护系统日志文件,如下命令所示:

# /sbin/lidsconf -A -o /var/log/message -j APPEND

# /sbin/lidsconf -A -o /var/log/secure -j APPEND

我们也可以针对具体的网络服务器日志进行保护:

//保护httpd日志文件

# /sbin/lidsconf -A -o /var/log/httpd -j APPEND

//保护vsftpd日志文件

# /sbin/lidsconf –A –o /var/log/vsftpd –