问题标签 [padding-oracle-attack]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
10 回答
21114 浏览

asp.net - 这个新的 ASP.NET 安全漏洞有多严重,我该如何解决?

我刚刚在网上阅读了有关 ASP.NET 中新发现的安全漏洞的信息。您可以在此处阅读详细信息。

问题在于 ASP.NET 实现 AES 加密算法的方式来保护这些应用程序生成的 cookie 的完整性,以便在用户会话期间存储信息。

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

攻击的第一阶段需要几千个请求,但一旦成功并且攻击者获得了密钥,它就完全是隐秘的。所需的密码知识非常基础。

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

那么,所有 ASP.NET 开发人员是否应该害怕这种可以在几秒钟内拥有任何 ASP.NET 网站的技术呢?

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

感谢您的回答!


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

所以,这基本上是一种“填充预言”类型的攻击。@Sri很好地解释了这种攻击的含义。这是一个关于这个问题的令人震惊的视频!

关于这个漏洞的严重性:是的,确实很严重。它让攻击者能够了解应用程序的机器密钥。因此,他可以做一些非常不受欢迎的事情。

  • 在拥有应用程序的机器密钥后,攻击者可以解密身份验证 cookie。
  • 更糟糕的是,他可以使用任何用户的名称生成身份验证 cookie 。因此,他可以在网站上以任何人的身份出现。该应用程序无法区分您还是为自己生成了带有您的姓名的身份验证 cookie 的黑客。
  • 它还允许他解密(并生成)会话 cookie,尽管这不像前一个那样危险。
  • 没那么严重:他可以解密页面的加密 ViewState。(如果您使用 ViewState 来存储机密数据,则无论如何都不应该这样做!)
  • 非常出乎意料:通过机器密钥的知识,攻击者可以从您的 Web 应用程序中下载任意文件,甚至是那些通常无法下载的文件!(包括Web.Config等)

这是我得到的一堆好的做法,它们并不能解决问题,但有助于提高 Web 应用程序的一般安全性。

现在,让我们专注于这个问题。

解决方案

  • 启用 customErrors 并创建一个将所有错误重定向到的错误页面。是的,甚至是 404s。(ScottGu 说区分 404s 和 500s 对于这种攻击是必不可少的。)另外,在你的Application_Error或者Error.aspx放入一些随机延迟的代码。(生成一个随机数,并使用 Thread.Sleep 休眠那么长时间。)这将使攻击者无法确定您的服务器上究竟发生了什么。
  • 有些人建议切换回 3DES。理论上,如果不使用 AES,就不会遇到 AES 实现中的安全漏洞。事实证明,这根本不推荐

其他一些想法

感谢所有回答我问题的人。我不仅学到了很多关于这个问题的知识,而且学到了很多关于网络安全的知识。我将@Mikael 的答案标记为已接受,但其他答案也非常有用。

0 投票
6 回答
3831 浏览

asp.net - Oracle 填充漏洞利用 - 它如何下载 web.config?

我知道关于 oracle padding 漏洞已经有一些关于 SO 的问题,但没有一个解释它是如何下载 web.config 的。我运行了几个 ASP .NET 应用程序,我已经使用 Microsoft 推荐的缓解因素对其进行了测试,但我仍然担心人们将能够获得 web.config。

有人可以解释他们是如何做到这一点的,甚至可以提供一个我可以用来测试我的网站的工具的链接。我发现官方对这部分攻击的解释真的很缺乏。

公开展示的攻击依赖于 ASP.NET 中的一项功能,该功能允许下载文件(通常是 javascript 和 css),并使用作为请求的一部分发送的密钥进行保护。不幸的是,如果您能够伪造密钥,您可以使用此功能下载应用程序的 web.config 文件(但不能下载应用程序之外的文件)。

0 投票
1 回答
2083 浏览

asp.net - Thread.Sleep 在 aspx 错误页面中。为什么?

这个关于 oracle padding 漏洞的公告中,微软发布了以下推荐的错误页面:

0-255之间的Thread.Sleep某个值是什么?我不希望我的服务器线程最多占用四分之一秒。

0 投票
2 回答
2009 浏览

asp.net - 易受 Padding Oracle 攻击的 asp.net 应用程序示例?

有谁可以给​​我一个非常基本的 asp.net Web 应用程序示例,该应用程序易受填充 oracle 攻击。

0 投票
1 回答
1075 浏览

