權限設定為 555。

權限設定為 555。

我運行一個帶有 Vesta 的 Ubuntu 12.04 x64 VPS 和一個 PHP 網站。它已被多次駭客攻擊,注入的程式碼如下所示:

<?php $KoDgalxVvsZfidVcEOTJDeMX='ba'.'se6'.'4_deco'.'de';eval($KoDgalxVvsZfidVcEOTJDeMX("cHJlZ19yZXBsYWNlKCIvN0xna0xnND1IR2JEOGs2WDht....

為了解決這個問題,我決定將所有檔案的權限和擁有者更改為 555 和 root,這樣任何使用者都無法更改檔案。我刪除了 FTP 存取權並保護 SSH,因此只有我在 VPS 中擁有的金鑰才能連線。

儘管進行了所有這些更改,其他用戶始終能夠更改檔案、重新命名資料夾以及上傳另一個被駭的檔案。

你認為我缺少什麼?有什麼建議嗎?謝謝你!如果您需要有關此問題的更多信息,我將很樂意分享,以幫助遭受同樣邪惡的其他人!

答案1

攻擊者獲得了您系統的 root 權限。你根本不能相信系統上的任何東西。 Rootkit 的作用範圍非常廣泛。

如果您在某處有內容備份,請使用它們。否則,您可以希望攻擊者沒有弄亂您的資料。轉儲 SQL 表並將其與其他內容一起複製(jpg、pdf、html,但不是任何腳本/php/將執行的任何其他內容)。將其複製到另一個系統,或將其下載到您的家庭電腦(如果它足夠小以便您能夠再次上傳)。

盡一切努力驗證您複製的內容是否仍然有效。 (例如檢查 jpg 是否仍然都是有效的 jpg,以防萬一。也許對它們運行病毒掃描程式?)

清除受損的安裝。如果您的伺服器託管在典型的託管服務上,那麼希望他們已經進行了設置,以便您擁有一個即使是主機上的 root 也不會弄亂的控制面板。因此,您可以希望攻擊者沒有設法觸及他們所破壞的機器之外的任何內容。 (不過,如果您可以無密碼存取該電腦上設定的任何其他內容,請檢查它們。)

盡一切努力進行全新安裝。最好還是遷移到 Ubuntu 14.04 LTS,因為無論如何你都必須重新安裝。

請勿將任何代碼從受感染的系統複製到新系統。來自受感染系統的所有數據都應像潛在的瘟疫攜帶者一樣對待。

Unix 檔案系統語意需要目錄的寫入權限才能刪除檔案。 (檔案名稱是從名稱到索引節點的連結。建立硬連結(檔案的其他名稱)的系統呼叫是link(2),刪除檔案的呼叫是unlink(2).)

chmod +t如果在目錄 ( )上設定了黏滯位,unlink(2)並且rename(2)還要求呼叫者擁有要取消連結或重新命名的檔案。 (無論文件的寫入權限如何)。它是/tmp並且/var/tmp將成為標準1777(世界可寫,設置黏性位)。

rm,shell 指令,是必要的POSIX在取消連結只讀文件之前進行提示,但必須檢查這種情況。它實際上不需要像unlink(2)處理任何其他文件那樣做任何事情。因此,不要誤以為這對對手有任何影響。

這些都與防禦攻擊無關,因為最可能的情況是取得對 Web 伺服器進程的控制權,或使用具有對許多內容的寫入權限的使用者 ID 執行的其他進程。

您對必須處理來自 Internet 的資料的進程可以寫入的內容的限制越多,攻擊者從控制您的 httpd 升級到修改您的資料或控制整個機器的機會就越小。

這就是為什麼你不應該以 root 身分執行 apache。

答案2

如果可以避免這種情況,則不應以 root 使用者身分執行 Web 伺服器進程,因為這表示 Web 服務中任何漏洞的洩漏都會徹底損害伺服器。

對於您現在所處的位置,我建議從頭開始在新伺服器上 - 攻擊者可以透過多種方法為自己提供持久的根存取權。看這裡了解更多。

答案3

儘管進行了所有這些更改,其他用戶始終能夠更改檔案、重新命名資料夾以及上傳另一個被駭的檔案。

如果 Web 根目錄的父目錄由執行 Web 伺服器的相同使用者擁有,那麼這些父目錄權限將覆蓋為子檔案和目錄設定的任何權限。

例如,在您擁有的任何目錄中開啟“終端”進程。現在建立一個文件,名稱zzz_test.txt如下:

touch zzz_foo.txt

現在像這樣檢查文件:

ls -la zzz_foo.txt

就我而言,權限如下所示:

-rw-r--r--  1 jake  staff  0 Feb 23 19:11 zzz_foo.txt

然後我chmod像這樣運行:

chmod 555 zzz_foo.txt 

現在ls -la再次運行,結果將如下所示:

-r-xr-xr-x  1 jake  staff  0 Feb 23 19:11 zzz_foo.txt

好的,權限已變更。因此,讓我們做一些「瘋狂」的事情,例如嘗試刪除它:

rm zzz_foo.txt

響應將是:

override r-xr-xr-x  jack/staff for zzz_foo.txt?

然後只需敲擊y並按下return中提琴即可!文件不見了。

這就是為什麼簡單地更改檔案權限永遠不會成為保護 Web 伺服器安全的有效方法。 Web 伺服器運作方式的簡單性(尤其是基於 PHP 的情況)意味著 Web 伺服器使用者始終對其需要存取的檔案具有讀寫存取權限。因此,簡單地離開chmod 555 [some files]是「防禦」自己免受惡意軟體和駭客攻擊的無效方法。

至於你現在能做什麼?好吧,僅僅改變權限和所有權是沒有任何意義的。更大的問題是您的 PHP 程式碼庫容易受到攻擊。因此,清理此類內容的唯一有效方法是清理 PHP 程式碼。如果網站基於 Joomla!、WordPress 或 CakePHP 等固定框架,那麼最好的做法是升級核心 Joomla!、WordPress 或 CakePHP 框架以堵塞安全性。同樣,如果存在容易受到攻擊的 Joomla!、WordPress 或 CakePHP 插件,則應升級/修補該插件以堵住漏洞。

除此之外,您的核心系統軟體(假設它是 LAMP(Linux Apache MySQL PHP)堆疊)也應該保持最新並打補丁。

歸根結底,網站安全不僅僅是一次性的事情。這是一個必須遵守的整體心態和維護過程。否則,當您的網站確實遭到駭客攻擊時,您將在嘗試清理混亂後無頭緒地運行,這實際上可能比最初的惡意軟體入侵本身造成更大的損害。

答案4

我同意從伺服器選項開始,但如果您想要更多的安全性和控制力,專用伺服器是更好的主意。

至於您的情況,我建議的第一件事是停用 shell 存取權之外的所有正在運行的服務。這意味著停止 FTP 服務、Web 伺服器 (HTTP)、電子郵件等。然後輸入:

ls -al

您應該在結果中看到類似以下的內容:

drwxrwxrwx  2 root root  4096 2014-10-10 00:31 ./

如果第四項(或特別是第三項)實際上是“root”,那麼您就遇到了很大的麻煩,您需要重做您的Web 伺服器配置,以便它根據資料夾以不同的使用者身分執行操作。您應該查看 apache 的 mod_rewrite (或類似的),然後相應地調整您的 apache 設定檔 (httpd.conf),以便系統在對資料夾發出每個請求時更改使用者名稱。然後相應地更改資料夾的使用者名稱和群組名稱。

修復後,導航至文檔根資料夾(可能是 public_html),使用編輯器(pico Works)並輸入以下內容:

<?php
echo shell_exec("whoami");
?>

然後將其另存為 who.php。接下來打開 Web 伺服器並在任何瀏覽器中,轉到您的網站主頁,但將 who.php 添加到其末尾,您應該在螢幕上只看到一個單字。如果該單字是 root,那麼您就遇到了很大的麻煩,需要再次執行上述步驟。如果這個字是“nobody”,那麼您就會遇到麻煩,因為駭客非常了解該使用者名稱。

相關內容