WAF ( Web Application Firewall, Web 應用程式防火牆 ) 這個名詞越來越夯了,因為 Web 應用程式越來越普及,相對的 Web 安全性的議題也越來越受重視,在市面上已經有不少 WAF 相關防護工具,免費的、付費的、Linux 平台的、Windows 平台的都有,今天我就來介紹一套由微軟提供的入門級 WAF 工具:UrlScan Security Tool ( 這連結是介紹 UrlScan 2.5 的功能,但目前最新版是 UrlScan 3.1 版)。
UrlScan 主要的功能就是將所有送入 IIS 的 HTTP Request 依據自行定義的規則(Rules)進行分析,這將可確保你的 Web 應用程式不會收到無意義的或具攻擊性的 HTTP Rquest,例如 SQL Injection 或 Cross-site Scripting, ... 等,以達到保護 Web 應用程式的功效。
目前的 UrlScan 最新版為 v3.1 版,可安裝在 IIS 5.1, IIS 6, IIS 7 平台上,建議可以在每一台 IIS 主機安裝 UrlScan 以增強網站的安全性。
透過 UrlScan 安裝檔安裝完成之後,要特別注意的步驟就是你必須重新啟動 IIS,UrlScan 才會正式生效,你可以透過介面重新啟動,也可以用指令的方式重新啟動:[開始] -> [執行] -> iisreset
預設 UrlScan 會在 IIS 管理員的站台最上層設定 ISAPI 篩選器,所以只要重新啟動 IIS 後預設就會套用到所有現有的網站中:
安裝好之後要測試是否正常運作,一個最簡單的測試方法就是在瀏覽器的網址列上刻意輸入一個有問題的網址,任意網址都可以,圖片、CSS、靜態頁面、動態頁面都可以。例如你有個測試的頁面網址是:
若刻意加上一段有問題的 QueryString 就會得到一個 HTTP 404 找不到這個網頁的錯誤,如下圖示:
你也可以分析 IIS Log 檔中的原本正常的 Request 會紀錄以下格式: ( 尚未安裝 UrlScan 時 )
2009-01-22 06:04:12 127.0.0.1 - GET /ZZZ.txt a=< 200 250 HTTP/1.1
當安裝了 UrlScan 之後,你會發現這些被阻擋的 Request 所留下的 Log 會有些變化:
2009-01-22 06:04:39 127.0.0.1 - GET /Rejected-By-UrlScan ~/ZZZ.txt?a=< 404 4041 HTTP/1.1
最主要的變化有三個地方:
- cs-uri-stem
- 原本 GET 路徑是 /ZZZ.txt a=< ,但是被 UrlScan 攔截後的路徑為 /Rejected-By-UrlScan
- cs-uri-query
- 原本的 QueryString 會變成原本的 GET 路徑 + QueryString
- sc-status
- 原本回應正常的 HTTP 200 OK 會一律改以 HTTP 404 Not Found 狀態回應!
預設 UrlScan 會把相關檔案安裝在 C:\WINDOWS\system32\inetsrv\urlscan 目錄下,其中會有兩個檔案、一個目錄,分別介紹如下:
- urlscan.dll
- UrlScan.ini
- UrlScan 的主要設定檔,檔案內的各個參數設定都有詳細的註解。
- logs/
- 這個 logs 目錄 ( 預設目錄 ) 裡面包含所有被 UrlScan 檔下的所有事件紀錄。
- 儲存 Log 的目錄可以透過 UrlScan.ini 設定檔的 LoggingDirectory 參數來改變。
UrlScan 功能強大,唯一個缺點應該就是所有的設定檔都必須自行手動設定、調整,建議有新想導入 UrlScan 的人可以將 Using UrlScan 這裡的文章看過一遍,這裡包括四篇文章:
最後,也是最精華的部分就是如何看懂且正確設定 UrlScan.ini 設定檔中的每個設定,由於每個參數都有詳細說明,我就不再贅述。如果你為了要讓 Web 應用程式更安全,但卻不想研讀每個參數設定的話,強烈建議你乾脆就不要安裝,因為裝上去之後是有可能讓你的網站部分功能失效的!
UrlScan 是個很棒的工具,免費且功能強大,而且有些參數設定還挺有趣的,例如他可以移除 HTTP Response 的 Server 標頭,甚至可以將 Server 標頭改名,一些好玩的設定以後有機會再寫。
相關連結