最近一直刷新AppScan的下限,對於Appscan報出的中危漏洞“啟用不安全的HTTP方法”。分析了其掃描機制,以及處理方法和繞開方法。如果不耐煩看分析過程,請直接跳到文章最后看處理方法。
0. 漏洞背景
“啟用了不安全的 HTTP 方法”屬於“中”危漏洞。漏洞描述是:根據APPSCAN的報告,APPSCAN通過OPTIONS請求,當響應中發現DELETE、SEARCH、COPY等方法為允許方法時,則認為是漏洞。 詳見下圖:
Web服務器(以IIS為例)在沒有任何設置是,使用OPTIONS命令,可以返回所有能夠響應的HTTP方法,如OPTIONS, TRACE, GET, HEAD, COPY, PROPFIND, SEARCH, LOCK, UNLOCK。
發送OPTIONS請求:(使用telnet或者secureCRT等軟件):
1. 實驗環境
Web服務器環境:IIS6。站點結構如下,使用了主機頭myapp.com指向了我的測試應用app。
配置只有讀取權限,還有執行權限設置為“純腳本”。
2. 實驗
實驗1:裸實驗
未啟用WebDav,OPTIONS命令的返回中,只顯示只有OPTION、TRACE、GET、HEAD和POST。
APPSCAN掃描結果也沒有掃描出“啟用了不安全的 HTTP 方法”這個漏洞。
實驗2:開啟WebDAV
啟用WebDAV后,OPTIONS命令的返回中,顯示多了很多新的HTTP方法,包括APPSCAN會認為是不安全的COPY、SEARCH、LOCK和UNLOCK等。
APPSCAN的掃描結果如下,掃描到了“啟用了不安全的HTTP方法”這個漏洞。
結論1:如果關閉WebDAV支持,APPSCAN則無法掃描出“啟用了不安全的 HTTP 方法”漏洞。
實驗3:URLScan正向實驗
安裝URLScan(URLScan是微軟提供給IIS6的路徑重定向工具,在這里下載),在URLScan.ini中配置,只允許GET、HEAD和POST這三個常用命令(UseAllowVerbs=1)。
運行OPTIONS命令,則服務器返回響應失敗,無法列出所有的HTTP方法
APPSCAN掃描結果顯示,禁用OPTIONS命令后無法掃描出“啟用了不安全的 HTTP 方法”這個漏洞。
實驗4:URLScan正向實驗2
安裝URLScan,在URLScan.ini中配置,只允許GET、HEAD、POST和OPTIONS命令。
由於URLScan的模式,要么設置允許命令,要么設置禁止命令,不能同時設置。因此允許這4個命令,表示不能禁用其他命令,因此OPTIONS會顯示其他的可用命令。
由於APPSCAN默認是以OPTIONS命令來看漏洞的,因此自然本次掃描會有漏洞。
實驗5:URLScan反向實驗
在URLSCAN中,采用禁止模式(UseAllowVerbs=0),只禁止OPTIONS命令。
結果OPTIONS被禁用。
當然此時其他不安全的HTTP方法,其實是沒有禁用的,如LOCK、UNLOCK等,只是是否可用要看服務器是否設置了對應的程序。
實驗5:URLScan反向實驗2
在URLSCAN中,采用禁止模式(UseAllowVerbs=0),禁止不安全HTTP方法- DELETE- SEARCH- COPY- MOVE- PROPFIND- PROPPATCH- MKCOL- LOCK- UNLOCK- PUT等。
但是使用OPTIONS命令后,仍然顯示這些不安全的方法,即使這些方法實際已經被禁用了。
見下圖,使用LOCK命令已經顯示無法訪問了,但APPSCAN實際也會說有漏洞,由於OPTIONS方法告訴它有這些HTTP方法。
結論2:消除“啟用了不安全的 HTTP 方法”漏洞,關鍵在於是否能夠阻止OPTIONS命令。
3. URLScan參數討論
使用URLSCAN確實可以禁用掉無用的HTTP方法,但根據參數配置,有可能會產生副作用。因此需要了解每一個參數,以減少對現有系統的影響。
參數(默認值) |
描述 |
建議值 |
UseAllowVerbs=1 |
; If 1, use [AllowVerbs] section, else use the [DenyVerbs] section. |
0,使用禁用模式,禁用OPTIONS |
UseAllowExtensions=0 |
; If 1, use [AllowExtensions] section, else use the [DenyExtensions] section. |
0,使用禁用模式,並將禁用列表清空 |
NormalizeUrlBeforeScan=1 |
; If 1, canonicalize URL before processing. |
0,不掃描 |
VerifyNormalization=1 |
; If 1, canonicalize URL twice and reject request if a change occurs. |
0,不掃描 |
AllowHighBitCharacters=0 |
; If 1, allow high bit (ie. UTF8 or MBCS) characters in URL. |
0,不啟用 |
AllowDotInPath=0 |
; If 1, allow dots that are not file extensions. |
0,不啟用 |
RemoveServerHeader=0 |
; If 1, remove the 'Server' header from response. |
0,不啟用 |
EnableLogging=1 |
; If 1, log UrlScan activity. |
0,不啟用 |
PerProcessLogging=1 |
; If 1, the UrlScan.log filename will contain a PID (ie. UrlScan.123.log). |
0,不啟用 |
AllowLateScanning=0 |
; If 1, then UrlScan will load as a low priority filter. |
0,不啟用 |
PerDayLogging=1 |
; If 1, UrlScan will produce a new log each day with activity in the form 'UrlScan.010101.log'. |
0,不啟用 |
UseFastPathReject=0 |
; If 1, then UrlScan will not use the RejectResponseUrl or allow IIS to log the request. |
0,不啟用 |
LogLongUrls=0 |
; If 1, then up to 128K per request can be logged. If 0, then only 1k is allowed. |
0,不啟用 |
MaxAllowedContentLength =30000000 |
請求內容最大長度,默認為3G |
不修改 |
MaxUrl=260 |
URL長度,默認260字符 |
不修改 |
MaxQueryString=2048 |
QueryString的最大長度,默認2048字符 |
不修改 |
RejectResponseUrl= |
不修改 |
|
LoggingDirectory |
不修改 |
|
AlternateServerName= |
不修改 |
4.處理方法
回顧一下實驗過程中的結論:
如果禁止OPTIONS命令,但沒有禁用其他危險命令如MOVE等,APPSCAN不會提示漏洞
如果禁止所有危險命令如MOVE等(實際調用出錯),但是OPTIONS命令沒有禁止並且顯示這些危險命令可以使用,APPSCAN提示漏洞。
如果關閉WebDAV支持,APPSCAN則無法掃描出“啟用了不安全的 HTTP 方法”漏洞。
因為不開啟WebDAV,則不開啟OPTIONS命令。
因此
王道方法是:禁用所有危險命令以及OPTIONS(OPTIONS命令並不危險,但不禁用是不行的)
邪道方法是:只禁用OPTIONS命令,其他危險命令APPSCAN是不會主動掃描,留着也不會報漏洞。但實際是不是有,這個就要具體分析了。
綜上:解決“啟用了不安全的 HTTP 方法”,可采用3種方法:
方法 |
描述 |
|
1 |
禁用WebDAV功能 |
根本解決。不引入新的不穩定因素URLSCAN |
2 |
使用URLSCAN禁用OPTIONS
|
實際沒有真正禁用,但縮小了影響范圍。URLSCAN可能有副作用。 |
3 |
使用URLSCAN禁用OPTIONS和其他HTTP方法 或者只允許GET/POST/HEAD方法(自動禁用其他方法) |
等效於取消WebDAV,但URLSCAN可能副作用。 |