ModSecurity ClamAV 防毒 資安

幫網站配備即時掃毒 過濾阻止惡意檔案上傳

2014-12-11
本文實作將使用ClamAV提供的掃描程式,並配合ModSecurity模組的機制,針對上傳至網站伺服器的檔案進行掃描,若發現上傳檔案內含病毒,就會立即拒絕該檔案的上傳作業。
有很多的網站系統都有提供上傳檔案的功能(例如學校老師所架設的班級網頁上傳作業功能,或是公司內部上傳文件的系統),但此類檔案上傳的功能,由於不易控管上傳檔案的性質(例如如何確保上傳的文件不是電腦病毒或者惡意程式),而往往成為潛在的資安威脅。

對此,本文將介紹如何以ModSecurity模組搭配ClamAV病毒軟體,實作出一個可即時利用ClamAV來偵測並阻擋利用Web上傳的惡意程式,所使用的軟體套件如表1所示。

表1 實作所使用的軟體套件

什麼是ClamAV

ClamAV是Linux系統下最富盛名的病毒掃描軟體,除了能夠以程式的形式單獨當成掃描軟體使用外,還可與各個網路服務搭配來增加病毒掃描的功能,例如與郵件伺服器結合即可掃描來往郵件是否帶有病毒,與網站伺服器結合即可掃描來往的HTTP封包是否含有病毒。

在本文中,將使用ClamAV所提供的掃描程式配合ModSecurity模組的機制來對上傳至網站伺服器的檔案進行掃描,一旦發現有病毒就立即拒絕該檔案的上傳。

首先來安裝ClamAV軟體,連結至「http://clamav.net/」網站取得ClamAV的最新版本(筆者取得的版本為0.98),然後解壓縮並執行下列指令:


基本上,ClamAV提供了常駐程式(Daemon)及手動執行兩種執行方式,執行方式詳述如下:

常駐程式

常駐程式執行模式分為掃描伺服器程式與掃描客戶端程式,使用者須先執行掃描伺服器端程式(檔名為clamd),再執行掃描客戶端程式(檔名為clamdscan)來透過掃描伺服器端程式進行掃描。

在此種模式下,使用者可自行開發病毒掃描程式,利用clamd所提供的命令介面來控制clamd程式。

在此僅介紹幾個常用的命令介面,其餘相關命令介面請自行參考官方網站的說明。以下為常用命令介面的說明:

  • PING:檢查clamd程式是否正在執行中,如果clamd正在執行中,就會回應pong訊息(即是ping-pong的檢查)。
  • RELOAD:通知clamd程式,重新載入病毒碼資料庫。
  • SHUTDOWN:停止clamd程式執行。
  • SCAN:掃描檔案或目錄,如果是掃描目錄,就會以遞迴的方式掃描。
  • MULTISCAN:運用多執行緒(THREAD)的掃描方式,此種方式在多處理器的系統下會達到更高的掃描效率。
  • INSTREAM:要求clamd程式掃描網路上傳送的封包資料,這裡要特別注意一點的是,INSTREAM所傳送的封包不能大於在clamd設定檔中StreamMaxLength欄位的設定,否則會發生中斷連線的問題。
  • STATUS:要求clamd程式顯示目前執行的統計資訊,如記憶體、CPU的使用狀況等。
手動執行

手動方式的執行,即是簡單地使用clamscan程式來掃描(在本文中則是當ModSecurity模組偵測到上傳的檔案後,即呼叫此程式來進行掃描)。

這裡僅簡單地利用「clamscan <目錄/檔案>」指令來掃描目錄或檔案是否有感染病毒。

以下列出常用的命令選項,其餘相關進階用法,請自行參閱相關文件說明。

-i:只顯示被感染的檔案。
--log=FILE:將相關的掃描結果儲存在的檔 案。
--bell:在掃描的過程中,如果有發現被感染的檔 案,就發出Bell聲警示。
-r:以遞迴的方式掃描目錄下的所有檔案。
--remove:當發現有被感染的檔案就直接刪除。
--exclude=REGEX:排除掃描的檔案,如果符合 REGEX所定義的檔案即不予以掃描,其中REGEX可利用正規表示法定義,例如「clamscan --exclude=import.php /tmp」就表示不掃描在「 /tmp」目錄下的import.php檔案。
--include=REGEX:設定欲掃描的檔案,如果符合 REGEX所定義的檔案才予以掃描,其中REGEX可利用正規表示法定義。

在使用ClamAV之前,必須先設定ClamAV的相關組態檔,由於本文並不會用到較為複雜的常駐(Daemon)形式的掃描(僅會使用ClamAV所提供的單獨程式),因此在此不多談常駐形式相關的設定。


追蹤我們Featrue us

本站使用cookie及相關技術分析來改善使用者體驗。瞭解更多

我知道了!