编码员征服安全。分享与学习系列 - 填充Oracle

发表于2019年1月24日
案例研究

编码员征服安全。分享与学习系列 - 填充Oracle

发表于2019年1月24日
查看资源
查看资源

虽然Padding Oracle听起来像一个另类摇滚乐队的一个非常糟糕的名字,但它实际上是一个漏洞,可以被攻击者用来解密信息而不知道加密密钥。

就攻击者的整体难度而言,这一项接近于规模的顶端。我们谈论的不是一个神奇的解密按钮,而是一个费力的过程,黑客可以检查发给他们的关于单元格填充的错误信息,并利用这一点来确定加密数据的结束和填充的开始。然后,他们可以计算出加密中的各种比特,如果有足够的时间和输入来检查,就有可能破解它。

值得庆幸的是,有几个相对简单的步骤可以消除攻击者使用填充甲骨文来破译加密数据的能力。在这一集里,我们将学习。

  • 它是如何工作的
  • 为什么这个漏洞如此危险
  • 你如何能把防御措施放在适当的位置来防止它。

Padding Oracle是如何工作的?

密码区块链(CBC)是一种创建区块密码的方式,其中整个信息比特序列,如存储在数据库中的单元,使用适用于整个信息链的加密密钥进行加密。当使用CBC时,单一区块密码文本的加密将取决于所有的后续区块。在理论上,这使得加密非常强大,因为任何事情,甚至是区块的重新排序,都会破坏数据。

CBC密码(以及任何区块密码)的问题是,它们只能使用精确大小的区块进行加密。通常情况下,这是以8或16字节的大小进行的。那么,当CBC需要将2字节的数据装入16字节的密码文本单元时会发生什么?它将使用填充物,基本上就是一些无意义的字符,来填补空白,并使该单元具有适当的大小。

大多数填充方案都是众所周知的,PKCS#7是最流行的方案之一,所以攻击者可能知道正在使用什么样的填充。例如,如果CBC需要在一个区块中填充五个字符,PKCS#7会在纯文本之后使用重复五次的字节值0x05。

攻击者利用他们对CBC和填充方案的了解,向主机服务器发送查询,也被称为神谕。如果他们能够获得正确的工具,他们可能会强迫服务器告诉他们,如果他们的查询中的填充是不正确的。为了达到这个目的,他们可以对密码中的每个字节进行从0到255的循环,直到服务器告诉他们填充物是正确的。然后,他们转到下一个单元并重复这个过程,在每一种情况下记录填充的开始位置。

这并不能让他们解密信息,甚至不能让他们解密单元格,但可以让他们在纯文本结束和填充物开始的地方映射出链条上的每一个环节。他们还可能使用XOR计算来计算出原始明文的最后一个字节的值。

为什么填充Oracle如此危险?

黑客之所以会在破解加密方面投入如此多的工作,是因为潜在的报酬。很少有人对没有价值的东西进行加密。对主机组织的危险取决于被泄露的数据。这可能包括密码、用户账户、财务信息、信用卡号码、病人记录、敏感通信或任何数量的备受追捧和有价值的信息。

使用padding oracle也可能是后续攻击的网关。例如,如果一个攻击者可以使用填充神谕来窃取密码,那么提升他们的权限并深入到网络中去就是一个很容易的次要任务。

每个人都认为加密是防止窥探或破坏的最终防御手段。然而,加密科学和那些要破解它的人之间的反反复复已经持续了几个世纪。填充神谕只是让攻击者获得优势的一种方法。

给予填充的Oracle攻击一个硬着陆

值得庆幸的是,有相当多的方法可以防止padding oracle。最好的方法之一是使用更强的加密操作模式,如伽罗瓦/计数器模式(GCM)或偏移编码本模式(OCB)。它与CBC不同的是,它使用128位的密码块大小。它还为每个数据块使用一个计数器,然后使用该数字来创建密码文本。换句话说,它不容易受到填充神谕攻击的影响。

实施良好的错误处理控制也可以严重损害攻击者的成功机会。由于padding oracle攻击依赖于信息泄露,所以在加密/解密失败时,要返回通用的错误信息,而不是具体的padding错误。

你也可以实现消息验证码(MAC)。MAC值保护数据的完整性以及其真实性,它允许验证者使用秘密密钥检测消息内容的任何变化。

最后,所有的填充神谕攻击都需要重复查询。为了弄清一个单元的填充方案,可能会有超过200个请求,再乘以链中被保护的信息单元的数量。通过限制来自同一来源的请求的数量,你可以在攻击者真正开始尝试之前拒绝他们的访问,从而关闭填充神谕攻击。

关于Padding Oracle的进一步研究

任何攻击者可以解密敏感信息的方法都可能成为一个真正的噩梦。但是,我们希望你已经学会了相当多的好方法,以防止这种情况首先发生。

要进一步阅读,你可以看一下OWASP的定义和padding oracle上的检查表。你也可以用Secure Code Warrior 平台的免费演示来测试你新发现的防御知识,该平台培训网络安全团队成为终极网络战士。要了解更多关于击败这个漏洞以及其他威胁的流氓画廊,请访问Secure Code Warrior 博客。

你认为你现在就能完成挫败填充式甲骨文攻击的任务吗?在Secure Code Warrior 平台上试试吧。

查看资源
查看资源

作者

想要更多吗?

在博客上深入了解我们最新的安全编码见解。

我们广泛的资源库旨在增强人类对安全编码技术提升的方法。

查看博客
想要更多吗?

获取关于开发者驱动的安全的最新研究

