我刚刚在网上阅读了有关 ASP.NET 中新发现的安全漏洞的信息。您可以在此处阅读详细信息。
问题在于 ASP.NET 实现 AES 加密算法的方式来保护这些应用程序生成的 cookie 的完整性,以便在用户会话期间存储信息。
这有点模糊,但这里有一个更可怕的部分:
攻击的第一阶段需要几千个请求,但一旦成功并且攻击者获得了密钥,它就完全是隐秘的。所需的密码知识非常基础。
总而言之,我对安全/密码学主题不够熟悉,不知道这是否真的那么严重。
那么,所有 ASP.NET 开发人员是否应该害怕这种可以在几秒钟内拥有任何 ASP.NET 网站的技术呢?
这个问题对普通的 ASP.NET 开发人员有何影响?它对我们有影响吗?在现实生活中,这个漏洞的后果是什么?最后:是否有一些解决方法可以防止此漏洞?
感谢您的回答!
编辑:让我总结一下我得到的回复
所以,这基本上是一种“填充预言”类型的攻击。@Sri很好地解释了这种攻击的含义。这是一个关于这个问题的令人震惊的视频!
关于这个漏洞的严重性:是的,确实很严重。它让攻击者能够了解应用程序的机器密钥。因此,他可以做一些非常不受欢迎的事情。
- 在拥有应用程序的机器密钥后,攻击者可以解密身份验证 cookie。
- 更糟糕的是,他可以使用任何用户的名称生成身份验证 cookie 。因此,他可以在网站上以任何人的身份出现。该应用程序无法区分您还是为自己生成了带有您的姓名的身份验证 cookie 的黑客。
- 它还允许他解密(并生成)会话 cookie,尽管这不像前一个那样危险。
- 没那么严重:他可以解密页面的加密 ViewState。(如果您使用 ViewState 来存储机密数据,则无论如何都不应该这样做!)
- 非常出乎意料:通过机器密钥的知识,攻击者可以从您的 Web 应用程序中下载任意文件,甚至是那些通常无法下载的文件!(包括Web.Config等)
这是我得到的一堆好的做法,它们并不能解决问题,但有助于提高 Web 应用程序的一般安全性。
- 您可以使用受保护的配置加密敏感数据
- 仅使用 HTTP cookie
- 防止 DoS 攻击
现在,让我们专注于这个问题。
- Scott Guthrie 在他的博客上发表了一篇关于它的文章
- ScottGu 关于该漏洞的常见问题解答博客文章
- ScottGu 关于漏洞的更新
- 微软有一个关于它的安全建议
- 了解漏洞
- 有关漏洞的其他信息
解决方案
- 启用 customErrors 并创建一个将所有错误重定向到的错误页面。是的,甚至是 404s。(ScottGu 说区分 404s 和 500s 对于这种攻击是必不可少的。)另外,在你的
Application_Error
或者Error.aspx
放入一些随机延迟的代码。(生成一个随机数,并使用 Thread.Sleep 休眠那么长时间。)这将使攻击者无法确定您的服务器上究竟发生了什么。 - 有些人建议切换回 3DES。理论上,如果不使用 AES,就不会遇到 AES 实现中的安全漏洞。事实证明,这根本不推荐。
其他一些想法
感谢所有回答我问题的人。我不仅学到了很多关于这个问题的知识,而且学到了很多关于网络安全的知识。我将@Mikael 的答案标记为已接受,但其他答案也非常有用。