在linux系统中使用chkrootkit检测rootkit

Rootkit是一个特殊的恶意软件,它可隐藏自身以及指定的文件、进程、网络、链接、端口等信息。Rootkit可通过加载特殊的驱动修改系统内核,进而达到隐藏信息的目的。

Rootkit的三要素就是:隐藏、操纵、收集数据。不同的操作系统会有不同的Rootkit,Linux系统中的Rootkit就被称为LinuxRootkit。

Rootkit具有隐身功能,无论静止时作为文件存在,还是活动时作为进程存在,都不会被察觉,它可能永远存在于计算机中。

无论是那种形式的Rootkit,都需要实现以下功能:

1,远程指令执行

通过网络向Rootkit所驻留的系统发送指令,从而控制远程主机;

2,信息收集

收集系统的活动信息、网络上其它主机的数据信息等;

3,文件隐藏

把目标主机上的特定文件隐藏起来,使其不能通过常规方法查看到,这样就可以隐藏一部分系统被控制的痕迹;

4,进程隐藏

在控制目标主机或收集系统信息时会启动相关的进程,通过Rootkit可以实现对进程的隐藏;

5,网络连接隐藏

将网络连接的端口信息隐藏,利用netstat等工具无法显示隐藏的信息,这样就可以隐秘地向远端发送信息;

6,内核模块隐藏

将Rootkit自身在系统中安装的模块隐藏起来,提高自身生存能力。

Chkrootkit是一种Linux后门入侵检测工具,可以用来检测rootkit后门的工具,rootkit常被入侵者用来入侵控制别人的电脑,危险性很强。而,Chkrootkit工具可以很好的检测到rootkit程序。Chkrootkit运行环境为linux,可以直接通过ftp://chkrootkit.org/pub/seg/pac/chkrootkit.tar.gz地址来下载。

┌──(taiji㉿kali)-[~]
└─$ wget ftp://chkrootkit.org/pub/seg/pac/chkrootkit.tar.gz
--2023-02-10 15:15:31--  ftp://chkrootkit.org/pub/seg/pac/chkrootkit.tar.gz
           => “chkrootkit.tar.gz”
正在解析主机 chkrootkit.org (chkrootkit.org)... 187.33.4.179
正在连接 chkrootkit.org (chkrootkit.org)|187.33.4.179|:21... 已连接。正在以 anonymous 登录 ... 登录成功!==> SYST ... 完成。   ==> PWD ... 完成。==> TYPE I ... 完成。 ==> CWD (1) /pub/seg/pac ... 完成。==> SIZE chkrootkit.tar.gz ... 41948
==> PASV ... 完成。   ==> RETR chkrootkit.tar.gz ... 完成。长度:41948 (41K) (非正式数据)

chkrootkit.tar.gz           100%[=========================================>]  40.96K  39.8KB/s  用时 1.0s    

2023-02-10 15:15:43 (39.8 KB/s) - “chkrootkit.tar.gz” 已保存 [41948]

随后进行解压缩:

┌──(taiji㉿kali)-[~]
└─$ tar zxvf chkrootkit.tar.gz                                       
chkrootkit-0.57/ACKNOWLEDGMENTS
chkrootkit-0.57/check_wtmpx.c
chkrootkit-0.57/chkdirs.c
chkrootkit-0.57/chklastlog.c
chkrootkit-0.57/chkproc.c
chkrootkit-0.57/chkrootkit
chkrootkit-0.57/chkrootkit.lsm
chkrootkit-0.57/chkutmp.c
chkrootkit-0.57/chkwtmp.c
chkrootkit-0.57/COPYRIGHT
chkrootkit-0.57/ifpromisc.c
chkrootkit-0.57/Makefile
chkrootkit-0.57/README
chkrootkit-0.57/README.chklastlog
chkrootkit-0.57/README.chkwtmp
chkrootkit-0.57/strings.c
                                                                                                              

打开文件夹,输入make命令进行编译:

┌──(taiji㉿kali)-[~]
└─$ cd chkrootkit-*
                                                                                                              
┌──(taiji㉿kali)-[~/chkrootkit-0.57]
└─$ make
cc -DHAVE_LASTLOG_H -o chklastlog chklastlog.c
chklastlog.c: In function ‘main’:
chklastlog.c:112:9: warning: ‘memcpy’ reading 127 bytes from a region of size 14 [-Wstringop-overread]
  112 |         memcpy(wtmpfile, WTMP_FILENAME, 127);
      |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
