恶意软件监测工具-chkrootkit
2021-08-26 11:51:10 阿炯

chkrootkit是用来监测 rootkit 是否被安装到当前系统中的工具。采用C语言开发并在BSD协议下授权。


locally checks for signs of a rootkit.

Rootkit是一类特殊的恶意软件,被入侵者经常使用的工具,它可隐藏自身以及指定的文件、进程、网络、链接、端口等信息。Rootkit可通过加载特殊的驱动修改系统内核,进而达到隐藏信息的目的。Rootkit的三要素就是:隐藏、操纵、收集数据。不同的操作系统会有不同的Rootkit,Linux系统中的Rootkit就被称为LinuxRootkit。


Rootkit具有隐身功能,无论静止时作为文件存在,还是活动时作为进程存在,都不易被察觉,可能永远存在于计算机中。这类工具通常非常的隐秘、令用户不易察觉,通过这类工具,入侵者建立了一条能够常时入侵系统,或者说对系统进行实时控制的途径。所以需要用 chkrootkit 来定期监测系统,以保证系统的安全。

与Tripwire或AIDE类似,chkrootkit也是“事后工具”,其只能针对系统可能的漏洞以及已经被入侵的部分进行分析,它并没有防止入侵的功能。


Rootkit特征集:
1.远程指令执行
通过网络向Rootkit所驻留的系统发送指令,从而控制远程主机;

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

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

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

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

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

安装与使用

Chkrootkit需要进行编译,安装前系统要安装gcc环境与glibc包。解压缩后进入chkrootkit目录使用make sense命令进行编译。这里要注意的是编译命令为make sense,make命令本身没有sense参数。make命令执行时,需要有一个makefile文件,来告诉make命令如何去编译程序,makefile定义了一系列规则来指定哪些文件需要先编译,哪些需要后编译,哪些需要重新编译等。

makefile文件可接受参数来编译相应的程序,其参数可通过make命令传递,例如上面的make sense,找到makefile文件,发现其中可接受sense参数,此参数后跟了其他剩余的编译参数,其他剩余的编译参数都有对应的需要编译的文件,所以这里的sense参数作用即按指定的文件顺序进行编译。可将编译出来的二进制文件复制到指定目录后,执行即可。CentOS 7.x 可能会出现提示系统缺少netstat命令,可通过yum安装net-tools包来解决此问题。

安装问题:

在编译chkrootkit时报
# make sense
cc -static  -o strings-static strings.c
/usr/bin/ld: cannot find -lc
collect2: error: ld returned 1 exit status
make: *** [strings-static] Error 1

/usr/bin/ld: 找不到 -lc
collect2: 错误:ld 返回 1
make: *** [strings-static] 错误 1

新版本的Linux操作系统下安装 glibc-devel、glibc和gcc-c++时,都不会安装libc.a. 只安装libc.so.

所以当使用-static选项时,libc.a不能使用,只能报找不到libc了(即软件使用了静态编译,没有使用动态编译方法;在使用静态选项编译时会报找到静态包,因为默认没有安装)。解决方法如下:

安装glibc-static
yum install glibc-static glibc-utils

# rpm -aq|grep glibc
glibc-common-2.17-326.el7_9.x86_64
glibc-headers-2.17-326.el7_9.x86_64
glibc-2.17-326.el7_9.x86_64
glibc-devel-2.17-326.el7_9.x86_64

# yum install glibc-static glibc-utils

再进行编译就应该没有问题了。
# make clean
# make sense


Rootkit是单个或一组软件,它针对一个或者多个弱点进行获取正式权限的攻击,或者对目标主机进行其他任何类型的攻击。很多Rootkit不仅仅是发起一个攻击以获得root权限,其同时还试图掩藏和清除攻击的行为。为了达到掩盖的目的,它们删除日志文件、安装特洛伊木马或采取其他的掩盖方法。就像网络中别的攻击一样,Rootkit通常也具有特征并且会留下一些蛛丝马迹,这些都是可以用来识别出它们。我们这里有专门的软件可对Rootkit的踪迹和特征进行查找,其中之一就是chkrootkit。该指令会对系统上的重要文件进行扫描,以上结果显示是正常的,一般是没有文件感染,如果Chkrootkit显示有文件感染,请认真查看是否是误报,如果有文件感染了Rootkit,请立即从网络上断开你的服务,同时采取措施进行Rootkit的清理。可以将其加入crontab定时任务,定期进行扫描,看情况而定。


