本站小编为你精心准备了安全协议的安全性分析参考范文,愿这些范文能点燃您思维的火花,激发您的写作灵感。欢迎深入阅读并收藏。
《计算机工程与科学杂志》2014年第六期
1ssl协议概述
ssl协议由HandsHakeProtocol、CHangeCi—pHerspeCProtocol、alertProtocol以及reCordProtocol组成。其中,HandsHakeProtocol、CHangeCipHerspeCProtocol和alertProtocol这三个协议位于tCp/ip协议栈的应用层。reCordProtocol介于应用层和传输控制层之间。ssl协议与tCp/ip协议的体系结构如图2所示。ssl协议中,ssl会话和ssl连接是两个重要的概念。ssl连接是指能够提供一种服务的传输方式。对于ssl协议来说,这样的连接是对等体之间的,即客户端与服务器模式。ssl会话是存在于客户端与服务器之间的一种联系,它为ssl连接规定了一组密码元件。相对于ssl会话,ssl连接是暂时的。每个ssl连接对应一个ssl会话。在ssl协议中,由于ssl会话的建立需要的计算量较大,为了使协议的运行效率提高,一个ssl会话通常对应多个不同的ssl连接。下面简单地介绍一下HandsHakeProtocol、CHangeCipHerspeCProtocol、alertProtocol以及reCordProtocol四个协议的内容。(1)HandsHakeProtocol(握手协议)。sslHandsHakeProtocol是ssl协议中最复杂的部分,也是本文的攻击重点,这里有必要详述其流程。HandsHakeProtocol的流程如图3所示。HandsHakeProtocol的流程大致可分为四个阶段:构建安全参数;服务器认证及密钥交换;客户端认证及密钥交换;结束。下面对其进行一一阐述。阶段1构建安全参数。这一阶段用于初始化一个逻辑上的连接,并在连接上定义安全参数。首先由客户端发送Clien—tHello给服务器。其中,ClientHello包含下面五个参数:上述五个参数的详细内容请参阅文献[1]。服务器收到ClientHello后,发送serverHello给客户端。serverHello的参数类似于ClientHello的五个参数。需要注意的是,serverHello中的CipHer—suite的选定取决于ClientHello中的CipHersuite提供的一组密码及密钥交换算法,且只能选定其中的一套密码及密钥交换算法。此外,3.0版本的ssl协议中的CompressionmetHod默认值为null。本文的攻击对象为CipHersuite选定的密钥交换算法,需对其详述。客户端支持的密钥交换算法如下所述:①rsa:密钥使用服务器的rsa公钥加密。客户端拥有服务器rsa公钥的公钥证书,公钥证书由可信任的证书机构签发。②固定的diffie—Hellman:这是diffie—Hell—man密钥交换算法。服务器的证书包含diffie—Hellman密钥交换算法中的服务器公钥,该证书由可信任的证书机构签发。如果服务器要求其发送证书,客户端可在其证书中提供客户端的diffie—Hellman公钥;如果不发送证书,可在密钥交换信息中发送客户端公钥。③短暂的diffie—Hellman:类似于固定的dif—fie—Hellman,服务器传给客户端证书的同时,还有服务器使用rsa的私钥对diffie—Hellman公钥的签名。④匿名diffie—Hellman:这也是diffie—Hell—man密钥交换算法。服务器和客户端双方通过密钥交换信息将各自的diffie—Hellman公钥发送给对方,不需要认证。⑤fortezza:fortezza方案的密钥交换算法。阶段2服务器认证及密钥交换。如果上一阶段需要服务器被认证,服务器将CertifiCate证书发送给客户端。除了匿名diffie—Hellman密钥交换,其余四种密钥交换都需要认证证书。接着,服务器只在下列三种情况下发送serverkeyexCHange消息:①fortezza。②匿名diffie—Hellman:消息中包含一个大素数,一个关于该素数的原根以及服务器的diffie—Hellman公钥。③短暂的diffie—Hellman:消息中除了匿名diffie—Hellman的三个元素外,还有关于该三个元素的签名。需要被认证的服务器发送CertifiCaterequest给客户端,要求客户端的CertifiCate。最后,服务器发送serverHellodone给客户端。阶段3客户端认证及密钥交换。如果在阶段2要求了客户端的证书,此时,客户端发送CertifiCate给服务器。接着,客户端发送ClientkeyexCHange消息给服务器。该消息的内容取决于密钥交换的方式:①rsa:客户端生成48—byte的pre—masterkey,使用服务器的rsa公钥证书中的公钥对pre—masterkey加密。②短暂的或匿名diffie—Hellman:客户端的diffie—Hellman公钥。③固定的diffie—Hellman:客户端的diffie—Hellman公钥包含在客户端CertifiCate中,因此内容是空的。④fortezza:客户端的fortezza参数。最后,客户端可能发送CertifiCateverify消息给服务器,用于服务器验证客户端CertifiCate。阶段4结束。客户端发送CHangeCipHerspeC消息给服务器,值得注意的是,该消息是客户端利用CHangeCipHerspeCProtocol发送的,不属于HandsHakeProtocol。之后,客户端使用协商好的密码算法及密钥对finisHed消息加密,并将密文发送给服务器。服务器利用CHangeCipHerspeCProtocol发送CHangeCipHerspeC消息给客户端,服务器同样使用协商好的密码算法及密钥对finisHed消息加密,并将密文发送给客户端。到此,客户端与服务器的安全连接建立完毕,二者可利用协商好的密码算法及密钥进行保密通信了。(2)reCordProtocol(记录层协议)。sslreCordProtocol为ssl连接提供了两种服务:①机密性。sslHandsHakeProtocol定义了一个分组密码或流密码的加密共享密钥,sslre—CordProtocol利用共享密钥和常规的分组密码或流密码算法对ssl的有效载荷进行加密。②消息完整性。sslHandsHakeProtocol定义了一个maC(消息认证码)共享密钥,sslre—CordProtocol利用该maC共享密钥和HasH函数生成了关于消息的消息认证码。sslreCordProtocol对应用层的数据进行分段、压缩(可选项)、计算maC、加密、添加sslre—CordProtocol的报头,最后将结果加入tCp段中。(3)CHangeCipHerspeCProtocol(改变密码规范协议)。CHangeCipHerspeCProtocol只包含一个字节的信息,该字节的值为1。该字节的信息利用sslreCordProtocol的当前密码算法和密钥加密。加了密的信息在客户端和服务器之间传输,双方解密之后获得信息,之后的sslreCordproto—Col中的数据将由刚协商好的密码算法及密钥进行加密传输。(4)alertProtocol(警告协议)。在alertProtocol中,大多数的alert消息都是毁灭性的,它告诉接受者(客户端或服务器)立即中断会话。例如,Close_notify消息表明发送者已完成在连接上发送应用程序的数据。详述请参阅文献。
客户端和服务器利用ssl协议在不安全的链路中建立一条安全的连接通道。通过本文对ssl协议的阐述可知,影响ssl协议安全实施的关键在于HandsHakeProtocol。下面对于HandsHakeProtocol做进一步的安全分析。由文中的第2节可知,HandsHakeProtocol中的认证及密钥交换部分是影响安全的主要因素。认证完成,密钥建立之后,客户端和服务器就能安全地进行保密通信。在这种情况下,攻击者的攻击就是针对已知分组密码或流密码的攻击,即对算法本身的攻击。而这种攻击通常采用暴力攻击,针对某一特定的密文,采用穷搜索密钥空间,找寻合适的明文。暴力攻击对攻击者的计算资源的要求非常高。在HandsHakeProtocol中,对于不同的认证方式,有与之相对应的密钥交换方式。HandsHakeProtocol支持三种认证方式:客户端和服务器的双方认证;服务器的单方认证;客户端和服务器的完全匿名认证。对于rsa公钥证书,采取第一种方式认证,认证通过后,接收方(客户端或服务器)利用发送方(客户端或服务器)证书中的rsa公钥对密钥进行加密后传给发送方,发送方利用对应的rsa私钥解密获得密钥;采取第二种方式,客户端在验证服务器的身份后,利用服务器证书中的rsa公钥对密钥进行加密,密文通过消息ClientkeyexCHange发送给服务器,服务器利用对应的rsa私钥解密密文获得密钥。在这种情况下,攻击者想获得解密私钥的难度等同于大数分解,因此密钥是安全的。对于固定的diffie—Hellman公钥证书,采用第一种认证方式。服务器和客户端分别向对方发送包含diffie—Hellman公钥的证书,认证结束后,各自利用自己的私钥与对方的diffie—Hellman公钥计算出密钥。在这种情况下,攻击者想获得私钥的难度等同于计算离散对数,因此密钥是安全的。对于短暂的diffie—Hellman密钥交换,采用第二种认证方式。服务器生成rsa公钥/私钥对,利用私钥对服务器diffie—Hellman公钥签名,服务器生成关于rsa公钥的公钥证书,服务器将公钥证书、diffie—Hellman公钥以及关于diffie—Hellman公钥的签名发送给客户端。客户端验证完服务器的身份后,利用证书中的公钥就能验证签名的合法性,从而知道diffie—Hellman公钥是由服务器发送过来的。客户端利用自己的私钥与服务器diffie—Hellman公钥生成密钥。在这种情况下,攻击者想获得签名私钥的难度等同于大数分解,因此攻击者无法伪造关于diffie—Hellman公钥的合法签名。对于匿名diffie—Hellman密钥交换,采用第三种认证方式。服务器和客户端在不认证对方身份的情况下,直接将各自的diffie—Hellman公钥传给对方,之后,各自利用自己的私钥与对方的diffie—Hellman公钥计算出密钥。在这种情况下,攻击者想获得私钥的难度等同于计算离散对数,因此密钥是安全的。综上所述,ssl协议总体上是安全的,协议的不安全是由于实现者在配置和实现ssl协议于客户端和服务器时,实现者考虑不周或工业化制定标准过时等因素造成的。
3ssl协议漏洞分析
通过对ssl协议本身的深入研究与分析,该协议从理论上来说存在四个漏洞,并且通过测试验证了***模式漏洞的实际存在性。下面对这四个漏洞分别阐述。(1)***模式漏洞。***模式漏洞是指配置有ssl协议的客户端和服务器都支持***密码套件。通过搭建实验环境验证了***模式漏洞的存在性,并通过编制的工具sslClient测试了国内的某些安全邮箱服务器存在***模式漏洞。因而对于具备一定硬件条件的攻击者而言,攻击者利用***模式漏洞,可以实施针对ssl协议的攻击,或者实施针对利用ssl协议构建的安全邮箱服务器的攻击。下面简单介绍实现***模式漏洞挖掘的主要思路、实验环境以及攻击过程。①技术实现的主要思路。攻击主要采用中间者攻击技术(man—in—tHe—middleattaCk),其思路如图4所示。这里,对图4简单地描述一下:在有网关的局域网中,a发往s的数据包必然要先发到网关g,再通过g进行转发;同样,s发往a的数据包也要先发到网关g,再通过g发送到a。我们需要实现的就是中间者m拦截从a发往g的数据包。注意这里拦截和截获的意思是不同的:中间者m截获数据包只是对传输的数据包进行复制;中间者m拦截数据包不但能获得数据包的复制,而且能决定是否继续数据包1080Computerengineering&sCienCe计算机工程与科学2014,36(6)的传输,或对数据包修改后再进行传输。②技术实现的实验环境。a电脑一台,宿主机安装WindowsXp操作系统。宿主机中安装一个Windows2000虚拟机作为ssl的客户端,安装一个Windows2000虚拟机作为ssl的服务器。b搭建局域网环境。将宿主机WindowsXp的ip地址设为192.168.19.1,ssl客户端的ip地址设为192.168.19.5,ssl服务器的ip地址设为192.168.19.4,三台机器构成一个局域网络。C宿主机中运行开发的mim_ssl中间者工具,WiresHark网络数据包分析器;ssl客户端使用微软的ie浏览器;ssl服务器安装apaCHe2.2服务器。使用openssl—0.9.8m开发库开发。实验环境如图5所示。通过截获并篡改客户端与服务器之间的ssl数据包,使得客户端与服务器同时支持***模式,从而中间者截获客户端发给服务器的Client—keyexCHange消息,该消息中包含ssl通联中的预主密钥,由于中间者具备破解***的能力,中间者能够获得预主密钥,因此中间者具备了掌控ssl通联过程的条件,由此获得有用的信息。(2)dHe密钥交换的漏洞[8]。攻击者通过改变服务器密钥交换部分的keyexCHangealgoritHm参数迫使客户端相信服务器是对短暂的rsa密钥参数签的名,而实际上,服务器是对短暂的diffie—Hellman密钥参数签的名。协议的初始阶段,即在客户端与服务器的握手信息中,客户端首先向服务器发送rsa信息,该信息被攻击者截获篡改成包含短暂diffie—Hellman的rsa信息,并发往服务器。这样,服务器就会接收到含有短暂diffie—Hellman的rsa信息。在服务器发给客户端的应答中包含对短暂diffie—Hell—man的rsa信息的确认。同理,该确认被攻击者截获并被篡改成对rsa信息的确认,篡改后的确认被攻击者发往客户端。此时,攻击者就完成了对客户端和服务器握手信息的篡改。在协议的服务器密钥交换阶段,服务器按照先前协商好的向客户端发送含有生成diffie—Hellman密钥的参数,这些参数被攻击者截获并将其中的diffie—Hellman替换成rsa,再将之发给客户端。在协议的客户端密钥交换期间,客户端利用服务器发给它的公共密钥g对其产生的预主密钥k进行加密,即kgmodp,并将之发往服务器。该加密信息被攻击者截获并篡改成gxmodp发给服务器。在此情况下,攻击者利用欧几里得扩展算法可以求得公共密钥g的逆元g—1,由此通过模指数运算(kg)g—1modp求得预主密钥k;同样,由于攻击者拥有服务器发给它的参数Y,它自己生成的gx,因此可以计算出预主密钥Y×gxmodp,即gy×gxmodp=gxymodp。这样,攻击者就同时拥有了预主密钥k和gxy。到此,攻击者就可以分别利用k和gxy生成协议下一阶段所需的对称加密算法的密钥,换言之,客户端与服务器的加密通信对于攻击者来说就是透明的了。(3)版本回退漏洞[8]。在ssl3.0协议中,本文只针对rsa的密钥交换算法进行了防版本回退攻击,但对于非rsa密钥交换算法的版本回退攻击没有考虑。攻击者利用ClientHello_2.0恢复一个由Cli—entHello_3.0创建的会话。这样,攻击者就可以利用ssl2.0中的漏洞进行攻击了。攻击过程如下所示:在图6中,客户端和服务器分别用自己的私钥x、y生成公钥gx、gy,并将各自的公钥传给对方。攻击者将两者的公钥截获,并利用自己的私钥x′、y′伪造公钥gx′、gy′。攻击者将gy′传给客户端,将gx′传给服务器。对于客户端来说,由于不认证攻击者的身份,误以为gy′是服务器传来的;同理,对于服务器来说,误以为gx′是客户端传来的。接着,客户端和服务器分别生成密钥gxy′和gx′y,攻击者同样生成密钥gxy′和gx′y。这样,客户端和服务器在不知道攻击者拥有各自的密钥的情况下,利用协商好的HasH函数md5和sHa—1生成主密钥,同样攻击者也生成相应的主密钥。由此,客户端和服务器相互交换的信息对于攻击者来说就是透明的了,不具备机密性了。
4结束语
互联网存在近二十年了,已成为居家度日的必需品。Web安全协议ssl为使用互联网的用户进行安全邮箱通信提供了重要而可靠的保障。本文针对ssl协议的握手协议部分进行了详尽的阐述,对其安全性作了一定的分析,给出了理论上在的三个逻辑漏洞的详尽描述,并且经过测试验证,指出了ssl协议存在***模式漏洞。
作者:钟军吴雪阳江一民段光明单位:78046部队