Linux入侵排查手册

本文总结Linux服务器入侵排查的基本思路与方法...

0x01 系统排查

1. 系统信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$ lscpu             #查看CPU信息

$ uname -a #操作系统信息

$ cat /proc/version #系统版本信息

$ cat /etc/redhat-release #查看系统发行版

$ lsmod #查看模块信息

$ lsblk #列出块设备信息

$ ifconfig eth0 | grep -w inet #显示网卡IP信息

$ curl cip.cc #查看主机公网IP信息

$ hostname #查看系统主机名称

$ cat /etc/resolv.conf #DNS配置查看

2. 用户账号

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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
(1) 查看系统用户信息

$ cat /etc/passwd

用户名:密码加密:用户ID:用户组ID:注释:用户主目录:默认登录shell

最后一列:/bin/bash表示用户状态可登录; /sbin/nologin表示账户状态不可登录

(2) 查询超级权限账户: UID为0

$ awk -F: '{if($3==0)print $1}' /etc/passwd

(3) 查看可登录账户

$ grep '/bin/bash' /etc/passwd

(4) 查看空口令账户

$ awk -F: 'length($2)==0 {print $1}' /etc/shadow

(5) 登录信息查看

$ lastlog | more #查看用户最后登录信息

$ lastb | more #显示用户错误的登录信息

$ last | more #查看用户最近登录信息

$ uptime #查看登陆多久、多少用户,负载

$ who #查看当前登录用户(tty本地登陆 pts远程登录)

$ w #查看系统信息,想知道某一时刻用户的行为

/var/log/wtmp: 存储登录成功的信息

/var/log/btmp: 存储登录失败的信息

/var/log/utmp: 存储当前正在登录的信息

(6) 查看除root账号外其他帐号是否存在sudo权限

$ more /etc/sudoers | grep -v "^#\|^$" | grep "ALL=(ALL)"

(7) 禁用或删除多余及可疑的帐号

$ usermod -L user #禁用帐号,帐号无法登录,/etc/shadow第二栏为!开头

$ userdel user #删除user用户

$ userdel -r user #将删除user用户,并且将/home目录下的user目录一并删除

3. 启动项

1
2
3
4
5
$ cat /etc/init.d/rc.local

$ cat /etc/rc.local

$ ls -alt /etc/init.d/ | head

4. 定时任务

crontab -u <-l, -r, -e>

1
2
3
4
-u 指定一个用户
-l 列出某个用户的任务计划
-r 删除某个用户的任务
-e 编辑某个用户的任务
1
2
3
$ crontab -u root -l  # 列出root用户的任务计划

$ ls /etc/cron* # 查看/etc目录下任务计划相关文件

重点关注目录

