代码之家  ›  专栏  ›  技术社区  ›  Jørn Schou-Rode dscher

ASP.NET/IIS中使用的非标准HTTP谓词“debug”是什么?

  •  20
  • Jørn Schou-Rode dscher  · 技术社区  · 14 年前

    我正在阅读一家“Web应用程序安全”公司的报告,该公司一直在扫描我工作的公司的一些网站。从报告中可以看出,有几次试图利用这样的请求破坏我们的网站,但似乎是在没有任何人参与的情况下编写的:

    DEBUG /some_path/some_unexisting_file.aspx
    Accept: */*
    More-Headers: ...
    

    我们服务器的结果让我吃惊:

    HTTP/1.1 200 OK
    Headers: ...
    

    AS DEBUG 似乎没有提到 HTTP 1.1 specification 我本以为结果会是 400 Bad Request 405 Method Not Allowed .

    earlier question on SO ,我了解到 调试 谓词用于某种类型的ASP.NET应用程序的远程调试,但该问题或其答案中的详细信息不多。

    到底是什么 调试 动词用于?为什么应用程序回答 200 OK 在使用此动词时是否存在无效的URL?这是安全问题吗?是否存在任何潜在的安全问题 调试 ASP.NET开发人员/系统管理员应该知道的谓词?

    如有任何见解/建议/参考,将不胜感激。

    3 回复  |  直到 13 年前
        1
  •  9
  •   Rajeshwaran S P    14 年前

    http://support.microsoft.com/kb/937523

    当客户端尝试在ASP.NET 2.0应用程序中自动附加调试器时,客户端将发送包含调试谓词的HTTP请求。此HTTP请求用于验证应用程序的进程是否正在运行,并选择要附加的正确进程。

    它使用Windows身份验证和DCOM来进行实际的调试——所以我不知道调试动词本身存在很大的安全风险(显然,如果您允许RPC通信,那么您会遇到更大的问题)或任何漏洞。不过,在默认情况下,urlscan确实会阻止它。

    我可能会在上面放一个网络嗅探器来检查哪些信息泄露。

        2
  •  18
  •   Community Egal    7 年前

    正如马克暗示的那样, DEBUG 谓词用于启动/停止远程调试会话。更具体地说,a 调试 请求可以包含 Command 带值的标题 start-debug stop-debug 但是实际的调试是通过一个RPC协议完成的。

    那么,为什么安全扫描器会执行这样的请求呢?似乎使用 调试 请求可用于显示 web.config <compilation debug="true"> . 可以使用telnet执行测试, WFetch 或者类似的,通过发送这样的请求:

    DEBUG /foo.aspx HTTP/1.0
    Accept: */*
    Host: www.example.com
    Command: stop-debug
    

    根据是否启用调试,您将获得 200 OK 403 Forbidden .

    它是 generally accepted 你不应该拥有的 <compilation debug="true"/> 在生产环境中,因为它对网站的性能有严重影响。我不确定启用调试是否会打开任何新的攻击向量,除非也启用了RPC通信,在这种情况下,您仍然有更严重的问题(参见Mark的答案)。我们将非常感谢您对安全性观点的任何其他见解。

    有一种简单的方法可以避免意外地 <编译调试=“真”/> 在制作网站上。简单地说,添加 <deployment retail="true"/> 对你 machine.config .

    显然,有 <deployment retail=“true”/> 机器配置 等于设置 <compilation debug="false"/> 在这种情况下。投掷的结果 调试 对Web应用程序的请求只能用后者进行更改。真难以置信!

        3
  •  5
  •   AviD    14 年前

    @马克,@J恩,谢谢你提供的信息,我也很好奇。
    至于您的报告,从安全的角度来看,还有另外一个方面(除了RPC和调试支持)攻击面。我是一种低风险项目,但最佳实践通常是最小化您不需要的任何外部接口,这样潜在的攻击者就没有足够的回旋余地,并且发现这一关键缺陷的概率更低。
    btw,启用调试编译还有其他效果,因为它确实会留下更多的跟踪、pdb文件等。不一定是高风险,但是…(更不用说PCI合规性,如果这相关的话。)