SCW Icons
hero bg no divider
Blog

程序员征服安全:分享与学习系列-Padding Oracle

Published Jan 24, 2019
Last updated on Mar 09, 2026

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

就攻击者的总体难度而言,这个难度接近顶峰。我们谈论的不是神奇的解密按钮,而是一个艰苦的过程,黑客可以在其中检查发送给他们的有关单元格填充的错误消息,并用它来确定加密数据的结束位置和填充的起点。然后,他们可以找出加密中的各种位,如果有足够的时间和输入进行检查,他们就有可能破解它。

值得庆幸的是,有几个相对简单的步骤可以消除攻击者使用填充预言机解密加密数据的能力。在本集中,我们将学习:

  • 它是如何运作的
  • 为什么这个漏洞如此危险
  • 如何设置防御措施来防止这种情况发生。

Padding Oracle 是如何工作的?

密码区块链 (CBC) 是一种创建分组密码的方法,其中使用适用于整个信息链的加密密钥对整个信息序列(例如存储在数据库中的单元)进行加密。使用 CBC 时,单个密文块的加密将取决于所有后续区块。从理论上讲,这使得加密变得非常强大,因为任何东西,即使是区块的重新排序,都会损坏数据。

CBC 密码(以及任何分组密码,就此而言)的问题在于,它们只能使用大小精确的区块进行加密。通常,这是以 8 或 16 字节的大小完成的。那么,当CBC需要将2字节的数据放入一个16字节的密文单元中时会发生什么?它将使用填充,基本上只是胡说八道的字符,来填补空白,使单位大小合适。

大多数填充方案都是众所周知的,其中 PKCS #7 是最受欢迎的方案之一,因此攻击者可能知道正在使用哪种填充。例如,如果 CBC 需要在一个块中填充五个字符,PKCS #7 将使用在纯文本之后重复五次的字节值 0x05。

攻击者利用他们对CBC和填充方案的了解向主机服务器(也称为预言机)发送查询。如果他们可以使用正确的工具,他们可以强制服务器告诉他们查询中的填充是否不正确。为此,他们可以将密码中的每个字节从零循环到255,直到服务器告诉他们填充是正确的。然后,他们转到下一个单元并重复该过程,记录每种情况下填充的起始位置。

这不允许他们解密消息甚至单元,但可以让他们根据纯文本的结束位置和填充的起点来映射链中的每个链接。他们还可以使用异或计算来计算原始纯文本最后一个字节的值。

为什么 Padding Oracle 如此危险?

黑客之所以会投入这么多精力来破解加密,是因为潜在的回报。很少有人加密不值钱的东西。东道组织面临的危险取决于被泄露的数据。这可能包括密码、用户账户、财务信息、信用卡号、患者记录、敏感通信或任意数量的备受追捧和有价值的信息。

使用 padding oracle 也可以成为后续攻击的门户。例如,如果攻击者可以使用 padding oracle 窃取密码,那么提升他们的权限并更深入地渗透到网络中就是一项简单的次要任务。

每个人都认为加密是抵御窥探或入侵的终极防御。但是,加密科学与可能打破加密科学的科学之间的来回交流已经持续了几个世纪。Padding oracle 只是让攻击者占据优势的一种方法。

让 Padding Oracle 攻击实现硬着陆

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

实施良好的错误处理控制也会严重损害攻击者的成功机会。由于填充预言机攻击依赖于信息泄露,因此在加密/解密失败时返回通用错误消息,而不是特定的填充错误。

您还可以实现消息身份验证码 (MAC)。MAC 值允许验证者使用密钥检测消息内容的任何更改,从而保护数据的完整性及其真实性。

最后,所有填充预言机攻击都需要重复查询。可以发出 200 多个请求,要求计算出单个单元的填充方案,乘以链中受保护的信息单元的数量。通过限制来自同一来源的请求数量,你可以在攻击者真正开始尝试之前拒绝他们访问,从而关闭填充预言机攻击。

