LIDS功能及其安装和配置
随着因特网中LINUX操作系统知名度的提升,目前在GNU/Linux系统中也发现了越来越多的安全漏洞。许多漏洞是由于程序员不懂安全编程引起的,例如缓冲区溢出、格式化字符串攻击。当系统出现了这种漏洞,黑客就会取得root权限,整个系统也就在黑客的控制之下可以做任何事情了。
我们知道,虽然LINUX的源代码是开放的,系统管理员可以尽可能多得发现系统的漏洞并打上补丁,但是,很多管理员却往往懒得去做,黑客要攻入他们的系统、取得ROOT SHELL真是太容易了。LIDS就是针对这种情况提出的解决方案。
一、 LIDS的功能
先让我们对目前系统存在的漏洞略作浏览:
文件系统没有在保护之下
事实上,很多重要的文件比如/bin/login就是这样,当黑客进入系统时,它可以用自己的程序来替换这个文件,再次登录就可以不用任何密码了。这是一个特洛伊木马的例子。但是除非要升级整个系统,频繁地改变这些文件并不现实,因此迫切需要一个安全内核来两全其美。
进程也没有在保护之下
系统中的进程是为系统的某一功能服务的,例如HTTPD进程就是为了远程客户机上的浏览器内容服务的。对WEB服务器来说,保护它的进程免于非法终止是很重要的,但是假如入侵者获取了ROOT权限,管理员将对此束手无策。
系统管理也没有在保护之下
很多系统管理功能,像转载/卸载模块,路由安装模块,防火墙控制模块等都可能被ID=0的进程修改。
另外,目前系统中ROOT权限往往过大,做为ROOT,他可以轻而易举地改变现存系统本来就具有的功能。
以上我们看出,LINUX系统不仅需要系统的访问控制,还需要一些新的模块来处理以上问题。这就是LIDS所作的工作。
LIDS在LINUX内核中负责进行监视和强制接入控制,它首先限制ROOT的权限,原来的选择文件权限、系统/网络的管理、设备、内存及输入输出的操作权限ROOT可能不再具有,LIDS利用并扩展绑定到系统上的权限来控制整个系统,增加网络和文件系统的安全性能。你可以联机调整安全性能,隐藏敏感的进程,并可通过网络收到安全警告。
LIDS的特性总起来说有三点:
1.入侵防护
它能保护重要的文件,进程和设备(例如内存、硬盘包括引导区)不被非授权的人改动,包括非授权的 root。
利用系统提供的性能来对整个系统做更多的防护。
2.入侵监测
它还提供对端口扫描的监测.
3.入侵响应
在发现系统受到攻击后, 它能及时的将必要的信息记到日志文件中, 还可以将其发送到管理员的信箱中.
二、 下面,我们来介绍LIDS系统的安装
下载LIDS补丁和相关LINUX内核
你可以在LIDS主页和LIDS FTP站点或者其它LIDS镜像站点下载,下载包的名称一般是lids-x.xx-y.y.y.tar.gz的形式,x.xx表示LIDS的版本,y.y.y代表LINUX内核的版本。比如,lids-0.9.9-2.2.17.tar.gz的意思是lids的版本为0.9.9,而相应内核版本是2.2.17。下载时这两者的版本应相互对应。下载后再把它们分别解压。
1. 解压LINUX内核源代码
# cd linux_install_path/
# bzip2 -cd linux-2.2.17.tar.bz2 | tar -xvf -
2. 解压LIDS源代码并安装LIDSADM工具
# cd lids_install_path
# tar -zxvf lids-0.9.8-2.2.17.tar.gz
3.安装lids补丁到Linux内核源代码
# cd linux_install_path/linux
# patch -p1
/* 链接缺省源代码路径到lids补丁版本*/
# rm -rf /usr/src/linux
# ln -s linux_install_patch/linux /usr/src/linux
4.配置Linux内核
# cd linux
# make menuconfig or make xconfig
现在,就可以配置内核了。
把下面的选项打开:
[*] Prompt for development and/or incomplete code/drivers
[*] Sysctl support
接下来,在配置菜单底部出现新的一项:''Linux Intrusion Detction System'',进入这一项,把下面的选项打开:
[*] Linux Intrusion Detection System support (EXPERIMENTAL) (NEW).
在配置LIDS内核选项之后,关闭配置界面,编译内核。
# make dep
# make clean
# make bzImage
# make modules
# make modules_install
5.安装LIDS和管理工具。拷贝bzImage到/boot/,编辑/etc/lilo.conf文件。
--------------------------------------------------------------------------------
# cp arch/i386/boot/bzImage /boot/bzImage-lids-0.9.9-2.2.17
/* build admin tools */
# cd lids-0.9.8-2.2.17/lidsadm-0.9.8/
# make
# make install
# less /etc/lilo.conf
boot=/dev/hda
map=/boot/map
install=/boot/boot.b
prompt
timeout=50
default=linux
image=/boot/vmlinuz-2.2.16-3
label=linux
read-only
root=/dev/hda2
image=/boot/bzImage-lids-0.9.9-2.2.17
label=dev
read-only
root=/dev/hda2
--------------------------------------------------------------------------------
6.运行lilo,加载新内核
# /sbin/lilo
7.配置LIDS系统
重启之前,应该配置LIDS系统使他符合你的要求。你可以定义受保护的文件、进程、设备等。缺省情况下,lidsadm将安装/etc/lids/下面的缺省配置文件。你必须重新配置它使其符合你的要求。具体的配置方法后面再作介绍。
# /sbin/lidsadm -U
8.重启系统
当你配置好Linux系统时,重启你的系统。当lilo出现时,选择lids加载内核。这时候,你就进入了精彩的LIDS世界了。
9.封闭内核
当系统重启后,别忘了用lidsadm为内核打封,把下面这条命令加到/etc/rc.local的最后一行中。
你可以查阅lids howto文档理解lidsadm每一个选项的含义。
---------------------------------------------
# /sbin/lidsadm -I
---------------------------------------------
10.联机管理。
封闭内核之后,系统就处于LIDS的保护之下了。你可以在上面做些测试。若你想改变一些配置,比如改变选项的性能,就可以输入密码联机改变lids的安全级别。
----------------------------------------------
# /sbin/lidsadm -S -- -LIDS
----------------------------------------------
当你改变了lids的配置值(例如lids.conf,lids.cap)之后,可以用下面的命令重新把配置文件装入内核。
-----------------------------------------------
# /sbin/lidsadm -S -- +RELOAD_CONF
-----------------------------------------------
三、配置LIDS系统
LIDS的配置目录是:''/etc/lids/'',安装了lidsadm之后,你会发现它在/etc/lids/下生成了一个lids配置目录。当内核启动时,配置信息就把相关信息读入内核来初始化LIDS系统。
下面,我们来看几个配置文件的作用:
lids.conf
这个文件用来存储LIDS ACLs信息。它包括定义对象访问类型的ACLs。
lids.cap
这个文件包括系统的所有性能,你可以编辑这个文件来配置这些性能。仅仅通过在性能前面加上+或者-来增加或减少相关性能。安装系统的时候,lids.cap文件是被缺省设置。
lids.net
这个文件用来配置发给管理员信箱的警告信息。你可以定义SMTP服务器、端口、消息头等。当你配置内核时,选择了[*] Send security alerts through network (NEW)就必须有这个文件。
lids.pw
这个文件存储由''lidsadm -P''命令生成的密码文件。如果你配置内核时选择了[*] Allow switching LIDS protections (NEW),就必须有这个文件。
注意:如果要变换你的lids保护等级,不要忘了运行"lidsadm -P"来重启内核。
1.配置LIDS保护文件和目录
首先,确定你要保护哪些文件。一般情况下,保护系统二进制文件和系统配置文件,比如: /usr/,/etc/,/var/log/。
其次,你必须决定以什么方式来保护文件。LIDS提供四种保护类型。
a.拒绝任何人访问
带有DENY标志的文件和目录没有人能够看见,也不能修改。那些非常敏感的文件应该加上DENY标志。例如,/etc/shadow文件。
--------------------------------------------------------------------------------
用法:
lidsadm -A -o file_to_protected -j DENY
# lidsadm -A -o /etc/shadow -j DENY
重启或重新加载配置文件后,你会看到:
# ls /etc/shadow
ls: /etc/shadow: No such file or directory
--------------------------------------------------------------------------------
接下来,你还需要一些设置使一些特有的程序能够访问这些文件,比如,登录到系统的时候,/bin/login文件需要从有DENY标记的/etc/shadow文件中读密码。
--------------------------------------------------------------------------------
用法:
lidsadm -A -s SUBJECT_PROGRAM -o OBJECT_PROGRAM -j READ/WRITE/APPEND
# lidsadm -A -s /bin/login -o /etc/shadow -j READ
--------------------------------------------------------------------------------
当你配置好而且重启系统或重新加载配置文件后,你可以登录进系统,但不能看到/etc/shadow。这就是强制访问控制的一个例子。
b.只读文件
任何用户不能改变带有只读标记的文件。比如/etc/passwd,/bin/passwd文件一般属于此类。
--------------------------------------------------------------------------------
用法:
lidsadm -A -o file_to_protect -j READ
例子:
1.保护整个/sbin/目录,使之只读。
# /sbin/lidsadm -A -o /sbin/ -j READ
2.保护/etc/passwd文件为只读
# /sbin/lidsadm -A -o /etc/passwd -j READ
--------------------------------------------------------------------------------
c.只能追加的文件
一般来说,系统日志文件应定义成此类。比如,/var/log/message,/var/log/secure。这些文件只能以追加的模式打开,用户不能修改前面的部分。
--------------------------------------------------------------------------------
用法:
lidsadm -A -o filename_to_protect -j APPEND
例子:
1.保护系统日志文件
# /sbin/lidsadm -A -o /var/log/message -j APPEND
# /sbin/lidsadm -A -o /var/log/secure -j APPEND
2.保护apache httpd日志文件
# /sbin/lidsadm -A -o /etc/httpd/logs/ -j APPEND
--------------------------------------------------------------------------------
d.可写文件
以上READ,APPEND,WRITE属于LIDS对文件采取的强制访问控制(MAC)。
通过LIDS的这个功能,就可以定义哪个程序可以对哪个文件采取什么样的访问模式。比如,定义/home/httpd/对任何人DENY,并且定义/usr/sbin/httpd能够从所在目录READ。在这种情况下,Web服务器像一般的Web服务器一样,只是在/home/httpd/目录下的内容和程序不能被看到和修改。即使入侵者利用httpd的漏洞获得了ROOT权限,他也也看不到在root shell里面的文件。即使他重写缓冲区,在httpd服务器中加入一些病毒代码,他也只能读出/home/httpd下面的文件而实质上无法修改它们。
--------------------------------------------------------------------------------
# lidsadm -A -o /home/httpd -j DENY
# lidsadm -A -s /usr/sbin/httpd -o /home/httpd -j READ
--------------------------------------------------------------------------------
这里是Philippe Biond的LIDS HOWTO文档里面的一个例子:
--------------------------------------------------------------------------------
lidsadm -Z
lidsadm -A -o /boot -j READ
lidsadm -A -o /vmlinuz -j READ
lidsadm -A -o /lib -j READ
lidsadm -A -o /root -j READ
lidsadm -A -o /etc -j READ
lidsadm -A -o /sbin -j READ
lidsadm -A -o /usr/sbin -j READ
lidsadm -A -o /bin -j READ
lidsadm -A -o /usr/bin -j READ
lidsadm -A -o /usr/lib -j READ
lidsadm -A -o /var/log -j APPEND
--------------------------------------------------------------------------------
2.配置LIDS保护进程
a.不可杀死的进程
LIDS能够保护父进程是init(pid=1)的进程,按照下面的命令配置/etc/lids/lids.cap里面的性能:
-29:CAP_INIT_KILL
b.隐藏的进程
这些进程看不到,用ps命令或者在/proc里面也看不到。
--------------------------------------------------------------------------------
例子:
lidsadm -A -s /usr/sbin/httpd -t -o CAP_HIDDEN -j INHERIT
--------------------------------------------------------------------------------
3.通过设置权限来保护
这里的权限就是你给一个进程的权限。一个root进程拥有所有的性能。还存在一种绑定的权限。在一般的内核中,当从绑定集中去掉一种权限时,除非重启任何人都不能启用该权限。
LIDS修改这种行为使用户可以在这些权限中间任意切换。对/proc/sys/kernel/cap_bset的访问被俘获,引发安全告警。lidsadm负责所有的处理。
系统的权限值存储在/etc/lids/lids.cap中。编辑它可以满足你的需求。
这里我们讨论其中的两个。
CAP_SYS_RAWIO项若打开,我们就可以允许访问ioperm/iopl,/dev/port,/dev/mem,/dev/kmem,以及对原始块设备(/dev/[sh]d??)的访问。
当我们取消这个权限时,就可以使运行在系统上的所有进程不能访问原始块设备,比如运行lilo。但是,一些进程的运行需要这些权限,比如XF86_SVGA。在这种情况下,编译内核时我们把这个程序如外单列出。
再比如,CAP_NET_ADMIN,这项权限可以得到以下的能力:接口配置,IP防火墙、伪装和计费的管理,设置sockets调试选项,修改路由表,设置任意进程或进程组对sockets的所有权,为透明proxy代理捆绑地址,设置服务类型,设置混合模式,多播,对设备的指定寄存器进行读写等。出于安全考虑,我们应当取消这项权限,不允许变化网络设置,也就禁止了防火墙规则的改变。
配置lids.cap文件的方法是在权限名字的前面设置"+"使它有效,或设置"-"取消它。
例如:
--------------------------------------------------------------------------------
### 0: In a system with the _POSIX_CHOWN_RESTRICTED option defined, this overrides the restriction
### 0: of changing file ownership and group ownership.
#
-0:CAP_CHOWN
### 1: Override all DAC access, including ACL execute access if _POSIX_ACL is defined. Excluding
### 1: DAC access covered by CAP_LINUX_IMMUTABLE.
#
+1:CAP_DAC_OVERRIDE
--------------------------------------------------------------------------------
上面这个例子使CAP_CHOWN有效,取消CAP_DAC_OVERRIDE。仔细查阅lids.cap文件,看看你的系统具有什么样的权限。
还可以用权限标记专用进程。标记进程的权限使进程具备系统禁止的性能。
例如,在文件lids.cap中取消CAP_SYS_RAWIO权限,但是你需要在启动X Server的时候具备这个权限。所以,可以这样设置:
# lidsadm -A -s /usr/X11R6/bin/XF86_SVGA -t -o CAP_SYS_RAWIO -j INHERIT
使XF86_SVGA具备CAP_SYS_RAWIO,而其它的程序不能得到CAP_SYS_RAWIO。
最后,不要忘了封闭内核。
因为直到封闭内核之前,所设置的系统权限还是无效的。你必须把下面的一行加到RedHat的/etc/rc.d/rc.lacal文件中,或者对于其它系统,加入启动初始文件中。
-----------------------------------------------------------
#/sbin/lidsadm -I
-----------------------------------------------------------
LIDS还为网络安全提供了升级。可以利用权限设置来提高网络安全性,比如反sniferring,禁止捆绑1024以下的端口,禁止改变防火墙和路由规则。建议你仔细看看每一项性能的意思。
4.内核扫描检测
LIDS在内核中提供扫描监测器,检测谁正在扫描你的系统。它能够检测出half-open 扫描,SYN秘密端口扫描,秘密FIN,Xmas或NULL扫描等。像nmap,satan这样的流行扫描工具可以被检测出。
即使原始套接口不能工作时它仍能起作用,因为它不用任何套接口。在这种情况下,一些基于sniffering的用户空间检测器不能工作了。
若你想要利用LIDS的这项性能,在编译内核时选上就可以了。
5.入侵响应系统
当LIDS检测到一些定义的规则被破坏时,它用下面的方法做出响应:
a.记录相关信息。
当某人破坏这些规则时,lids_security_log记录相关信息,记录工作同样具有anti_logging_flood的能力。编译内核时你可以设置这个选项。
b.通过mail服务器记录信息。
LIDS可以把日志送到你的信箱里面去。你可以在/etc/lids/lids.net中定义邮件服务器的IP,出口邮件的地址等。
这里有一个例子。
--------------------------------------------------------------------------------
MAIL_SWITCH=1
# MAIL_RELAY=hex IP:port
# IP11.1 of the machine that will be directly connected by LIDS
# for relaying its mails. Port is usually 25, but who knows...
MAIL_RELAY=210.73.88.149:25
# MAIL_SOURCE=source machine :
# Name of the source machine, used for the ehlo identification.
# Note that a bad name here could make the mail relay refuse your
# mails.
MAIL_SOURCE=lids.chinacluster.com
--------------------------------------------------------------------------------
在这个例子中,SMTP服务器是210.73.88.149,端口号为25。邮件来源被用来作EHLO认证。
控制台挂起。一旦用户干扰了正常规则的运行,控制台自动挂起。
参考资料:http://www.lids.org/
转载地址:http://www.netsp.com.cn/Article/netsafe/idsips/200506/20050602135658.html