問題描述

所以我幾個月來一直在這個問題上解決這個問題,並決定這是超出我有限的 (如果有的話) 伺服器技能,而且我需要專家的幫助。

我有一個 VPS(具有根訪問許可權),它承載了幾個不同的 PHP 網站,其中一些是 WordPress-based 。由於 MailPoet vulnerability,一些網站被 a malware 感染。我清理了受感染的網站,完全刪除了 MailPoet,後門帳戶和相關的東西,但是惡意軟體在一段時間內不斷復活。以下是我可以描述的內容:

  • 有兩個惡意軟體簽名 (對不起,如果我使用錯誤的術語),都注入在 PHP 頁面的頂部。一旦看起來這個<?php $ozufdqjmhx = '7825h!>!%x5c%x7825tdz)%x5c%x7825bbT-%x5c%x782vg}... 與變數 $ozufdqjmhx 不時變化,另一個從<?php if(!isset($GLOBALS['ae... etc etc 開始

  • 惡意軟體隨機返回。有時候,清潔後的一天會有一天,有時是一週或數週。

  • 只有以前被感染的檔案/目錄/網站再次被感染。新目錄或舊的未受影響的目錄總是乾淨的。舊的受感染目錄中的新檔案雖然受到感染。

  • maldet(使用 ClamAV 我相信) 無法檢測到任何惡意軟體。 PHP Shell Detector 可以,但由於僅作為檢測器而無法修復。

你們能幫助還是給我一個方向我應該去哪裡?一百萬感謝提前!

(我也很抱歉,如果這個問題不符合網站的規定,當我是 StackOverflow 的日常使用者時,這是我第一次在此安全子網站) 。

編輯:我非常感謝你們的任何建議,但擦拭伺服器並從頭開始不是一個選擇。如果是這樣,為什麼要問這個問題呢? 🙂

編輯 2:在 @ Mints97 的答案之後,我檢查了所有開啟的埠 – 看起來正常:

21/tcp    open  ftp
22/tcp    open  ssh
25/tcp    open  smtp
53/tcp    open  domain
80/tcp    open  http
110/tcp   open  pop3
143/tcp   open  imap
443/tcp   open  https
465/tcp   open  smtps
587/tcp   open  submission
993/tcp   open  imaps
995/tcp   open  pop3s
3000/tcp  open  ppp
3306/tcp  open  mysql
5432/tcp  open  postgresql
8000/tcp  open  http-alt
8080/tcp  open  http-proxy
8082/tcp  open  blackice-alerts
10000/tcp open  snet-sensor-mgmt
20000/tcp open  dnp