关于 Padding Oracle 的进一步研究

攻击者可以解密敏感信息的任何方法都可能成为一场真正的噩梦。但是,我们希望你从一开始就学到了很多防止这种情况发生的好方法。

要进一步阅读,你可以看看 OWASP 定义和清单 在 padding oracle 上。你还可以使用以下方法来测试你新获得的防御知识 免费演示 Secure Code Warrior 平台,该平台培训网络安全团队成为终极网络战士。要了解有关克服此漏洞以及其他恶棍威胁的更多信息,请访问 安全代码勇士博客

你认为你现在能胜任阻止 padding oracle 攻击的任务吗?在 Secure Code Warrior 平台上试一试:

查看资源
查看资源

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

对更多感兴趣?

learn more

Secure Code Warrior可以帮助您的组织在整个软件开发生命周期中保护代码,并营造一种将网络安全放在首位的文化。无论您是 AppSec 经理、开发人员、首席信息安全官还是任何与安全相关的人,我们都可以帮助您的组织降低与不安全代码相关的风险。

预订演示
分享到:
linkedin brandsSocialx logo
作者
Published Jan 24, 2019

分享到:
linkedin brandsSocialx logo

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

就攻击者的总体难度而言,这个难度接近顶峰。我们谈论的不是神奇的解密按钮,而是一个艰苦的过程,黑客可以在其中检查发送给他们的有关单元格填充的错误消息,并用它来确定加密数据的结束位置和填充的起点。然后,他们可以找出加密中的各种位,如果有足够的时间和输入进行检查,他们就有可能破解它。

值得庆幸的是,有几个相对简单的步骤可以消除攻击者使用填充预言机解密加密数据的能力。在本集中,我们将学习:

  • 它是如何运作的
  • 为什么这个漏洞如此危险
  • 如何设置防御措施来防止这种情况发生。

Padding Oracle 是如何工作的?

密码区块链 (CBC) 是一种创建分组密码的方法,其中使用适用于整个信息链的加密密钥对整个信息序列(例如存储在数据库中的单元)进行加密。使用 CBC 时,单个密文块的加密将取决于所有后续区块。从理论上讲,这使得加密变得非常强大,因为任何东西,即使是区块的重新排序,都会损坏数据。

CBC 密码(以及任何分组密码,就此而言)的问题在于,它们只能使用大小精确的区块进行加密。通常,这是以 8 或 16 字节的大小完成的。那么,当CBC需要将2字节的数据放入一个16字节的密文单元中时会发生什么?它将使用填充,基本上只是胡说八道的字符,来填补空白,使单位大小合适。

大多数填充方案都是众所周知的,其中 PKCS #7 是最受欢迎的方案之一,因此攻击者可能知道正在使用哪种填充。例如,如果 CBC 需要在一个块中填充五个字符,PKCS #7 将使用在纯文本之后重复五次的字节值 0x05。

攻击者利用他们对CBC和填充方案的了解向主机服务器(也称为预言机)发送查询。如果他们可以使用正确的工具,他们可以强制服务器告诉他们查询中的填充是否不正确。为此,他们可以将密码中的每个字节从零循环到255,直到服务器告诉他们填充是正确的。然后,他们转到下一个单元并重复该过程,记录每种情况下填充的起始位置。

这不允许他们解密消息甚至单元,但可以让他们根据纯文本的结束位置和填充的起点来映射链中的每个链接。他们还可以使用异或计算来计算原始纯文本最后一个字节的值。

为什么 Padding Oracle 如此危险?

黑客之所以会投入这么多精力来破解加密,是因为潜在的回报。很少有人加密不值钱的东西。东道组织面临的危险取决于被泄露的数据。这可能包括密码、用户账户、财务信息、信用卡号、患者记录、敏感通信或任意数量的备受追捧和有价值的信息。

使用 padding oracle 也可以成为后续攻击的门户。例如,如果攻击者可以使用 padding oracle 窃取密码,那么提升他们的权限并更深入地渗透到网络中就是一项简单的次要任务。

