Ubuntu 安全检查(后门检测)
3个程序:
chkrootkit 可以扫描rootkits rkhunter 可以扫描rootkit backdoor sniffer exploit unhide 可以发现隐藏的进程和端口
1) chkrootkit的使用
chkrootkit是Check Rootkit的简称,可以检测到60多种常见的rootkit、蠕虫和LKM(Linux Kernel Module)等有害程序,列表:http://www.chkrootkit.org。
安装:
1
|
apt-get
install
chkrootkit
|
参数:
-l 显示可用的扫描对象 -d 调试 -q 安静模式 -x 专家模式 -r dir 将dir所指定的目录作为root目录 -p dir1:dir2:dirN 指定扫描过程中要使用的程序的路径 -n 不扫描挂载的NFS分区
用法:
1
2
3
4
5
6
7
8
9
10
11
|
#检查ps ls 和cron命令是否被感染
sudo
chkrootkit
ps
ls
cron
#如果不指定扫描对象,就会扫描所有对象
sudo
chkrootkit
#加上-q选项后就进入安静模式,只有被感染的才显示
sudo
chkrootkit –q
#如果使用-x选项,程序会调用/usr/bin/strings将扫描对象中所有可疑字符串打印处理
sudo
chkrootkit –x
su
|
less
|
chkrootkit在运行过程中,会调用系统中的awk cut egrep find head id ls netstat ps strings sed uname等命令。如果担心这些命令已经被感染,那么可以使用-p选项指定这些程序的路径。可以把这些/bin /sbin /usr/bin等目录放到一个ISO文件中(只读),然后mount这个iso文件。
然后:
1
|
sudo
chkrootkit –p
/cdrom/bin
:
/cdroom/sbin
:
/cdrom/usr/bin
|
最好的检查方法,则是从一台确认安全的机器上,将被入侵的机器的文件系统挂载过来,使用-r选项指定root目录:
1
|
sudo
chkrotkit –r
/mnt/hdisk
|
2) rkhunter的使用
rkhunter是Rootkit Hunter的简称,可以检查几十种rootkits、backdoors、LKMs、worms,使用rkhunter的—list子命令可以显示。
安装
rkhunter依赖MTA(邮件传输代理)服务器,选择postfix(看起来,如果不需要发送邮件,应该不需要安装):
1
|
apt-get
install
rkhunter postfix mailutils
|
安装完成后,先对其数据进行更新,相当是获取最新病毒库:
1
|
sudo
rkhunter --update
|
配置
rkhunter的配置文件位于/etc/rkhunter.conf,和chkrootkit相同,rkhunter也可以指定外部命令的路径。可以通过修改配置文件来指定。配置文件有一项BINDIR,可以将该项修改为挂载在iso上的路径:
1
|
BINDIR=”
/cdrom/bin
/cdrom/usr/bin
/cderom/sbin
/cdrom/usr/sbin
”
|
如果要查看rkhunter都支持哪些扫描项目:
1
|
sudo
rkhunter --list
|
要用rkhunter进行检查,使用-c或者—check即可
1
2
3
4
5
6
7
8
9
|
sudo
rkhunter –c
##检查完毕后提示
The system checks took: 1 minute and 18 seconds
All results have been written to the log
file
(
/var/log/rkhunter
.log)
One or
more
warnings have been found
while
checking the system.
Please check the log
file
(
/var/log/rkhunter
.log)
|
可以通过/var/log/rkhunter.log查看扫描结果。
rkhunter在安装时创建了一个cron任务/etc/cron.daily/rkhunter,每天执行一次。
1
2
3
4
5
6
7
8
9
10
11
12
13
|
cat
/etc/cron
.daily
/rkhunter
#!/bin/sh
RKHUNTER=
/usr/bin/rkhunter
test
-x $RKHUNTER ||
exit
0
# source our config
.
/etc/default/rkhunter
#####省略
#nice调整进程调度优先级, 然后就运行/usr/bin/rkhunter,我们可以提取这行命令出来手动运行(/usr/bin/rkhunter --cronjob --report-warnings-only –appendlog > rk.log )
/usr/bin/nice
-n $NICE $RKHUNTER --cronjob --report-warnings-only --appendlog > $OUTFILE
#####省略
|
可以看到,该任务会调用rkhunter的另外一个配置文件/etc/default/rkhunter(. /etc/default/rkhunter),查看该配置文件(这个配置文件只是跟定制是否发送邮件,是否更新病毒库有关,跟rkhunter运行没有关系):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
cat
/etc/default/rkhunter
# Defaults for rkhunter automatic tasks
# sourced by /etc/cron.*/rkhunter and /etc/apt/apt.conf.d/90rkhunter
#
# This is a POSIX shell fragment
#
# Set this to yes to enable rkhunter daily runs 是否每天运行一次,默认为true
# (default: true)
CRON_DAILY_RUN=
""
# Set this to yes to enable rkhunter weekly database updates 每周更新数据库(病毒库),默认为true
# (default: true)
CRON_DB_UPDATE=
""
# Set this to yes to enable reports of weekly database updates 每周更新病毒库后发送报告(默认不发送)
# (default: false)
DB_UPDATE_EMAIL=
"false"
# Set this to the email address where reports and run output should be sent(发送给那个地址,写上email地址)
# (default: root)
REPORT_EMAIL=
"[email protected]"
# Set this to yes to enable automatic database updates 开启自动更新,默认为false
# (default: false)
APT_AUTOGEN=
"false"
# Nicenesses range from -20 (most favorable scheduling) to 19 (least favorable)
# (default: 0)
NICE=
"0"
# Should daily check be run when running on battery
# powermgmt-base is required to detect if running on battery or on AC power
# (default: false)
RUN_CHECK_ON_BATTERY=
"false"
|
3) unhide的使用
unhide也是一个Rootkit诊断工具,它的功能侧重于检测隐藏的进程和TCP/UDP端口。
1
2
3
4
5
6
7
8
|
sudo
apt-get
install
unhide
##查看安装文件
dpkg -L unhide
/usr/sbin/unhide
/usr/sbin/unhide-tcp
/usr/share/
*
|
安装完成后有两个工具,unhide 和 unhide-tcp。
检测原理
unhide使用3种方法进行检查(检查进程),分别是:
>proc 将/proc中的进程和/bin/ps的结果相对比 >sys 将系统调用和/bin/ps的结果相对比 >brute 整个PIDs空间(遍历,逐个尝试)
unhide-tcp使用遍历的方法,扫描所有有效端口,找出那些正在监听的、在/bin/netstat命令中看不到的隐藏端口。
检查隐藏进程:
1
2
3
4
5
6
7
8
|
sudo
unhide proc
#也可以使用sys方法来进行检测
sudo
unhide sys
显示有隐藏进程,不过代表已经被入侵了。
#也可以使用brute方法进行监测
sudo
unhide brute
|
监测隐藏的网络端口
1
|
unhide-tcp
|