Linux IDS攻略(3)

发表于:2007-06-23来源:作者:点击数: 标签:
Linux IDS攻略 3.通过设置权限来保护 这里的权限就是你给一个进程的权限。一个root进程拥有所有的 性能 ,还存在绑定的权限问题。在一般的内核中,当从绑定集中去掉一种权限时,除非重启任何人都不能启用该权限。LIDS修改权限使用户可以在这些权限中间任意切

   
  Linux IDS攻略
    3.通过设置权限来保护

  这里的权限就是你给一个进程的权限。一个root进程拥有所有的性能,还存在绑定的权限问题。在一般的内核中,当从绑定集中去掉一种权限时,除非重启任何人都不能启用该权限。LIDS修改权限使用户可以在这些权限中间任意切换。对/proc/sys/kernel/cap_bset的访问被俘获,引发安全告警。
   系统的权限值存储在/etc/lids/lids.cap中。编辑它可以满足你的需求
   例如:
   CAP_SYS_RAWIO项若打开,我们就可以允许访问/dev/port,/dev/mem,/dev/kmem,以及对原始块设备(/dev/[sh]d??)的访问。
   当我们取消这个权限时,就可以使运行在系统上的所有进程不能访问原始块设备,比如运行lilo。但是,一些进程的运行需要这些权限,比如XF86_SVGA。
   再比如,CAP_NET_ADMIN,这项权限可以得到以下的能力:接口配置,IP防火墙、伪装和计费的管理,设置sockets调试选项,修改路由表,设置任意进程或进程组对sockets的所有权,为透明proxy代理捆绑地址,设置服务类型,设置混合模式,多播,对设备的指定寄存器进行读写等。出于安全考虑,我们应当取消这项权限,不允许变化网络设置,也就禁止了防火墙规则的改变。
   配置lids.cap文件的方法是在权限名字的前面设置"+"使它有效,或设置"-"取消它。

具体的功能说明:

CAP_CHOWN功能:
在一个_POSIX_CHOWN_RESTRICTED功能定义的系统。这会越过改变系统文件所有者和组所有的权限

CAP_DAC_OVERRIED功能:
如果_POSIX_ACL定义,就会越过所有的DAC访问,包括ACL执行访问,用CAP_LINUX_IMMUTABLE功能来排除DAC的访问

CAP_DAC_READ_SEARCH功能:
如果_POSIX_ACL定义,就会越过所有的DAC的读限制,并在所有的文件和目录里搜索,包括ACL限制。用CAP_LINUX_IMMUTABLE来限制DAC访问

CAP_FOWNER功能:
越过文件说有的允许限制,如文件的所有者ID必须和用户ID一样,除了CAP_FSETID可用。它不会越过MAC和DAC限制

CAP_FSETID功能:
越过当设置文件的S_ISUID和S_ISGID位的时候,用户的ID必须和所有者ID匹配的限制,设置S-ISGID位的时候,组ID必须和所有者ID匹配的限制,用chown来设置S_ISUID和S_ISGID为的功能限制

CAP_FS_MASK功能:
用来回应suser()或是fsuser()。

CAP_KILL功能:
一个有有效用户ID的进程发送信号时必须匹配有效用户ID的功能会越过

CAP_SETGID功能:
允许setgid() 功能, 允许setgroups() 允许在socket里伪造gid

CAP_SETUID功能:
允许set*uid()功能 允许伪造pid在socket

CAP_SETPCAP功能:
把所有的许可给所有的pid。或是把所有的许可删除

CAP_LINUX_IMMUTABLE功能:
允许更改S_IMMUTABLE和S_APPEND文件属性

CAP_NET_BIND_SERVICE功能:
允许绑定1024下的TCP/UDP套接字

CAP_NET_BROADCAST功能:
允许广播,监听多点传送

CAP_NET_ADMIN功能:
允许配置接口
允许管理IP防火墙IP伪装和帐户
允许配置socket调试选项
允许修改路由表
允许配置socket上的进程的组属性
允许绑定所有地址的透明代理
允许配置TOS(服务类型)
允许配置混杂模式
允许清除驱动状态
允许多点传送
允许读或写系统记录

CAP_NET_RAW功能:
允许用RAW套接字
允许用PACKET套接字

CAP_IPC_LOCK功能:
允许琐定共享内存段
允许mlock和mlockall

CAP_IPC_OWNER功能:
越过IPC所有权检查

CAP_SYS_MODULE功能:
插入或删除内核模块

CAP_SYS_RAWIO功能:
允许ioperm/iopl和/dev/prot的访问
允许/dev/mem和/dev/kmem访问
允许块设备访问(/dev/[sh]d??)

CAP_SYS_CHROOT功能:
允许chroot()

CAP_SYS_PTRACE功能:
允许ptrace()任何进程

CAP_SYS_PACCT功能:
允许配置进程帐号