每个人都认为加密是抵御窥探或入侵的终极防御。但是,加密科学与可能打破加密科学的科学之间的来回交流已经持续了几个世纪。Padding oracle 只是让攻击者占据优势的一种方法。

让 Padding Oracle 攻击实现硬着陆

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

实施良好的错误处理控制也会严重损害攻击者的成功机会。由于填充预言机攻击依赖于信息泄露,因此在加密/解密失败时返回通用错误消息,而不是特定的填充错误。

您还可以实现消息身份验证码 (MAC)。MAC 值允许验证者使用密钥检测消息内容的任何更改,从而保护数据的完整性及其真实性。

最后,所有填充预言机攻击都需要重复查询。可以发出 200 多个请求,要求计算出单个单元的填充方案,乘以链中受保护的信息单元的数量。通过限制来自同一来源的请求数量,你可以在攻击者真正开始尝试之前拒绝他们访问,从而关闭填充预言机攻击。

关于 Padding Oracle 的进一步研究

攻击者可以解密敏感信息的任何方法都可能成为一场真正的噩梦。但是,我们希望你从一开始就学到了很多防止这种情况发生的好方法。

要进一步阅读,你可以看看 OWASP 定义和清单 在 padding oracle 上。你还可以使用以下方法来测试你新获得的防御知识 免费演示 Secure Code Warrior 平台,该平台培训网络安全团队成为终极网络战士。要了解有关克服此漏洞以及其他恶棍威胁的更多信息,请访问 安全代码勇士博客

你认为你现在能胜任阻止 padding oracle 攻击的任务吗?在 Secure Code Warrior 平台上试一试:

查看资源
查看资源

填写下面的表格下载报告

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

提交
scw success icon
scw error icon
要提交表单,请启用 “分析” Cookie。完成后,可以随意再次禁用它们。

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

就攻击者的总体难度而言,这个难度接近顶峰。我们谈论的不是神奇的解密按钮,而是一个艰苦的过程,黑客可以在其中检查发送给他们的有关单元格填充的错误消息,并用它来确定加密数据的结束位置和填充的起点。然后,他们可以找出加密中的各种位,如果有足够的时间和输入进行检查,他们就有可能破解它。

值得庆幸的是,有几个相对简单的步骤可以消除攻击者使用填充预言机解密加密数据的能力。在本集中,我们将学习:

  • 它是如何运作的
  • 为什么这个漏洞如此危险
  • 如何设置防御措施来防止这种情况发生。

Padding Oracle 是如何工作的?

密码区块链 (CBC) 是一种创建分组密码的方法,其中使用适用于整个信息链的加密密钥对整个信息序列(例如存储在数据库中的单元)进行加密。使用 CBC 时,单个密文块的加密将取决于所有后续区块。从理论上讲,这使得加密变得非常强大,因为任何东西,即使是区块的重新排序,都会损坏数据。

CBC 密码(以及任何分组密码,就此而言)的问题在于,它们只能使用大小精确的区块进行加密。通常,这是以 8 或 16 字节的大小完成的。那么,当CBC需要将2字节的数据放入一个16字节的密文单元中时会发生什么?它将使用填充,基本上只是胡说八道的字符,来填补空白,使单位大小合适。

大多数填充方案都是众所周知的,其中 PKCS #7 是最受欢迎的方案之一,因此攻击者可能知道正在使用哪种填充。例如,如果 CBC 需要在一个块中填充五个字符,PKCS #7 将使用在纯文本之后重复五次的字节值 0x05。

攻击者利用他们对CBC和填充方案的了解向主机服务器(也称为预言机)发送查询。如果他们可以使用正确的工具,他们可以强制服务器告诉他们查询中的填充是否不正确。为此,他们可以将密码中的每个字节从零循环到255,直到服务器告诉他们填充是正确的。然后,他们转到下一个单元并重复该过程,记录每种情况下填充的起始位置。

