cssembly · 2014/12/05 12:09
0x00 背景
MS14-066 (CVE-2014-6321) 是存在于Microsoft的schannel.dll中的TLS堆缓冲区溢出漏洞。下面对原理以及poc构造进行分析。
0x01 SSL/TLS原理介绍
Https是一种基于SSL/TLS的Http,所有的http数据都是在SSL/TLS协议封装之上传输的。研究Https协议原理,最终其实是研究SSL/TLS协议。SSL协议,是一种安全传输协议。TLS是SSL v3.0的升级版,目前市面上所有的Https都是用的是TLS,而不是SSL。
TLS的握手阶段是发生在TCP三次握手之后。握手实际上是一种协商的过程,对协议所必需的一些参数进行协商。TLS握手过程分为四步,过程如下:
Client Hello
由于客户端对一些加解密算法的支持程度不一样,因此在 TLS握手阶段,客户端要告知服务端,自己支持哪些加密算法,所以客户端需要将本地支持的加密套件的列表传送给服务端。除此之外,客户端还要产生一个随机数,这个随机数一方面需要在客户端保存,另一方面需要传送给服务端,客户端的随机数需要跟服务端产生的随机数结合起来产生后面要讲到的Master Secret。
Server Hello
服务端在接收到客户端的Client Hello之后,服务端需要将自己的证书发送给客户端。这个证书是对于服务端的一种认证。在服务端向客户端发送的证书中没有提供足够的信息的时候,还可以向客户端发送一个Server Key Exchange。
对于非常重要的保密数据,服务端还需要对客户端进行验证,以保证数据传送给了安全的合法的客户端。服务端可以向客户端发出Cerficate Request消息,要求客户端发送证书对客户端的合法性进行验证。
跟客户端一样,服务端也需要产生一个随机数发送给客户端。客户端和服务端都需要使用这两个随机数来产生Master Secret。
最后服务端会发送一个Server Hello Done消息给客户端,表示Server Hello消息结束了。