OpenSSL DTLS CVE-2014-0221 远程拒绝服务
数据报传输层安全。*物理层
TCP 层数据报支持:TLS
UDP 层数据报支持:DTLS:通过对握手过程的适当修改来处理密钥交换、认证、安全参数设置等,通过超时和重传来支持具有无连接特性的 UDP 的稳定安全通信
DTLS 是 Datagram Transport Layer Security 的缩写,是一种在基于 UDP(用户数据报协议)的通信中提供安全的协议。 TLS(传输层安全)主要用于基于 TCP(传输控制协议)的通信中提供安全,但 UDP 是面向无连接的、基于数据包的协议,因此直接应用 TLS 存在困难。 为此,DTLS 被设计用于在基于 UDP 的通信中提供安全。
DTLS 与 TLS 的基本结构非常相似,但存在几个主要区别:
数据报支持:DTLS 设计适用于基于数据报的协议 UDP。TLS 针对面向连接的 TCP 进行了优化,为了应用于 UDP,被改造为可以按数据报单元运行。
握手过程的适当修改:与 TLS 一样,DTLS 使用握手过程来处理通信的认证、密钥交换、安全参数设置等。但由于 UDP 的特性,可能出现数据包丢失或顺序变化,因此 DTLS 中增加了应对这些情况的机制。
超时和重传:DTLS 包含超时和重传机制,以备数据包丢失或需要重传时使用。这弥补了 UDP 无连接特性的不足,实现了稳定的安全通信。
安全方面的考虑:DTLS 使用与 TLS 相同的安全协议来保证数据的机密性、完整性和认证。因此,即使在基于 UDP 的应用程序中也能安全地传输数据。
DTLS 主要用于 VoIP(语音通话)、多媒体流、游戏服务器等使用 UDP 的环境中提供安全。
为什么是 OpenSSL:DTLS 是什么:基于 UDP 的 TLS,DTLS 1.0 由 OpenSSL 实现
通过发送伪造的握手进行的中间人(MITM)攻击,能够解密传输数据并篡改服务器/客户端之间传输数据的漏洞(CVE-2014-0224)
通过向 OpenSSL DTLS 客户端发送异常的 DTLS 握手,可能造成拒绝服务攻击的漏洞(CVE-2014-0221)
通过向 OpenSSL DTLS 客户端或服务器发送异常的 DTLS 分片,可能执行任意代码的漏洞(CVE-2014-0195)
因 do_ssl3_write 函数的缺陷,可能执行任意代码的漏洞(CVE-2014-0198)
该漏洞在 OpenSSL 1.0.0 和 1.0.1 中启用 SSL_MODE_RELEASE_BUFFERS 选项时发生(该选项默认禁用)
因 ssl3_read_bytes 函数的竞争条件,攻击者可能向会话中注入数据或造成拒绝服务攻击的漏洞(CVE-2010-5298)
该漏洞在使用 OpenSSL 1.0.0 和 1.0.1 的多线程应用程序中启用 SSL_MODE_RELEASE_BUFFERS 选项时发生(该选项默认禁用)
在启用匿名 ECDH 密码套件的 OpenSSL TLS 客户端上可能发生拒绝服务攻击的漏洞(CVE-2014-3470)
OpenSSL 0.9.8 系列版本
OpenSSL 1.0.0 系列版本
OpenSSL 1.0.1 系列版本
其中 CVE-2014-0221 是通过向 OpenSSL DTLS 客户端发送异常的 DTLS 握手,可能造成拒绝服务攻击的漏洞
< DTLS 拒绝服务漏洞(CVE-2014-0221) >
o DTLS(数据报传输层安全)是基于 TLS 的协议,用于传输加密的数据报
o 当将异常的 DTLS 握手消息(DTLS Hello 消息)发送给 DTLS 客户端时,OpenSSL 可能陷入递归状态,导致拒绝服务攻击
if(!s->server && s->d1->r_msg_hdr.frag_off == 0 && wire[0] == SSL3_MT_HELLO_REQUEST) {
if(wire[1] == 0 && wire[2] == 0 && wire[3] == 0) {
if(s->msg_callback)
s->msg_callback(0, s->version, SSL3_RT_HANDSHAKE,
wire, DTLS1_HM_HEADER_LENGTH, s, s->msg_callback_arg);
s->init_num = 0;
return dtls1_get_message_fragment(s, st1, stn, max, ok);
}
else {
al=SSL_AD_UNEXPECTED_MESSAGE;
SSLerr(SSL_F_DTLS1_GET_MESSAGE_FRAGMENT,SSL_R_UNEXPECTED_MESSAGE);
goto f_err;
}
}