这不允许他们解密消息甚至单元,但可以让他们根据纯文本的结束位置和填充的起点来映射链中的每个链接。他们还可以使用异或计算来计算原始纯文本最后一个字节的值。

为什么 Padding Oracle 如此危险?

黑客之所以会投入这么多精力来破解加密,是因为潜在的回报。很少有人加密不值钱的东西。东道组织面临的危险取决于被泄露的数据。这可能包括密码、用户账户、财务信息、信用卡号、患者记录、敏感通信或任意数量的备受追捧和有价值的信息。

使用 padding oracle 也可以成为后续攻击的门户。例如,如果攻击者可以使用 padding oracle 窃取密码,那么提升他们的权限并更深入地渗透到网络中就是一项简单的次要任务。

每个人都认为加密是抵御窥探或入侵的终极防御。但是,加密科学与可能打破加密科学的科学之间的来回交流已经持续了几个世纪。Padding oracle 只是让攻击者占据优势的一种方法。

让 Padding Oracle 攻击实现硬着陆

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

实施良好的错误处理控制也会严重损害攻击者的成功机会。由于填充预言机攻击依赖于信息泄露,因此在加密/解密失败时返回通用错误消息,而不是特定的填充错误。

您还可以实现消息身份验证码 (MAC)。MAC 值允许验证者使用密钥检测消息内容的任何更改,从而保护数据的完整性及其真实性。

最后,所有填充预言机攻击都需要重复查询。可以发出 200 多个请求,要求计算出单个单元的填充方案,乘以链中受保护的信息单元的数量。通过限制来自同一来源的请求数量,你可以在攻击者真正开始尝试之前拒绝他们访问,从而关闭填充预言机攻击。

关于 Padding Oracle 的进一步研究

攻击者可以解密敏感信息的任何方法都可能成为一场真正的噩梦。但是,我们希望你从一开始就学到了很多防止这种情况发生的好方法。

要进一步阅读,你可以看看 OWASP 定义和清单 在 padding oracle 上。你还可以使用以下方法来测试你新获得的防御知识 免费演示 Secure Code Warrior 平台,该平台培训网络安全团队成为终极网络战士。要了解有关克服此漏洞以及其他恶棍威胁的更多信息,请访问 安全代码勇士博客

你认为你现在能胜任阻止 padding oracle 攻击的任务吗?在 Secure Code Warrior 平台上试一试:

观看网络研讨会
开始吧
learn more

点击下面的链接并下载此资源的PDF。

Secure Code Warrior可以帮助您的组织在整个软件开发生命周期中保护代码,并营造一种将网络安全放在首位的文化。无论您是 AppSec 经理、开发人员、首席信息安全官还是任何与安全相关的人,我们都可以帮助您的组织降低与不安全代码相关的风险。

查看报告预订演示
查看资源
分享到:
linkedin brandsSocialx logo
对更多感兴趣?

分享到:
linkedin brandsSocialx logo
作者
Published Jan 24, 2019

分享到:
linkedin brandsSocialx logo

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

就攻击者的总体难度而言,这个难度接近顶峰。我们谈论的不是神奇的解密按钮,而是一个艰苦的过程,黑客可以在其中检查发送给他们的有关单元格填充的错误消息,并用它来确定加密数据的结束位置和填充的起点。然后,他们可以找出加密中的各种位,如果有足够的时间和输入进行检查,他们就有可能破解它。

值得庆幸的是,有几个相对简单的步骤可以消除攻击者使用填充预言机解密加密数据的能力。在本集中,我们将学习:

  • 它是如何运作的
  • 为什么这个漏洞如此危险
  • 如何设置防御措施来防止这种情况发生。

Padding Oracle 是如何工作的?

密码区块链 (CBC) 是一种创建分组密码的方法,其中使用适用于整个信息链的加密密钥对整个信息序列(例如存储在数据库中的单元)进行加密。使用 CBC 时,单个密文块的加密将取决于所有后续区块。从理论上讲,这使得加密变得非常强大,因为任何东西,即使是区块的重新排序,都会损坏数据。

