我刚刚在网上读到一篇关于ASP中新发现的安全漏洞的文章.网You can read the details here.

问题在于

这有点含糊,但这里有一个更可怕的部分:

攻击的第一阶段需要 几千个请求,但一旦 如果成功,攻击者将获得 秘密 keys ,这完全是秘密的. 需要的密码知识是 非常基础.

总而言之,我对安全/密码主题还不够熟悉,不知道这是否真的那么严重.

那么,所有的ASP.NET开发人员都应该害怕这项技术吗?

此问题对普通ASP.NET开发人员有何影响?这对我们有影响吗? 在现实生活中,这种漏洞的后果是什么?最后:是否有一些解决方法可以防止此漏洞?

感谢您的回答!


编辑:让我总结一下我得到的回复

所以,这基本上是一种"填充甲骨文"类型的攻击.@Sri很好地解释了这种攻击的含义.Here is a shocking video about the issue!

关于这种脆弱性的严重性:是的,它确实很严重.It lets the attacker to get to know the machine key of an application.因此,他可以做大约very件不想要的事情.

  • 在应用程序的机器密钥中,攻击者可以解密身份验证cookie.
  • 更糟糕的是,他可以用任何用户的名字写generate authentication cookies.因此,他可以以任何人的身份出现在网站上.该应用程序无法区分您和为自己生成带有您名字的身份验证cookie的黑客.
  • 它还允许他解密(并生成)session cookies,尽管这并不像前一个那样危险.
  • 没那么严重:他可以解密页面的加密视图状态.(如果使用ViewState存储机密数据,无论如何都不应该这样做!)
  • Quite unexpected:在知道机器密钥的情况下,攻击者可以从您的web应用程序中删除任意文件,即使是那些通常无法下载的文件!(包括Web.Config等)

下面是我得到的一些优秀实践,它们don't个解决了这个问题,但有助于提高Web应用程序的总体安全性.

现在,让我们关注这个问题.

解决方案

  • 启用customErrors并创建all errors重定向到的单个错误页面.是的,even 404s.(ScottGu表示,区分404和500对这次攻击至关重要.)另外,在你的Application_ErrorError.aspx中加入一些随机延迟的代码.(生成一个随机数,然后使用Thread.SeptHibernate 这么长时间.)这将使攻击者无法确定您的服务器上到底发生了什么.
  • 有人建议改用3DES.从理论上讲,如果不使用AES,就不会遇到AES实现中的安全弱点.结果是,这是not recommended at all美元.

还有其他一些 idea

  • 似乎noteveryone认为解决办法已经足够好了.

感谢所有回答我问题的人.我不仅学到了这个问题,还学到了网络安全的一般知识.我将@Mikael的答案标记为已接受,但其他答案也非常有用.

推荐答案

我该怎么保护自己?

[Update 2010-09-29]

Microsoft security bulletin

KB Article with reference to the fix

ScottGu有下载链接

[Update 2010-09-25]

在我们等待修复的同时,昨天ScottGu postet an update介绍了如何通过自定义URLScan规则添加额外的步骤来保护您的站点.


Basically make sure you provide a custom error page so that an attacker is not exposed to internal .Net errors, which you always should anyways in release/production mode.

此外,在错误页面中添加一个随机时间睡眠,以防止攻击者获得额外的攻击信息.

在网上.配置

<configuration>
 <location allowOverride="false">
   <system.web>
     <customErrors mode="On" defaultRedirect="~/error.html" />
   </system.web>
 </location>
</configuration>

这会将任何错误重定向到一个带有200状态代码的自定义页面.这样,攻击者就无法查看错误代码或错误信息,以获取进一步攻击所需的信息.

设置customErrors mode="RemoteOnly"也是安全的,因为这将重定向"真实"客户端.只有从localhost浏览才会显示内部.净错误.

重要的一点是确保所有错误都被配置为返回相同的错误页面.这需要在<customErrors>部分显式设置defaultRedirect属性,并确保未设置每个状态代码.

这关系到什么?

如果攻击者成功利用上述漏洞,他/她可以从您的web应用程序中下载内部文件.通常是网络.config是一个目标,可能包含敏感信息,例如数据库连接字符串中的登录信息,甚至是指向自动安装的sql express数据库的链接,而您不希望有人获取该数据库.但如果你遵循最佳实践,你可以使用Protected Configuration来加密你网站上的所有敏感数据.配置.

参考链接

阅读微软官方关于http://www.microsoft.com/technet/security/advisory/2416728.mspx漏洞的 comments .具体来说,是关于这个问题的实施细节的"变通"部分.

还有一些关于ScottGu's博客的信息,包括一个script来寻找易受攻击的ASP.Net应用在您的web服务器上.

有关"理解甲骨文攻击"的解释,请阅读@sri's answer.


对文章的 comments :

Rizzo和Duong对ASP实施的攻击.NET应用程序要求加密

如果填充无效,发送者收到的错误消息将向他提供有关站点解密过程工作方式的一些信息.

为了使攻击有效,必须满足以下条件:

  • 您的应用程序必须提供有关填充无效的错误消息.
  • 必须有人篡改你加密的cookie或viewstate

所以,如果你在应用程序中返回人类可读的错误消息,比如"Something went wrong, please try again"条,那么你应该非常安全.阅读一些关于这篇文章的 comments 也能提供有价值的信息.

  • 在加密的cookie中存储会话id
  • 以会话状态存储真实数据(持久化在数据库中)
  • 当用户信息出错时,在返回错误之前添加随机等待,因此无法计时

这样,被劫持的cookie只能用于检索最有可能不再存在或无效的会话.

看看Ekoparty会议上实际呈现的内容会很有趣,但现在我并不太担心这个漏洞.

Asp.net相关问答推荐

IIS Request.UserHostAddress 返回 IPV6 (::1),即使禁用了 IPV6

使用 Owin 身份验证的服务器端声明缓存

如何使图像的一部分成为可点击的链接

Web Api 请求内容在操作过滤器中为空

使用 JavaScript 禁用 ASP.NET 验证器

Devexpress 或 Telerik Controls 比较

在 Asp.net mvc5 中使用用户名而不是邮箱作为身份

Razor 主机工厂错误

无法复制文件.访问路径被拒绝

会话变量保存在哪里?

用于验证的数据注释,至少一个必填字段?

在 Android/Java 和 C# 中计算 SHA256 哈希

缩小 ASP.Net MVC 应用程序的 HTML 输出

asp.net 网站上的第一页加载缓慢

远程计算机无法连接到 Visual Studio Web 服务器

在后面的代码中删除 css 类

通过 CultureInfo 格式化字符串

将字符串转换为时间

RegisterStartupScript 不适用于 ScriptManager、Updatepanel.这是为什么?

Unity 中的单例每个调用上下文(Web 请求)