我们广泛的资源库充满了有用的资源,从白皮书到网络研讨会,让你开始使用开发者驱动的安全编码。现在就去探索它。

资源中心

编码员征服安全。分享与学习系列 - 填充Oracle

发表于2019年1月24日
通过

虽然Padding Oracle听起来像一个另类摇滚乐队的一个非常糟糕的名字,但它实际上是一个漏洞,可以被攻击者用来解密信息而不知道加密密钥。

就攻击者的整体难度而言,这一项接近于规模的顶端。我们谈论的不是一个神奇的解密按钮,而是一个费力的过程,黑客可以检查发给他们的关于单元格填充的错误信息,并利用这一点来确定加密数据的结束和填充的开始。然后,他们可以计算出加密中的各种比特,如果有足够的时间和输入来检查,就有可能破解它。

值得庆幸的是,有几个相对简单的步骤可以消除攻击者使用填充甲骨文来破译加密数据的能力。在这一集里,我们将学习。

  • 它是如何工作的
  • 为什么这个漏洞如此危险
  • 你如何能把防御措施放在适当的位置来防止它。

Padding Oracle是如何工作的?

密码区块链(CBC)是一种创建区块密码的方式,其中整个信息比特序列,如存储在数据库中的单元,使用适用于整个信息链的加密密钥进行加密。当使用CBC时,单一区块密码文本的加密将取决于所有的后续区块。在理论上,这使得加密非常强大,因为任何事情,甚至是区块的重新排序,都会破坏数据。

CBC密码(以及任何区块密码)的问题是,它们只能使用精确大小的区块进行加密。通常情况下,这是以8或16字节的大小进行的。那么,当CBC需要将2字节的数据装入16字节的密码文本单元时会发生什么?它将使用填充物,基本上就是一些无意义的字符,来填补空白,并使该单元具有适当的大小。

大多数填充方案都是众所周知的,PKCS#7是最流行的方案之一,所以攻击者可能知道正在使用什么样的填充。例如,如果CBC需要在一个区块中填充五个字符,PKCS#7会在纯文本之后使用重复五次的字节值0x05。

攻击者利用他们对CBC和填充方案的了解,向主机服务器发送查询,也被称为神谕。如果他们能够获得正确的工具,他们可能会强迫服务器告诉他们,如果他们的查询中的填充是不正确的。为了达到这个目的,他们可以对密码中的每个字节进行从0到255的循环,直到服务器告诉他们填充物是正确的。然后,他们转到下一个单元并重复这个过程,在每一种情况下记录填充的开始位置。

这并不能让他们解密信息,甚至不能让他们解密单元格,但可以让他们在纯文本结束和填充物开始的地方映射出链条上的每一个环节。他们还可能使用XOR计算来计算出原始明文的最后一个字节的值。

为什么填充Oracle如此危险?

黑客之所以会在破解加密方面投入如此多的工作,是因为潜在的报酬。很少有人对没有价值的东西进行加密。对主机组织的危险取决于被泄露的数据。这可能包括密码、用户账户、财务信息、信用卡号码、病人记录、敏感通信或任何数量的备受追捧和有价值的信息。

使用padding oracle也可能是后续攻击的网关。例如,如果一个攻击者可以使用填充神谕来窃取密码,那么提升他们的权限并深入到网络中去就是一个很容易的次要任务。

每个人都认为加密是防止窥探或破坏的最终防御手段。然而,加密科学和那些要破解它的人之间的反反复复已经持续了几个世纪。填充神谕只是让攻击者获得优势的一种方法。

给予填充的Oracle攻击一个硬着陆

值得庆幸的是,有相当多的方法可以防止padding oracle。最好的方法之一是使用更强的加密操作模式,如伽罗瓦/计数器模式(GCM)或偏移编码本模式(OCB)。它与CBC不同的是,它使用128位的密码块大小。它还为每个数据块使用一个计数器,然后使用该数字来创建密码文本。换句话说,它不容易受到填充神谕攻击的影响。

实施良好的错误处理控制也可以严重损害攻击者的成功机会。由于padding oracle攻击依赖于信息泄露,所以在加密/解密失败时,要返回通用的错误信息,而不是具体的padding错误。

你也可以实现消息验证码(MAC)。MAC值保护数据的完整性以及其真实性,它允许验证者使用秘密密钥检测消息内容的任何变化。

最后,所有的填充神谕攻击都需要重复查询。为了弄清一个单元的填充方案,可能会有超过200个请求,再乘以链中被保护的信息单元的数量。通过限制来自同一来源的请求的数量,你可以在攻击者真正开始尝试之前拒绝他们的访问,从而关闭填充神谕攻击。

关于Padding Oracle的进一步研究

任何攻击者可以解密敏感信息的方法都可能成为一个真正的噩梦。但是,我们希望你已经学会了相当多的好方法,以防止这种情况首先发生。

要进一步阅读,你可以看一下OWASP的定义和padding oracle上的检查表。你也可以用Secure Code Warrior 平台的免费演示来测试你新发现的防御知识,该平台培训网络安全团队成为终极网络战士。要了解更多关于击败这个漏洞以及其他威胁的流氓画廊,请访问Secure Code Warrior 博客。

你认为你现在就能完成挫败填充式甲骨文攻击的任务吗?在Secure Code Warrior 平台上试试吧。

我们希望得到您的许可,向您发送有关我们产品和/或相关安全编码主题的信息。我们将始终以最谨慎的态度对待您的个人资料,绝不会将其出售给其他公司用于营销目的。

要提交表格,请启用 "分析 "cookies。完成后,请随时再次禁用它们。