編輯 3:這是針對 @QuestionOverflow:在搜尋 your other answer 中提到的 4 個域時,我遇到了一個指令碼來消除惡意軟體 here 。在程式碼中,我們可以看到 if (preg_match('/^<?php $[a-z]{10} = '/', $fh_str)) {,它的目標是第一個簽名。我會說現在是同樣的惡意軟體,或至少是同一個人透過同樣的漏洞。很有趣

編輯 4:第二個惡意軟體已經被討論過 here 如果可能有幫助,是的,顯然從 4 個域中隨機抽取一些有效負載:”33db9538.com”,”9507c4e8.com”,”e5b57288.com”,”54dfa1cb.com” 。我已將全部 4 新增到我的 hosts 檔案中,指向 127.0.0.1 。讓我們看看下一步。

編輯 5:幾個人建議這個問題已經在 How do you explain the necessity of 「nuke it from orbit」 to management and users? 這裡回答了。老實說,我沒有看到其他問題如何回答我的問題。我在問如何消除惡意軟體,而不是向老闆解釋為什麼要重新安裝伺服器。

最佳解決方案

我將啟用 auditd 來監視您希望退回的檔案的更改。您將能夠確定負責進行這些更改的帳戶和流程。

安裝 auditd(在所有系統上未安裝 pr default) 後,可以開始監視檔案中的更改。為此,只需執行命令:

auditctl -w /var/www -p wa

此命令將記錄所有檔案更改到 auditd 日誌檔案。通常你會發現它在/var /log /audit /,但它是系統依賴。

如果您擔心攻擊者可能會注意到這一點 (可能會刪除該規則),則可以透過執行以下命令來鎖定它:

auditctl -e 2

在重新啟動系統之前,不能對稽核規則進行任何更改。在執行此操作之前,請確保上述稽核規則不會產生瘋狂數量的日誌。

最後,審計日誌有點神秘。一旦您發現系統再次退回,您可以使用以下命令搜尋審計跟蹤:

ausearch -f /var/www/backdoored_file.php

我希望這將為您提供有關發生的事情的線索。祝你好運!

額外:

要使稽核規則在重新啟動後生效,您必須在/etc/audit/audit.rules 中定義它們

次佳解決方案

我最初發表這個評論,但我認為這可以做一點解釋。

根據我對網站收購情況的經驗,當 shell 上傳到網站時,駭客可能會利用伺服器漏洞,獲得 root 訪問權,後門 SSH,並妥協伺服器上的所有其他站點,管理這個,並做一個簡單的 shell 。我認為,在你的情況下,這是第二種情況,因為你說 VPS 上只有一個網站被感染。

現在為什麼殼”ressurect” 。如果您的伺服器不是”rooted”,那隻剩下四個其他選項我可以想到:

  1. 一個”bindport” 後門

  2. 一個”backconnect” 後門 (罕見)

  3. 您的一個 PHP 檔案中的自定義後門或”downloader”

  4. 一個受損的 MySQL 帳戶,檔案訪問和遠端登入 priveliges 。

我們來談談頭兩個,首先要怎麼處理呢? “bindport” 和”backconnect” 是傳統上與 Web Shell 一起運送的兩個小程式,通常是 Perl 指令碼。它們通常在/tmp 資料夾中建立 (並從中執行),該資料夾可寫入所有內容。要找到它們,您可以監視所有程式的奇怪指令碼或程式,並在/tmp 資料夾中檢視一下。此外,建議設定防火牆。

“Bindport” 開啟一個新的埠用於傳入連線,並提供對任何敲入 (通常是 password-protected) 的任何人的 Unix shell 訪問。找到它,尋找奇怪的開放埠 (許多駭客只是開啟埠 31337 或類似的東西) 。

“Backconnect” 完全正是所謂的 – 它開啟與遠端伺服器的連線,同時授予 shell 訪問許可權。它比”bindport” 更少使用,主要是因為大多數駭客太懶了,無法使用它。只有”bindport” 由於某些原因 (如防火牆設定) 而失敗,通常才會使用此方法。

現在,關於自定義後門和”downloaders” 。這些很少被使用,因為攻擊者需要知道 PHP 至少有一點使用它 (和今天大多數 site-jackers 只不過是 skriptkiddies 或 badly-made 機器人) 。他們大多是 stand-alone 檔案,如簡單的 shell,或者一些額外的程式碼注入到一個指令碼中。他們可以執行給他們的命令 (PHP 程式碼,shell 命令),也可以用一個簡單的檔案寫入資料 (它們可以是另一個後門) 。您可以嘗試查詢具有 evale 修改器,execsystemfopenfopen /fopen /fopen /fwrite 等 C++ CZYX2ZYXCBAC,preg_replace 等檔案,但是,處理這些內容的最佳方式是最簡單的恢復整個網站從備份。如果您決定這樣做,請務必事先從伺服器上擦除所有其他網站的檔案,以免您錯過了 stand-alone shell 或後門。

而最後一個非常不可能,但仍然可能的情況。如果您已經與 MySQL root 使用者 (或僅具有檔案寫入許可權的使用者) 一起執行 WordPress,或者只是具有足夠許可權檢視具有檔案寫入許可權的另一使用者的密碼雜湊的使用者,並且該使用者具有檔案寫許可權有權力從任何地方連線到資料庫,好吧… 你得到它。我建議您更改所有 MySQL 密碼。

現在為什麼只有一組目錄被感染了。有兩種可能的情況:駭客,沒有使用”root” 伺服器,使用有限數量的目錄 (可能是您的所有網站的目錄),或者他們可以訪問其他目錄,但根本不使用他們。

如果是後一種情況,我會賭注你要麼是一個白痴,要麼是一個非常懶惰的人。或與機器人。是的,這可能會讓你失望,但我懷疑你的網站對於一個經驗豐富的駭客來說真的很重要:它可能被用來從使用者那裡獲取點選次數,託管惡意軟體,或者簡單地輸出一大堆垃圾郵件倍。你正在處理一個 scriptkiddie,或者一個沒有經驗的傻瓜試圖從 click-trading 和垃圾郵件中或者與機器人一起刮幾分錢。但是,我認為這更有可能是一個活著的人:這可以解釋 shell 的”ressurections” 的不規則性。

第三種解決方案

我管理的網站發生了非常類似的事情。在刪除惡意程式碼,然後大概 2 個星期後出現了很多挫折之後,我發現了這一點:

我注意到所有檔案被修改的日期戳,然後我檢視了那一分鐘的訪問日誌。我看到某個頁面被請求似乎是可疑的,因為它是一個沒有活動的 wordpress 主題的 404.php 。我檢查了該頁面,並看到一行基本上是 eval($ _ POST [‘php’]) 編碼在 base64 中。

所以我沒有刪除程式碼,而是改變它儲存傳送到該頁面的任何東西的日誌。兩週後,我的網站保持安全,但是一個日誌檔案記錄了一些傳送給它的有趣的程式碼。

第四種方案

聽起來像攻擊者在你的伺服器上安裝了一個 rootkit 。一個 rootkit 可以提供一個後門,即使一切看起來都很乾淨。

我認為最好的方法是擦拭伺服器並從頭重新安裝。修補網站以消除漏洞。如果您需要從備份恢復 (您有備份,對嗎?:)) 確保它是一個乾淨的。

設定一個指令碼以查詢感染痕跡 (例如 ID 10001 使用者),以防除了 MailPoet 問題之外的其他漏洞。

參考文獻

注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。