网络通信 频道

探测LKM后门

 一、关于LKM
  
  
  所谓LKM,就是Loadable Kernel Modules,这些模块本来是Linux系统用于扩展他的功能的。使用LKM的优点有:他们可以被动态的加载,而且不需要重新编译内核。由于这些优点,他们常常被特殊的设备(或者文件系统),例如声卡等使用。在linux、solaris以及*BSD中都存在同样的技术,这这里主要以linux下的lkm检测为主,结合部份其它系统的信息。
  要了解LKM,我们需要对一些相关的重要文件、目录以及程序有一个基本的了解,首先是/lib/modules/"kernel_version",我们进入这个目录,可以看到:
  
  ------------------------------------------------------------------------------------
  [root@test 2.2.14-5.0]# ls -laF
  total 50
  drwxr-xr-x 11 root root 1024 Apr 5 10:12 ./
  drwxr-xr-x 4 root root 1024 Apr 4 12:02 ../
  -rw-r--r-- 1 root root 149 Mar 8 2000 .rhkmvtag
  drwxr-xr-x 2 root root 1024 Aug 23 1996 block/
  drwxr-xr-x 2 root root 1024 Aug 23 1996 cdrom/
  drwxr-xr-x 2 root root 1024 Aug 23 1996 fs/
  drwxr-xr-x 2 root root 1024 Aug 23 1996 ipv4/
  drwxr-xr-x 2 root root 4096 Aug 23 1996 misc/
  -rw-r--r-- 1 root root 28633 Apr 7 18:35 modules.dep
  -rw-r--r-- 1 root root 31 Apr 7 18:35 modules.generic_string
  -rw-r--r-- 1 root root 81 Apr 7 18:35 modules.isapnpmap
  -rw-r--r-- 1 root root 29 Apr 7 18:35 modules.parportmap
  -rw-r--r-- 1 root root 99 Apr 7 18:35 modules.pcimap
  -rw-r--r-- 1 root root 189 Apr 7 18:35 modules.usbmap
  drwxr-xr-x 2 root root 2048 Aug 23 1996 net/
  drwxr-xr-x 2 root root 1024 Aug 23 1996 pcmcia/
  drwxr-xr-x 2 root root 1024 Aug 23 1996 scsi/
  drwxr-xr-x 2 root root 1024 Aug 23 1996 video/
  -------------------------------------------------------------------------------------
  
  图一
  
  这下面的目录及文件与LKM相关,比如modules.dep对各模块的依赖关系、modules.usbmap与usb设备的lkm都有着密切关系,另外有些与内核模块相关的命令,这些命令在/sbin目录下,一个个说吧:
  modprobe:它可以从modules.dep来查找各个模块的依赖关系,然后加载进去,比如我们在加载网卡ne2000时,经常是用modprobe ne就可以了,而另一个依赖的模块8390.o也会自动地加载进去。
  depmod:处理各种模块的从属关系。
  lsmod:查看系统中加载的模块情况,但由于它是依赖于/proc/modules文件的,如果系统已经被人入侵过,那么这个命令展现出来的东西就不一定是真实的了。
  insmod:加载内核模块的命令,如果我们要加载后门模块,也需要insmod -f troja.o
  rmmod:从内核中删去模块,但是通常情况下,后门内核模块把自己从/proc/modules中摘除后,rmmod已经无法移除了。
  我们可以再来看看/etc/modules.conf,这是对可加载内核模块的一个配置文件,它并不是必需的,你可以man 5 modules.conf看一看,一般情况下我们机器中这一文件看起来象是下面这个样子:
  
  ------------------------------------------
  [root@test quack]# cat /etc/modules.conf
  alias eth0 ne2k-pci
  alias parport_lowlevel parport_pc
  ------------------------------------------
  
  图二
  
  如果对内核模块感兴趣的话,可以看看http://www.kernel.org/LDP/或者其中译版LINUX编程白皮书。也可以参见THC的文章。
  
  
  二、关于LKM后门
  
  
  
  1、knark
  
  
  knark是sekure.net的成员creed开发的一个基于linux 2.2内核的后门模块,这并不是一个稳定版本,里面存在一些或许是故意,或许是无心留下的bug,我们可以先来看看它的功能。
  
  --------------------------------------------------------------------------
  [root@test knark-0.59]# lsmod
  Module Size Used by
  ne2k-pci 4688 1 (autoclean)
  8390 6144 0 (autoclean) [ne2k-pci]
  [root@test knark-0.59]# insmod knark.o
  [root@test knark-0.59]# lsmod
  Module Size Used by
  knark 6944 0 (unused) <-------插入的lkm后门可以由lsmod查出
  ne2k-pci 4688 1 (autoclean)
  8390 6144 0 (autoclean) [ne2k-pci]
  [root@test knark-0.59]# insmod modhide.o <-------插入modhide模块
  [root@test knark-0.59]# lsmod <-------没有knark模块了
  Module Size Used by
  ne2k-pci 4688 1 (autoclean)
  8390 6144 0 (autoclean) [ne2k-pci]
  --------------------------------------------------------------------------
  
  图三
  
  knark的主要功能有隐藏文件、隐藏进程、重定向执行程序、隐藏网络连接、以root身份运行命令、改变用户id、远程执行命令(该功能尚不完善,作者自己注释了),它还有几个比较不错的特性,如:隐藏SIOCGIFFLAGS的标志位中IFF_PROMISC——接口为随机(promiscuous)模式的项,这可以防止部份检测网卡是否为混杂模式的工具发现入侵行为;另外,它能够用kill发送一个31的信号给某进程,以隐藏之。
  
  ----------------------------------------------------------------------------
  [root@test src]# ps -aux |grep quack
  root 412 0.0 1.7 2232 1116 pts/0 S 17:02 0:00 login -- quack
  quack 413 0.0 1.5 1700 940 pts/0 S 17:02 0:00 -bash
  [root@test src]# kill -31 412 413
  [root@test src]# ps -aux |grep quack
  [root@test src]#
  -----------------------------------------------------------------------------
  
  图四
  
  同时它为了入侵者的方便查询,把一些隐藏起来的文件、进程等信息放在/proc/knark里。
  
  
  2、adore
  
  
  adore是由teso小组成员开发的一个lkm后门,当前版本是0.34,能够实现的功能有隐藏文件、隐藏进程、以root身份执行程序并提供了卸载功能(当然它的卸载是需要提供密码验证的),这个后门模块可以支持2.2及2.4的内核,同时易于配置使用。
  
  -----------------------------------------------------------------------------
  root@slackware:/home/quack/adore# ./ava
  Usage: ./ava {h,u,r,R,i,v,U} [file, PID or dummy (for U)]
  
  h hide file
  u unhide file
  r execute as root
  R remove PID forever
  U uninstall adore
  i make PID invisible
  v make PID visible
  
  root@slackware:/home/quack/adore# cat startadore
  #!/bin/sh
  # Use this script to bootstrap adore!
  # It will make adore invisible. You could also
  # insmod adore without $0 but then its visible.
  insmod adore.o <-------插入后门内核模块
  insmod cleaner.o <-------插入隐藏模块
  rmmod cleaner <-------移除该隐藏模块,现在adore已经不可见了
  -----------------------------------------------------------------------------
  
  图五
  
  adore的用途其实我想还在于建立honeypot,可以隐藏起一些东西,让入侵者摸不着头脑。
  
  
  3、其它不常见的lkm小程序
  
  
  a、Rkit-1.01.tgz:这个工具可以将你的编译前定义好的UID设为0,方便提升权限。未隐藏自身。
  b、phide.tar.gz:这个工具可以隐藏进程
  c、test.c:远程backdoor
  ……
  ……
  
  
  三、关于LKM后门的探测
  
  
  
  1、传统rootkit检测方法
  
  
  a、完整性与真实性:用md5 checksums来对一些重要的文件或者二进制文件进行检验,或者用如tripware之类的工具来实现对机器的完整性做一个镜像,或者说,从cdrom等可信赖的介质中安装某些软件包……
  
  b、某些入侵者使用的工具包、小程序中常常会有一些字符串是易于判断的,比如/bin/sh,或者说,它们可能会有些常见的打开的端口——毕竟自己写代码来攻击的人比较少……所以“默认”的东西,还是相当流行的。
  
  
  2、THC的LKM检测理论
  
  
  他们更多地是想防范于未然,在系统受侵害前就先做好一些准备,主要的思路有下面两点。
  
  a、记录每一个模块的加载:把模块加载的情况记录在syslog中——或者其它地方,可以供比较及查对。
  
  #define MODULE
  #define __KERNEL__
  
  #include
  #include
  #include
  #include
  #include
  #include
  #include
  #include
  #include
  #include
  #include
  #include
  #include
  
  exter

文章转载地址:http://www.cnpaf.net/Class/hack/06101110491611161858.html

0
相关文章