应急响应-Linux排查思路小结

前言

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

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

Linux库劫持

在很多挖矿病毒场景中,病毒为了达到隐藏自己的效果,都会留下预加载恶意动态链接库的后门,所以在你通过监测工具发现系统cpu占用很高,但是使用top、htop、ps命令又排查不到异常进程的时候,就有必要先确定是否存在恶意动态链接库,或者使用busybox进行排查。关于动态链接库的排查参考:

https://blog.csdn.net/youuzi/article/details/129008153

Rootkit排查

针对很多对库劫持、进程、计划任务、启动项、病毒文件做了清理后,机器依旧存在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

SSH远程登录记录排查

1、journalctl查看指定时间范围内的ssh登录日志

journalctl -u sshd -S "2022-04-16 00:00:00" -U "2022-04-17 00:00:00" -n 20
应急响应-Linux排查思路小结_第1张图片

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

账户检查

/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/*
tips:使用more /etc/cron.daily/*查看目录下所有文件

计划任务执行日志

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

进程及线程检查

进程检查

top

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

1、查看进程信息:

  • top -c -o %CPU

-c 显示进程的命令行参数
-p 显示指定进程pid
-o 指定列进行排序

htop

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

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

  • 查看进程htop(F6可以排序)

应急响应-Linux排查思路小结_第2张图片

Ps

  • pstree -anph

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

线程检查

有些木马会将恶意代码执行做到了线程级别,也就是说附到了现有的正常业务的进程中,目前查杀一个进程中的线程风险比较大,极可能会把进程搞奔溃,需要跟客户进行确认,kill线程的方法和kill进程的方法一样,因为在linux中线程的概念就是轻量级进程

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

  • top -H -p pid

应急响应-Linux排查思路小结_第3张图片

  • ps -T -p pid

  • ps -aLf pid

  • ps -eLFa

应急响应-Linux排查思路小结_第4张图片

  • htop -p pid

应急响应-Linux排查思路小结_第5张图片

  • pstree -agplU

应急响应-Linux排查思路小结_第6张图片

端口检查

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

  • /etc/systemd/system

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

debugfs

本命令只针对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

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

检查Rpm包完整性

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

你可能感兴趣的:(应急响应,linux,网络安全,系统安全,安全,安全威胁分析)