Hows会阻止密码和其他敏感信息出现在ASP.NET转储中吗?

时间:2012-04-01 12:12:05

标签: asp.net security iis-7.5 crash-dumps

如何防止在IIS / ASP.NET转储文件中提交和接收ASP.NET网页的密码和其他敏感数据?

重现的步骤

  1. 使用Visual Studio 2010,创建ASP.NET MVC 3 Intranet应用程序。
  2. 将其配置为使用IIS 7.5。
  3. 启动它并注册一个帐户(比如bob123作为用户,而pa $$ w0Rd作为密码。我假设创建了SQL Express数据库并且网站功能齐全。
  4. 使用任务管理器,右键单击w3wp进程并创建转储。
  5. 在能够以十六进制显示其内容的编辑器中打开转储,例如SlickEdit。
  6. 在十六进制转储中搜索“Pa $$ 0Rd”和“Pa%24%24w0Rd”。您应该能够找到以ASCII,Unicode或编码形式存储的多个副本。
  7. 请注意,使用HTTPS无关紧要,因为它只会加密通信。 ASP.NET将数据以明文形式存储在内存或磁盘中。

    问题

    通常有智慧加密敏感数据,而不是将其存储在清晰的数据中。但是,员工可能会收到IIS / ASP.NET应用程序的转储并发现用户的密码和其他机密数据,因为此信息既未加密,也未在使用后清除ASP.NET使用的内存。

    这使他们处于危险之中,因为他们可以访问它。有时会与合作伙伴(例如Microsoft)共享转储,以帮助他们诊断代码中的问题。这是在一个人的应用程序中诊断一些非常复杂的问题的必要部分。

    我看过的事情

    1. 将SecureString用于密码和其他敏感数据。但是,ASP.NET成员资格提供程序以及其他框架(如WCF)通常接受密码作为System.String,这意味着这些副本仍将在转储中。
    2. 查看框架中是否有任何内容可以在不再使用时清除System.String的副本。我找不到任何东西。
    3. 调查一旦IIS完成后,是否可以将用于请求和响应的内存清零,但我无法找到任何内容。
    4. 我调查了一个可以加密IIS接收的文件(作为HttpPostFile),以便它们不会以明文形式存储。我们可能会收到极其机密的文档,并且每一步都会在服务器上加密和保护它们。但是,有人可以从IIS转储中清除它们。
    5. 我所希望的是告诉IIS / ASP.NET特定请求/响应包含敏感数据,并且IIS / ASP.NET将在使用它时清除内存。

2 个答案:

答案 0 :(得分:1)

转储文件按定义转储 all 应用程序在转储时使用的内存,如果您要创建过滤器以便排除某些内容,那么您永远无法确定有足够的数据来解决问题。

您是否愿意将数据库/配置设置移交给第三方?如果没有那么你可能不应该交出dumpfiles。 (IMHO)

答案 1 :(得分:0)

我知道这不能直接回答这个问题,但为什么不以不同的方式看待这个问题。

您可以轻松地将一些javascript放在一起进行哈希客户端。我会将密码与随机的东西组合在一起,例如服务器发送的guid,只对一次使用有效。数据交换将不再包含密码,并且可以轻松地将哈希与服务器端进行比较。它仅对会话有效,因此查看转储数据的人将来无法使用哈希“自我验证”。

在文件方面,这些文件是如何上传的?直接来自网页?有很多javascript库进行加密(河豚),我肯定会在发送敏感文件时使用此选项。它确实有速度损失,但您可以确定数据是安全的。