大柚子

这世界不过如此

前言

在日常工作中,总是遭遇linux操作系统的应急,这里整理一些常用排查命令。

注:在没有对库劫持、rootkit做好清理时,建议使用busybox执行命令

Linux库劫持

在很多挖矿病毒场景中,病毒为了达到隐藏自己的效果,都会留下预加载恶意动态链接库的后门,所以在你通过监测工具发现系统cpu占用很高,但是使用top、htop、ps命令又排查不到异常进程的时候,就有必要先确定是否存在恶意动态链接库,或者使用busybox进行排查。关于动态链接库的排查参考:http://dayouzi.xyz/%e5%ba%94%e6%80%a5%e5%93%8d%e5%ba%94%e4%b8%adlinux%e5%ba%93%e6%96%87%e4%bb%b6%e5%8a%ab%e6%8c%81/

Rootkit排查

针对很多对库劫持、进程、计划任务、启动项、病毒文件做了清理后,机器依旧存在cpu高占用等现象,可使用Rookit查杀工具进行进一步清理。

  • chkrookit

网址: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

SSH远程登录及秘钥登录

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<br>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}'

账户检查

/etc/passwd(用户文件)

基本介绍:

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

/etc/shadow(影子文件)

基本介绍:

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)"

定时任务项

一次性计划任务:at

  • 文件执行目录:/var/spool/at
  • 允许执行at用户文件:/etc/at.allow
  • 查看任务:at -l

重复性计划:crontab


#系统定时任务执行文件/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/*
<strong>tips:使用more /etc/cron.daily/*查看目录下所有文件</strong>

计划任务执行日志


#查看/var/log/cron
more /var/log/cron

进程检查

top

top命令用于实时显示 process 的动态。(在库劫持或rootkit后门场景下,一般看不到进程、cpu等异常)

htop

一般没有安装,可以 yum -y install htop安装

此命令一般不会被挖矿病毒修改,在不是库劫持和rootkit场景下可以查看到异常进程

ps

ps -aux |grep pid //同top命令一样,容易被劫持和修改,看不到病毒进程

pstree

pstree -anph

进程以树状图显示,树状图将会以 pid (如果有指定) 或是以 init 这个基本进程为根 (root),如果有指定使用者 id,则树状图会只显示该使用者所拥有的进程。(建议使用)

端口检查

netstat

netstat -antpl | more

ss

  • ss -l 列出所有打开的网络连接端口
  • ss -at 显示TCP连接
  • ss -pl 查看进程使用的socket

/proc/$PID/exe

根据进程pid号查看进程对应文件

  • ls -l /proc/$PID/exe
  • file /proc/$PID/exe

启动项检查

系统运行级别:/etc/inittab

运行级别含义
0系统停机模式,默认运行级别不能设置为0,否则不能正常启动,机器关闭
1单用户模式,root权限用于系统维护,禁止远程登录
2多用户模式,没有NFS网络的支持
3完整的多用户文本模式,有NFS,登录后进入控制台命令行模式
4系统未调用
5图形化模式,登录后进入图形GUI模式
6重启模式,默认不设置,否则无法正常启动

/etc/rc.d/rc*.d

主要是执行不同运行环境下的自启动脚本

more /etc/rc.d/rc[0-6].d

/etc/rc.local

用户自定义开机启动项

cat /etc/rc.local

文件变动检查

特别关注目录:

  • /tmp
  • /etc/init.d
  • /usr/bin
  • /user/sbin

find

使用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版本之前

自启动服务项检查

chkconfig

chkconfig –list #查看服务自启动状态,可以看到所有的RPM包安装的服务

检查rpm包完整性

rpm -qaV
S=大小改变
M=权限改变
5=MD5改变
L=连接改变
D=设备改变
U=用户改变
G=组改变
T=日期和时间改变
missing=文件丢失

Print Friendly, PDF & Email

发表回复

您的电子邮箱地址不会被公开。