問題描述

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

我有一個 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 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。