我正在尝试了解如何攻击SSL / TLS中的CBC模式。

我一直在线查看,但是所有示例和说明都很难理解和遵循。您能否简单说明这种攻击的发生方式?

#1 楼

最近展示的针对SSL(BEAST)的攻击是一种IV滥用攻击,与XML加密所发生的事情并不完全相同。尽管如此,这是SSL发生的情况。

基本上,他们发现了两件事:


一种方法,使浏览器可以根据由其使用的会话密钥对数据进行加密现有的SSL连接,并且
SSL编写方式上的错误使该功能可以用来读取消息。消息的第一块的加密基本上是$ AES(K,IV \ oplus m)$。 IV通常与密文一起发送。这是一种忽略时间的简化,可以处理更长的消息,有关更多详细信息,请参阅Wikipedia的CBC文章,但它可用于此目的。因为IV是随机的,所以使用相同的密文,因此您实际上不会加密相同的消息。因此,可以使浏览器加密数据的攻击者不能简单地猜测消息是什么,并通过使浏览器对猜测进行加密并检查其是否与他们想要读取的加密消息相匹配来验证该猜测。

问题是,如果我提前知道IV,那么这种情况就不再成立:如果我想猜测以前的消息是“黎明时袭击”(使用IV $ IV_1 $),并且我知道IV用于下一条消息将是$ IV_2 $,那么我只需要使浏览器对消息$ m $进行加密,以使$ IV_1 \ oplus \ text {“黎明时发动攻击”} = IV_2 \ oplus m $,然后检查密文块匹配。

SSL使用前一个加密消息的后128位作为IV。由于发送此消息与发送下一条消息之间存在时间间隔,攻击者可能会猜测。

这是基本概述,仍然有一些有关如何有效地获取会话cookie的细节。与每个HTTP请求一起发送,但这就是要点。

使用TLS 1.1和1.2(因为它们为每个消息生成一个新的初始化向量)是不可能进行此攻击的,并且OpenSSL库通过直接在每个消息之前发送一个空消息(即,仅填充和MAC)来解决TLS 1.0中已经存在的此问题。真实消息,因此此空消息的密文用作真实消息的初始化向量(并且在不知道密钥的情况下是无法预测的)。 (编辑:事实证明,此功能在OpenSSL中被禁用,因为它破坏了许多假定零字节读取是文件结尾的服务器。相反,部署的修补程序是“ 1 / n-1记录拆分”,其中一个字节是在一个块中发送,其余消息在下一个块中)

评论


$ \ begingroup $
我对您的答案进行了一些编辑,以使您清楚地谈论到BEAST攻击-我希望我能解释这一权利。随时重新编辑,或回滚我的更改。
$ \ endgroup $
–PaŭloEbermann
2011年10月29日在17:29

$ \ begingroup $
精彩的解释。关键是要知道在TLS 1.0中可以很容易地获得IV1,IV2,但是在TLS 1.1和1.2中这是不可能的。如果不知道两个IV,就无法进行CBC攻击。
$ \ endgroup $
–林边小草
16 Mar 24 '15:35



$ \ begingroup $
请注意,TLS也可以使用CBC填充预告片,因为它使用mac-then-encrypt而不是crypto-then-mac。需要对实现进行编程,以使其忽略填充预言。另请参阅:POODLE攻击
$ \ endgroup $
–马腾·博德威斯♦
18年3月31日在13:07

$ \ begingroup $
Nitpick:SSL和TLS1.0中的CBC套件将上一个记录的最后一块用作IV(第一条记录除外,该记录使用PRF扩展);可以是64或128位,具体取决于协商的套件(的数据密码组件)。
$ \ endgroup $
–dave_thompson_085
18年4月1日在4:42

#2 楼

CBC不是攻击,而是分组密码操作模式。您可能正在考虑“ padding oracle”攻击。

#3 楼

TLS 1.2中实现的AES-CBC易受Moxie Marlinspike的“加密厄运”原则的约束,该原则指出:

如果必须在验证收到的消息的MAC之前执行任何加密操作,它将

使用TLS 1.2中实现的AES-CBC,将获得纯文本的HMAC(和标头信息)。然后,将此HMAC与纯文本连接起来,填充到必要的长度,然后使用AES-CBC加密,并通过网络发送。有关更多信息,请参见RFC5246的6.2.3.2节。
这是Authenticate then encrypt的情况,如Moxie在上面引用的博客文章The sender computes a MAC of the plaintext, then encrypts both the plaintext and the MAC. Ek1(P || MACk2(P))所述。如博客文章中所述,这很容易受到Vaudenay's Attack的影响。