[資安筆記] IIS 安全性延伸模組 URLScan 3 進階應用 - 自訂規則清單

在內建的規則中大多已經很夠用了,其中在 [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 錯誤:

    被 URLScan Reject 的參數 

    在 "要求的 URL" 會出現 http://localhost/Rejected-By-UrlScan?~/default.aspx?a=declare 的字樣,代表 declare 已經成功被阻擋了。接下來在 URLScan LOG 中也可以看到阻擋的紀錄:

    URLScan 的紀錄說明 

    這樣就驗證完成了~
     
  • 可應用的範圍
    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/
如果覺得這篇文章對你有所幫助,可以透過 Paypal 支持作者唷~