ASP.NET/IIS 中使用的非標準 HTTP 動詞“DEBUG”是什麼?
我正在閱讀一家“網路應用程序安全”公司的報告,該公司一直在掃描我工作的公司的一些網站。從報告中可以看出——該報告似乎沒有任何人為參與——多次嘗試使用以下請求破壞我們的網站:
DEBUG /some_path/some_unexisting_file.aspx Accept: */* More-Headers: ...我們伺服器的結果讓我感到驚訝:
HTTP/1.1 200 OK Headers: ...正如HTTP 1.1 規範
DEBUG中的任何地方似乎都沒有提到的那樣,我預計結果是或。400 Bad Request``405 Method Not Allowed從之前關於 SO 的問題中,我了解到該
DEBUG動詞用於 ASP.NET 應用程序的某種遠端調試,但該問題或其答案中沒有太多可用的詳細資訊。
DEBUG動詞到底是乾什麼用的?為什麼應用程序200 OK在使用此動詞時會回答無效的 URL?這是一個安全問題嗎?圍繞DEBUG動詞是否存在任何潛在的安全問題,ASP.NET 開發人員/系統管理員應該注意這些問題?任何見解/建議/參考將不勝感激。
<http://support.microsoft.com/kb/937523>
當客戶端嘗試在 ASP.NET 2.0 應用程序中自動附加調試器時,客戶端會發送一個包含 DEBUG 謂詞的 HTTP 請求。此 HTTP 請求用於驗證應用程序的程序是否正在執行並選擇要附加的正確程序。
它使用 Windows 身份驗證和 DCOM 來實際進行調試 - 所以我不知道 DEBUG 動詞本身是一個很大的安全風險(顯然,如果你允許 RPC 流量,那麼你就會遇到更大的問題)或的任何漏洞。不過,UrlScan 預設會阻止它。
我可能會在上面安裝一個網路嗅探器來檢查哪些資訊洩漏了。
正如 Mark 所暗示的,
DEBUG動詞用於啟動/停止遠端調試會話。更具體地說,一個DEBUG請求可以包含一個Command帶有值start-debug和的標頭stop-debug,但實際的調試是通過 RPC 協議完成的。那麼,為什麼安全掃描器會執行這樣的請求呢?似乎
DEBUG可以使用帶有請求的 ASP.NET 網站來顯示是否web.config有<compilation debug="true">. 通過發送如下請求,可以使用 telnet、WFetch或類似工具執行測試:調試 /foo.aspx HTTP/1.0 接受: */* 主機:www.example.com 命令:停止調試根據是否啟用調試,您將獲得
200 OK或403 Forbidden。人們普遍 認為,您永遠不應該
<compilation debug="true"/>在生產環境中使用,因為它會對網站的性能產生嚴重影響。我不確定啟用調試是否會打開任何新的攻擊向量,除非還啟用了 RPC 流量,在這種情況下,無論如何您都會遇到更嚴重的問題(參見 Mark 的回答)。任何關於安全形度的額外見解將不勝感激。
有一種簡單的方法可以避免意外進入<compilation debug="true"/>生產網站。簡單地說,添加<deployment retail="true"/>到您的machine.config.顯然,
<deployment retail="true"/>在這種特殊情況下,不machine.config等於設置。向 Web 應用程序拋出請求的結果只能通過後者進行更改。令人難以置信!<compilation debug="false"/>``DEBUG