))%20hack%20-%20%E5%A6%82%E4%BD%95%E9%98%B2%E6%AD%A2%E5%AE%83%E5%86%8D%E6%AC%A1%E7%99%BC%E7%94%9F%EF%BC%9F.png)
最近,我們的一個網站被駭客攻擊,一些 PHP 程式碼被注入到 index.php 檔案中,如下所示:
eval (gzinflate(base64_decode('s127ezsS/...bA236UA1')));
該程式碼導致包含另一個 php 檔案 (cnfg.php),從而導致顯示一些與製藥相關的垃圾郵件(但僅對 googlebot 等人可見)。這看起來像是針對 wordpress 的 pharma hack,只不過我們沒有運行上述軟體。該代碼已被刪除,但我希望防止將來發生此類情況。
我意識到這是一個相當廣泛的問題,可能存在無數的安全漏洞,但我想我會把它放在那裡,以防過去有人遇到過這樣的問題。
有哪些潛在的安全漏洞會允許上傳這些 php 檔案?我能做些什麼來防止這種情況再次發生?
乾杯
答案1
你需要找出它是如何到達那裡的。
- 攻擊者是否可以透過 sftp/scp 存取檔案系統?
- 如果發生這種情況,您需要鎖定您的遠端存取方法
- 攻擊者是否使用了某些上傳程式腳本或現有腳本中的某些錯誤來允許他們修改檔案?
- 修復腳本,更改腳本和 Web 內容的權限,以便 Web 伺服器程序無法更改它們。 Web 伺服器應僅限於修改某處資料目錄中的檔案。您的腳本和檔案通常不應由 Web 伺服器擁有或寫入。
- 該腳本是否是您安裝的某些惡意軟體的一部分?
- 我見過類似的東西包含在 WordPress 模板中。毫無戒心的用戶從某個隨機網站下載了模板。這些模板包含從外部 Web 伺服器執行程式碼的功能。再加上糟糕的權限設置,攻擊者就可以修改其他內容。
答案2
只是一個警告。
如果您使用 FileZilla 作為 FTP 用戶端,則存在惡意軟體會從 Filezilla 純文字檔案中獲取您的 FTP 憑證(哎呀!),並使用該資訊插入惡意軟體程式碼(由 #b58b6f# 類型的程式碼表示)圍繞著“ gzinflate(base64_decode)」指令,這就是您的檔案將受到攻擊/洩漏的方式。
查看您的 %APPDATA%/Roaming/Filezilla 資料夾。其中的 XML 檔案之一以純文字形式包含您的所有 FTP 網站憑證(使用者/密碼/等)!而 FileZilla 的人拒絕修補這個明顯的安全漏洞。
我的建議:從電腦中刪除 FileZilla(並且您必須手動刪除 APPDATA 資料夾中的資料夾)。
如果您需要安全的 FTP 用戶端,請使用 WinSCP (www .winscp .net ),您可以在其中設定主密碼,並且所有網站憑證都會加密。
只是一個警告......瑞克......J
答案3
其侵入方式有許多可能性。一些潛在的切入點是
- 管理員帳號被盜
- 妥協你的您的提供者的 ftp/ssh/web 控制台/等帳戶。如果您曾經透過未加密的協定(如 FTP)傳送密碼,請停止這樣做。
- 妥協你的自己的本機開發機器
- 伺服器上的任何伺服器軟體都會出現漏洞,例如 Apache 或其任何模組。
您網站上的 PHP 中的應用程式層級漏洞:
- 您是否使用第三方軟體?
- 您是否在該網站上編寫了大量自己的程式?如果是這樣,就有一百萬種方法可以寫出一個漏洞。檢查任何涉及源自使用者輸入的資料的方法(REQUEST/GET/POST/COOKIES/FILES)。如果允許檔案上傳,是否會將這些未過濾的檔案儲存到可透過網路檢視的目錄中?如果是這樣,有人可以上傳 .php 腳本,然後查看它。如果您使用下列範本解決方案,則 include/require 語句尤其是熱門目標:
<?php include $_GET['page'] . '.php'; ?>
如何預防再次發生?
- 確保您絕對信任主機的安全性。打電話給他們,詢問他們的安全策略,當漏洞出現時他們修補服務的速度等等。
- 跳過廉價的共享託管並付費購買專用或虛擬專用。使用伺服器的人越少意味著攻擊媒介就越少
- 讓您自己的第三方應用程式/庫保持最新。取得他們的郵件清單、RSS 提要或任何內容,以了解他們發布的最新資訊。
- 審核您自己的程式碼。如果您對此缺乏足夠的經驗,請找一個可以為此付費的人。
- 將您的網站置於版本控制中,例如 git 或 subversion。將生產目錄保留為工作副本,以便您可以輕鬆檢測程式碼庫中的變更(但請確保阻止對 .git 和 .svn 目錄等元資料的存取)。
答案4
您不妨嘗試一下http://www.hardened-php.net/suhosin/除此之外,這可能會禁用 eval()。如果 cnfg.php 是遠端託管的,它也可能會阻止它被包含在內。
如果可能,請勿授予正在執行 Web 伺服器的使用者對 php 檔案的寫入權限。