在日常工作中,总是遭遇linux操作系统的应急,这里整理一些常用排查命令。
注:在没有对库劫持、rootkit做好清理时,建议使用busybox执行命令
在很多挖矿病毒场景中,病毒为了达到隐藏自己的效果,都会留下预加载恶意动态链接库的后门,所以在你通过监测工具发现系统cpu占用很高,但是使用top、htop、ps命令又排查不到异常进程的时候,就有必要先确定是否存在恶意动态链接库,或者使用busybox进行排查。关于动态链接库的排查参考:
https://blog.csdn.net/youuzi/article/details/129008153
针对很多对库劫持、进程、计划任务、启动项、病毒文件做了清理后,机器依旧存在cpu高占用等现象,可使用Rookit查杀工具进行进一步清理。
chkrootkit
网址:http://www.chkrootkit.org
使用:
wget ftp://ftp.pangeia.com.br/pub/seg/pac/chkrootkit.tar.gz
tar zvxf chkrootkit.tar.gz
cd chkrootkit-0.52
make sense #编译执行没有报错的话执行检查
./chkrootkit
rkhunter
网址:http://rkhunter.sourceforge.net
使用方法:
wget https://nchc.dl.sourceforge.net/project/rkhunter/rkhunter/1.4.4/rkhunter-1.4.4.tar.gz
tar -zvxf rkhunter-1.4.4.tar.gz
cd rkhunter-1.4.4
./installer.sh --install
rkhunter -c
1、journalctl查看指定时间范围内的ssh登录日志
journalctl -u sshd -S "2022-04-16 00:00:00" -U "2022-04-17 00:00:00" -n 20
2、more查看所有用户的.ssh/authorized_keys的公钥文件
more /home/*/.ssh/authorized_keys
more /root/.ssh/authorized_keys
3、lastlog查看用户最后一次登录时间,对用日志文件“/var/log/lastlog"
4、last查看所有用户的登录、注销信息,同时记录系统的启动、重启、关机时间,对应日志文件"/var/log/wtmp"
5、/var/log/secure日志
#定位有多少IP在爆破主机的root账户
grep " Failed password for root" /var/log/secure | awk '{print $11}'|sort | uniq -c | sort -nr | more
#定位有哪些IP在爆破
grep "Failed password" /var/log/secure|grep -E -o "(25[0-5]|2[0-4][0-9]|[01][0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01][0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01][0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01][0-9][0-9]?)"| uniq -c|sort -nr
#爆破用户名字典是什么
grep "Failed password" /var/log/secure | perl -e 'while($_=<>){/for(.*?)from/;print "$1\n";}' | uniq -c | sort -nr | more
#登录成功的IP有哪些
grep "Accept" /var/log/secure | awk '{print $11}' | sort | uniq -c| sort -nr | more
#登录成功的日期、用户名、IP
grep "Accept" /var/log/secure | awk '{print $1,$2,$3,$9,$11}'
基本介绍
root:x:0:0:root:/root:/bin/bash
Account:password:UID:GID:GECOS:directory:shell
用户名:密码:用户ID:组ID:用户说明:家目录:登录之后shell
UID:0为系统管理员,1-499为系统账户,500-65535为普通登录账户
GID:对应的文件为/etc/group
注:密码为空时只允许本地登录,不允许远程登录
查询具有root权限的用户:
awk -F: '$3==0{print $1}' /etc/passwd
基本介绍
root:$6$oGs1PqhL2p3ZetrE$X7o7bzoouHQVSEmSgsYN5UD4.kMHx6qgbTqwNVC5oOAouXvcjQSt.Ft7ql1WpkopY0UV
9ajBwUt1DpYxTCVvI/:16809:0:99999:7:::
用户名:加密密码:密码最后一次修改日期:两次密码修改的时间间隔:密码有效期:密码修改到期的警告天数:密码过期后的宽限天数:账号失效时间:保留
查看空密码账号:
awk -F: 'length($2)==0 {print $1}' /etc/shadow
查看可远程登录用户:
awk '/\$1|\$6/ {print $1}' /etc/shadow
查看root用户外存在sudo权限账户
more /etc/sudoers | grep -v "^#|^$" | grep "ALL=(ALL)"
文件执行目录 : /var/spool/at
允许执行at用户文件:/etc/at.allow
查看任务:at -l
#系统定时任务执行文件/etc/crontab
shell:使用shell的路径
path:执行文件查找路径
mailto:错误告警路径
home:默认shell的主文件夹路径
#排查命令
crontab -l //查看当前用户的定时任务
crontab -l -u 用户名 //查看指定用户的定时任务
more /var/spool/cron/* //查看所有用户默认的coontab计划任务
#重复性的计划任务脚本路径
/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/*
tips:使用more /etc/cron.daily/*查看目录下所有文件
#查看/var/log/cron
more /var/log/cron
top命令用于实时显示 process 的动态。(在库劫持或rootkit后门场景下,一般看不到进程、cpu等异常)
1、查看进程信息:
top -c -o %CPU
-c 显示进程的命令行参数
-p 显示指定进程pid
-o 指定列进行排序
一般没有安装,可以 yum -y install htop安装
此命令一般不会被挖矿病毒修改,在不是库劫持和rootkit场景下可以查看到异常进程
查看进程htop(F6可以排序)
pstree -anph
进程以树状图显示,树状图将会以 pid (如果有指定) 或是以 init 这个基本进程为根 (root),如果有指定使用者 id,则树状图会只显示该使用者所拥有的进程。(建议使用)
有些木马会将恶意代码执行做到了线程级别,也就是说附到了现有的正常业务的进程中,目前查杀一个进程中的线程风险比较大,极可能会把进程搞奔溃,需要跟客户进行确认,kill线程的方法和kill进程的方法一样,因为在linux中线程的概念就是轻量级进程
根据pid查看由进程起的线程
top -H -p pid
ps -T -p pid
ps -aLf pid
ps -eLFa
htop -p pid
pstree -agplU
netstat -antpl | more
ss -l 列出所有打开的网络连接端口
ss -at 显示TCP连接
ss -pl 查看进程使用的socket
根据进程pid号查看进程对应文件
ls -l /proc/$PID/exe
file /proc/$PID/exe
系统运行级别:/etc/inittab
运行级别 |
含义 |
0 |
系统停机模式,默认运行级别不能设置为0,否则不能正常启动,机器关闭 |
1 |
单用户模式,root权限用于系统维护,禁止远程登录 |
2 |
多用户模式,没有NFS网络的支持 |
3 |
完整的多用户文本模式,有NFS,登录后进入控制台命令行模式 |
4 |
系统未调用 |
5 |
图形化模式,登录后进入图形GUI模式 |
6 |
重启模式,默认不设置,否则无法正常启动 |
主要是执行不同运行环境下的自启动脚本
more /etc/rc.d/rc[0-6].d
用户自定义开机启动项
cat /etc/rc.local
特别关注目录:
/tmp
/etc/init.d
/usr/bin
/user/sbin
/etc/systemd/system
使用find命令查询最近被修改过的文件
#查看web目录下指定时间变动过的文件
find /root/web/ -newermt "2021-12-12 00:00:00" ! -newermt "2021-12-12 23:50:00"
#查看24小时内被修改过的php文件
find / -mtime 0 -name *.php
#查看24小时内修改过的可执行文件
find / -mtime 0 -executable -type f #executable查当前用户具有执行权限的文件
或者:
#perm参数指是否设置了任何执行权限
find / -mtime 0 -perm /111 #适用GNU 4.5.12版本之后
find / -mtime 0 -perm +111 #使用GNU 4.5.12版本之前
本命令只针对ext文件系统,为linux自带工具
大多数情况下我们任务linux中文件只有三个时间atime、ctime、mtime,其实还隐藏有两个时间‘crtime’(create创建时间)、’dtime’(删除时间)
首先,查看系统挂载磁盘:
[root@VM-0-10-centos ~]# df -Th
Filesystem Type Size Used Avail Use% Mounted on
devtmpfs devtmpfs 1.8G 0 1.8G 0% /dev
tmpfs tmpfs 1.9G 24K 1.9G 1% /dev/shm
tmpfs tmpfs 1.9G 864K 1.9G 1% /run
tmpfs tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/vda1 ext4 59G 36G 21G 64% /
tmpfs tmpfs 370M 0 370M 0% /run/user/0
查看/tmp目录下文件变动:(<>中为删除文件inode,后面跟的文件名)
注:如果文件夹下文件变动频繁,会导致覆盖之前删除的文件,导致查询不到删除文件信息
[root@VM-0-10-centos ~]# debugfs /dev/vda1 -R 'ls -d /tmp'
debugfs 1.42.9 (28-Dec-2013)
8193 (12) . 2 (4084) .. <135462> (20) .XIM-unix
<135463> (20) .X11-unix <135464> (20) .font-unix <135465> (20) .Test-unix
<1048861> (24) hsperfdata_root <22394> (24) stargate.lock
<1048875> (24) tmp.gLqNzy8RLq <22627> (52) winstone6193988263471717589.jar
<23149> (36) jna6377313934143334006jar
<790685> (40) tomcat.3098490010248034390.443
<790687> (48) tomcat-docbase.1987620929894190651.443
<1183272> (44) tomcat.1225625531804442913.443 <659246> (52) jiemi
<23225> (36) test1215660665898140160test <659263> (12) WELA
<655368> (76) systemd-private-f32012f4406341c8967a3c7d0ee5a1d5-ntpd.service-DZHOjv
<1183554> (48) tomcat-docbase.4060800551943869505.443
查看某个被删除文件信息:(不一定有 dtime)
[root@VM-0-10-centos tmp]# debugfs /dev/vda1 -R 'stat <659246>'
debugfs 1.42.9 (28-Dec-2013)
Inode: 659246 Type: directory Mode: 0644 Flags: 0x80000
Generation: 3629547335 Version: 0x00000000:00000006
User: 0 Group: 0 Size: 4096
File ACL: 0 Directory ACL: 0
Links: 4 Blockcount: 8
Fragment: Address: 0 Number: 0 Size: 0
ctime: 0x634bc326:4e15aba0 -- Sun Oct 16 16:39:02 2022
atime: 0x634bc329:2b839e24 -- Sun Oct 16 16:39:05 2022
mtime: 0x634bc326:4e15aba0 -- Sun Oct 16 16:39:02 2022
crtime: 0x62a2be5f:5289ffac -- Fri Jun 10 11:45:35 2022
Size of extra inode fields: 28
EXTENTS:
(0):2630249
正常情况下,服务器所起的系统服务是不会变动的,但是攻击者可能为了达到持久化控制的效果,会在服务器上新增加服务项,可以重点观测下近期是否有服务变动
find /etc/systemd/system/ -mtimee -近期变动时间 -type f
chattr -ia filename #filename为近期找到的变动服务文件
systemctl stop 服务名 #停止服务
systemctl disable 服务名
chkconfig –list #查看服务自启动状态,可以看到所有的RPM包安装的服务
rpm -qaV
S=大小改变
M=权限改变
5=MD5改变
L=连接改变
D=设备改变
U=用户改变
G=组改变
T=日期和时间改变
missing=文件丢失