本文最后更新于 2025年7月8日 下午
异常进程、端口排查
1 2 3 4 5 6 7 8 9 10 11 12 13
| 查找占用cpu最多的进程,相关命令:运行top命令后,键入大写字母P按cpu排序 查找占用内存最多的进程,相关命令:运行top命令后,键入大写字母M按内存排序 查看显卡占用情况:nvidia-smi 查看静态进程:ps -ef 查看进程的可执行程序:ls -l /proc/PID/exe 查看进程打开的文件:lsof -p PID 查看进程的启动时间点:ps -p PID -o lstart 查看进程启动时间以及关联的子进程:systemctl status PID 查看端口对应的进程:lsof -i:PORT 查看进程sshd打开的文件:lsof -c sshd 跟踪异常进程运行情况:strace -tt -T -e trace=all -p PID 检查进程挂载:cat /proc/mounts 或 cat /proc/$$/mountinfo 查看进程的线程:top -Hp <进程pid>
|
更多可参考:https://blog.csdn.net/yingchao_yuan/article/details/109199868
命令排查
1 2 3 4
| 查看当前用户历史命令:history 查看root用户历史命令:cat /root/.bash_history 查看某用户历史命令:cat /home/<用户>/.bash_history 使history命令显示时间戳:export HISTTIMEFORMAT='%F %T '
|
网络排查
1
| 查看外连地址及相关进程:netstat -antlp
|
定时任务排查
1 2 3 4 5
| crontab -l (/var/spool/cron/ 目录下的都要检查) 查看用户定时任务:crontab -l -u 用户名 查看隐藏的定时任务:cat -A /var/spool/cron/root 查看定时任务日志:more /var/log/cron log 查看定时任务执行记录:tail -f /var/log/cron
|
异常文件排查
临时修改时间格式:(方便观察文件改动时间)
方法 1:设置环境变量(推荐简洁)
1
| export TIME_STYLE=long-iso
|
方法 2:定义别名(更自定义)
1
| alias ll='ls -l --time-style="+%Y/%m/%d %H:%M:%S"'
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| 注意使用ls -al以及判断库文件劫持、别名 注意文件:执行文件、json文件 目录着重看绿色的可执行文件:/etc、/tmp、/、/usr、/root、/boot、/bin、/usr/bin、/sbin 保存历史命令:cat .bash_history >> history.txt 查看etc目录最近7天内被修改的文件:find /etc -mtime 7 -print 查看/www目录指定时间范围内新增的文件:find /www -type f -newermt '2023-06-25 00:00' -a -not -newermt '2023-06-26 23:59' 查看/etc目录修改时间小于7天的配置文件:find /etc -iname "*conf*" -mtime -7 -print 查找cron文件中是否存在恶意脚本: /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/* 查看私钥文件:cat /root/.ssh/authorized_keys 查看文件创建修改时间:stat 文件 查找文件:find / -name "localhost_access_log*" 查看文件隐藏属性:lsattr 文件 修改文件隐藏属性:chattr -/+ 属性 文件 输出文件md5:md5sum 文件 检查hosts文件:cat /etc/hosts os文件分析:strings os文件 查找包含关键字符的普通文件(排除目录、设备文件等特殊文件类型):find / -type f -exec grep -l "10.16.5.134" {} + 2>/dev/null
|
账号安全排查
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| 注意:ubuntu高版本将secure日志目录改成了auth 查找特权用户:awk -F ":" '$3==0{print $1}' /etc/passwd 查找可以远程登录的账号信息:awk '/\$1|\$6/{print $1}' /etc/shadow 查找sudo权限账户:cat /etc/sudoers | grep -v "^#\|^$" | grep "ALL=(ALL)" a 查找空口令账户:awk -F: '($2=="!!") {print $1}' /etc/shadow 查看登录成功日志:more /var/log/secure* | grep "Accepted password" 查看登录失败日志:more /var/log/secure* | grep "Failed password" 查看本机登录情况:more /var/log/secure* | grep -E "sshd:session.*session opened" 查看新增用户:more /var/log/secure* | grep "new user" 查看所有用户最后一次登录的时间:lastlog 记录当前正在登录系统的用户信息,uptime记录系统启动时间(/var/run/utmp):w 查看所有用户的登录注销信息及系统的启动、重启及关机事件(/var/log/wtmp):last 记录失败的登录尝试信息(/var/log/btmp):lastb 所有用户登录日志:last | grep pts | grep -vw :0 查看登录成功的日期、用户名及ip:grep "Accepted " /var/log/secure* | awk '{print $1,$2,$3,$9,$11}' 查看试图爆破主机的ip:grep refused /var/log/secure* | awk {'print $9'} | sort | uniq -c |sort -nr | more grep "Failed password" /var/log/secure* | grep -E -o "(([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3}))" | uniq -c 查看有哪些ip在爆破主机的root账号:grep "Failed password for root" /var/log/secure | awk '{print $11}' | sort 查看爆破用户名字典:grep "Failed password" /var/log/secure | awk {'print $9'} | sort | uniq -c | sort -nr
|
日志排查
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| 日志默认存放位置:/var/log/ 安全日志:/var/log/secure 定时任务日志:/var/log/cron 软件安装卸载日志: /var/log/yum.log 邮件相关:/var/log/maillog 日志配置情况:more /etc/rsyslog.conf 传输文件:more /var/log/message* | grep "ZMODEM:.*BPS" 定时任务日志:more /var/log/cron* 定时执行脚本:more /var/log/cron* | grep -E "\.py$|\.sh$|\.pl$" 下载软件情况:more /var/log/yum* | grep Installed 卸载软件情况:more /var/log/yum* | grep Erased 可疑工具:more /var/log/yum* | awk -F: '{print $NF}' | awk -F '[-]' '{print $1}' | sort | uniq | grep -E "(^nc|sqlmap|nmap|beef|nikto|john|ettercap|backdoor|msfcosole)" Nginx日志文件:access.log joumalctl日志 journal默认配置文件路径:/etc/systemd/journald.conf 日志从旧到新显示:journalctl 日志从新到旧显示:journalctl -r 查看进程:journalctl _PID=$pid journalctl的语法使用跟默认日志的使用一致,如journalctl | grep "Accepted password"
|
命令排查
1 2 3 4
| 查看历史命令执行记录:history( 普通账户的历史命令,/home各账号目录下的.bash_history) 按时间排序,确认最近是否有命令被替换,可以结合rpm -Va命令:ls -all /usr/bin /usr/sbin /bin /usr/local/bin | rpm -Va>rpm.log 查看被别名的命令:alias 取消被别名的命令:unalias 命令
|
启动项排查
1 2 3 4 5
| 查看是否有异常开机启动项:cat /etc/rc.local | chkconfig --list 查看启动配置文件:vi /lib/systemd/system/rc-local.service 看启动文件:/etc/rc.local、/etc/rc[0-6].d 看启动文件目录:/etc/rc.d、 /etc/rc.d/init.d 看异常脚本: /etc/profile.d/ 、/etc/hourly、/etc/daily、/etc/weekly、/etc/monthly
|
库文件劫持排查
1 2 3 4
| 目前主流的劫持技术主要有三种: 1. 更改LD_PRELOAD环境变量,加载恶意库文件 2. /etc/ld.so.preload加载恶意的库文件(主流的劫持技术) 3. 更改默认的库文件/etc/ld.so.preload为其他库文件
|
1
| 其中第二条是目前遇到的最多的,其主要是通过更改/etc/ld.so.preload来预加载其他恶意的库文件来实现对系统命令,如netstat、cat、top等进行劫持,从而到达隐藏进程、连接、性能等目的,这种也是rootkit典型的技术。
|
1 2 3 4 5
| 检查方法: 查看环境变量:echo $LD_PRELOAD 查看命令加载的库文件:ldd /bin/ls 跟踪命令加载库的情况:strace -f -e trace=file /bin/cat 查看ld.so.preload加载库文件:cat /etc/ld.so.preload
|
处置
1 2 3 4 5 6
| 清理定时任务: 使用chattr -i /var/spool/cron/取消文件不可修改属性,再rm命令删除定时文件,可以结合crontab命令使用(清除定时任务时和客户确认是否存在正常任务,不要误删了) 杀掉进程:killall /kill -9 PID (可用于进程ID一直在变的场景) 删除所有任务:crontab -r 删除单个任务:crontab -e(编辑) 删除恶意文件:rm -rf 文件
|
工具查杀病毒和rootkit
chkrootkit (下载地址-http://www.chkrootkit.org)
rkhunter (下载地址-http://rkhunter.sourceforge.net)
clamav(下载地址-http://www.clamav.net/download.html)
webshell:河马、长亭、D盾
busybox(下载地址-https://busybox.net/)
隐藏进程检测工具:unhide(https://www.unhide-forensics.info/)
需先安装epel源:yum -y install epel-release
安装:yum -y install unhide
使用: unhide proc
参考文献
库劫持参考文章:https://blog.csdn.net/weixin_39581716/article/details/110810798
挖矿应急参考文章:https://mp.weixin.qq.com/s/NkleRQknAbvwvkYtNCo-Ww