背景
一臺centos伺服器,今日發現cpu和load都增高了一些,top命令檢視發現有一個程式cpu佔用80%多,猜測多半是挖礦木馬(未確定),準備進行清理工作
清理遇到的兩個問題
- kill -9 可以殺死此程式,然而立馬生成了一個新的程式出來
- 在/etc/cron.hourly/有一個異常定時任務配置,檔名是xxx.sh,刪除後立馬生成了一個新的配置檔案(檔名也變了)
找到問題2的源頭
參考文章誰動了我的檔案——使用audit監控檔案和目錄,用auditd監控/etc/cron.hourly/檔案變動,先刪除xxx.sh,然後透過ausearch命令找到是誰又生成了一個新的配置檔案,最終定位到一個程式,結果發現就是問題1的程式產生的!那麼問題1的源頭如何找呢?也就是有個守護程式,在程式被殺死後立馬生成一個新的馬甲出來。那守護程式是誰呢?
找到問題1的守護程式
還是可以使用auditd,參考How to use auditd to monitor a specific SYSCALL監控所有程式的執行fork或者clone的系統呼叫,具體步驟如下
vim /etc/audit/rules.d/audit.rules
# 在檔案第二行增加如下一行配置,表示監控clone,fork,vfork,kill這四個系統呼叫
-a always,exit -F arch=b64 -S clone,fork,vfork,kill -F key=fork_rule
# 使配置生效
augenrules --load
# 檢視生效的配置
auditctl -l
# 執行命令殺死可疑的程式(殺死後可以看到又出現新的程式)
pgrep -P 1|xargs -i file /proc/{}/exe|grep -v 'systemd-journald\|lvmetad\|systemd-udevd\|auditd\|abrtd\|lsmd\|hypervvssd\|abrt-watch-log\|rngd\|deleted\|python\|dbus-daemon\|php-fpm\|nginx\|pure-ftpd\|NetworkManager\|crond\|sshd\|systemd-logind\|hypervkvpd\|mysqld\|agetty\|directory'|grep -Eo [0-9]+|xargs kill -9
# 檢視監控日誌/var/log/audit/audit.log可以發現如下日誌
type=SYSCALL msg=audit(1642486256.950:327876): arch=c000003e syscall=56 success=yes exit=50485 a0=1200011 a1=0 a2=0 a3=7fda15a1dc10 items=0 ppid=1 pid=50484 auid=4294967295 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=(none) ses=4294967295 comm="systemd" exe="/usr/lib/systemd/systemd" key="fork_rule"
透過上述步驟,可以發現守護程式是systemd,即這些木馬是利用的systemd來實現的守護程式。
本作品採用《CC 協議》,轉載必須註明作者和本文連結