引言
大多數受攻擊的服務器是由程序執行的,這些攻擊者會濫用服務器,只要能正常訪問,他們幾乎不採取任何預防措施隱藏他們正在做的事。
服務器被攻破的跡象
當一個服務器被一個缺乏經驗的,或者程序攻擊者破壞時,他們通常會做一些事情來消耗100%的資源。
這種資源通常是用於加密貨幣挖掘,或發送垃圾郵件,或用於發起DDOS攻擊。
這意味着出現問題的第一個跡象是服務器“運行緩慢”。這可能表現在網站服務頁面的速度比平時慢得多,或電子郵件需要花費很久才能發送。
那麼應該怎麼排查呢?
檢查清單1 -誰正在登錄?
首先要查找的是當前登錄到服務器的用户。
發現攻擊者實際登錄到了服務器,還堂而皇之在上面工作的,並不少見。
可以使用w指令檢查。
whois命令可以在IP地址上運行,它會告訴你有關該IP註冊到的所在地的所有信息。
檢查清單2 -誰已經登錄過?
Linux服務器會記錄哪些用户登錄,從哪個IP登錄,登錄時間和登錄時間。使用最last命令打印此信息。
登錄歷史記錄記錄在一個~/.bash_history文件內,因此很容易刪除。
通常,攻擊者會簡單地刪除這個文件,以試圖掩蓋他們的蹤跡。
所以,如果你運行last指令,卻只看到你的當前登錄,這就是一個不太妙了。
如果沒有登錄歷史,就非常非常可疑了,需要繼續尋找攻擊的跡象。
檢查清單3 -命令歷史記錄
這種級別的攻擊者通常不採取任何預防措施,不留下任何命令歷史記錄,因此運行history命令將向你展示他們所做的一切。
特別留意wget或curl命令,可能會有系統庫以外的軟件被下載,如spam bots 或 crypto miners。
檢查清單4 -CPU
攻擊者通常很沒有截止,肆無忌憚地耗費着服務資源。這通常很容易發現,只需運行top查看所有的進程。這會顯示在沒有登錄的情況下使用你的服務器。
如果有陌生的進程,可以在網上搜索一下,也可以使用 losf 或 strace 追蹤。確定可以PID後這樣做:
strace -p PID
這會顯示進程正在進行的所有系統調用。有很多信息,但是瀏覽這些信息會讓你對正在發生的事情有一個很全面的瞭解。
lsof -p PID
這個程序將列出進程已打開的文件。
檢查清單5 - 系統進程
如果一個未經授權的進程消耗了CPU資源,仍然可以在 ps 所顯示的完整的進程列表中查找到,使用 ps auxf,它可以打印最清晰的信息。
尋找任何您不認識的進程。在服務器上運行ps的次數越多,非法進程就越明顯。
檢查清單6 - 按進程查看網絡使用情況
命令iftop的功能與top類似,用於顯示正在發送和接收網絡數據,及其源和目標的進程的排序列表。
像DOS攻擊或垃圾郵件機器人這樣的進程,會立即出現在列表的頂部。
檢查清單7 - 哪些進程正在監聽網絡連接?
通常,攻擊者會安裝一個除了監聽網絡端口以獲取指令外,什麼也不做的程序。這並不消耗CPU或帶寬,因為它只是監聽狀態,所以top指令很難發現。
lsof 和 netstat 命令都將列出所有網絡進程。我使用以下選項:
lsof -i
或者
netstat -plunt
你應該排查在 LISTEN 或 ESTABLISHED 中列出的任何進程,因為這些進程要麼正在等待連接(LISTEN),要麼正在打開連接(ESTABLISHED)。
如果你不認識這些進程,請使用 strace 或 lsof 查看它們在做什麼。
挽回:發現被攻擊後,該怎麼辦?
首先要做的是不要驚慌,特別是在攻擊者當前登錄的情況下。你需要能夠在攻擊者意識到你來了之前,收回對計算機的控制。
如果他們知道行蹤敗露,很可能會先把你踢出去,並開始惡意破壞任何資源。
如果你不是很專業,那麼只需關閉服務器。
shutdown -h now
或者
systemctl poweroff
如果是雲服務器,到控制面板關閉服務器就行了。一旦它被關閉,你就可以根據需要設置的防火牆規則。
如果你覺得更有信心,主機提供商有一個上游防火牆,然後按這個順序創建和啓用以下兩個規則:
只允許你的IP地址可以通過SSH訪問;
關閉一切網絡服務東西,不僅僅是SSH,而是每個端口上的每個協議。
這將立即終止攻擊者們的SSH會話,只允許你訪問服務器。
如果你不能訪問上游防火牆,則必須在服務器本身上創建並啓用這些防火牆規則,然後,當這些規則起作用時,使用 kill 命令殺掉攻擊者的ssh會話。
最後,如果有別的連接方式,可以登錄到服務器,就能用 systemctl stop network.service 停止連網。
這將完全停止任何網絡訪問,你有大量的時間配置和啓用防火牆規則。
寫在最後
縱使重新控制了服務器,還沒完呢。
不要試圖修復問題,繼續使用服務器。你永遠無法確定攻擊者做了什麼,因此也無法保證服務器是安全的。
唯一明智的做法是複製所有需要的數據,然後重新安裝。
Happy coding :)
我是@程序員小助手,持續分享編程知識,歡迎關注。