1
2
3
4
5
6
7
8
9
/var/spool/cron/*
/etc/crontab
/etc/cron.d/*
/etc/cron.daily/*
/etc/cron.hourly/*
/etc/cron.monthly/*
/etc/cron.weekly/
/etc/anacrontab
/var/spool/anacron/*

0x02 进程排查

1. 进程查看

ps

1
2
3
4
5
6
7
$ ps -elf | grep pid  # 以长格式显示系统中的进程信息

$ ps -aux --sort -pcpu | less # 根据cpu使用率进行排序

$ ps -aux --sort -pmem | less # 根据内存使用来升序排序

$ ps -axjf # 以树形结构显示进程

top

动态查看进程状态, 可分析CPU占用较高的进程, 排查挖矿木马

实用选项

1
2
3
4
5
6
7
8
-c:  显示完整命令

-d: 设置信息更新时间, 以秒为单位

-u<用户名>:指定用户名

-p<进程号>:显示指定进程信息

交互命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
b: 高亮显示当前运行进程

c: 切换显示命令名称和完整命令行

M: 根据驻留内存大小进行排序

P: 根据CPU使用百分比大小进行排序

T: 根据时间/累计时间进行排序

i: 忽略闲置和僵死进程,这是一个开关式命令

s: 改变两次刷新之间的延迟时间(单位为s)

l: 切换显示平均负载和启动时间信息

m: 切换显示内存信息

t: 切换显示进程和CPU状态信息

w: 将当前设置写入~/.toprc文件中

pstree

以树状图的方式展现进程之间的派生关系

实用选项

1
2
3
4
5
6
7
8
9
-a:显示每个程序的完整指令,包含路径,参数或是常驻服务的标示

-h:列出树状图时,特别标明现在执行的程序

-l:采用长列格式显示树状图

-p:显示程序识别码

-u:显示用户名称

lsof

查看进程开打的文件,打开文件的进程,进程打开的端口(TCP、UDP)

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
$ lsof -p pid   # 查看指定进程ID已打开的内容

$ lsof -i # 显示所有连接

$ lsof -i:port # 查看与指定端口相关的网络信息

$ lsof -i@ip # 查看与指定IP相关的网络信息

$ lsof -i -sTCP:LISTEN # 找出正等待连接的端口

$ lsof -i | grep -i ESTABLISHED # 找出已经建立的连接

$ lsof -u user # 使用-u显示指定用户打开哪些文件

$ lsof -u ^root # 查看除指定用户以外的其它所有用户所做的事情

$ lsof -c command # 查看指定的命令正在使用的文件和网络连接

$ lsof | grep deleted # 查看被删除的文件信息

$ kill -9 `lsof -t -u user` # 杀死指定用户运行的所有进程

$ lsof -u user -i @ip # 显示用户user连接到指定IP所做的一切

$ lsof +L1 # 显示所有打开的链接数小于1的文件,多表示某个攻击者正尝试通过删除文件入口来隐藏文件内容

/proc 文件系统

1
Linux 内核提供了一种通过 proc 文件系统,在运行时访问内核内部数据结构、改变内核设置的机制,它以文件系统的方式为访问系统内核数据的操作提供接口,用户和应用程序可以通过 proc 得到系统的信息

进程相关项

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
/proc/N         pid为N的进程信息

/proc/N/cmdline 进程启动命令

/proc/N/cwd 链接到进程当前工作目录

/proc/N/environ 进程环境变量列表

/proc/N/exe 链接到进程的执行命令文件

/proc/N/fd 包含进程相关的所有的文件描述符

/proc/N/maps 与进程相关的内存映射信息

/proc/N/mem 指代进程持有的内存,不可读

/proc/N/root 链接到进程的根目录

/proc/N/stat 进程的状态

/proc/N/statm 进程使用的内存的状态

/proc/N/status 进程状态信息,比stat/statm更具可读性

/proc/self 链接到当前正在运行的进程

隐藏进程显示

1
2
3
4
5
6
7
8
9
step 1: ps -ef | awk '{print}' | sort -n | uniq >1

step 2: ls /proc | sort -n | uniq >2

step 3: diff 1 2

// 有时无法通过ps,top等命令根据pid进行查询,可能是因为攻击者将/proc/pid/ 进行了隐藏

使用 cat /proc/$$/mountinfo 来查看挂载信息

2. 线程查看

根据pid查看由进程起的线程

1
2
3
4
5
6
7
8
9
10
11
ps H -T -p pid

ps -Lf pid

其中SPID就是线程ID,而CMD栏则显示了线程名称

top -H -p pid -H 选项可以显示线程

pstree -acU 推荐,非常全面展示进程与线程间的关系

ps -eLFa # 查看全部线程

3. 进程查杀

kill进程

1
2
3
4
5
6
7
8
9
$ kill -9 pid     #强制终止进程

$ killall name #依据进程名称杀死进程

$ killall -u user #杀死指定用户的进程

$ kill -9 -pid # 如果进程起子进程,可以使用此命令,这里pid前有个减号,表示杀掉这个进程组

$ pkill name #杀死指定进程名的进程

先挂起再删除

1
$ ps -elf | grep 'root' | grep '{*}' | grep -v grep | xargs kill -STOP  # 针对因存在守护进程无法删除的情况,可先把进程挂起,查杀守护进程后,再将进程删除

解除文件占用

1
2
3
4
5
#针对设置了不可更改权限的文件,先移除i、a属性,再进行删除
lsattr file
chattr -i file
chattr -a file
rm -rf file

通过inode删除文件

从windows向linux传输的文件或者攻击者恶意制造的文件,很多会有文件名乱码,无法直接通过乱码的文件名进行删除,可以使用inode来确定文件名,之后删除使用 inode 进行删除

查看inode

1
ls -li eval.sh

删除文件

1
2
3
4
5
6
7
8
9
10
11
find ./* -inum 12327526 -delete

find ./ -inum 12327526 -exec rm {} \;

find ./* -inum 12327526 -exec rm -i {} \; # 会有一步确认是否删除

find ./* -inum 12327526 -exec rm -f {} \; # 不进行确认直接强制删除)

find ./* -inum 12327526 |xargs rm -f

rm `find ./* -inum 12327526`

4. 调试分析

strace

跟踪进程执行时的系统调用和所接收的信号,可跟踪用户进程与 Linux内核之间的交互

1
系统调用system call是程序从内核请求服务的一种编程方式,系统调用进入内核,使用trap机制从用户空间切换到内核空间,通过使用glibc系统库完成系统调用
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$ strace -p `pidof AliYunDun`  # 依据pid跟踪进程正在进行的系统调用

$ strace -o trace.log ls testdir/ #将输出记录到文件中

$ strace -v ls testdir #在每个系统调用中提供附加信息\

$ strace -f ls testdir #对当前正在跟踪的进程创建的任何子进程进行跟踪

$ strace -e open ls testdir #使用-e标志跟上系统调用的名称

$ strace -e write,getdents ls testdir #查看多个系统调用

$ strace -t ls testdir/ #查看所有的系统调用的时间戳

$ strace -r ls testdir/ #显示执行每个系统调用所花费的时间

ltrace

库调用跟踪器,用来跟踪进程调用库函数的情况

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

用法:ltrace [option ...] [command [arg ...]]

-d 打印调试信息

-f 跟踪子进程

-i 打印指令指针,当库调用时

-p PID 附着在值为PID的进程号上进行ltrace

-S 显示系统调用

-T 输出每个调用过程的时间开销

pstack

显示每个进程的栈跟踪

1
$ pstack pid  #pstack 命令必须由相应进程的属主或 root 运行,唯一选项是要检查的进程的 PID

0x03 网络排查

netstat/ss

分析可疑端口、可疑IP、可疑PID及程序进程

1
2
3
4
5
6
7
8
9
10
11
$ sudo netstat -ltpe | more   # 查看监听中的网络连接并显示进程ID、进程所有者用户名

$ sudo netstat -antp | grep "ESTABLISHED'' # 查看正在通信中的连接信息

$ sudo netstat -antpe # -n 和 -e 选项连用,显示进程所有者的用户ID 号

$ netstat -ts # 打印出tcp协议下的收发包数量等统计数据

$ watch -d -n0 "netstat -atnp | grep "ESTA" # 监视active状态的连接

$ ss -plat # 检查哪些进程在监听端口

网络占用查看

1
2
3
4
5
6
7
8
# Debian/Ubuntu 
apt-get install nethogs

# Centos/RHEL
yum -y install epel-release
yum -y install nethogs

nethogs

0x04 服务排查

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$ chkconfig  --list  #查看系统运行的服务

# 0-6表示等级

1 单用户模式

2 无网络连接的多用户命令模式

3 有网络连接的多用户命令模式

4 表示不可用

5 带图形界面的多用户模式

6 重新启动

$ service --status-all | grep running | more #显示正在运行的服务

$ systemctl list-unit-files | grep enabled | more #列出 systemd 下正在运行服务

0x05 文件查找

1. 基础命令

locate

1
2
3
4
5
6
-b 只搜索文件名,不搜索文件夹名 
-i 忽略大小写
-r "" 正则匹配

安装命令:yum -y install mlocate
执行前先运行:updatedb

find

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
默认文件和目录都会进行搜索,名称要准确 ,支持正则,可以使用通配符

-type 参数指定

d 目录
f 文件
l 符号链接
s socket

基础使用
find / -name evil.sh

忽略大小写
find / -iname evil.sh

查找时排除某个/类文件
find / -name *evil* ! -name *.log

查找时排除目录
find / -name *evil* -path "/root/home/aaa" -prune

查找目录
find / -type d -name eval

2. 敏感目录

1
2
3
4
5
6
7
8
9
(1) 临时目录/tmp、/var/tmp、/dev/shm下的文件,目录权限是1777,容易被上传木马文件

(2) 命令目录/usr/bin、/usr/sbin等下的二进制文件容易被替换,替换后可下载busybox使用被替换命令

$ ls -alt /usr/bin | head #按照最新修改时间显示,排查可疑文件

(3) ~/.ssh、/etc/ssh 经常作为一些后门配置的路径,需重点排查

$ cat ~/.ssh/authorized_keys #检查公钥是存在否异常写入

3. 基于时间点查找

1
2
3
4
5
6
7
8
9
10
11
12
列出攻击日志内变动的文件,排查恶意软件

$ ls --full-time ./ | sed -n '/2019-01-01/p' #查找当前文件夹下的某个日期产生的文件

$ find / -ctime 0 -name ".sh" #查找一天内新增的sh文件

-type b/c/d/f/l/p: 查找快设备、字符设备、目录、普通文件、符号链接、管道
-mtime -n +n # 按文件更改时间来查找文件,-n 指 n 天以内,+n 指 n 天前
-atime -n +n # 按文件访问时间来查找文件,-n 指 n 天以内,+n 指 n 天前
-ctime -n +n # 按文件创建时间来查找文件,-n 指 n 天以内,+n 指 n 天前

$ find /tmp -type f -amin -10 -print #打印出10分钟内访问的所有文件

4. 根据文件大小搜索

按照大小寻找文件 -size ,参数后单位可以为:

1
2
3
4
5
6
b  512-byte block
c bytes
w two-byte words
k
M
G
1
2
3
4
5
$ find / -size -1223124c -size +1223122c -exec ls -id {} \;   #搜索1223123大小的文件,盖茨木马

$ find /usr/bin -type f -size 2k # 查找大小等于2KB的文件

$ find / -size +10MB -20M # 寻找 10M到20M之间的文件

5. 查找文件内容

grep [OPTIONS] PATTERN [FILE…]

正则表达式相关参数

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
-E 扩展了正则表达式,支持了以下几种规则:

+
?
a|b
()
x{m}
x{m,}
x{m,n}

-F 该参数后的正则表达式字符串中所有字符串都没有特殊含义,仅仅是其本身

-P 使用 perl 正则表达式

-e 正则表达式中存在 -- 的,默认会被识别为参数,使用 -e 参数可以将 -- 认定为正则表达式中的字符

-f file 从文件中加载正则

-i 忽略大小写

-w 只匹配完整的单词

-x 匹配整行

-z 跨行匹配

杂项

1
2
3
-s 禁止输出因文件不存在或文件没有读权限而产生的错误信息
-v 反转结果,不显示制定的正则
-V 版本信息

输出控制

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
-m NUM 匹配到NUM行后停止
-b 打印匹配的行在文件中的字节偏移量
-n 显示匹配的行号
-H 批量匹配时,显示匹配的文件名,默认参数
-h 与 H 相反,不显示文件名
-o 只输出匹配到的字符
-q 不显示任何东⻄
-a 匹配二进制数据
-I 不匹配二进制的内容
-d action 目录操作,读取(read),递归(recurse),跳过(skip)
-D action 设置对设备,FIFO,管道的操作,读取(read),跳过(skip)
-r 递归,不会搜索符号连接内的内容,所以可以尽量使用 -R
-R 递归的同时可以设置一些选项,比如排除一些目录等
-L 显示未匹配到的文件名
-l 只显示匹配到的文件名
-c 打印每一个文件中匹配结果的行数

文本控制

1
2
3
-B <NUM> 显示查找到的行前的N行的内容
-A <NUM> 显示查找到的行后的N行的内容
-C <NUM> 显示查找都的行前后各N行的内容

常⻅使用方法

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
查找某个文件中的字符串 
grep "str" evil.sh

在某个目录中的文件中搜索某个正则表达式
grep "str" /root/xxx/*

递归在某个目录下所有文件中进行查找
grep -rn "str" /root/xxxx/

查找多个字符
grep "str1\|str2" /root/xxxx/*
grep -E "str1|str2" /root/xxxx/*
grep -e "str1" -e "str2" /root/xxxx/*

查找同时存在两个字符
grep -E 'str1.*str2' /root/xxxx/*

只搜索部分文件
grep 'abc' -r --include=*.conf /root/xxxx
grep 'abc' -r --include="*.{conf,config}" /root/xxxx

排除部分文件
grep 'abc' --exclude=*.elf /root/xxxx
grep 'abc' --include=*.conf --exclude=*demo.conf

全盘搜索某个表达式
grep -Rn -i "str" /

6. 特殊文件匹配

webshell匹配

1
$ find /var/www/ -name "*.php" |xargs egrep 'assert|phpspy|c99sh|milw0rm|eval|\(gunerpress|\(base64_decoolcode|spider_bc|shell_exec|passthru|\(\$\_\POST\[|eval \(str_rot13|\.chr\(|\$\{\"\_P|eval\(\$\_R|file_put_contents\(\.\*\$\_|base64_decode'

特殊权限文件查找

1
2
3
4
5
6
7
8
$ find /tmp -perm 777   # 打印出权限为777的文件, -perm选项指明find应该只匹配具有特定权限值的文件

$ find / -type f -user root -print # 打印出用户root拥有的所有文件, 选项-user USER找出由某个特定用户所拥有的文件

$ find / -type f -perm -04000 -ls -uid 0 2>/dev/null # 查找具有SUID位文件
$ find / -perm -u=s -type f 2>/dev/null

$ find / -perm -g=s -type f 2>/dev/null # 查看具有SGID位文件

隐藏文件查找

1
$ ls -art /var/www/html | grep "^\."   # 查找web目录下以"."开头的具有隐藏属性的文件

7. 二进制文件分析

1
2
3
4
5
6
7
8
9
10
11
12
13
(1) file: 确定文件类型

(2) ldd: 打印共享对象依赖关系, 即查询可执行程序所依赖的库和所在路径

(3) strings: 打印二进制文件中的可打印字符的字符串

(4) readelf: 显示有关ELF文件的信息

(5) hexdump: 以 ASCII、十进制、十六进制或八进制显示文件内容

(6) objdump: 从对象文件中显示信息,读取二进制或可执行文件,并将汇编语言指令转储到屏幕上

(7) nm: 列出对象文件中的符号,从二进制文件中识别变量和函数

0x06 日志分析

1. 日志介绍

日志默认存放位置:/var/log/

查看日志配置情况:less /etc/rsyslog.conf

日志文件 说明
/var/log/cron 系统定时任务相关的日志
/var/log/secure 记录用户登录验证和授权的信息,涉及账号和密码的程序都会记录
/var/log/auth.log 记录系统授权信息,如用户登录和权限机制等
/var/log/btmp 记录错误登录日志,这个文件是二进制文件,不能直接vi查看,而要使用lastb命令查看
/var/log/lastlog 记录系统中所有用户最后一次登录时间的日志,使用lastlog命令查看
/var/log/wtmp 永久记录所有用户的登录、注销信息,同时记录系统的启动、重启、关机事件,使用last命令来查看
/var/log/utmp 记录当前已经登录的用户信息,用w,who,users等命令来查询
/var/log/dmesg 记录系统在开机时内核自检的信息
/var/log/messages 记录系统启动后的信息和错误日志

2. 登录分析

1
2
3
4
5
6
7
8
9
10
11
(1) 登录成功IP统计

$ grep -i Accepted /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -nr | more

(2) 查看登录成功的日期、用户名、IP

$ grep "Accepted" /var/log/secure | awk '{print $1,$2,$3,$9,$11}'

(3) 定位有多少IP在爆破主机的root帐号

$ grep "Failed password for root" /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -nr | more

3. Web日志分析

Apache 日志

1
2
3
4
5
6
7
8
9
10
11
(1) apache日志文件位置
/var/log/httpd/access.log # Red Hat/CentOS Apache访问日志位置
/var/log/apache2/access.log # Debian/Ubuntu Apache访问日志文件位置

(2) 日志位置定位

$ grep -i CustomLog /etc/httpd/conf/httpd.conf

$ locate access.log access_log | grep httpd

$ locate access.log access_log | grep apache

Nginx 日志

1
2
3
4
5
6
7
8
9
日志定位

$ yum install mlocate && updatedb #安装locate所在文件包并更新搜索数据库

$ locate access.log | grep nginx #定位nginx访问日志

$ locate error.log | grep nginx #定位nginx错误日志

$ grep 'access.log' `locate nginx.conf` #根据配置文件定位日志

日志分析技巧

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
36
37
38
39
40
41
42
43
44
45
46
47
(1) 列出当天访问次数最多的10个IP

$ awk -F '-' '{print $1}' log_file | uniq -c | sort -rn | head -10

(2) 查看当天有多少个IP访问

$ awk '{print $1}' log_file | sort -u | wc -l

(3) 查看每一个IP访问了多少个页面:

$ awk '{++S[$1]} END {for (a in S) print a,S[a]}' log_file

(4) 将每个IP访问的页面数进行从小到大排序:

$ awk '{++S[$1]} END {for (a in S) print S[a],a}' log_file | sort -n

(5) 查看某一个IP访问了哪些页面:

$ grep ^1.1.1.1 log_file| awk '{print $1,$7}'

(6) 去掉搜索引擎统计当天的页面

$ awk '{print $12,$1}' log_file | grep ^\"Mozilla | awk '{print $2}' |sort | uniq | wc -l

(7) 查看2018年11月11日11时这一个小时内有多少IP访问

awk '{print $4,$1}' log_file | grep 11/Nov/2018:11 | awk '{print $2}'| sort -u | wc -l

(8) IP 统计

$ grep '11/Nov/2018' /tmp/myid.access.log | awk '{print $1}' | awk -F'.' '{print $1"."$2"."$3"."$4}' | sort | uniq -c | sort -r -n | head -n 10

(9) 网段统计

$ cat /www/logs/www/access.2018-11-11.log | awk '{print $1}' | awk -F'.' '{print $1"."$2"."$3".0"}' | sort | uniq -c | sort -r -n | head -n 20

(10) 统计浏览器

$ cat /www/logs/example.com/access.2018-11-11.log | grep -v -E 'MSIE|Firefox|Chrome|Opera|Safari|Gecko|Maxthon' | sort | uniq -c | sort -r -n | head -n 100 | more

(11) URL访问量统计

$ cat /www/logs/access.2018-11-11.log | awk '{print $7}' | egrep '\?|&' | sort | uniq -c | sort -rn | more

(12) 删除一个月前日志

$ rm -f /www/logs/access.log.$(date -d '-1 month' +'%Y-%m')*

0x07 工具总结

1. Busybox

Busybox 静态编译,可检测劫持了动态链接库的隐藏病毒

安装运行

1
2
3
4
5
$ wget https://busybox.net/downloads/binaries/1.30.0-i686/busybox

$ chmod +x busybox

$ ./busybox commond

2. Rootkit查杀

chkrootkit Linux下rootkit检测工具

下载运行

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$ wget ftp://ftp.pangeia.com.br/pub/seg/pac/chkrootkit.tar.gz

$ tar zxf chkrootkit.tar.gz

$ cd chkrootkit-*

$ make sense

$ cd ..

$ cp -r chkrootkit- /usr/local/chkrootkit

$ rm -r chkrootkit-

$ /usr/local/chkrootkit/chkrootkit

rkhunter 一款用于检测Liunx系统是否感染rootkit的工具

下载运行

1
2
3
4
5
6
7
$ wget https://jaist.dl.sourceforge.net/project/rkhunter/rkhunter/1.4.6/rkhunter-1.4.6.tar.gz

$ tar zxvf rkhunter-1.4.6.tar.gz

$ cd rkhunter-1.4.4

$ ./install.sh --install

rootkit检测

1
2
3
$ rkhunter -checkall #执行rootkit预定库,来检测本地系统文件

$ rkhunter --checkall --skip-keypress #--skip-keyperss参数来自动持续检测,一直到结束

3. 病毒查杀

ClamAV Linux平台上的开源反病毒引擎,病毒库较丰富,更新频率高

下载运行

1
2
3
4
5
6
7
$ yum install epel-release -y

$ yum -y install clamav

$ freshclam # 更新病毒库

$ clamscan -r /opt # 扫描目录

病毒库更新

1
2
3
4
5
6
$ cd /var/lib/clamav
$ wget http://database.clamav.net/main.cvd
$ wget http://database.clamav.net/daily.cvd
$ wget http://database.clamav.net/bytecode.cvd

$ chown clamav:clamav *

4. 威胁取证

5. webshell查杀

6. 审计检查

Lynis用于UNIX系统的安全审计工具

1
2
3
4
5
6
7
$ lynis show commands  # 查看 Lynis 中所有可用的命令

$ lynis audit system # 审计系统的安全状况,返回一份详细的报告
Lynis 使用颜色编码使报告更容易解读
绿色:一切正常
黄色:跳过、未找到,可能有个建议
红色:你可能需要仔细看看这个

7. 工具合集