我刚刚在网上阅读了有关 ASP.NET 中新发现的安全漏洞的信息。您可以在此处阅读详细信息。
问题在于 ASP.NET 实现 AES 加密算法以保护这些应用程序在用户会话期间存储信息而生成的 cookie 的完整性的方式。
这有点模糊,但这里有一个更可怕的部分:
攻击的第一阶段需要几千个请求,但一旦成功并且攻击者获得了密钥,它就完全是隐秘的。所需的密码知识非常基础。
总而言之,我对安全/密码学主题不够熟悉,不知道这是否真的那么严重。
那么,所有 ASP.NET 开发人员是否应该害怕这种 可以在几秒钟内拥有任何 ASP.NET 网站的 技术呢?
这个问题对普通的 ASP.NET 开发人员有何影响?它对我们有影响吗?在现实生活中,这个漏洞的后果是什么?最后:是否有一些解决方法可以防止此漏洞?
感谢您的回答!
所以,这基本上是一种“填充预言”类型的攻击。@Sri很好地解释了这种攻击的含义。
了解填充 Oracle 攻击
让我们假设您的应用程序接受加密字符串作为参数——参数是 cookie、url 参数还是其他无关紧要的东西。当应用程序尝试对其进行解码时,有 3 种可能的结果 -
为了使 Padding Oracle 攻击成功,攻击者必须能够发出数千个请求,并且必须能够将响应分类为上述 3 个桶之一而不会出错。
如果满足这两个条件,攻击者最终可以解密消息,然后用他想要的任何方式重新加密。这只是时间问题。
可以做些什么来预防它?
关于这个漏洞的严重性:是的,确实很严重。 它让攻击者能够了解应用程序的机器密钥。 因此,他可以做一些 非常 不受欢迎的事情。
这是我得到的一堆好的做法, 它们并 不能解决问题,但有助于提高 Web 应用程序的一般安全性。
现在,让我们专注于这个问题。
解决方案
Application_Error
Error.aspx
其他一些想法
感谢所有回答我问题的人。我不仅学到了很多关于这个问题的知识,而且学到了很多关于网络安全的知识。我将@Mikael 的答案标记为已接受,但其他答案也非常有用。
[2010-09-29更新]
微软安全公告
参考修复的知识库文章
ScottGu有下载链接
[2010-09-25更新]
在我们等待修复的同时,昨天ScottGu 发布了关于如何添加额外步骤以使用自定义 URLScan 规则保护您的站点的更新。
基本上确保您提供自定义错误页面,以便攻击者不会暴露于内部 .Net 错误,无论如何在发布/生产模式下您都应该这样做。
此外,在错误页面中添加随机时间睡眠,以防止攻击者对添加的攻击信息的响应进行计时。
在 web.config
<configuration> <location allowOverride="false"> <system.web> <customErrors mode="On" defaultRedirect="~/error.html" /> </system.web> </location> </configuration>
这会将任何错误重定向到返回 200 状态代码的自定义页面。这样,攻击者就无法查看错误代码或错误信息以获取进一步攻击所需的信息。
设置 也是安全的customErrors mode="RemoteOnly",因为这将重定向“真实”客户端。只有从 localhost 浏览才会显示内部 .Net 错误。
customErrors mode="RemoteOnly"
重要的部分是确保所有错误都配置为返回相同的错误页面。这要求您明确设置该部分的defaultRedirect属性<customErrors>并确保未设置每个状态代码。
defaultRedirect
<customErrors>
如果攻击者设法使用上述漏洞,他/她可以从您的 Web 应用程序中下载内部文件。通常 web.config 是一个目标,并且可能包含敏感信息,例如数据库连接字符串中的登录信息,甚至链接到您不希望有人掌握的自动 sql-express 数据库。但是,如果您遵循最佳实践,您可以使用受保护的配置来加密 web.config 中的所有敏感数据。
在http://www.microsoft.com/technet/security/advisory/2416728.mspx上阅读 Microsoft 关于该漏洞的官方评论。特别是有关此问题的实施细节的“解决方法”部分。
还有一些关于ScottGu博客的信息,包括在您的 Web 服务器上查找易受攻击的 ASP.Net 应用程序的脚本。
文章评论:
Rizzo 和 Duong 对 ASP.NET 应用程序实施的攻击要求网站上的加密实施有一个预言机,当发送密文时,它不仅会解密文本,还会 向发送者发送一条消息,说明密文中是否有填充是有效的 。 如果填充无效,发件人收到的错误消息将为他提供有关站点解密过程工作方式的一些信息。
Rizzo 和 Duong 对 ASP.NET 应用程序实施的攻击要求网站上的加密实施有一个预言机,当发送密文时,它不仅会解密文本,还会 向发送者发送一条消息,说明密文中是否有填充是有效的 。
如果填充无效,发件人收到的错误消息将为他提供有关站点解密过程工作方式的一些信息。
为了使攻击起作用,必须满足以下条件:
因此,如果您在应用程序中返回人类可读的错误消息,例如 “出现问题,请重试”, 那么您应该是非常安全的。阅读一些关于文章的评论也可以提供有价值的信息。
这样,被劫持的 cookie 只能用于检索很可能不再存在或失效的会话。
看看 Ekoparty 会议上实际展示的内容会很有趣,但现在我不太担心这个漏洞。