本文實作將使用ClamAV提供的掃描程式,並配合ModSecurity模組的機制,針對上傳至網站伺服器的檔案進行掃描,若發現上傳檔案內含病毒,就會立即拒絕該檔案的上傳作業。
在安裝ClamAV成功之後,僅需要確定病毒碼能夠正常地更新以及clamscan可正常地運作即可。
ClamAV提供了freshclam(所使用的組態檔名為freshclam.conf)來更新病毒碼,使用之前僅需設定freshclam.conf中的如下設定(#為注解):
建議可將freshclam加入crontab定時排程中,每日定時地更新病毒碼資訊,在更新完成後,可利用clamscan程式進行掃描,如圖1所示。
|
▲圖1 利用clamscan程式進行掃描。 |
安裝ModSecurity
ModSecurity是一種網頁防火牆軟體,可與網站伺服器結合(依照官方網站的說明,ModSecurity可安裝在Apache或IIS等知名的網站伺服器),提供針對Web攻擊如資料庫注入攻擊(SQL injection Attacks)、跨網站Script攻擊(Cross-site Scripting)、目錄路徑外洩(Path Traversal Attacks)等等相關攻擊的防衛能力。
依其部署的形式可分為內嵌於網站伺服器或以Reverse Proxy模式所部署的獨立網頁防火牆的模式,如圖2所示。
|
▲圖2 以Reverse Proxy模式所部署的獨立網頁防火牆。 |
本文將使用內嵌於Apache網站伺服器的方式來安裝mod_security模組,首先來安裝ModSecurity模組,在此將使用原始碼編譯的方式來安裝。這裡不介紹如何安裝Apache,請自行安裝。
但要特別注意的是,由於mod_security模組需要mod_unique_id的支援,所以要特別檢查系統內的Apache伺服器是否已經有mod_unique_id的支援(在編譯時組態加上「--enable-unique-id」即可)。
可利用「httpd -l | grep uni」指令來檢查,若有出現mod_unique_id的字樣即表示有支援,如圖3所示。
|
▲ 圖3 執行「httpd -l | grep uni」指令檢查系統內的Apache伺服器是否已經內含mod_unique_id。 |
在確認Apache網站伺服器有符合相關條件後,接著至mod_security官方網站取得相關原始碼(在本文所使用的版本為2.8),安裝步驟如下所述(其中#為注解):
成功安裝mod_security模組後,接著簡單說明mod_security模組的架構。
在存取網站伺服器時(一般皆為瀏覽網頁的動作),通常會經過兩個步驟,第一個是由使用者端利用瀏覽器對網站伺服器發出要求(Request)封包來要求網站伺服器處理,而網站伺服器在取得要求封包後,經過處理後,即會將資料回覆(Response)給使用者的瀏覽器,再由瀏覽器解析後,即是一般看到的網頁內容。
值得一提的是,上述的要求封包及回覆封包的結構均包含標頭(Header)及內容(Body)。
圖4為一個實際的HTTP回覆封包的範例。在標頭中定義了許多欄位(例如Server欄位就是告知網站伺服器的類型),而mod_security模組會將這些欄位定義成各種變數,再由設定規則來過濾這些變數的方式,來達到過濾惡意的Web存取攻擊的目的。
|
▲圖4 HTTP回覆封包。 |
mod_security模組定義了五種階段(Phase1?Phase5)來描述上述的HTTP存取流程。如圖5所示,其中SECRULE就為所要設定的防火牆規則。
|
▲圖5 mod_security模組定義了五種階段來描述HTTP存取流程。 |
mod_security模組所定義之階段(Phase)說明,如表2所示。
表2 mod_security模組的定義階段