文/玄魂
目錄
UrlScan是集成在IIS上的安全工具,主要是對http請求按照指定規則做過濾。可以用它來防止sql注入、url掃描等針對http請求的安全增強工作。
歡迎訪問玄魂的博客
可以在http://www.iis.net/downloads/microsoft/urlscan下載最新版本的URL Scan。
如果使用6.0以上版本的IIS,需要確保安裝了IIS6.0兼容模塊。
如何安裝IIS角色服務,參考:http://technet.microsoft.com/zh-cn/library/cc771209.aspx。
歡迎訪問玄魂的博客
一下內容來自:http://support.microsoft.com/kb/326444/zh-cn
URLScan 的所有配置都是通過 URLScan.ini 文件執行的,此文件位於 %WINDIR%\System32\Inetsrv\URLscan 文件夾中。要配置 URLScan,請在文本編輯器(如記事本)中打開此文件,進行相應的更改,然后保存此文件。
注意:要使更改生效,必須重新啟動 Internet 信息服務 (IIS)。一種快速的實現方法是在命令提示符處運行 IISRESET。
URLScan.ini 文件包含以下幾節:
· [Options]:此節描述常規 URLScan 選項。
· [AllowVerbs] 和 [DenyVerbs]:此節定義 URLScan 允許的謂詞(又稱作 HTTP 方法)。
· [DenyHeaders]:此節列出 HTTP 請求中不允許的 HTTP 標頭。如果 HTTP 請求中包含此節中列出的 HTTP 標頭之一,URLScan 將拒絕該請求。
· [AllowExtensions] 和 [DenyExtensions]:此節定義 URLScan 允許的文件擴展名。
· [DenyURLSequences]:此節列出 HTTP 請求中不允許的字符串。URLScan 拒絕那些包含此節中出現的字符串的 HTTP 請求。
本文將更詳細地介紹每一節。
[Options] 節
在 [Options] 節中,可以配置許多 URLScan 選項。此節中的每一行都具有以下格式:
OptionName=OptionValue
可用選項及其默認值如下所示:
· UseAllowVerbs=1
默認情況下,此選項設置為 1。如果將此選項設置為 1,則 URLScan 僅允許那些使用 [AllowVerbs] 節中列出的謂詞的 HTTP 請求。URLScan 禁止任何不使用這些謂詞的請求。如果將此選項設置為 0,則 URLScan 忽略 [AllowVerbs] 節,相反僅禁止那些使用 [DenyVerbs] 節中列出的謂詞的請求。
· UseAllowExtensions=0
默認情況下,此選項設置為 0。如果將此選項設置為 0,則 URLScan 禁止對 [DenyExtensions] 節中列出的文件擴展名的請求,但允許對任何其他文件擴展名的請求。如果將此選項設置為 1,則 URLScan 僅允許對帶 [AllowExtensions] 節中列出的擴展名的文件的請求,而禁止對任何其他文件的請求。
· NormalizeUrlBeforeScan=1
IIS 收到用 URL 編碼的請求。這表示某些字符可能被替換為百分號 (%) 后跟特定的數字。例如,%20 對應於一個空格,因此,對 http://myserver/My%20Dir/My%20File.htm 的請求與對 http://myserver/My Dir/My File.htm 的請求是相同的。標准化就是對 URL 編碼請求進行解碼的過程。默認情況下,此選項設置為 1。如果將 NormalizeUrlBeforeScan 選項設置為 1,則 URLScan 分析已解碼的請求。如果將此選項設置為 0,則 URLScan 分析未解碼的請求。將此選項設置為 0 會影響 URLScan 禁止某種攻擊的能力。
· VerifyNormalization=1
由於百分號 (%) 本身可以是 URL 編碼的,所以攻擊者可以向服務器提交一個精心制作的、基本上是雙重編碼的請求。如果發生這種情況,IIS 可能會接受本應視作無效而拒絕的請求。默認情況下,此選項設置為 1。如果將 VerifyNormalization選項設置為 1,則 URLScan 將對 URL 執行兩次標准化。如果第一次標准化后的 URL 與第二次標准化后的 URL 不同,URLScan 將拒絕該請求。這樣就可以防止那些依賴雙重編碼請求的攻擊。
· AllowHighBitCharacters=0
默認情況下,此選項設置為 0。如果將此選項設置為 0,則 URLScan 拒絕任何包含非 ASCII 字符的請求。這樣可以防止某些類型的攻擊,但同時可能也會禁止對某些合法文件的請求,如帶有非英文名的文件。
· AllowDotInPath=0
默認情況下,此選項設置為 0。如果將此選項設置為 0,則 URLScan 拒絕所有包含多個句點 (.) 的請求。這樣可以防止通過將安全的文件擴展名放入 URL 的路徑信息或查詢字符串部分,以達到偽裝請求中的危險文件擴展名的企圖。例如,如果將此選項設置為 1,則 URLScan 可能允許對 http://servername/BadFile.exe/SafeFile.htm 的請求,因為它認為這是對 HTML 頁的請求,但實際上這是一個對可執行 (.exe) 文件的請求,而該文件的名稱在 PATH_INFO 區域中顯示為 HTML 頁的名稱。如果將此選項設置為 0,URLScan 可能還會拒絕對包含句點的目錄的請求。
· RemoveServerHeader=0
默認情況下,Web 服務器返回一個標頭,其中指出了 Web 服務器在所有響應中運行的 Web 服務器軟件。這會增加服務器遭受攻擊的可能性,因為攻擊者可以確定服務器正在運行 IIS,於是便攻擊已知的 IIS 問題,而不是試圖使用為其他 Web 服務器設計的攻擊手段來攻擊 IIS 服務器。默認情況下,此選項設置為 0。如果將 RemoveServerHeader 選項設置為 1,可以防止您的服務器發送將其標識為 IIS 服務器的標頭。如果將 RemoveServerHeader 設置為 0,則仍發送此標頭。
· AlternateServerName=(默認情況下不指定)
如果將 RemoveServerHeader 設置為 0,可以在 AlternateServerName 選項中指定一個字符串以指定將在服務器標頭中傳回的內容。如果將 RemoveServerHeader 設置為 1,則此選項將被忽略。
· EnableLogging=1
默認情況下,URLScan 在 %WINDIR%\System32\Inetsrv\URLScan 中保留所有被禁止的請求的完整日志。如果不希望保留此日志,可將 EnableLogging 設置為 0。
· PerProcessLogging=0
默認情況下,此選項設置為 0。如果將此選項設置為 1,URLScan 將為承載 URLScan.dll 的每個進程創建一個單獨的日志。如果將此選項設置為 0,所有進程將記錄到同一個文件中。
· PerDayLogging=1
默認情況下,此選項設置為 1。如果將該值設置為 1,則 URLScan 每天創建一個新的日志文件。每個日志文件的名稱都是 Urlscan.MMDDYY.log,其中 MMDDYY 是日志文件的日期。如果將該值設置為 0,則所有日志記錄都保存在同一個文件中,與日期無關。
· AllowLateScanning=0
默認情況下,此選項設置為 0。如果將此選項設置為 0,則 URLScan 作為高優先級篩選器運行,這表示它先於服務器上安裝的所有其他 Internet 服務器應用程序編程接口 (ISAPI) 篩選器執行。如果將此選項設置為 1,則 URLScan 作為低優先級篩選器運行,以便其他篩選器可以在 URLScan 進行任何分析之前修改 URL。FrontPage Server Extensions (FPSE) 要求將此選項設置為 1。
· RejectResponseUrl=(默認情況下不指定)
此選項指定在 URLScan 禁止請求時運行的文件的虛擬路徑。這允許您自定義針對被禁止的請求發送給客戶機的響應。必須將 RejectResponseUrl 指定為相應文件的虛擬路徑,如 /Path/To/RejectResponseHandler.asp。可以指定 URLScan 通常禁止的文件,如 Active Server Pages (ASP) 頁。還可以從該頁指定以下服務器變量:
o HTTP_URLSCAN_STATUS_HEADER:此變量指定請求被禁止的原因。
o HTTP_URLSCAN_ORIGINAL_VERB:此變量指定被禁止的請求中的原始謂詞(例如 GET、POST、HEAD 或 DEBUG)。
o HTTP_URLSCAN_ORIGINAL_URL:此變量指定被禁止的請求中的原始 URL。
如果將 RejectResponseUrl 設置為特殊值 /~*,則 URLScan 使用“僅日志記錄”模式。這允許 IIS 為所有請求提供服務,但它會在 URLScan 日志中為所有通常被禁止的請求添加相應的項。這在需要測試 URLScan.ini 文件時很有用。
如果沒有指定 RejectResponseUrl 的值,則 URLScan 使用默認值 /<Rejected-By-UrlScan>。
· UseFastPathReject=0
默認情況下,此選項設置為 0。如果將此選項設置為 1,則 URLScan 忽略 RejectResponseUrl 設置並立即向瀏覽器返回 404 錯誤信息。這比處理 RejectResponseUrl 要快,但它允許的日志記錄選項沒有那么多。如果將此選項設置為 0,則 URLScan 使用 RejectResponseUrl 設置來處理請求。
[AllowVerbs] 節和 [DenyVerbs] 節
[AllowVerbs] 節和 [DenyVerbs] 節定義 URLScan 允許的 HTTP 謂詞(又稱作方法)。常用的 HTTP 謂詞包括 GET、POST、HEAD 和 PUT。其他應用程序(如 FPSE 和 Web 分布式創作和版本控制 (WebDAV))使用更多的謂詞。
[AllowVerbs] 節和 [DenyVerbs] 節的語法相同。它們由 HTTP 謂詞列表組成,每個謂詞占一行。
URLScan 根據 [Options] 節中 UseAllowVerbs 選項的值來決定使用哪一節。默認情況下,此選項設置為 1。如果將UseAllowVerbs 設置為 1,則 URLScan 僅允許那些使用 [AllowVerbs] 節中列出的謂詞的請求。不使用任何這些謂詞的請求將被拒絕。在這種情況下,[DenyVerbs] 節被忽略。
如果將 UseAllowVerbs 設置為 0,則 URLScan 拒絕那些使用 [DenyVerbs] 節中明確列出的謂詞的請求。允許任何使用未在此節中出現的謂詞的請求。在這種情況下,URLScan 忽略 [AllowVerbs] 節。
[DenyHeaders] 節
當客戶機向 Web 服務器請求頁面時,它通常會發送一些包含有關此請求的其他信息的 HTTP 標頭。常見的 HTTP 標頭包括:
· Host:
此標頭包含 Web 服務器的名稱。
· Accept:
此標頭定義客戶機可以處理的文件類型。
· User-Agent:
此標頭包含請求頁面的瀏覽器的名稱。
· Authorization:
此標頭定義客戶機支持的身份驗證方法。
客戶機可能會向服務器發送其他標頭以指定其他信息。
在 [DenyHeaders] 節中,您定義 URLScan 將拒絕的 HTTP 標頭。如果 URLScan 收到的請求中包含此節中列出的任何標頭,它將拒絕該請求。此節由 HTTP 標頭列表組成,每個標頭占一行。標頭名后面必須跟一個冒號 (:)(例如 Header-Name:)。
[AllowExtensions] 節和 [DenyExtensions] 節
大多數文件都有一個標識其文件類型的文件擴展名。例如,Word 文檔的文件名一般以 .doc 結束,HTML 文件名一般以 .htm 或 .html 結束,純文本文件名一般以 .txt 結束。[AllowExtensions] 節和 [DenyExtensions] 節允許您定義 URLScan 將禁止的擴展名。例如,您可以配置 URLScan 以拒絕對 .exe 文件的請求,防止 Web 用戶在您的系統上執行應用程序。
[AllowExtensions] 節和 [DenyExtensions] 節的語法相同。它們由文件擴展名列表組成,每個擴展名占一行。擴展名以句點 (.) 開頭(例如 .ext)。
URLScan 根據 [Options] 節中 UseAllowExtensions 的值來決定使用哪一節。默認情況下,此選項設置為 0。如果將UseAllowExtensions 設置為 0,則 URLScan 僅拒絕對 [DenyExtensions] 節中列出的文件擴展名的請求。允許此節中未列出的任何文件擴展名。[AllowExtensions] 節被忽略。
如果將 UseAllowExtensions 設置為 1,則 URLScan 拒絕對 [AllowExtensions] 節中未明確列出的任何文件擴展名的請求。僅允許對此節中列出的文件擴展名的請求。[DenyExtensions] 節被忽略。
有關如何配置 URLScan 以允許對沒有擴展名的文件的請求的其他信息,請單擊下面的文章編號,以查看 Microsoft 知識庫中相應的文章:
312376 如何配置 URLScan 以在 IIS 中允許使用空擴展名的請求
[DenyUrlSequences] 節
可以配置 URLScan 以禁止那些 URL 中包含某些字符序列的請求。例如,可以禁止那些包含兩個連續句點 (..) 的請求,利用目錄遍歷漏洞的攻擊中經常采用這種手段。要指定一個想要禁止的字符序列,請將此序列單獨放在 [DenyUrlSequences] 節中的一行上。
請注意,添加字符序列可能會對 Microsoft Exchange 的 Outlook Web Access (OWA) 產生負面影響。當您從 OWA 打開一個郵件時,該郵件的主題行包含在服務器所請求的 URL 中。由於 URLScan.ini 文件禁止任何包含百分號 (%) 和連字符 (&) 的請求,因此,當用戶嘗試打開主題行為“Sales increase by 100%”或“Bob & Sue are coming to town”的郵件時,會收到 404 錯誤信息。要解決此問題,可以從 [DenyUrlSequences] 節中刪除這些序列。請注意,這樣做會降低安全性,因為它有可能允許危險的請求到達服務器。
有關其他信息,請單擊下面的文章編號,以查看 Microsoft 知識庫中相應的文章:
325965 URLScan 工具可能會導致 Outlook Web Access 中出現問題
Exchange、FPSE 和 Microsoft Visual Studio .NET 這類應用程序的正常運行依賴於 IIS。如果沒有正確配置 URLScan,這些應用程序可能會停止正常運行。
有關如何配置 URLScan 用於這些應用程序的其他信息,請單擊下面的文章編號,以查看 Microsoft 知識庫中相應的文章:
309508 Exchange 環境中的 IIS 鎖定和 URLscan 配置
309394 如何協同使用 URLScan 和 FrontPage 2000
318290 如何協同使用 URLScan 和 FrontPage 2002
310588 PRB:安全工具包中止 Visual Studio .NET 中的 ASP.NET 調試
歡迎訪問玄魂的博客
ps:對此文章或者安全、安全編程感興趣的讀者,可以加qq群:Hacking:303242737;Hacking-2群:147098303;Hacking-3群:31371755;hacking-4群:201891680;Hacking-5群:316885176