記一次服務器被攻擊排查過程

第一步:斷網保數據

1.切斷網絡

所有的攻擊都來自於網絡,因此,在得知系統正遭受黑客的攻擊後,首先要做的就是斷開服務器的網絡連接,這樣除了能切斷攻擊源之外,也能保護服務器所在網絡的其他主機。

2、備份用戶數據

在服務器遭受攻擊後,需要立刻備份服務器上的用戶數據,同時也要查看這些數據中是否隱藏着攻擊源。如果攻擊源在用戶數據中,一定要徹底刪除,然後將用戶數據備份到一個安全的地方。

第二步:檢查並鎖定可疑用戶

當發現服務器遭受攻擊後,首先要切斷網絡連接,但是在有些情況下,比如無法馬上切斷網絡連接時,就必須登錄系統查看是否有可疑用戶,如果有可疑用戶登錄了系統,那麼需要馬上將這個用戶鎖定,然後中斷此用戶的遠程連接。

1.登錄系統查看可疑用戶

通過root用戶登錄,然後執行“w”命令即可列出所有登錄過系統的用戶,如下圖所示。

第一行信息輸出內容和使用uptime命令輸出一樣,它包含的列信息說明如下:

  • 21:41:07- 當前系統時間.
  • up 12 days, 10:08 - 系統運行時長.
  • 2 users - 登錄用戶數.
  • load average: 0.28, 0.20, 0.10 - 系統過去1,5,15分鐘的平均負載信息。平均系統負載是對當前正在運行或正在等待磁盤I/O的作業數的度量。 它基本上告訴您系統在給定間隔內的繁忙程度。                                                                                                                      

​​​​​​​​​​​​​​第二行信息包括如下字段說明:

  • USER – 登錄用戶名.
  • TTY – 登錄用戶使用的終端名. (pts/0僞終端,意味着從SSH或telnet等工具遠程連接的用戶,圖形界面終端歸於此類。tty0直接連接到計算機或本地連接的用戶。後面的數字代表連接編號)
  • FROM –登錄用戶來源的主機名或IP地址.
  • LOGIN@ – 用戶登錄時長.
  • IDLE – 自用戶上一次與終端進行交互以來的空閒時間.
  • JCPU – 附加到tty的所有進程使用的時間.
  • PCPU –用戶當前進程所用的時間。 顯示在“ WHAT”字段中的那個.
  • WHAT – 用戶當前的進程及選項/參數。

通過這個輸出可以檢查是否有可疑或者不熟悉的用戶登錄,同時還可以根據用戶名以及用戶登錄的源地址和它們正在運行的進程來判斷他們是否爲非法用戶。

2.鎖定可疑用戶

一旦發現可疑用戶,就要馬上將其鎖定,例如上面執行“w”命令後發現nobody用戶應該是個可疑用戶(因爲nobody默認情況下是沒有登錄權限的),於是首先鎖定此用戶,執行如下操作:

[root@server ~]# passwd -l nobody

鎖定之後,有可能此用戶還處於登錄狀態,於是還要將此用戶踢下線,根據上面“w”命令的輸出,即可獲得此用戶登錄進行的pid值,操作如下:

[root@server ~]# ps -ef|grep @pts/3531 6051 6049 0 19:23 ? 00:00:00 sshd: nobody@pts/3

[root@server ~]# kill -9 6051
531 6051 6049 0 19:23 ? 00:00:00 sshd: nobody@pts/3
[root@server ~]# kill -9 6051

這樣就將可疑用戶nobody從線上踢下去了。如果此用戶再次試圖登錄它已經無法登錄了。

3.通過last命令查看用戶登錄事件

last命令記錄着所有用戶登錄系統的日誌,可以用來查找非授權用戶的登錄事件,而last命令的輸出結果來源於/var/log/wtmp文件,稍有經驗的入侵者都會刪掉/var/log/wtmp以清除自己行蹤,但是還是會露出蛛絲馬跡在此文件中的。