encryption - 如果数据是流式传输的或对于 HMAC 来说太大,是否防止“填充预言机”攻击?

我知道针对填充预言攻击的最佳解决方案是将 HMAC 包装并附加到完整的加密消息中。但是还有哪些其他解决方案?如果我的数据太大而需要流式传输怎么办?我可以在最后检查 HMAC,但我不能加载整个文件两次并先检查 HMAC,然后将其流式传输并解密给用户?

有不同的方法吗?

如果我使用 AES_CBC(zlib(data)),攻击者也可以进行填充 oracle 攻击吗?如果压缩后的数据最终出现乱码,zlib 将发出错误。攻击者也可以使用 zlib 的错误来获取一点信息吗?

0 投票
2 回答
1199 浏览

asp.net - 使用PadBuster填充oracle时未找到加密样本

虽然 PadBuster 是一个很好的填充 oracle 工具,但是当我尝试解密 asp.net 应用程序中的视图状态或 cookie 时,它​​都告诉我没有找到加密的样本。

我使用它时可能会出现问题,但是没有太多信息可以告诉我如何使用它。

有没有人有使用padbuster的经验?

你能给我看看吗?

0 投票
3 回答
537 浏览

asp.net - 总是 200 OK 响应是否可能填充 Oracle 攻击

我目前正在执行 ASP.NET 应用程序的渗透测试,并试图利用 Padding Oracle Attack。此 AFAIK 是基于响应代码分析,但被测系统的 ScriptResource 和 WebResource axds 始终以 200 OK 响应,即使密码已无效。但是,在这种情况下,响应的内容是一个空字符串。

在这种情况下,是否可以使用任何 axd 作为预言机?也许基于响应内容的差异。

0 投票
2 回答
2333 浏览

asp.net - 它是否容易受到 ASP Padding oracle 的攻击

  1. 当我打开 chat.mysite.com/WebResource.axd?d=jzjghMVYzFihd9Uhe_arpA2 它给我:填充无效,无法删除。

  2. 当我打开 chat.mysite.com/WebResource.axd?d=acunetix 它给了我:无效的视图状态。

  3. 当我打开 chat.mysite.com/WebResource.axd?d= 它给我:找不到资源。

但是,当我打开其中任何一个 /WebResource.axd 到我的主站点 www.mysite.com 时,不会发生错误......

我的问题是,我的网站是否容易受到 padding oracle 的攻击,如果是,哪些数据会被盗?另一件事是,一旦我打开 www.mysite.com 的“查看源代码”,就没有 script=webresource.axd 之类的东西......我很困惑,如果攻击者想要控制网站,他能做什么?他将如何进行攻击?攻击者能否获得管理员权限?

0 投票
1 回答
522 浏览

.net - .NET 4.5 填充预言机漏洞

我们将 .NET 4.5.1 用于在 IIS7 上运行的项目。我们正在使用网络表单。ASP.NET 填充 Oracle 漏洞是否仍然适用?我找不到任何关于它的信息。

当我浏览到http://web.nvd.nist.gov/view/vuln/detail;jsessionid=7F988C81C28DD9C0C8348D1A4B1791D1?vulnId=CVE-2010-3332&cid=1 .NET Framework 4.5 未提及:“Microsoft .NET Framework 1.1 SP1 、2.0 SP1 和 SP2、3.5、3.5 SP1、3.5.1 和 4.0"

0 投票
1 回答
1530 浏览

python - 更改字符串的最后一个字节

我正在研究 Padding Oracle 攻击,其中涉及更改 IV 并将其与 HTML 发布请求一起发回。简单的版本是我正在尝试更改字符串的最后一个字节......我想我可能做错了。首先,我们从 Oracle 的 Raw IV 开始。

我们无法使用它,因此我们对其进行 base-64 解码。

这会将它变成我们屏幕上的垃圾(4XR�3�2��3��~),但现在它是我们可以使用的形式。现在我们想找出 IV 的最后一个字节,所以我们说

这给了我们“~”作为最后一个字节。现在事情变得疯狂了,我们想改变 IV 的最后一个字节,方法是用一个我们称之为 X 的数字对它进行异或运算。

然后我们对它进行base64编码并继续

当我检查 newIV 的长度时,它与原始原始 IV 的长度相同,但我只是觉得这里有些不对劲。我是不是通过 str(NewByte) 搞砸了?我觉得我应该以某种方式使用 bytearray 来执行此操作,但我对使用它们并没有足够的了解。我是否正确更改了最后一个字节?