沒錢買應用層防火牆?何不用開放原始碼套件自己動手做呢?
HTTP很快地竄升為所有網路交易的預設傳輸協定。由於Web服務和服務導向架構的緣故,XML將相異的應用程式和資料型態,緊密地合而為一!傳統的網路安全防禦工事,較著重在OSI架構的底下四層,但是多數遭到入侵的Web應用程式,均是流經代理伺服器和防火牆的正常HTTP流量!
到底該怎麼做?首先你要確定能買到一部商用型的Web應用層防火牆,不過,你可能無法將之後每年所要簽訂的防火牆合約,一併納入當前的預算當中。所以,另一種作法就是,採行免費的開放原始碼解決方案,以期能藉由修改和過濾HTTP流量,達到防止應用程式遭到攻擊的目的。當然,如果拿來跟商業用的防火牆相比,我們是無法全部擁有與後者相當的功能!(參見表1) 但就直接面對網際網路的Web服務和應用程式來說,我們的確是在它們前頭多加了一道防護措施。
沒錢看這裡
Web應用層防火牆理應要擺在邊際防火牆的身後,以作為過濾Web流量的唯一途徑。另外,因為擁有堆疊防護(stack protection),再加上系統可進行最小安裝,以及原始碼稽核頻繁的緣故,我們目前可選用安全性較高的Uuix或Linux作業系統,像是OpenBSD。還有,bastille也是一套相當優良的安全強化工具,而且適用於絕大多數Linux的系統。
由於防火牆得分析全部的Web流量,所以其負載勢必會較典型的代理伺服器要高得多,故防火牆主機所要裝設的處理器數量及記憶體大小,就得愈多愈好!此外,建造多層次的閘道環境,以及在多層次安全閘道之前使用HTTP負載平衡裝置,也是必要的。然而,若是將解決方案擴大成這種規模,情況會變得稍嫌複雜一點!因為我們還得將其他因素也算計在內,包括:網路型IDS或IPS部署,防火牆組態設定檔中的規則數量,內部所有站台的流量,還有HTTP封包改寫和流量分析等工作,也通通會影響到防火牆的效能。
不過,經驗法則告訴我們:將Web應用層防火牆,規模弄得跟最忙碌的Web伺服器一樣,那就沒問題了!此外,通常主機的運作效能,會依據應用程式的種類而定,所以這些應用程式在上線之前,就要先進行連番的調校、測試和軟體效能檢查。
打破舊觀念 在所有商用和開放原始碼的HTTP代理伺服器當中,Apache伺服器在分析和改寫資料內容方面的能力,算得上是有口皆碑!其中,Apache的核心套件裡,內建快速、穩定的HTTP代理伺服模組,並且Apache的模組化設計,也使得我們容易對其調校擴充;所以,當然也只可保留代理伺服模組組態來進行佈署作業。此外,我們還能修改預設過濾的內容認知,以符合所要建立的資料過濾及改寫的HTTP代理伺服器!
打從2.0版釋出開始,Apache便加入與Perl相容的PCRE(Perl Compatible Regular Expression)函式庫,以作為特徵比對之用,此舉不但能充份改善正規表示式的效能,並且能依不同種類的內容,進行多重資料過濾和改寫等作業。
這些特異功能就像是保護Web應用程式的工具包,稍後我們會一併拿來與其他模組進行討論。
平台建立 Mod_security(
www.modsecutiry.org)外掛模組在防火牆當中的Web入侵防禦功能方面,扮演相當重要的角色。Mod_security在初期,主要是利用簡單的特徵比對引擎來封鎖住蠕蟲病毒,但時至今日它已經是發展成熟的Web安全套件。
Mod_security建立特徵的方式,是以正規表示式為過濾主體的程式語言,這對Snort用戶來說,應該不陌生才對?就如同多數典型的IDS特徵資料庫一樣,其特徵資料庫能透過mod_security套件自動進行更新。特徵過濾器裡頭包括除了能防止cross-site scripting,以及阻擋惡意SQL陳述式之外,並且也同時具有過濾含有Shell命令字眼、不當存取路徑和使用者身份資料流量的能力!非但如此,mode_security還能修正Unicode流量,以防止URL_encoding的攻擊。
Mod_security的特徵比對可預防錯誤訊息的資料洩露,以避免攻擊者取得有用的系統資訊。再者,任何會揭露Web伺服器組態設定檔的訊息,它都能一一過濾,並將其引導到一般錯誤訊息的頁面。此外,你也能利用mod_security來加強用戶端對特定檔案類型存取的控管,像是.php、.asp、.jsp和html檔等。
築起高牆 Mod_security功能強大,但是,就如同大多數的IDS/IPS解決方案一樣,它採取「預設允許」或者我們也可說是「排他性」的設計方式。其實,我們反而會比較想添加一些「預設拒絕」的Apache外掛模組,以建造一個穩固安全的Web應用層防火牆!
掩飾平台:事實上,Web伺服器所顯露出來的banner訊息,對攻擊者來說,是一個最容易取得Web伺服主機平台資訊的方法。簡單的telnet到對方的80埠,或者是對主機發出一個HTTP GET的請求,就能得知該伺服器的版本,以及探測出所安裝的外掛程式,所以,我們可以藉由mod_header模組來隱藏住伺服器的表頭,甚至是任何其他平台特定的表頭訊息,來降低主機資訊外洩的危機!
改寫並修正請求內容:Mod_rewrite模組是一項熱門的工具,用以改寫所流入的HTTP請求,然後以一種更容易讓搜尋引擎分析的格式呈現出Web內容。事實上,只要使用正規表示式,我們就能建立過濾器,依照所設立的安全限制條件,同意那些流量是可以允許流經Web主機,像是程式變數的最大長度、拼音字母、或者只允許數字、用戶端請求的最大長度等,其餘用戶不合法請求通通就往一般錯誤訊息頁面送。
Mod_proxy_html模組運作方式也同樣類似,但是只有針對流出的流量,而不是流入,它讀入並取代伺服主機所回應用戶的HTML碼。因此,藉由結合mod_proxy_html和mod_rewrite二者,我們可比擬網路位置轉換一般,達到利用Web應用程式轉換Web內容的功能。如此一來,幾乎有無限可能:ASP程式可假裝成是PHP程式,動態程式所產生的內容可偽裝成是靜態網頁,且Web站台流量可先經由多個伺服器主機再流向到外面的網路。
其他的模組, 像是m o d _ l i n e e d i t , 就跟mod_proxy_html一樣,提供修改HTML碼和所有HTTP訊息內容的功能。它的用處在於能抽離其他原始碼的訊息,像是META標籤中作者的姓名,或者是網頁建立工具的名稱,甚至是開發者所下的註解,以及過濾器所未曾發現的潛在危機。
強化防護能力 有一些工具可佈署在代理伺服器上,以監測所有的Web流量:
· 流量遏止工具:藉由限制特定主機或網路所發出的服務請求數,能將蠕蟲流量及DoS攻擊所造成的傷害降至最低。
· 記錄檔分析器:協助偵測Web請求記錄檔當中不正常的訊息。
· 流量分析程式:流量異常提出警告。
· Web安全閘道,需要加入多重用戶身份認證,否則採用LDAP或者是其他認證機制整合企業目錄,以達到單一簽入(Single-Sign-On)的目的。Web應用層防火牆,採用開放原始碼的解決方案,雖然準備工作稍嫌麻煩,但後續所獲得的回報確是相當的值得。不管是動手作的或者是去買來的防火牆,可千萬別等到最後一刻才發覺到,自己雙手建立的網路安全措施,根本就對自身Web網路裡發生的事情視而不見!
Shawn Moyer創立Agura Digital Security目前擔任該公司資安長。