Usage: ./chkrootkit [options] [test ...]
Options:
-h 显示帮助信息
-V 显示版本信息
-l 显示测试内容
-d debug模式,显示检测过程的相关指令程序
-q 安静模式,只显示有问题部分
-x 高级模式,显示所有检测结果
-r dir 设定指定的目录为根目录
-p dir1:dir2:dirN 检测指定目录
-n 跳过NFS连接的目录


使用示例

示例1:chkrootkit默认检索整个系统,可以通过管道去搜索INFECTED(被感染)关键字,方便查看。当系统的临时目录tmp下有可执行文件时,chkrootkit就会报这个问题。

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

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


Rootkit检测配合工具RKHunter

安装RKHunter
wget https://sourceforge.net/projects/rkhunter/files/latest/download/rkhunter-1.46.tar.gz
tar -zxvf rkhunter-1.46.tar.gz 解压
cd rkhunter-1.4.6
./installer.sh --layout default --install 默认安装

运行RKHunter
/usr/local/bin/rkhunter -c 运行此工具, 需要按回车键继续检测

第一部分是进行系统命令的检查,ok表示正常,warning 表示有异常,Not found 不用理会,

第二部分是检测常见的rootkit程序,

第三部分是一些特殊的附加检测

第四部分是对网络,系统端口,系统启动文件,系统用户,组配置,等等

第五部分是应用程序进行检测

第六部分是对上面输出的一个总结

指令参数说明
#/usr/local/bin/rkhunter
Usage: rkhunter {--check | --update | --versioncheck |
--propupd [{filename | directory | package name},...] |
--list [{tests | {lang | languages} | rootkits},...] |
--version | --help} [options]

Current options are:
--append-log 在日志文件后追加日志,而不覆盖原有日志
--bindir ... Use the specified command directories
-c, --check 检测当前系统
--cs2, --color-set2 Use the second color set for output
--configfile 使用特定的配置文件
--cronjob 作为cron定期运行
   (包含参数 -c, --sk , --nocolors )
--dbdir Use the specified database directory
--debug Debug模式(不要使用除非要求使用)
--disable [,...]  跳过指定检查对象(默认为无)
--display-logfile 在最后显示日志文件内容
--enable  [,...]  对指定检测对象进行检查
   (默认检测所有对象)
--hash {MD5 | SHA1 | NONE |   使用指定的文件哈希函数} (Default is SHA1)
-h, --help 显示帮助菜单
--lang, --language 指定使用的语言
(Default is English)
--list [tests | languages | rootkits]  罗列测试对象明朝,使用语言,可检测的木马程序
-l, --logfile [file] 写到指定的日志文件名
(Default is /var/log/rkhunter.log)
--noappend-log 不追加日志,直接覆盖日志文件
--nocolors 输出只显示黑白两色
--nolog 不写入日志文件
--nomow, --no-mail-on-warning 如果有警告信息,不发送邮件
--ns, --nosummary 不显示检查结果的统计数据
--novl, --no-verbose-logging 不显示详细记录
--pkgmgr {RPM | DPKG | BSD | NONE}   使用特定的包管理用于文件的哈希值验证
(Default is NONE)
--propupd [file | directory | package]... 更新整个文件属性数据库或仅仅更新指定条目
-q, --quiet 安静模式(no output at all)
--rwo, --report-warnings-only 只显示警告信息
-r, --rootdir 使用指定的root目录
--sk, --skip-keypress 自动完成所有检测,跳过键盘输入
--summary 显示检测结果的统计信息
(This is the default)
--syslog [facility.priority] 记录检测启动和结束时间到系统日志中
(Default level is authpriv.notice)
--tmpdir 使用指定的临时目录
--update 检测更新内容
--vl, --verbose-logging 使用详细日志记录 (on by default)
-V, --version 显示版本信息
--versioncheck 检测最新版本
-x, --autox 当X在使用时,自动启动检测
-X, --no-autox 当X在使用时,不自启检测


最新版本:0.55


官方主页:http://www.chkrootkit.org/