在內建的規則中大多已經很夠用了,其中在 [DenyQueryStringSequences] 區段定義的 "<" 與 ">" 更是阻擋 XSS 的關鍵 ( XSS 大多都搭配著 "<"script">" 的標籤搭配在 QuerryString 之後,搭配 UnescapeQueryString 的參數將 Escape 後的參數還原即可得知)。那其他的特徵呢?例如 declare, drop, select… 等正常不應該出現在 QuerryString 的參數要阻擋的設定怎麼辦?
說完了參數代表的意義後,本文緊接著說明更進階的設定。在 URL 中除了有共用的基本設定外,還有更進階的應用:自訂規則清單。
- 自訂規則清單
在內建的規則中大多已經很夠用了,其中在 [DenyQueryStringSequences] 區段定義的 "<" 與 ">" 更是阻擋 XSS 的關鍵 ( XSS 大多都搭配著 "<"script">" 的標籤搭配在 QuerryString 之後,搭配 UnescapeQueryString 的參數將 Escape 後的參數還原即可得知)。那其他的特徵呢?例如 declare, drop, select… 等正常不應該出現在 QuerryString 的參數要阻擋的設定怎麼辦?聰明的人會馬上想到 「在 [DenyQueryStringSequences] 加不就好了!」。這樣也OK~但自訂規則一多時,管理維護就會增加困難度,不要小看時間的流逝,時間是會讓任何設定都忘記原本的意義的 (TigerLin 越來越有此感覺了 ><)。
感嘆完年紀後,我們來開始實作吧!!在 URLScan.ini 的設定檔中,會看到有一個區段為 [foo] 的設定,預設是被 Remark 起來的,這裡就是自訂規則清單的範例了。在官方的 Common URLScan Scenarios 有說明如何新增一個完整防止 SQL Injection 的範例,TigerLin 測試的結果發現效果很好,所以這裡就先借花獻佛的使用官方的當範例了 XD ~ 我們來看看以下的區段設定(英文解釋部分已經翻譯成中文):
; =================================================
; 2009/03/17 TigerLin Added
; Block SQL Injection rulu
; =================================================
; ===============================================
; Start rule define (橘色字為 TigerLin 的註解,可直接貼進設定檔)
; ===============================================
[SQL Injection]
AppliesTo=.asp,.aspx,.php ;套用至對應的副檔名
DenyDataSection=SQL Injection Strings ;定義的阻擋字串
ScanUrl=0 ;是否包含 URL 的掃描
ScanAllRaw=0 ;掃描未經過處理的 URL
ScanQueryString=1 ;掃描 QuerryString 參數
ScanHeaders= ;掃描 HTTP Request 的 Header
DenyUnescapedPercent=1 ;阻擋 Unescape 後的百分符號 "%"
[SQL Injection Strings]
--
%3b ; 分號的 ASCLL 碼(";")
/*
@ ; 同時也會阻擋 "@@"
char ; 同時也會阻擋 nchar 與 varchar
alter
begin
cast
convert
create
cursor
declare
delete
drop
end
exec ; 同時也會阻擋 execute
fetch
insert
kill
open
select
sys ; 同時也會阻擋 sysobjects 與 syscolumns
table
update
; ===============================================
; End rule define
; ===============================================
以上就是官方建議的 SQL Injection 的規則清單,在定義的上面與下面 TigerLin 都有加了註解,這是為了防止自己以後忘記為何設定這些規則,同時也方便接手的 IT 人員維護,一舉兩得。
注意:別忘了在 RuleList 新增規則,要設定為 RuleList=SQL Injection ,重新啟動 IIS 後規則才可生效。
- 實測套用規則效果
現在我們開啟瀏覽器,在自己架設的站台中,URL 為 http://localhost/default.aspx?a=declare ,後面的參數為 declare,是定義在阻擋字串中的其中一個。開啟這個 URL 後,會發現 Server 回應 404 錯誤:
在 "要求的 URL" 會出現 http://localhost/Rejected-By-UrlScan?~/default.aspx?a=declare 的字樣,代表 declare 已經成功被阻擋了。接下來在 URLScan LOG 中也可以看到阻擋的紀錄:
這樣就驗證完成了~
- 可應用的範圍
URLScan TigerLin 應用在以下的範圍,跟大家分享一下 ~
-- 當程式被 SQL Injection 或 XSS 攻擊成功時,可先緊急安裝 URLScan,一來可先加強應用程式的安全,二來可以藉由 LOG 分析出是由哪個入口進來的,大型網站尤其需要。
-- 在開發過程中,可先使用 URLScan 搭配免費的安全分析工具進行分析,在經費有限的情況下達到最大的安全性,讓程式在上線之前先分析出可能的弱點並將其補完,可避免後面很多收尾的麻煩。 當然,如果是想藉此再請客戶付一筆升級費者不在此範圍內 XD~
- 已知的衝突
在 Windows 2008 安裝 URLScan 需要 IIS6 Metabase 的相容性管理模組,但 IIS6 Metabase 模組又與 IIS 7 FTP 模組不相容 ,兩者只能選其一。
- 參考連結
UrlScan Security Tool http://technet.microsoft.com/en-us/security/cc242650.aspx
Common URLScan Scenarios http://learn.iis.net/page.aspx/476/common-urlscan-scenarios/