如何排查Linux機(jī)器是否已經(jīng)被入侵?
排查Linux機(jī)器是否受到入侵,首先得看Linux服務(wù)器當(dāng)前是什么狀態(tài),有什么故障,針對(duì)性的排查,俗話不是說:對(duì)癥下藥,所以一定要先確定問題,再根據(jù)問題判斷。
如果不是很清楚的話,可以從以下幾點(diǎn)排查:
檢查當(dāng)前都有誰在登錄?首先要查看當(dāng)前都有誰登錄在服務(wù)器上。發(fā)現(xiàn)攻擊者登錄到服務(wù)器上進(jìn)行操作并不復(fù)雜。
其對(duì)應(yīng)的命令是w,運(yùn)行w會(huì)輸出如下結(jié)果:
08:32:55 up 98 days, 5:43, 2 users, load average: 0.05, 0.03, 0.00USER TTY FROM LOGIN@ IDLE JCPU PCPU WHATroot pts/0 113.174.161.1 08:26 0.00s 0.03s 0.02s ssh root@coopeaa12root pts/1 78.31.109.1 08:26 0.00s 0.01s 0.00s w檢查誰曾經(jīng)登錄過?Linux 服務(wù)器會(huì)記錄下哪些用戶,從哪個(gè) IP,在什么時(shí)候登錄的以及登錄了多長時(shí)間這些信息。使用last命令可以查看這些信息。
輸出類似這樣:
root pts/1 78.31.109.1 Thu Nov 30 08:26 still logged inroot pts/0 113.174.161.1 Thu Nov 30 08:26 still logged inroot pts/1 78.31.109.1 Thu Nov 30 08:24 - 08:26 (00:01)root pts/0 113.174.161.1 Wed Nov 29 12:34 - 12:52 (00:18)root pts/0 14.176.196.1 Mon Nov 27 13:32 - 13:53 (00:21)檢查回顧命令歷史這個(gè)層次的攻擊者通常不會(huì)注意掩蓋命令的歷史記錄,因此運(yùn)行history命令會(huì)顯示出他們?cè)?jīng)做過的所有事情。 一定留意有沒有用wget或curl命令來下載類似垃圾郵件機(jī)器人或者挖礦程序之類的非常規(guī)軟件。
命令歷史存儲(chǔ)在~/
.bash_history
文件中,因此有些攻擊者會(huì)刪除該文件以掩蓋他們的所作所為。跟登錄歷史一樣,若你運(yùn)行history命令卻沒有輸出任何東西那就表示歷史文件被刪掉了。檢查哪些進(jìn)程在消耗 CPU常遇到的這類攻擊者通常不怎么會(huì)去掩蓋他們做的事情。他們會(huì)運(yùn)行一些特別消耗 CPU 的進(jìn)程。這就很容易發(fā)現(xiàn)這些進(jìn)程了。只需要運(yùn)行top然后看最前的那幾個(gè)進(jìn)程就行了。
這也能顯示出那些未登錄進(jìn)來的攻擊者。比如,可能有人在用未受保護(hù)的郵件腳本來發(fā)送垃圾郵件。
如果對(duì)最上面的進(jìn)程不了解,那么你可以百度 一下進(jìn)程名稱,或者通過losf和strace來看看它做的事情是什么。
使用這些工具,第一步從top中拷貝出進(jìn)程的 PID,然后運(yùn)行:
strace -p PID這會(huì)顯示出該進(jìn)程調(diào)用的所有系統(tǒng)調(diào)用。它產(chǎn)生的內(nèi)容會(huì)很多,但這些信息能告訴你這個(gè)進(jìn)程在做什么。
lsof -p PID這個(gè)程序會(huì)列出該進(jìn)程打開的文件。通過查看它訪問的文件可以很好的理解它在做的事情。
檢查所有的系統(tǒng)進(jìn)程消耗 CPU 不嚴(yán)重的未授權(quán)進(jìn)程可能不會(huì)在top中顯露出來,不過它依然可以通過ps列出來。命令ps auxf就能顯示足夠清晰的信息了。
你需要檢查一下每個(gè)不認(rèn)識(shí)的進(jìn)程。經(jīng)常運(yùn)行ps這是個(gè)好習(xí)慣)能幫助你發(fā)現(xiàn)奇怪的進(jìn)程。
檢查進(jìn)程的網(wǎng)絡(luò)使用情況iftop的功能類似top,它會(huì)排列顯示收發(fā)網(wǎng)絡(luò)數(shù)據(jù)的進(jìn)程以及它們的源地址和目的地址。類似 DoS 攻擊或垃圾機(jī)器人這樣的進(jìn)程很容易顯示在列表的最頂端。
檢查哪些進(jìn)程在監(jiān)聽網(wǎng)絡(luò)連接通常攻擊者會(huì)安裝一個(gè)后門程序?qū)iT監(jiān)聽網(wǎng)絡(luò)端口接受指令。該進(jìn)程等待期間是不會(huì)消耗 CPU 和帶寬的,因此也就不容易通過top之類的命令發(fā)現(xiàn)。
lsof和netstat命令都會(huì)列出所有的聯(lián)網(wǎng)進(jìn)程。我通常會(huì)讓它們帶上下面這些參數(shù):
lsof -inetstat -plunt需要留意那些處于LISTEN和ESTABLTSHED狀態(tài)的進(jìn)程,這些進(jìn)程要么正在等待連接(LISTEN),要么已經(jīng)連接(ESTABLISHED)。如果遇到不認(rèn)識(shí)的進(jìn)程,使用strace和lsof來看看它們?cè)谧鍪裁礀|西。