应急响应-linux服务器排查

应急响应排查-Linux服务器

查询特权用户

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

如图

image-20211119101131608

查找远程可以登录的账户

1
2
3
4
5
> awk '/\$1|\$5|\$6/{print $1}' /etc/shadow

- $1:MD5(长度 22个字符)
- $5:SHA-256(长度 43 个字符)
- $6:SHA-512(长度86 个字符)
  • 如下图,包含四个可远程登录账户

image-20211119101638529

检查sudo权限

1
cat /etc/sudoers | grep -v "^#\|^$" | grep "ALL=(ALL"       

如图,包含5个sudo权限被设置为all的账户

image-20211119101802666

删除或锁定账号

通过上面的步骤可以找到可疑的账号

1
2
usermod -L rooot #禁用帐号,帐号无法登录,/etc/shadow第二栏为!开头 
userdel rooot #删除user用户 > userdel -r rooot #将删除root用户,并且将/home目录下的root目录并删除

查看当前登录系统的信息

1
2
3
> who    #查看当前登录用户(tty本地登陆  pts远程登录) 
> w #查看系统信息,想知道某一时刻用户的行为
> uptime #查看登陆多久、多少用户,负载

如图

image-20211119102425015

检查异常端口

使用netstat 网络连接命令,分析可疑端口、IP、PID等信息。

如图

抓包分析

1
tcpdump -c 10 -q // 10个包

如图

image-20211119102823034

使用ps命令检查可疑的进程

1
ps -ef

如图

image-20211119102913572

检查查系统中占用资源

1
top

如图

image-20211119103007150

发现异常进一步检查

1
2
3
4
5
ps echo command -p $PID  #查看该进程启动的完整命令行 
readlink /proc/$PID/cwd #查看该进程启动时候所在的目录
ls -l /proc/$PID/exe #查看下pid所对应的进程文件路径
strings -f /proc/$PID/environ | cut -f2 -d '' #查看该进程启动时的完整环境变量:
lsof -p $PID #列出该进程所打开的所有文件

检查系统服务

Linux系统服务管理,CentOS7使用systemd控制 CentOS6之前使用chkconfig控制。 查看正在运行的服务

1
service --status-all | grep running

如图

image-20211119104105196

检查开机自启的服务

1
2
3
4
5
6
7
//对于systemd服务管理器来说,可以通过下述方式查看开机自启的服务 

systemctl list-unit-files --type=service | grep "enabled"

//chkconfig就是CentOS6以前用来控制系统服务的工具,查看服务自启动状态

chkconfig --list | grep "3:on\|5:on"
                             ![image-20211119105421321](https://cdn.jsdelivr.net/gh/C0mpactDisk/cloudimg//%E5%BA%94%E6%80%A5linux%E6%9C%8D%E5%8A%A1%E5%99%A8/image-20211119105421321.png)

检查启动项脚本

命令查看下开机启动项中是否有异常的启动服务。

1
cat /etc/rc.local              

如图

image-20211119110817067

检查计划任务

利用计划任务进行权限维持,可作为一种持久性机制被入侵者利用。检查异常的计划任务,需要重点关注以下目录中是否存在恶意脚本。

1
2
3
4
5
6
7
/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/*

crontab -l 可指定用户查看计划任务,参数留空默认查询当前用户,如图

image-20211119110616393

1
for u in `cat /etc/passwd | cut -d":" -f1`;do crontab -l -u $u;done  //检查所有用户计划任务

检查系统的异常文件

查看敏感目录,如/tmp目录下的文件,同时注意隐藏文件夹,以.为名的文件夹具有隐藏属性

1
ls -al 

查找n天以内被访问过的文件

1
2
find /opt -iname "*" -atime 1 -type f
#-iname不区分大小写,-atime最近一次被访问的时间,-type文件类型

如图

image-20211119141214557

检查历史命令

查看被入侵后,在系统上执行过哪些命令,使用root用户登录系统,检查/home目录下的用户主目录的.bash_history文件,系统默认可以保存1000条的历史命令,并不记录命令执行的时间,根据需要进行安全加固。

检查系统日志

在Linux上一般跟系统相关的日志默认都会放到/var/log下面, 若是一旦出现问题,用户就可以通过查看日志来迅速定位, 及时解决问题。常用日志文件如下:

/var/log/btmp

记录错误登录日志,这个文件是二进制文件,不能用vi直接查看,可以用lastb看

/var/log/lastlog

记录系统中所有用户最后一次成功登录系统的时间,这是一个二进制文件,不能用vi查看,可以用lastlog查看 /var/log/wtmp

​ 永久记录所有用户的登录、注销信息,同时记录系统的启动、重启、关机事件。 同样这个文件也是一个二进制文件,不能直接vi,而需要使用last命令来查看。

/var/log/utmp

​ 记录当前已经登录的用户信息,这个文件会随着用户的登录和注销不断变化, 只记录当前登录用户的信息。同样这个文件不能直接vi, 而要使用w,who,users等命令来查询。

/var/log/secure

​ 记录验证和授权方面的信息,只要涉及账号和密码的程序都会记录, 比如SSH登录,su切换用户,sudo授权, 甚至添加用户和修改用户密码都会记录在这个日志文件中

之前提到的last、lastlog记录并不准确,还可以用以下命令来查询登录情况

1
cat /var/log/secure | grep -E "Accepted|Failed"          

查找登录系统失败的20个账号

1
lastb | awk '{print $1}' | sort | uniq -c | sort -nr | head -n 20              

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

1
grep "Failed password for root" /var/log/secure | sort | uniq -c | sort -nr | more       

如图

image-20211119141037212

查看所有重启日志信息

1
last reboot              

查看系统正常的运行时间

1
uptime -s

查看哪些IP登录成功了

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

登录成功的日期,用户名,IP

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

作者:C0mpactDisk,本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!