CAP_SYS_ADMIN功能:
允许配置安全钥匙
允许管理随机设备
允许设备管理
允许检查和配置磁盘限额
允许配置内核日志
允许配置域名
允许配置主机名
允许调用bdflush()命令
允许mount()和umount()命令
允许配置smb连接
允许root的ioctls
允许nfsservctl
允许VM86_REQUEST_IRQ
允许在alpha上读写pci配置
允许在mips上的irix_prctl
允许刷新所有的m68k缓存
允许删除semaphores
用CAP_CHOWN去代替"chown"IPC消息队列,标志和共享内存
允许锁定或是解锁共享内存段
允许开关swap
允许在socket伪装pids
允许设置块设备的缓存刷新
允许设置软盘驱动器
允许开关DMA开关
允许管理md设备
允许管理ide驱动
允许访问nvram设备
允许管理apm_bios,串口或是bttv电视设备
允许在isdn CAPI的驱动下生成命令
允许读取pci的非标准配置
允许DDI调试ioctl
允许发送qic-117命令
允许启动或禁止SCSI的控制和发送SCSI命令 允许配置加密口令在回路文件系统上

CAP_SYS_BOOT功能:
允许用reboot() 命令

CAP_SYS_NICE功能:
允许提高或设置其他进程的优先权
允许在自己的进程用FISO和实时的安排和配置

CAP_SYS_RESOURCE功能:
越过资源限制,设置资源限制
越过配额限制
越过保留的ext2文件系统
允许大于64hz的实时时钟中断
越过最大数目的控制终端
越过最大数目的键

CAP_SYS_TIME功能:
允许处理系统时钟
允许_stime
允许设置实时时钟

CAP_SYS_TTY_CONFIG功能:
允许配置终端设备
允许vhangup()终端

  另外,还可以用权限标记专用进程。标记进程的权限使进程具备系统禁止的性能。
   例如,在文件lids.cap中取消CAP_SYS_RAWIO权限,但是你需要在启动X Server的时候具备这个权限。所以,可以这样设置:
   # lidsconf -A -s /usr/X11R6/bin/XF86_SVGA -o CAP_SYS_RAWIO -j GRANT
   使XF86_SVGA具备CAP_SYS_RAWIO,而其它的程序不能得到CAP_SYS_RAWIO。

所以要选择需要删除的功能:
必须删除CAP_SYS_MODULE, CAP_SYS_RAWIO 和 CAP_SYS_ADMIN来保护系统不受小的系统攻击。最好也要禁止CAP_NET_ADMIN, CAP_SYS_PTRACE, CAP_LINUX_IMMUTABLE, CAP_KILL, CAP_SYS_RESOURCE, CAP_SYS_TIME 和 CAP_SYS_TTY_CONFIG

  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=192.168.100.171: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.xfocus.net
   ---------------------------------------

配置好的系统重新启动后,不要忘记用lidsadm封装内核,在最后/etc/rc.local加入以下命令
# /sbin/lidsadm -I
重新启动,如果要关闭lids系统启动,你可以在lilo里用security=0来启动内核。

配置中要注意的几点:
*. 启动
在启动的时候更新文件:
   一些文件需要在系统启动的时候写,但是会被LIDS保护,这些文件一般保存在/var目录下,但是也有一些例外: modules.dep:除了增加或是删除模块外,不需要在启动的时候更改,可以禁止它在启动的时候更新。
   mtab:用-n的选项在每次启动的时候生成一个从/etc/mtab到/proc/mounts的一个连接。如果对/etc/目录进行保护,那么在启动中可能因为mtab不可写而导致启动失败,因此需要将启动脚本中的mount加-n选项,或者单独对/etc下的几个重要目录或文件进行保护。
*. 关机或重起
可能会因为lids.conf配置引起关机是无法umount文件系统,导致重起后检查硬盘文件系统。
所以在lids.conf必须对halt进行配置:
/sbin/lidsconf -A -s /etc/rc.d/init.d/halt -o CAP_INIT_KILL -i 1 -j GRANT
/sbin/lidsconf -A -s /etc/rc.d/init.d/halt -o CAP_KILL -i 1 -j GRANT
/sbin/lidsconf -A -s /etc/rc.d/init.d/halt -o CAP_NET_ADMIN -i 1 -j GRANT
/sbin/lidsconf -A -s /etc/rc.d/init.d/halt -o CAP_SYS_ADMIN -i 1 -j GRANT
*.针对隐藏的进程,因为进程隐藏所以关机的时候无法停止隐藏进程,导致不能正确的umount文件系统,重起的时候会对硬盘进行检查,使启动时间加长,所以在隐藏进程后,要对隐藏的进程的停止脚本加以修改。
例如隐藏了httpd进程后,需要修改/etc/rc.d/init.d/httpd杀死隐藏进程
...
stop() {
echo -n "Shutting down http: "
kill -15 `cat /var/run/httpd.pid`
sleep 5
#killproc httpd
RETVAL=$?
echo
[ $RETVAL = 0 ] && rm -f /var/lock/subsys/httpd /var/run/httpd.pid
}
...

原文转自:http://www.ltesting.net