木马后门入侵与RKHunter,ClamAV检测工具
一,关于Linux下的rootkit
- rootkit是Linux平台下最常见的一种木 马后门工具,它主要通过替换系统文件来达到攻击和和隐蔽的目的,这种木马比普通木 马后门更加危险和隐蔽,普通的检测工具和检查手段很难发现这种木马。rootkit攻 击能力极强,对系统的危害很大,它通过一套工具来建立后门和隐藏行迹,从而让攻 击者保住权限,以使它在任何时候都可以使用root权限登录到系统。
- rootkit主要有两种类型
- 文件级别
- 内核级别
1.1 文件级别rootkit木马
- 文件级别的rootkit一般是通过程序漏洞或者系统漏洞进入系统后,通过修改系统的重要文件来达到隐藏自己的目的。在系统遭受rootkit木马后,合法的文件被木马程序替代,变成了外壳程序,而其内部是隐藏着的后门程序。通常容易被rootkit替换的系统程序有login、ls、ps、ifconfig、du、find、netstat等,其中login程序是最经常被替换的,因为当访问Linux时,无论是通过本地登录还是远程登录,/bin/login程序都会运行,系统将通过/bin/login来收集并核对用户的账号和密码,而rootkit就是利用这个程序的特点,使用一个带有根权限后门密码的/bin/login来替换系统的/bin/login,这样攻 击者通过输入设定好的密码就能轻松进入系统。此时,即使系统管理员修改root密码或者清除root密码,攻击者还是一样能通过root用户登录系统。入侵者通常在进入Linux系统后,会进行一系列的攻击动作,最常见的是安装嗅探器收集本机或者网络中其他服务器的重要数据。在默认情况下,Linux中也有一些系统文件会监控这些工具动作,例如ifconfig命令,所以,攻击者为了避免被发现,会想方设法替换其他系统文件,常见的就是ls、ps、ifconfig、du、find、netstat等。如果这些文件都被替换,那么在系统层面就很难发现rootkit已经在系统中运行了。
- 这就是文件级别的rootkit,对系统维护很大,目前最有效的防御方法是定期对系统重要文件的完整性进行检查,如果发现文件被修改或者被替换,那么很可能系统已经遭受了rootkit攻击。检查完整性的工具很多,常见的有Tripwire、 aide等,可以通过这些工具定期检查文件系统的完整性,以检测系统是否被rootkit入侵。
1.2 内核级别的rootkit木马
- 内核级rootkit是比文件级rootkit更高级的一种攻击方式,它可以使攻击者获得对系统底层的完全控制权,此时攻击者可以修改系统内核,进而截获运行程序向内核提交的命令,并将其重定向到攻击者所选择的程序并运行此程序,也就是说,当用户要运行程序A时,被攻击者修改过的内核会假装执行A程序,而实际上却执行了程序B。
- 内核级rootkit主要依附在内核上,它并不对系统文件做任何修改,因此一般的检测工具很难检测到它的存在,这样一旦系统内核被植入rootkit,攻击者就可以对系统为所欲为而不被发现。目前对于内核级的rootkit还没有很好的防御工具,因此,做好系统安全防范就非常重要,将系统维持在最小权限内工作,只要攻击者不能获取root权限,就无法在内核中植入rootkit。
二,一次Linux.BackDoor.Gates.5(文件级别rootkit)网络带宽攻击案例
2.1 问题现象
事情起因是突然发现一台oracle服务器外网流量跑的很高,明显和平常不一样,最高达到了200M左右,这明显是不可能的,因为oracle根本不与外界交互,第一感觉是服务器被入 侵了。被人当做肉鸡了,在大量发包。
这是台centos6.5 64位的系统,已经在线上运行了70多天了。
2.2 排查问题
排查问题的第一步是查看此服务器的网络带宽情况,通过监控系统显示,此台服务器占满了200M的带宽,已经持续了半个多小时,接着第二步登录服务器查看情况,通过ssh登录服务器非常慢,这应该就是带宽被占满的缘故,不过最后还是登录上了服务器,下面是一个top的结果;
- 可以看到,有一个异常的进程占用资源比较高,名字不仔细看还真以为是一个Web服务进程。但是这个nginx1确实不是正常的进程。
- 接着,通过ps -ef命令又发现了一些异常:
- 发现有个/etc/nginx1进程,然后查看了这个文件,是个二进制程序,基本断定这就是木 马文件。
- 同时又发现,/usr/bin/dpkgd/ps -ef这个进程非常异常,因为正常情况下ps命令应该在/bin目录下才对。于是进入/usr/bin/dpkgd目录查看了一下情况,又发现了一些命令,如下图所示:
由于无法判断,用了最笨的办法,找了一台正常的机器,查看了一下ps命令这个文件的大小,发现只有80K左右,又检查了/usr/bin/dpkgd/ps,发现文件大小不对,接着又检查了两个文件的md5,发现也不一样。
初步判断,这些文件都伪装的外壳命令,其实都是有后门的木马
继续查看系统可疑目录,首先查看定时任务文件crontab,并没有发现异常,然后查看系统启动文件rc.local,也没有什么异常,接着进入/etc/init.d目录查看,又发现了比较奇怪的脚本文件DbSecuritySpt、selinux,如下图所示:
- 这两个文件在正常的系统下是没有的,所以也初步断定是异常文件。
- 接着继续查看系统进程,通过ps -ef命令,又发现了几个异常进程,一个是/usr/bin/bsd-port,另一个是/usr/sbin/.sshd,这两个进程时隐时现,在出现的瞬间被我抓到了。
- 查看发现/usr/bin/bsd-port是个目录,进入目录,发行了几个文件,如下图:
有getty字眼,这不是终端管理程序吗,它用来开启终端,进行终端的初始化,设置终端,这里出现了终端,马上联想到是否跟登录相关,于是紧接着,又发现了/usr/sbin/.sshd,很明显,这个隐藏的二进制文件.sshd就是个后 门文件,表面像sshd进程,其实完全不是。
最后,又查看了木马最喜欢出现的目录/tmp,也发现了异常文件,从名字上感觉好像是监控木马程序的,如下图所示:
检查到这里,基本查明了系统中可能出现的异常文件,当然,不排除还有更多的,下面的排查就是查找更多可疑文件,然后删除即可。
2.3 查杀病毒文件
要清楚系统中的木马病毒,第一步要做的是先清除这些可疑的文件,这里总结了下此类植入牧马各种可疑的文件,供大家参考:
#检查是否有下面路径文件
cat /etc/rc.d/init.d/selinux
cat /etc/rc.d/init.d/DbSecuritySpt
ls /usr/bin/bsd-port
ls /usr/bin/dpkgd
#检查下面文件大小是否正常,可以和正常机器中的文件做比对:
ls -lh /bin/netstat
ls -lh /bin/ps
ls -lh /usr/sbin/lsof
ls -lh /usr/sbin/ss
#如果发现有上面可疑文件,需要全部删除,可删除的文件或目录如下:
>rm -rf /usr/bin/dpkgd (ps netstat lsof ss) #这是加壳命令目录
rm -rf /usr/bin/bsd-port #这是木 马程序
rm -f /usr/bin/.sshd #这是木马后门
rm -f /tmp/gates.lod
rm -f /tmp/moni.lod
rm -f /etc/rc.d/init.d/DbSecuritySpt #这是启动上述描述的那些木马后的变种程序
rm -f /etc/rc.d/rc1.d/S97DbSecuritySpt #删除自启动
rm -f /etc/rc.d/rc2.d/S97DbSecuritySpt
rm -f /etc/rc.d/rc3.d/S97DbSecuritySpt
rm -f /etc/rc.d/rc4.d/S97DbSecuritySpt
rm -f /etc/rc.d/rc5.d/S97DbSecuritySpt
rm -f /etc/rc.d/init.d/selinux #这个selinux是个假象,其实启动的是/usr/bin/bsd-port/getty程序
rm -f /etc/rc.d/rc1.d/S99selinux #删除自启动
rm -f /etc/rc.d/rc2.d/S99selinux
rm -f /etc/rc.d/rc3.d/S99selinux
rm -f /etc/rc.d/rc4.d/S99selinux
rm -f /etc/rc.d/rc5.d/S99selinux
上面的一些命令(ps netstat lsof ss)删除后,系统中这些命令就不能使用了,怎么恢复这些命令呢,有两种方式:一个是从别的同版本机器上拷贝一个正常的文件过来,另一个是通过rpm文件重新安装这些命令。
#例如,删除了ps命令后,可以通过yum安装ps命令:
[root@server ~]# yum -y reinstall procps
其中,procps包中包含了ps命令。
#下面的依次是netstat,lsof,ss命令
[root@server ~]# yum -y reinstall net-tools
[root@server ~]# yum -y reinstall lsof
[root@server ~]# yum -y reinstall iproute
2.4 找出异常程序并杀死
- 所有可疑文件都删除后,通过top、ps等命令查看可疑进程,全部kill掉即可,这样进程kill之后,因为启动文件已经清除,所以也就不会再次启动或者生成木马文件了。
- 这个案例是个典型的文件级别rootkit植入系统导致的,最后检查植入的原因是由于这台oracle服务器有外网IP,并且没设置任何防火墙策略,同时,服务器上有个oracle用户,密码和用户名一样,这样一来,黑 客通过服务器暴露在外网的22端口,然后通过暴力破解,通过这个oracle用户登录到了系统上,进而植入了这个rootkit病毒。
三,rootkit后门检测工具chkrootkit
- chkrootkit是一款小巧易用的Unix平台上的可以检测多种rootkit木 马的工具。它的功能包括:
- 检测文件修改
- utmp/wtmp/last日志修改、
- 界面欺骗(promiscuous interfaces)、
- 恶意核心模块(maliciouskernel modules)。
- 它的官方址:http://www.chkrootkit.org/
目前最新版本为chkrootkit 0.52,chkrootkit没有包含在官方的CentOS源中,因此要采取手动编译的方法来安装,不过这种安装方法也更加安全。
3.1 准备编译环境
[root@localhost ~]# cat /etc/redhat-release
CentOS Linux release 7.5.1804 (Core)
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# systemctl disable firewalld
[root@localhost ~]# systemctl stop NetworkManager
[root@localhost ~]# systemctl disable NetworkManager
[root@localhost ~]# yum -y install gcc gcc-c++ make glibc*
3.2 下载和安装chkrootkit
[root@localhost ~]# wget ftp://ftp.pangeia.com.br/pub/seg/pac/chkrootkit.tar.gz
[root@localhost ~]# ls
anaconda-ks.cfg chkrootkit.tar.gz
[root@localhost ~]# tar xf chkrootkit.tar.gz -C /usr/local/
[root@localhost ~]# cd /usr/local/
[root@localhost local]# mv chkrootkit-0.52 chkrootkit
[root@localhost local]# cd chkrootkit/
[root@localhost chkrootkit]# make sense
[root@localhost ~]# ln -s /usr/local/chkrootkit/chkrootkit /usr/local/bin/
[root@localhost ~]# which chkrootkit
/usr/local/bin/chkrootkit
3.3 使用chkrootkit
#查看命令帮助
[root@localhost ~]# chkrootkit -h
Usage: /usr/local/bin/chkrootkit [options] [test ...]
Options:
-h 显示帮助信息
-V 显示版本信息
-l 显示测试内容
-d debug模式,显示检测过程相关指令程序
-q 安静模式,只显示有问题的内容
-x 高级模式,显示所有检测结果
-r dir 设置指定的目录为根目录
-p dir1:dir2:dirN 指定chkrootkit检测时使用系统命令的目录
-n 跳过NFS连接的目录
#chkrootkit使用比较简单,直接执行chkrootkit命令即可自动开始检测系统。下面是某个系统的检测结果:
[root@localhost ~]# chkrootkit
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`
说明:
从输出可以看出,not infected表示未被感染;
如果出现infected表示已经感染;
针对被感染rootkit的系统,最安全而有效的方法就是备份数据重新安装系统
3.4 chkrootkit的缺点
chkrootkit在检查rootkit的过程中使用了部分系统命令,因此,如果服务器被植入,那么依赖的系统命令可能也已经被攻击者替换,此时chkrootkit的检测结果将变得完全不可信。为了避免chkrootkit的这个问题,可以在服务器对外开放前,事先将chkrootkit使用的系统命令进行备份,在需要的时候使用备份的原始系统命令让chkrootkit对rootkit进行检测。这个过程可以通过下面的操作实现:
[root@server ~]# mkdir /usr/share/.commands
[root@server ~]# cp `which --skip-alias awk cut echo find egrep id head ls netstat ps strings sed uname` /usr/share/.commands
[root@server ~]# /usr/local/chkrootkit/chkrootkit -p /usr/share/.commands/
[root@server share]# cd /usr/share/
[root@server share]# tar zcvf commands.tar.gz .commands
[root@server share]# rm -rf commands.tar.gz
上面这段操作是在/usr/share/下建立了一个.commands隐藏文件,然后将chkrootkit使用的系统命令进行备份到这个目录下。为了安全起见,可以将.commands目录压缩打包,然后下载到一个安全的地方进行备份,以后如果服务器遭受攻击,就可以将这个备份上传到服务器任意路径下,然后通过chkrootkit命令的“-p”参数指定这个路径进行检测即可。
四,rootkit后门检测工具RKHunter
- Rkhunter的中文名叫“Rootkit猎手”, 目前可以发现大多数已知的rootkits和一些嗅探器以及后门程序。它通过执行一系列的测试脚本来确认服务器是否已经感染rootkits,比如检查rootkits使用的基本文件,可执行二进制文件的错误文件权限,检测内核模块等等。在官方的资料中,RKHunter可以作的事情有:
- MD5校验测试,检测文件是否有改动
- 检测rootkit使用的二进制和系统工具文件
- 检测特洛伊木 马程序的特征码
- 检测常用程序的文件属性是否异常
- 检测系统相关的测试
- 检测隐藏文件
- 检测可疑的核心模块LKM
- 检测系统已启动的监听端口
4.1 安装RKHunter
- KHunter的官方网页地址为:http://rootkit.nl/projects/rootkit_hunter.html
- 目前的最新版本是rkhunter-1.4.6.tar.gz。 可以从https://sourceforge.net/projects/rkhunter/files/下载, RKHunter的安装非常简单,可以通过源码安装,也可以在线yum安装,这里以centos7.5为例,过程如下:
#在线安装RKHunter
[root@localhost ~]# yum -y install epel-release
[root@localhost ~]# yum -y install rkhunter
4.2 使用rkhunter指令
rkhunter命令的参数较多,但是使用非常简单,直接运行rkhunter即可显示此命令的用法。下面简单介绍下rkhunter常用的几个参数选项。
[root@localhost ~]# which rkhunter
/usr/bin/rkhunter
[root@localhost ~]# rkhunter --help
常用的几个参数有:
-c, --check #必选参数,表示检测当前系统
--configfile <file> #使用特定的配置文件
--cronjob #作为cron任务定期运行
--sk, --skip-keypress #自动完成所有检测,跳过键盘输入
--summary #显示检测结果的统计信息
--update #检测更新内容
4.3 使用rkhunter开始检测系统
#执行这个即可开始检测
[root@localhost ~]# rkhunter -c
从图中可以看出,检查主要分成6个部分:
第一部分是进行系统命令的检查,主要是检测系统的二进制文件,因为这些文件最容易被rootkit。显示OK字样表示正常,显示Warning表示有异常,需要引起注意,而显示“Not found”字样,一般无需理会。
第二部分,主要检测常见的rootkit程序,显示绿色的“Not found”表示系统未感染此rootkit。
第三部分,主要是一些特殊或附加的检测,例如对rootkit文件或目录检测、对恶意软件检测以及对指定的内核模块检测。
第四部分,主要对网络、系统端口、系统启动文件、系统用户和组配置、SSH配置、文件系统等进行检测。
第五部分,主要是对应用程序版本进行检测。
第六部分,其实是上面输出的一个总结,通过这个总结,可以大概了解服务器目录的安全状态。
在Linux终端使用rkhunter来检测,最大的好处在于每项的检测结果都有不同的颜色显示,如果是绿色的表示没有问题,如果是红色的,那就要引起关注了。另外,在上面执行检测的过程中,在每个部分检测完成后,需要以Enter键来继续。如果要让程序自动运行,可以执行如下命令:
[root@localhost ~]# /usr/local/bin/rkhunter --check --skip-keypress
同时,如果想让检测程序每天定时运行,那么可以在/etc/crontab中加入如下内容:
10 3 * * * root /usr/local/bin/rkhunter --check --cronjob
这样,rkhunter检测程序就会在每天的3:10分运行一次。
- Rkhunter拥有并维护着一个包含rootkit特征的数据库,然后它根据此数据库来检测系统中的rootkits,所以可以对此数据库进行升级,如下所示:
[root@localhost ~]# rkhunter --update
那么简单来讲,RKhunter就像我们的杀毒软件,有着自己的病毒数据库,对每一个重点命令进行比对,当发现了可疑代码则会提示用户。
五,Linux安全防护工具ClamAV的使用
ClamAV是一个在命令行下查毒软件,是免费开源产品,支持多种平台,如:Linux/Unix、MAC OS X、Windows、OpenVMS。ClamAV是基于病毒扫描的命令行工具,但同时也有支持图形界面的ClamTK工具。为什么说是查毒软件呢,因为它不将杀毒作为主要功能,默认只能查出您服务器内的病毒,但是无法清除,至多删除文件。不过这样,已经对我们有很大帮助了。
5.1 快速安装ClamAV
[root@localhost ~]# yum -y install epel-release
[root@localhost ~]# yum -y install clamav clamav-milter
5.2 更新病毒库
Clamav安装好以后,不能马上使用,需要先更新一下病毒特征库,不然会有告警信息。
更新病毒库方法如下:
[root@localhost ~]# freshclam
ClamAV update process started at Thu Nov 22 23:07:48 2018
Downloading main.cvd [100%]
main.cvd updated (version: 58, sigs: 4566249, f-level: 60, builder: sigmgr)
Downloading daily.cvd [100%]
daily.cvd updated (version: 25143, sigs: 2158200, f-level: 63, builder: neo)
Downloading bytecode.cvd [100%]
bytecode.cvd updated (version: 327, sigs: 91, f-level: 63, builder: neo)
Database updated (6724540 signatures) from database.clamav.net (IP: 104.16.189.138)
5.3 clamav的命令行使用
clamav有两个命令,分别是clamdscan和clamscan,其中,clamdscan命令一般用yum安装才有,需要启动clamd服务才能使用,执行速度较快;而clamscan命令通用,不依赖服务,命令参数较多,执行速度稍慢。推荐使用clamscan。
执行“clamscan -h”可获得使用帮助信息,clamscan常用的几个参数含义如下:
[root@localhost ~]# clamscan -h
-r/--recursive[=yes/no] #表示递归扫描子目录
-l FILE/--log=FILE #增加扫描报告
--move [路径] #表示移动病毒文件到指定的路径
--remove [路径] #表示扫描到病毒文件后自动删除病毒文件
--quiet #表示只输出错误消息
-i/--infected #表示只输出感染文件
-o/--suppress-ok-results #表示跳过扫描OK的文件
--bell #表示扫描到病毒文件发出警报声音
--unzip(unrar) #表示解压压缩文件进行扫描
下面看几个例子:
#查杀当前目录并删除感染的文件
[root@localhost ~]# clamscan -r --remove
/root/.bash_logout: OK
/root/.bash_profile: OK
/root/.bashrc: OK
/root/.cshrc: OK
/root/.tcshrc: OK
/root/anaconda-ks.cfg: OK
/root/.viminfo: OK
/root/.bash_history: OK
/root/chkrootkit.tar.gz: OK
----------- SCAN SUMMARY -----------
Known viruses: 6717473
Engine version: 0.100.2
Scanned directories: 3
Scanned files: 9
Infected files: 0
Data scanned: 0.42 MB
Data read: 0.04 MB (ratio 12.00:1)
Time: 9.872 sec (0 m 9 s)
#扫描所有文件并且显示有问题的文件的扫描结果
[root@localhost ~]# clamscan -r --bell -i /
#扫描所有用户的主目录文件
[root@localhost ~]# clamscan -r /home
#扫描系统中所有文件,发现病毒就删除病毒文件,同时保存杀毒日志
[root@localhost ~]# clamscan --infected -r / --remove -l /var/log/clamscan.log
5.4 查杀系统病毒
下面命令是扫描/etc目录下所有文件,仅输出有问题的文件,同时保存查杀日志。
[root@localhost ~]# clamscan -r /etc --max-recursion=5 -i -l /mnt/a.log
----------- SCAN SUMMARY -----------
Known viruses: 6717473
Engine version: 0.100.2
Scanned directories: 605
Scanned files: 1677
Infected files: 0
Data scanned: 181.76 MB
Data read: 23.99 MB (ratio 7.58:1)
Time: 22.540 sec (0 m 22 s)
可以看到,扫描完成后有结果统计。
下面我们从eicar.org下载一个用于模拟病毒的文件,看一下clamav是否能够扫描出来.
#如果被阻止,需要关闭宿主机的杀毒软件
[root@localhost mnt]# wget http://www.eicar.org/download/eicar.com
--2018-11-22 23:22:38-- http://www.eicar.org/download/eicar.com
正在解析主机 www.eicar.org (www.eicar.org)... 213.211.198.62
正在连接 www.eicar.org (www.eicar.org)|213.211.198.62|:80... 已连接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度:68 [application/octet-stream]
正在保存至: “eicar.com”
100%[====================================================================================>] 68 --.-K/s 用时 0s
2018-11-22 23:22:39 (10.6 MB/s) - 已保存 “eicar.com” [68/68])
[root@localhost mnt]# ls
a.log eicar.com
#现在我们进行扫描
[root@localhost ~]# clamscan -r /mnt --max-recursion=5 -i -l /mnt/c.log
/mnt/eicar.com: Eicar-Test-Signature FOUND #发现病毒
----------- SCAN SUMMARY -----------
Known viruses: 6717473
Engine version: 0.100.2
Scanned directories: 1
Scanned files: 3
Infected files: 1
Data scanned: 0.54 MB
Data read: 0.27 MB (ratio 2.00:1)
Time: 9.491 sec (0 m 9 s)
可以看到,病毒文件被检测出来了。eicar.com是一个Eicar-Test-Signature类型病毒文件。缺省的方式下,clamscan只会检测不会自动删除文件,要删除检测出来的病毒文件,使用“--remove”选项即可。
5.5 设置自动更新病毒库和查杀病毒
病毒库的更新至关重要,要实现自动更新,可在计划任务中添加定时更新病毒库命令,也就是在crontab添加如下内容:
#每天1点更新病毒库
* 1 * * * /usr/bin/freshclam --quiet
#每天22点开始查杀病毒,并将查杀日志写入/var/log/clamscan.log文件中
* 22 * * * clamscan -r / -l /var/log/clamscan.log --remove