記一次Linux木馬清除過程
前段時間公司發生了一起服務器入侵事件,在此分享給大家也順便理順下linux入侵應急響應思路。
一、事件描述
某天監控同事反饋有臺機器cpu飆高到2000%,可能機器已經被黑。于是登錄上去查看,果然有個進程名為"HT8sUy71"的進程在作祟,這一看名字就不大可能是正常進程。
二、處理過程
2.1 查殺病毒進程
cpu占用率如此之高,基本可判斷為挖礦程序無疑了,使用在線威脅情報系統對進程進行檢測,不出所料,得出的標簽是coinminer。這種挖礦進程一般都有自動重啟機制,可能是某個進程的子進程,也可能在cron定時任務里出現。
首先,檢查cron定時任務,發現/var/spool/cron/crontabs/root和/etc/cron.d/tomcat文件修改時間有變化,但是內容卻無改動。
然后,使用ps -ef進行查找主進程,并無收獲。同時發現此挖礦進程正在和“172.105.114.84”這個ip的8443端口進行通信,可能是黑客的一臺遠控服務器。
之后,lsof查看此進程在操作哪些文件,也無實際收獲。
推測一定是有某個主進程在工作,so,繼續通過ps和netstat查找監聽所監聽端口的異常。果不其然,看到異常進程,正在批量爆破,看來是被當做肉雞了。同時使用lsof查看此進程文件,發現在調用/root/.ddg/4003.db文件,貌似是個加密的社工庫。
判斷是此程序即是主程序,kill掉挖礦進程后,使用strace -T -tt -e strace=full進行跟蹤,發現主進程先對挖礦進程增加可執行權限,之后拉起進程。
那么現在kill掉主進程吧,發生個小插曲,發現主進程pid一直在變化,好吧,直接killall osryfa3。
至此,算是暫時消停一下,簡單總結一下此病毒特征,其一方面釋放挖礦病毒進行挖礦,同時又對公網ssh服務進行爆破以擴大感染面。在這里同時給了我一個提醒,或許這臺服務器就是通過ssh爆破被入侵的。
2.2 查找入侵痕跡
一般情況下,入侵可能有以下幾種方式:
a.各種弱口令爆破
b.系統漏洞的利用
c.應用漏洞的利用
上面說了,可能是通過ssh爆破被入侵的,我們先來驗證一下。
查看登錄日志,發現異常(下圖是已經過濾掉正常登錄的日志),基本可斷定是通過ssh爆破入侵了,也可以斷定ssh的訪問控制已經失效。
- cat /var/log/secure* | grep Accepted
結合以上ip查看爆破日志,確認以上ip的用戶不是同一個人,是剛好有這么多ip同時爆破了root賬戶,而且最短的爆破時間只花了1分鐘。想來這個root賬戶必然是個弱密碼了。繼續查找Failed日志的最早時間如下:
- cat /var/log/secure* | grep Failed
基本可斷定在這之前有人動過訪問控制策略了,詢問運維人員無果。
stats查看iptables、/etc/hosts.allow和/etc/hosts.deny文件狀態,結合.bash_history命令,一切真相大白,一言難盡,你們自己體會。
2.3 病毒文件的清理
首先,使用stat查看上面兩個進程的修改時間,大約在7月8號早上6點多,而ssh系統最早爆破時間是7月6號16:41。
然后,結合這兩個時間來查找敏感目錄中被修改過的系統文件,進行檢查修復和清除。
- find /etc/ /usr/bin/ /usr/sbin/ /bin/ /usr/local/bin/ /var/spool/cron/ -type f -mtime -3 | xargs ls -l
最后 ,使用chkrootkit、clamav、rkhunter一通查殺,當然,還是重裝系統最保險。
三、總結
首先啰嗦一下,關于linux主機,高危端口真得萬萬不能全網開放。看了日志后,發現黑客真是時時刻刻在爆破啊。
關于linux入侵的排查思路,總結如下:
1、查看異常進程活動-查找是否有異常進程和端口占用
1.1查找占用cpu最多的進程,相關命令:運行top命令后,鍵入大寫字母P按cpu排序;
1.2查找占用內存最多的進程,相關命令:運行top命令后,鍵入大寫字母M
- ps aux | sort -k4nr
1.3查找進程文件:
- ls -la /proc/$pid/exe
1.4跟蹤異常進程運行情況:
- strace -tt -T -e trace=all -p $pid
1.5查看進程打開的文件
- lsof -p $pid
1.6 查看進程端口情況
- netstat -anltp | grep $pid
2、查看賬號安全
2.1查看是否有存在新增異常賬號:
a.查找特權用戶
- awk -F ":" '$3==0{print $1}' /etc/passwd
b.查找可以遠程登錄的賬號信息
- awk '/\$1|\$6/{print $1}' /etc/shadow
c.查找sudo權限賬戶
- cat /etc/sudoers | grep -v "^#\|^$" | grep "ALL=(ALL)"
2.2 查看是否有賬號異常登錄情況:
a.查看當前登錄用戶和其行為
- w
b.查看所有用戶最后一次登錄的時間
- lastlog
c.查看所有用戶的登錄注銷信息及系統的啟動、重啟及關機事件
- last
d.查看登錄成功的日期、用戶名及ip
- grep "Accepted " /var/log/secure* | awk '{print $1,$2,$3,$9,$11}'
e.查看試圖爆破主機的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
f.查看有哪些ip在爆破主機的root賬號
- grep "Failed password for root" /var/log/secure | awk '{print $11}' | sort
g.查看爆破用戶名字典
- grep "Failed password" /var/log/secure | awk {'print $9'} | sort | uniq -c | sort -nr
3、查找異常文件
3.1 查找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/*
3.2 查看最近一段時間內被修改的系統文件
- find /etc/ /usr/bin/ /usr/sbin/ /bin/ /usr/local/bin/ -type f -mtime -T | xargs ls -la
3.3 按時間排序,確認最近是否有命令被替換,可以結合rpm -Va命令
- ls -alt /usr/bin /usr/sbin /bin /usr/local/bin
- rpm -Va>rpm.log
3.4 確認是否有異常開機啟動項
- cat /etc/rc.local
- chkconfig --list
4.借助工具查殺病毒和rootkit
4.1 查殺rootkit
- chkrootkit (下載地址-http://www.chkrootkit.org)
- rkhunter (下載地址-http://rkhunter.sourceforge.net)
4.2 查殺病毒
- clamav(下載地址-http://www.clamav.net/download.html)
4.3 查殺webshell
- cloudwalker(下載地址-http://github.com/chaitin/cloudwalker)
工具用法不再贅述,大家自行查閱。