通過這個輸出可以檢查是否有可疑或者不熟悉的用戶登錄,同時還可以根據用戶名以及用戶登錄的源地址和它們正在運行的進程來判斷他們是否為非法用戶。
2.鎖定可疑用戶
一旦發(fā)現可疑用戶,就要馬上將其鎖定,例如上面執(zhí)行“w”命令后發(fā)現nobody用戶應該是個可疑用戶(因為nobody默認情況下是沒有登錄權限的),于是首先鎖定此用戶,執(zhí)行如下操作:
[root@server ~]# passwd -l nobody
鎖定之后,有可能此用戶還處于登錄狀態(tài),于是還要將此用戶踢下線,根據上面“w”命令的輸出,即可獲得此用戶登錄進行的pid值,操作如下:
[root@server ~]# ps -ef|grep @pts/3
531 6051 6049 0 19:23 ? 00:00:00 sshd: nobody@pts/3
[root@server ~]# kill -9 6051
這樣就將可疑用戶nobody從線上踢下去了。如果此用戶再次試圖登錄它已經無法登錄了。
3.通過last命令查看用戶登錄事件
last命令記錄著所有用戶登錄系統(tǒng)的日志,可以用來查找非授權用戶的登錄事件,而last命令的輸出結果來源于/var/log/wtmp文件,稍有經驗的入侵者都會刪掉/var/log/wtmp以清除自己行蹤,但是還是會露出蛛絲馬跡在此文件中的。
三、查看系統(tǒng)日志
查看系統(tǒng)日志是查找攻擊源最好的方法,可查的系統(tǒng)日志有/var/log/messages、/var/log/secure等,這兩個日志文件可以記錄軟件的運行狀態(tài)以及遠程用戶的登錄狀態(tài),還可以查看每個用戶目錄下的.bash_history文件,特別是/root目錄下的.bash_history文件,這個文件中記錄著用戶執(zhí)行的所有歷史命令。
四、檢查并關閉系統(tǒng)可疑進程
檢查可疑進程的命令很多,例如ps、top等,但是有時候只知道進程的名稱無法得知路徑,此時可以通過如下命令查看:
首先通過pidof命令可以查找正在運行的進程PID,例如要查找sshd進程的PID,執(zhí)行如下命令:
然后進入內存目錄,查看對應PID目錄下exe文件的信息:
這樣就找到了進程對應的完整執(zhí)行路徑。如果還有查看文件的句柄,可以查看如下目錄:
[root@server ~]# ls -al /proc/13276/fd
通過這種方式基本可以找到任何進程的完整執(zhí)行信息,此外還有很多類似的命令可以幫助系統(tǒng)運維人員查找可疑進程。例如,可以通過指定端口或者tcp、udp協(xié)議找到進程PID,進而找到相關進程:
在有些時候,攻擊者的程序隱藏很深,例如rootkits后門程序,在這種情況下ps、top、netstat等命令也可能已經被替換,如果再通過系統(tǒng)自身的命令去檢查可疑進程就變得毫不可信,此時,就需要借助于第三方工具來檢查系統(tǒng)可疑程序,例如前面介紹過的chkrootkit、RKHunter等工具,通過這些工具可以很方便的發(fā)現系統(tǒng)被替換或篡改的程序。
五、檢查文件系統(tǒng)的完好性
檢查文件屬性是否發(fā)生變化是驗證文件系統(tǒng)完好性最簡單、最直接的方法,例如可以檢查被入侵服務器上/bin/ls文件的大小是否與正常系統(tǒng)上此文件的大小相同,以驗證文件是否被替換,但是這種方法比較低級。此時可以借助于Linux下rpm這個工具來完成驗證,操作如下:
對于輸出中每個標記的含義介紹如下:
S 表示文件長度發(fā)生了變化
M 表示文件的訪問權限或文件類型發(fā)生了變化
5 表示MD5校驗和發(fā)生了變化
D 表示設備節(jié)點的屬性發(fā)生了變化
L 表示文件的符號鏈接發(fā)生了變化
U 表示文件/子目錄/設備節(jié)點的owner發(fā)生了變化
G 表示文件/子目錄/設備節(jié)點的group發(fā)生了變化
T 表示文件最后一次的修改時間發(fā)生了變化
如果在輸出結果中有“M”標記出現,那么對應的文件可能已經遭到篡改或替換,此時可以通過卸載這個rpm包重新安裝來清除受攻擊的文件。
不過這個命令有個局限性,那就是只能檢查通過rpm包方式安裝的所有文件,對于通過非rpm包方式安裝的文件就無能為力了。同時,如果rpm工具也遭到替換,就不能通過這個方法了,此時可以從正常的系統(tǒng)上復制一個rpm工具進行檢測。
對文件系統(tǒng)的檢查也可以通過chkrootkit、RKHunter這兩個工具來完成,關于chkrootkit、RKHunter工具的使用,下次將展開介紹。