#lastb記錄着試圖登錄系統且登錄失敗的詳細信息。

 

  • 第一列:用戶名
  • 第二列:終端位置(pts/0僞終端,意味着從SSHtelnet等工具遠程連接的用戶,圖形界面終端歸於此類。tty0直接連接到計算機或本地連接的用戶。後面的數字代表連接編號)
  • 第三列:登錄IP或內核(如果是:0.0或者什麼都沒有,意味着用戶通過本地終端連接。除了重啓活動,內核版本會顯示在狀態中)
  • 第四列:開始時間
  • 第五列:結束時間(still login in尚未退出,down直到正常關機,crash直到強制關機)
  • 第六列:持續時間

4、查看系統日誌

查看系統日誌是查找攻擊源最好的方法,可查的系統日誌有/var/log/messages、/var/log/secure等,這兩個日誌文件可以記錄軟件的運行狀態以及遠程用戶的登錄狀態,還可以查看每個用戶目錄下的.bash_history文件,特別是/root目錄下的.bash_history文件,這個文件中記錄着用戶執行的所有歷史命令。

5、檢查並關閉系統可疑進程

檢查可疑進程的命令很多,例如ps、top等,但是有時候只知道進程的名稱無法得知路徑,此時可以通過如下命令查看:

首先通過pidof命令可以查找正在運行的進程PID,例如要查找sshd進程的PID,執行如下命令:

 

然後進入內存目錄,查看對應PID目錄下exe文件的信息:

 

這樣就找到了進程對應的完整執行路徑。如果還有查看文件的句柄,可以查看如下目錄:

[root@server ~]# ls -al /proc/13276/fd

通過這種方式基本可以找到任何進程的完整執行信息,此外還有很多類似的命令可以幫助系統運維人員查找可疑進程。例如,可以通過指定端口或者tcp、udp協議找到進程PID,進而找到相關進程:

 

在有些時候,攻擊者的程序隱藏很深,例如rootkits後門程序,在這種情況下ps、top、netstat等命令也可能已經被替換,如果再通過系統自身的命令去檢查可疑進程就變得毫不可信,此時,就需要藉助於第三方工具來檢查系統可疑程序,例如前面介紹過的chkrootkit、RKHunter等工具,通過這些工具可以很方便的發現系統被替換或篡改的程序。

6、檢查文件系統的完好性

檢查文件屬性是否發生變化是驗證文件系統完好性最簡單、最直接的方法,例如可以檢查被入侵服務器上/bin/ls文件的大小是否與正常系統上此文件的大小相同,以驗證文件是否被替換,但是這種方法比較低級。此時可以藉助於Linux下rpm這個工具來完成驗證,操作如下:

 

對於輸出中每個標記的含義介紹如下:

S 表示文件長度發生了變化

M 表示文件的訪問權限或文件類型發生了變化

5 表示MD5校驗和發生了變化

D 表示設備節點的屬性發生了變化

L 表示文件的符號鏈接發生了變化

U 表示文件/子目錄/設備節點的owner發生了變化

G 表示文件/子目錄/設備節點的group發生了變化

T 表示文件最後一次的修改時間發生了變化

如果在輸出結果中有“M”標記出現,那麼對應的文件可能已經遭到篡改或替換,此時可以通過卸載這個rpm包重新安裝來清除受攻擊的文件。

不過這個命令有個侷限性,那就是隻能檢查通過rpm包方式安裝的所有文件,對於通過非rpm包方式安裝的文件就無能爲力了。同時,如果rpm工具也遭到替換,就不能通過這個方法了,此時可以從正常的系統上覆制一個rpm工具進行檢測。

對文件系統的檢查也可以通過chkrootkit、RKHunter這兩個工具來完成。

第三步:整裝再發

1、重新安裝系統

永遠不要認爲自己能徹底清除攻擊源,因爲沒有人能比黑客更瞭解攻擊程序,在服務器遭到攻擊後,最安全也最簡單的方法就是重新安裝系統,因爲大部分攻擊程序都會依附在系統文件或者內核中,所以重新安裝系統才能徹底清除攻擊源。

2、修復程序或系統漏洞

在發現系統漏洞或者應用程序漏洞後,首先要做的就是修復系統漏洞或者更改程序bug,因爲只有將程序的漏洞修復完畢才能正式在服務器上運行。

3、恢復數據和連接網絡

將備份的數據重新複製到新安裝的服務器上,然後開啓服務,最後將服務器開啓網絡連接,對外提供服務。

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