Padding Oracle 漏洞影响 JSF、Ruby on Rails 及 ASP.NET

  • Abel Avram
  • 赵劼

2010 年 10 月 20 日

话题:Java.NETRuby安全语言 & 开发架构

恶意用户能够使用 Padding Oracle(PO)攻击方式来解密 cookie,加密状态及认证密码等关键信息。据 Juliano Rizzo 和 Thai Duong 所说,这个安全漏洞影响 JavaServer Faces、Ruby on Rails、ASP.NET 及其他一些技术及平台。

在瑞士联邦理工大学(Swiss Federal Institute of Technologies,EPFL)领导安全及密码实验室(Security and Cryptography Laboratory,LASEC)的 Serge Vaudenay 教授,于 2002 年发表了一篇名为“由于使用 CBC 填充而引入至 SSL、IPSEC、WTLS 的安全漏洞(Security Flaw Induced by CBC Padding Applications to SSL, IPSEC, WTLS)”(PDF)的论文。其中谈到,为加密变长数据而使用的几种填充方式会导致严重的安全漏洞。

根据 RFC 2040 算法,在对变长数据的加密形式进行解密的时候,解密程序需要判断数据的填充(Padding)情况是否正确,如果填充正确,则将其去除,但是 RFC 2040 并没有指明如果填充出现错误的时候该如何提供反馈。Vaudenay 总结到:

尽管解密程序不该告诉调用方填充错误,但是提供一些解密过程中的信息还是有意义的。

不过这也使得攻击方可以得到一些提示(Oracle):哪些由上述算法(RFC 2040)所解密的数据可以得到正确的填充序列。使用这种方式解密一条信息的复杂度是 O(NbW),其中 W 是可能值的数量(通常 W = 256)。

据 Vaudenay 所说,这个漏洞能够影响 SSL、IPSEC、WTLS、SSH 等多种协议,攻击者有可能在不知道密钥的情况下破解密文。他演示了攻击方式,并给出了几种修补建议。

在 Vaudenay 这篇论文的基础上,两位专注于安全方面的软件工程师 Julinao Rizzo 和 Thai Duong,于 2010 年 5 月 25 日发表了一篇新论文“Padding Oracle 攻击实战(Practical Padding Oracle Attacks)”(PDF)。作者声称 Padding Oracle(PO)漏洞在一些包括 JavaServer Faces(JSF)、Ruby on Rails 及 OWASEP ESAPI 等广泛运用的技术内都有体现。他们还编写并发布了一款名为POET(Padding Oracle Exploitation Tool)的工具,可以检测出一个 JSF 站点是否会遭受 PO 攻击。

Rizzo 和 Duong 在 9 月 17 号举办的ekoparty 安全会议上发表了这篇论文,表明 ASP.NET 及 SharePoint 应用程序同样无法抵抗 PO 攻击,但他们并没有发布 ASP.NET 版本的 POET。他们提到,恶意用户使用 PO 攻击可以“解密 cookie、视图状态、表单验证数据、账号密码、用户数据以及其他任何使用框架 API 所加密的数据”。对这个问题的主要反馈来自微软,包括微软联合副总裁 Scott Guthrie 在内,他的一个团队立即开始争分夺秒地开发补丁程序。10 天后微软发布了一个计划外的安全更新,面向全部.NET 版本,这次更新也出现在 Windows Update 中。微软的这种强烈回应也证实了这个威胁有多么严重,这也为其他可能包含漏洞的网站敲响了警钟。

针对 Padding Oracle、POET 及 ASP.NET,InfoQ与 Juliano Rizzo 进行了交谈。

InfoQ:除了 JSF、Ruby on Rails 及 ASP.NET 以外,你们还发现哪些平台存在这个漏洞呢?

JR:我们还没有深入研究其他平台,但我们肯定,还有更多平台、网站及应用程序存在同样的漏洞。

InfoQ:POET 是什么?

JR:现在的 POET 是五个月前发布的版本,它证明了 JSF 中存在的问题,未来我们也会发布一个更加广泛的版本。我们也有打算写一篇论文来阐述 ASP.NET 漏洞的详细情况。在 Blackhat Europe 2010 之后我们发布了 POET 和 JSF 测试站点,这个工具可以用来检查漏洞,但不会自动获取系统的访问权限(演示)。

InfoQ:既然 JSF、Ruby on Rails 同样包含这个漏洞,它们为什么没有像 ASP.NET 那样引起强烈反响?

JR:ASP.NET 比 JSF 和 Ruby on Rails 要流行的多,互联网上有大约 25% 的网站使用 ASP.NET。

InfoQ:如何验证一个平台是否存在这种漏洞?

JR:审查代码或是黑盒测试都能检查应用程序是否包含漏洞。目前还没有检查这个问题的工具或是通用方法。

InfoQ:您能否为平台构建方,或是网站管理员给出一些建议,让他们确保不会遭受 Padding Oracle 攻击?

JR:首先,将加密数据传递到 Web 客户端一般都没有十分必要的理由,开发人员可以尽可能选择其他的解决方案。如果加密数据必须发送至客户端,则必须保护密文的完整性,避免如 Padding Oracle 那样通过修改密文所发起的攻击。

相关资源:重要消息:ASP.NET 安全漏洞关于 ASP.NET 安全漏洞的常见问题有关 ASP.NET 漏洞的消息更新ASP.NET 安全更新于 9 月 28 日(周二)发布ASP.NET 安全更新现已发布ASP.NET 安全补丁已通过 Windows Update 发布微软安全公告 MS10-070 – 重要安全建议 2416728(ASP.NET 中的漏洞)及 SharePoint关于 ASP.NET Padding Oracle 漏洞及 POET 攻击的更多内容

译注:国内社区也对此次 ASP.NET 平台上的 Padding Oracle 漏洞有所关注,如就职于盛大创新院的赵劼便发表了“浅谈这次 ASP.NET 的 Padding Oracle Attack 相关内容”一文对此次事件进行了简要的分析,并翻译了“Padding Oracle Attack 实例分析”阐述 Padding Oracle 攻击的具体实现原理。

查看英文原文:Padding Oracle Affects JSF, Ruby on Rails, ASP.NET

Java.NETRuby安全语言 & 开发架构