问题标签 [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.
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 应用程序的一般安全性。
- 您可以使用受保护的配置加密敏感数据
- 仅使用 HTTP cookie
- 防止 DoS 攻击
现在,让我们专注于这个问题。
- Scott Guthrie 在他的博客上发表了一篇关于它的文章
- ScottGu 关于该漏洞的常见问题解答博客文章
- ScottGu 关于漏洞的更新
- 微软有一个关于它的安全建议
- 了解漏洞
- 有关漏洞的其他信息
解决方案
- 启用 customErrors 并创建一个将所有错误重定向到的错误页面。是的,甚至是 404s。(ScottGu 说区分 404s 和 500s 对于这种攻击是必不可少的。)另外,在你的
Application_Error
或者Error.aspx
放入一些随机延迟的代码。(生成一个随机数,并使用 Thread.Sleep 休眠那么长时间。)这将使攻击者无法确定您的服务器上究竟发生了什么。 - 有些人建议切换回 3DES。理论上,如果不使用 AES,就不会遇到 AES 实现中的安全漏洞。事实证明,这根本不推荐。
其他一些想法
感谢所有回答我问题的人。我不仅学到了很多关于这个问题的知识,而且学到了很多关于网络安全的知识。我将@Mikael 的答案标记为已接受,但其他答案也非常有用。
asp.net - Oracle 填充漏洞利用 - 它如何下载 web.config?
我知道关于 oracle padding 漏洞已经有一些关于 SO 的问题,但没有一个解释它是如何下载 web.config 的。我运行了几个 ASP .NET 应用程序,我已经使用 Microsoft 推荐的缓解因素对其进行了测试,但我仍然担心人们将能够获得 web.config。
有人可以解释他们是如何做到这一点的,甚至可以提供一个我可以用来测试我的网站的工具的链接。我发现官方对这部分攻击的解释真的很缺乏。
公开展示的攻击依赖于 ASP.NET 中的一项功能,该功能允许下载文件(通常是 javascript 和 css),并使用作为请求的一部分发送的密钥进行保护。不幸的是,如果您能够伪造密钥,您可以使用此功能下载应用程序的 web.config 文件(但不能下载应用程序之外的文件)。
asp.net - Thread.Sleep 在 aspx 错误页面中。为什么?
在这个关于 oracle padding 漏洞的公告中,微软发布了以下推荐的错误页面:
0-255之间的Thread.Sleep
某个值是什么?我不希望我的服务器线程最多占用四分之一秒。
asp.net - 易受 Padding Oracle 攻击的 asp.net 应用程序示例?
有谁可以给我一个非常基本的 asp.net Web 应用程序示例,该应用程序易受填充 oracle 攻击。
encryption - 如果数据是流式传输的或对于 HMAC 来说太大,是否防止“填充预言机”攻击?
我知道针对填充预言攻击的最佳解决方案是将 HMAC 包装并附加到完整的加密消息中。但是还有哪些其他解决方案?如果我的数据太大而需要流式传输怎么办?我可以在最后检查 HMAC,但我不能加载整个文件两次并先检查 HMAC,然后将其流式传输并解密给用户?
有不同的方法吗?
如果我使用 AES_CBC(zlib(data)),攻击者也可以进行填充 oracle 攻击吗?如果压缩后的数据最终出现乱码,zlib 将发出错误。攻击者也可以使用 zlib 的错误来获取一点信息吗?
asp.net - 使用PadBuster填充oracle时未找到加密样本
虽然 PadBuster 是一个很好的填充 oracle 工具,但是当我尝试解密 asp.net 应用程序中的视图状态或 cookie 时,它都告诉我没有找到加密的样本。
我使用它时可能会出现问题,但是没有太多信息可以告诉我如何使用它。
有没有人有使用padbuster的经验?
你能给我看看吗?
asp.net - 总是 200 OK 响应是否可能填充 Oracle 攻击
我目前正在执行 ASP.NET 应用程序的渗透测试,并试图利用 Padding Oracle Attack。此 AFAIK 是基于响应代码分析,但被测系统的 ScriptResource 和 WebResource axds 始终以 200 OK 响应,即使密码已无效。但是,在这种情况下,响应的内容是一个空字符串。
在这种情况下,是否可以使用任何 axd 作为预言机?也许基于响应内容的差异。
asp.net - 它是否容易受到 ASP Padding oracle 的攻击
当我打开 chat.mysite.com/WebResource.axd?d=jzjghMVYzFihd9Uhe_arpA2 它给我:填充无效,无法删除。
当我打开 chat.mysite.com/WebResource.axd?d=acunetix 它给了我:无效的视图状态。
当我打开 chat.mysite.com/WebResource.axd?d= 它给我:找不到资源。
但是,当我打开其中任何一个 /WebResource.axd 到我的主站点 www.mysite.com 时,不会发生错误......
我的问题是,我的网站是否容易受到 padding oracle 的攻击,如果是,哪些数据会被盗?另一件事是,一旦我打开 www.mysite.com 的“查看源代码”,就没有 script=webresource.axd 之类的东西......我很困惑,如果攻击者想要控制网站,他能做什么?他将如何进行攻击?攻击者能否获得管理员权限?
.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"
python - 更改字符串的最后一个字节
我正在研究 Padding Oracle 攻击,其中涉及更改 IV 并将其与 HTML 发布请求一起发回。简单的版本是我正在尝试更改字符串的最后一个字节......我想我可能做错了。首先,我们从 Oracle 的 Raw IV 开始。
我们无法使用它,因此我们对其进行 base-64 解码。
这会将它变成我们屏幕上的垃圾(4XR�3�2��3��~),但现在它是我们可以使用的形式。现在我们想找出 IV 的最后一个字节,所以我们说
这给了我们“~”作为最后一个字节。现在事情变得疯狂了,我们想改变 IV 的最后一个字节,方法是用一个我们称之为 X 的数字对它进行异或运算。
然后我们对它进行base64编码并继续
当我检查 newIV 的长度时,它与原始原始 IV 的长度相同,但我只是觉得这里有些不对劲。我是不是通过 str(NewByte) 搞砸了?我觉得我应该以某种方式使用 bytearray 来执行此操作,但我对使用它们并没有足够的了解。我是否正确更改了最后一个字节?