CBC 密码(以及任何分组密码,就此而言)的问题在于,它们只能使用大小精确的区块进行加密。通常,这是以 8 或 16 字节的大小完成的。那么,当CBC需要将2字节的数据放入一个16字节的密文单元中时会发生什么?它将使用填充,基本上只是胡说八道的字符,来填补空白,使单位大小合适。

大多数填充方案都是众所周知的,其中 PKCS #7 是最受欢迎的方案之一,因此攻击者可能知道正在使用哪种填充。例如,如果 CBC 需要在一个块中填充五个字符,PKCS #7 将使用在纯文本之后重复五次的字节值 0x05。

攻击者利用他们对CBC和填充方案的了解向主机服务器(也称为预言机)发送查询。如果他们可以使用正确的工具,他们可以强制服务器告诉他们查询中的填充是否不正确。为此,他们可以将密码中的每个字节从零循环到255,直到服务器告诉他们填充是正确的。然后,他们转到下一个单元并重复该过程,记录每种情况下填充的起始位置。

这不允许他们解密消息甚至单元,但可以让他们根据纯文本的结束位置和填充的起点来映射链中的每个链接。他们还可以使用异或计算来计算原始纯文本最后一个字节的值。

为什么 Padding Oracle 如此危险?

黑客之所以会投入这么多精力来破解加密,是因为潜在的回报。很少有人加密不值钱的东西。东道组织面临的危险取决于被泄露的数据。这可能包括密码、用户账户、财务信息、信用卡号、患者记录、敏感通信或任意数量的备受追捧和有价值的信息。

使用 padding oracle 也可以成为后续攻击的门户。例如,如果攻击者可以使用 padding oracle 窃取密码,那么提升他们的权限并更深入地渗透到网络中就是一项简单的次要任务。

每个人都认为加密是抵御窥探或入侵的终极防御。但是,加密科学与可能打破加密科学的科学之间的来回交流已经持续了几个世纪。Padding oracle 只是让攻击者占据优势的一种方法。

让 Padding Oracle 攻击实现硬着陆

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

实施良好的错误处理控制也会严重损害攻击者的成功机会。由于填充预言机攻击依赖于信息泄露,因此在加密/解密失败时返回通用错误消息,而不是特定的填充错误。

您还可以实现消息身份验证码 (MAC)。MAC 值允许验证者使用密钥检测消息内容的任何更改,从而保护数据的完整性及其真实性。

最后,所有填充预言机攻击都需要重复查询。可以发出 200 多个请求,要求计算出单个单元的填充方案,乘以链中受保护的信息单元的数量。通过限制来自同一来源的请求数量,你可以在攻击者真正开始尝试之前拒绝他们访问,从而关闭填充预言机攻击。

关于 Padding Oracle 的进一步研究

攻击者可以解密敏感信息的任何方法都可能成为一场真正的噩梦。但是,我们希望你从一开始就学到了很多防止这种情况发生的好方法。

要进一步阅读,你可以看看 OWASP 定义和清单 在 padding oracle 上。你还可以使用以下方法来测试你新获得的防御知识 免费演示 Secure Code Warrior 平台,该平台培训网络安全团队成为终极网络战士。要了解有关克服此漏洞以及其他恶棍威胁的更多信息,请访问 安全代码勇士博客

你认为你现在能胜任阻止 padding oracle 攻击的任务吗?在 Secure Code Warrior 平台上试一试:

目录

下载PDF
查看资源
对更多感兴趣?

learn more

Secure Code Warrior可以帮助您的组织在整个软件开发生命周期中保护代码,并营造一种将网络安全放在首位的文化。无论您是 AppSec 经理、开发人员、首席信息安全官还是任何与安全相关的人,我们都可以帮助您的组织降低与不安全代码相关的风险。

预订演示下载
分享到:
linkedin brandsSocialx logo
资源中心

帮助您入门的资源

更多帖子
资源中心

帮助您入门的资源

更多帖子