chklastlog.c:113:9: warning: ‘memcpy’ reading 127 bytes from a region of size 17 [-Wstringop-overread]
  113 |         memcpy(lastlogfile, LASTLOG_FILENAME, 127);
      |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
cc -DHAVE_LASTLOG_H -o chkwtmp chkwtmp.c
chkwtmp.c: In function ‘main’:
chkwtmp.c:73:8: warning: ‘memcpy’ reading 127 bytes from a region of size 14 [-Wstringop-overread]
   73 |        memcpy(wtmpfile, WTMP_FILENAME, 127);
      |        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
cc -DHAVE_LASTLOG_H   -D_FILE_OFFSET_BITS=64 -o ifpromisc ifpromisc.c
cc  -o chkproc chkproc.c
cc  -o chkdirs chkdirs.c
cc  -o check_wtmpx check_wtmpx.c
cc -static  -o strings-static strings.c
cc  -o chkutmp chkutmp.c

直接运行其chkrootkit可执行文件即可,它会对系统进行全面的rootkit检测:

┌──(taiji㉿kali)-[~/chkrootkit-0.57]
└─$ sudo ./chkrootkit       
[sudo] taiji 的密码:ROOTDIR is `/'
Checking `amd'... not found
Checking `basename'... not infected
Checking `biff'... not found
Checking `chfn'... not infected
Checking `chsh'... not infected
Checking `cron'... not infected
Checking `crontab'... not infected
Checking `date'... not infected
Checking `du'... not infected
Checking `dirname'... not infected
Checking `echo'... not infected
Checking `egrep'... not infected
Checking `env'... not infected
Checking `find'... not infected

上面是chkrootkit基本用法,下面再来加深些印象,首先chkrootkit可通过h参数来查看基本的帮助信息,了解其他参数及用法,如下:

┌──(taiji㉿kali)-[~/chkrootkit-0.57]
└─$ chkrootkit -h  
Usage: /usr/sbin/chkrootkit [options] [test ...]
Options:
        -h                show this help and exit
        -V                show version information and exit
        -l                show available tests and exit
        -d                debug
        -q                quiet mode
        -x                expert mode
        -e 'FILE1 FILE2'  exclude files/dirs from results. Must be followed by a space-separated list of files/dirs.
                          Read /usr/share/doc/chkrootkit/README.FALSE-POSITIVES first.
        -s REGEXP         filter results of sniffer test through 'grep -Ev REGEXP' to exclude expected
                          PACKET_SNIFFERs. Read /usr/share/doc/chkrootkit/README.FALSE-POSITIVES first.
        -r DIR            use DIR as the root directory
        -p DIR1:DIR2:DIRN path for the external commands used by chkrootkit
        -n                skip NFS mounted dirs

示例1:chkrootkit默认检索整个系统,我们可以通过管道去搜索INFECTED(被感染)关键字,方便查看:

┌──(taiji㉿kali)-[~/chkrootkit-0.57]
└─$ ./chkrootkit | grep INFECTED

我这里是刚装的新系统,chkrootkit不应该报结果,如果有报结果,就注意查看可执行文件。

示例2:Chkrootkit也可检查系统命令是否受感染,例如ps、ls,如下

┌──(taiji㉿kali)-[~/chkrootkit-0.57]
└─$ ./chkrootkit ps ls          
./chkrootkit needs root privileges
                                                                                                              
┌──(taiji㉿kali)-[~/chkrootkit-0.57]
└─$ sudo ./chkrootkit ps ls
ROOTDIR is `/'
Checking `ps'... not infected
Checking `ls'... not infected

示例3:chkrootkit可传入sniffer参数来检查网络接口是否处于混杂模式,混杂模式下的网络接口会接受所有经过自己的数据流,一般管理员调试或者黑客入侵搜集信息时会用到,而正常情况下网络接口都处于非混杂模式,即只接受目标地址是自己的数据流,wireshark抓包即混杂模式接受所有数据流。

┌──(taiji㉿kali)-[~/chkrootkit-0.57]
└─$ ./chkrootkit sniffer
./chkrootkit needs root privileges
                                                                                                              
┌──(taiji㉿kali)-[~/chkrootkit-0.57]
└─$ sudo ./chkrootkit sniffer
ROOTDIR is `/'
Checking `sniffer'... eth0: PF_PACKET(/usr/sbin/NetworkManager, /usr/sbin/NetworkManager)


作者: 张津东

群而不党,和而不同,自由理性皆容纳。

发表回复