【问题标题】:Is there a security risk running web apps in debug="true"?在 debug="true" 中运行 Web 应用程序是否存在安全风险?
【发布时间】:2010-12-12 06:57:12
【问题描述】:

应用程序不应在 debug="true" 模式 (good rundown from Scott Gu) 下运行有很多性能原因,但这种做法是否暴露了任何攻击媒介?这不是“你应该还是不应该”的问题,这一点很清楚,而是它是否引入了任何特定漏洞的问题。

我倾向于认为remotely detect it 的能力与已知的性能问题相结合可能会导致对服务可用性的利用,但我想要一些更明确的东西。有谁知道可以针对运行 debug="true" 的应用策划的特定攻击?

【问题讨论】:

  • 为什么不在SecuritySE 上询问这个问题?
  • 好点,我最初没有放在那里,因为我想我会在这里得到答案。我已经发送了一份副本:security.stackexchange.com/questions/1180/…
  • 我看到过去暴露了完整的连接字符串(包括密码),应用程序在调试模式下运行,自定义错误关闭并且连接失败 - 在这种情况下不是因为数据库服务器,但是当另一个服务器作为主机的唯一 DNS 服务器被停用时。启用调试模式会大大增加敏感的内部应用程序信息泄露的风险,但您已经知道这一点。我喜欢这样的类比:崩溃不是由一个事件引起的,而是由一系列事件引起的(通常是悲剧性的)结果。

标签: asp.net security


【解决方案1】:

我对这个问题有一些有趣的反馈,尤其是在Security Stack Exchange 上。有很多与堆栈跟踪(自定义错误问题,不是调试问题)和性能(不是[直接]安全问题)相关的响应。

最引人注目的回应是条件编译常量 (#if DEBUG...) 可能会导致意外行为,但这更多的是功能风险(在实时环境中执行的意外代码),而不是安全风险。

我怀疑调试模式可能会根据它对应用程序的性能开销以及远程检测它的能力(可能是服务连续性风险)打开一些通往其他漏洞的途径。我已将我的结论写成OWASP Top 10 for .NET developers part 6: Security Misconfiguration 的一部分。

因此,为了完整起见,答案似乎是在调试模式下运行没有明显的安全风险,但考虑到上述因素,这对于生产应用程序肯定不是一个好主意。

【讨论】:

    【解决方案2】:

    这在一定程度上取决于 DEBUG 条件编译所包围的代码。

    您是否有任何可以被利用的仅调试代码?在调试模式下找到“carte blanche”管理员权限的情况并不少见...

    如果您只有零调试代码,那么我唯一能想到的可能就是在 Web 错误报告中发布太多堆栈错误信息。

    如果您的应用程序具有良好的(可配置级别)日志记录,例如 log4Net,那么这一点就没有实际意义。

    【讨论】:

    • 好点,尽管您可能会争辩说这更多的是应用程序中条件逻辑中的漏洞问题,而不是调试模式本身的漏洞问题。这个问题与任何特定的应用程序无关,它是一个关于调试是否只是性能问题或潜在安全问题的一般问题。
    • @Troy Hunt:没错,但它们是齐头并进的。我想这将成为任何代码审查的一部分......
    【解决方案3】:

    我认为您应该将所有调试操作转移到定制控制台,以防止调试提示使攻击者能够滥用您的应用程序的漏洞。

    【讨论】:

      猜你喜欢
      • 2012-02-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-30
      • 2022-11-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多