当前位置:   article > 正文

应急响应-Linux排查思路小结_linux库劫持

linux库劫持

前言

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

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

Linux库劫持

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

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

Rootkit排查

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

  • chkrootkit

  1. 网址:http://www.chkrootkit.org
  2. 使用:
  3. wget ftp://ftp.pangeia.com.br/pub/seg/pac/chkrootkit.tar.gz
  4. tar zvxf chkrootkit.tar.gz
  5. cd chkrootkit-0.52
  6. make sense #编译执行没有报错的话执行检查
  7. ./chkrootkit
  • rkhunter

  1. 网址:http://rkhunter.sourceforge.net
  2. 使用方法:
  3. wget https://nchc.dl.sourceforge.net/project/rkhunter/rkhunter/1.4.4/rkhunter-1.4.4.tar.gz
  4. tar -zvxf rkhunter-1.4.4.tar.gz
  5. cd rkhunter-1.4.4
  6. ./installer.sh --install
  7. 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的公钥文件

  1. more /home/*/.ssh/authorized_keys
  2. more /root/.ssh/authorized_keys

3、lastlog查看用户最后一次登录时间,对用日志文件“/var/log/lastlog"

4、last查看所有用户的登录、注销信息,同时记录系统的启动、重启、关机时间,对应日志文件"/var/log/wtmp"

5、/var/log/secure日志

  1. #定位有多少IP在爆破主机的root账户
  2. grep " Failed password for root" /var/log/secure | awk '{print $11}'|sort | uniq -c | sort -nr | more
  3. #定位有哪些IP在爆破
  4. 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
  5. #爆破用户名字典是什么
  6. grep "Failed password" /var/log/secure | perl -e 'while($_=<>){/for(.*?)from/;print "$1\n";}' | uniq -c | sort -nr | more
  7. #登录成功的IP有哪些
  8. grep "Accept" /var/log/secure | awk '{print $11}' | sort | uniq -c| sort -nr | more
  9. #登录成功的日期、用户名、IP
  10. grep "Accept" /var/log/secure | awk '{print $1,$2,$3,$9,$11}'

账户检查

/Etc/Passwd(用户文件)

基本介绍

  1. root:x:0:0:root:/root:/bin/bash
  2. Account:password:UID:GID:GECOS:directory:shell
  3. 用户名:密码:用户ID:组ID:用户说明:家目录:登录之后shell
  4. UID:0为系统管理员,1-499为系统账户,500-65535为普通登录账户
  5. GID:对应的文件为/etc/group
  6. 注:密码为空时只允许本地登录,不允许远程登录

查询具有root权限的用户:

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

/Etc/Shadow(影子文件)

基本介绍

  1. root:$6$oGs1PqhL2p3ZetrE$X7o7bzoouHQVSEmSgsYN5UD4.kMHx6qgbTqwNVC5oOAouXvcjQSt.Ft7ql1WpkopY0UV
  2. 9ajBwUt1DpYxTCVvI/:16809:0:99999:7:::
  3. 用户名:加密密码:密码最后一次修改日期:两次密码修改的时间间隔:密码有效期:密码修改到期的警告天数:密码过期后的宽限天数:账号失效时间:保留

查看空密码账号:

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

  1. #系统定时任务执行文件/etc/crontab
  2. shell:使用shell的路径
  3. path:执行文件查找路径
  4. mailto:错误告警路径
  5. home:默认shell的主文件夹路径
  6. #排查命令
  7. crontab -l //查看当前用户的定时任务
  8. crontab -l -u 用户名 //查看指定用户的定时任务
  9. more /var/spool/cron/* //查看所有用户默认的coontab计划任务
  10. #重复性的计划任务脚本路径
  11. /var/spool/cron/*
  12. /etc/crontab
  13. /etc/cron.d/*
  14. /etc/cron.daily/*
  15. /etc/cron.hourly/*
  16. /etc/cron.monthly/*
  17. /etc/cron.weekly/
  18. /etc/anacrontab
  19. /var/spool/anacron/*
  20. <strong>tips:使用more /etc/cron.daily/*查看目录下所有文件</strong>

计划任务执行日志

  1. #查看/var/log/cron
  2. more /var/log/cron

进程及线程检查

进程检查

top

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

1、查看进程信息:

  • top -c -o %CPU

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

htop

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

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

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

Ps

  • 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

  • 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命令查询最近被修改过的文件

  1. #查看web目录下指定时间变动过的文件
  2. find /root/web/ -newermt "2021-12-12 00:00:00" ! -newermt "2021-12-12 23:50:00"
  3. #查看24小时内被修改过的php文件
  4. find / -mtime 0 -name *.php
  5. #查看24小时内修改过的可执行文件
  6. find / -mtime 0 -executable -type f #executable查当前用户具有执行权限的文件
  7. 或者:
  8. #perm参数指是否设置了任何执行权限
  9. find / -mtime 0 -perm /111 #适用GNU 4.5.12版本之后
  10. find / -mtime 0 -perm +111 #使用GNU 4.5.12版本之前

debugfs

本命令只针对ext文件系统,为linux自带工具

大多数情况下我们任务linux中文件只有三个时间atime、ctime、mtime,其实还隐藏有两个时间‘crtime’(create创建时间)、’dtime’(删除时间)

首先,查看系统挂载磁盘:

  1. [root@VM-0-10-centos ~]# df -Th
  2. Filesystem Type Size Used Avail Use% Mounted on
  3. devtmpfs devtmpfs 1.8G 0 1.8G 0% /dev
  4. tmpfs tmpfs 1.9G 24K 1.9G 1% /dev/shm
  5. tmpfs tmpfs 1.9G 864K 1.9G 1% /run
  6. tmpfs tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
  7. /dev/vda1 ext4 59G 36G 21G 64% /
  8. tmpfs tmpfs 370M 0 370M 0% /run/user/0

查看/tmp目录下文件变动:(<>中为删除文件inode,后面跟的文件名)

注:如果文件夹下文件变动频繁,会导致覆盖之前删除的文件,导致查询不到删除文件信息

  1. [root@VM-0-10-centos ~]# debugfs /dev/vda1 -R 'ls -d /tmp'
  2. debugfs 1.42.9 (28-Dec-2013)
  3. 8193 (12) . 2 (4084) .. <135462> (20) .XIM-unix
  4. <135463> (20) .X11-unix <135464> (20) .font-unix <135465> (20) .Test-unix
  5. <1048861> (24) hsperfdata_root <22394> (24) stargate.lock
  6. <1048875> (24) tmp.gLqNzy8RLq <22627> (52) winstone6193988263471717589.jar
  7. <23149> (36) jna6377313934143334006jar
  8. <790685> (40) tomcat.3098490010248034390.443
  9. <790687> (48) tomcat-docbase.1987620929894190651.443
  10. <1183272> (44) tomcat.1225625531804442913.443 <659246> (52) jiemi
  11. <23225> (36) test1215660665898140160test <659263> (12) WELA
  12. <655368> (76) systemd-private-f32012f4406341c8967a3c7d0ee5a1d5-ntpd.service-DZHOjv
  13. <1183554> (48) tomcat-docbase.4060800551943869505.443

查看某个被删除文件信息:(不一定有 dtime)

  1. [root@VM-0-10-centos tmp]# debugfs /dev/vda1 -R 'stat <659246>'
  2. debugfs 1.42.9 (28-Dec-2013)
  3. Inode: 659246 Type: directory Mode: 0644 Flags: 0x80000
  4. Generation: 3629547335 Version: 0x00000000:00000006
  5. User: 0 Group: 0 Size: 4096
  6. File ACL: 0 Directory ACL: 0
  7. Links: 4 Blockcount: 8
  8. Fragment: Address: 0 Number: 0 Size: 0
  9. ctime: 0x634bc326:4e15aba0 -- Sun Oct 16 16:39:02 2022
  10. atime: 0x634bc329:2b839e24 -- Sun Oct 16 16:39:05 2022
  11. mtime: 0x634bc326:4e15aba0 -- Sun Oct 16 16:39:02 2022
  12. crtime: 0x62a2be5f:5289ffac -- Fri Jun 10 11:45:35 2022
  13. Size of extra inode fields: 28
  14. EXTENTS:
  15. (0):2630249

服务检查

正常情况下,服务器所起的系统服务是不会变动的,但是攻击者可能为了达到持久化控制的效果,会在服务器上新增加服务项,可以重点观测下近期是否有服务变动

  1. find /etc/systemd/system/ -mtimee -近期变动时间 -type f
  2. chattr -ia filename #filename为近期找到的变动服务文件
  3. systemctl stop 服务名 #停止服务
  4. systemctl disable 服务名

自启动服务项检查

Chkconfig

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

检查Rpm包完整性

  1. rpm -qaV
  2. S=大小改变
  3. M=权限改变
  4. 5=MD5改变
  5. L=连接改变
  6. D=设备改变
  7. U=用户改变
  8. G=组改变
  9. T=日期和时间改变
  10. missing=文件丢失

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/969310
推荐阅读
相关标签
  

闽ICP备14008679号