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)