吴国凤, 王芳芳, 张 岩
(1.合肥工业大学 计算机与信息学院,安徽 合肥 230009;2.安徽高新学院 计算机系,安徽 合肥 230001)
SSL协议[1]是由Netscape公司于1994年开发公布的,是一个保证数据安全传输的安全协议,保证使用TCP/IP协议的通信应用程序间的隐秘性和完整性。随着信息技术的发展,日常生活中的诸多活动都转移到网络上进行,例如电子商务、网上银行等,涉及密码的保护、信息的篡改等安全问题[2]。SSL协议在客户端与服务器端建立一条安全通道。不仅保证了信息的安全传输,又用对称加密算法取代非对称加密算法,提高了传输效率,还进行了服务器端与客户端的相互身份认证。
然而SSL协议在应用中还是遇到很多安全问题。本文主要介绍SSL Sniffing攻击和SSL Stripping攻击,对这2种基于中间人攻击的方法做出详细分析,同时提出了解决方案。
SSL协议主要分为2层,分别为SSL握手协议和SSL记录协议。
SSL握手协议是在实际数据传输之前的必要步骤,进行通信双方的身份认证、协商加密算法、交换加密密钥等。工作过程的具体描述如下(以下客户端标识为Client,服务器端标识为Server)。
(1)Client发起连接请求。Client向Server发送ClientHello消息发起SSL握手请求,发送的消息中包含客户端所支持的加密算法、压缩方法以及用于生成主密钥的随机数ClientRandom。
(2)Server响应Client的ClientHello消息,发送一个ServerHello消息。消息中包含所选择的加密算法、压缩算法以及另外一个用于生成主密钥的随机数ServerRandom。同时Server向Client发送自己所持有的可信第三方颁发的证书,用于验证服务器的身份。
(3)Client对接收到的证书进行可靠性验证,包括颁发机构、有效日期等,若确定为可信,则继续握手,否则放弃握手。
(4)Client与Server分别向对方发送KeyExchange消息,交换预主密钥。
(5)Server向Client发送Finished消息,表示握手消息全部完成。
上述握手消息的第4步之后,若Server请求对Client进行身份认证,则Client也必须向Server发送所持有的可信第三方颁发的证书。
记录协议建立在TCP/IP协议之上,为数据传输提供数据加密和数据压缩等功能。在握手协议中,双方完成预主密钥的交换之后,Client和Server分别利用随机数值和预主密钥独立计算出对称密钥和MAC密钥,用MAC算法保证数据的完整性,用握手协议中选择的加密算法和计算出来的加密密钥保证机密性。
Diffie-Hellman算法即 D-H 算法[3],其安全性取决于离散对数的计算困难。算法主要用于密钥的分发,而不是加密解密。在SSL协议中客户端与服务器端同步一个会话密钥。D-H密钥协商过程如下。
(1)Client和Server共享大素数p和g,其中g是p的原根。
(2)Client选择一个随机整数XC,计算YC=g∧XCmod p,同时将YC发送给Server。
(3)Server选择一个随机整数XS,计算YS=g∧XSmod p,同时将YS发送给Client。
(4)Client计算会话密钥KC=YS∧XCmod p。
(5)Server计算会话密钥KS=YC∧XSmod p。计算:
即KC=KS。
其中,g和p公开;YC和YS在网络中明文传输;XC为Client的密钥;XS为Server的密钥。由于离散对数的计算难度,在已知g、p、YC和YS的情况下,几乎是不可能求出XC和XS,所以D-H算法在Client和Server之间安全地完成了密钥交换[4],计算出会话密钥。
SSL协议保证数据的安全传输,但从SSL协议开始使用以来,就有对SSL协议各式各样的攻击,包括对SSL协议本身和对SSL协议应用的攻击。本文主要介绍针对浏览器漏洞的中间人攻击[5],即 SSL Sniffing攻击和 SSL Stripping攻击。
SSL Sniffing攻击解释为伪装攻击[6],是针对浏览器漏洞的攻击。现流行的浏览器都存在对证书基本约束验证的漏洞,SSL Sniffing攻击就是利用了这个薄弱环节。证书的基本约束指明了证书链的最大允许长度,以及此证书是一个证书颁发机构还是一个终端实体证书。拥有一个有效的终端实体证书的攻击者,可以利用浏览器的这个漏洞,发布一个从属证书,虽然这个证书不是由可信的证书颁发机构颁发,但是也能通过验证,所以形成了欺骗身份的有效攻击。
SSL Sniffing攻击利用一个ARP欺骗形成一个中间人攻击,客户端(浏览器)与服务器端的直接通信就都会通过攻击者,如图1所示。
图1 SSL Sniffing攻击
Attacker利用对证书基本约束验证的漏洞,通过Client的身份认证,获得了Client的信任[7]。SSL Sniffing攻击利用D-H算法p和g公开,且YC和YS可以被中间人截获的缺陷发起攻击。由于存在中间人攻击,YC和YS都不能顺利到达指定接收人,而被 Attacker截获。Client和 Attacker利用YC和YA计算出会话密钥K1,而Server和Attacker利用YS和YA计算出会话密钥K2。对于Client和Server都认为是不存在中间人攻击的安全连接,然而中间人可以透明地截获所有安全信息。
通常客户端不会使用安全的连接打开会话,只有在需要传输敏感数据时,才会使用安全的SSL连接。SSL Sniffing是针对SSL协议的应用发起的攻击。
SSL Stripping攻击是在客户端与服务器端利用ARP欺骗等技术进行一个中间人攻击[7-8],如图2所示。
图2 SSL Stripping攻击
客户端在浏览器中输入简单易记的链接地址,如 www.security.com,当连接上之后,发现地 址 栏 中 的 地 址 为 https://www.security.com/../../index.jsp。如图2所示,对于用户来说,通常在地址栏中输入简短的地址,而不是www.security.com/../../index.jsp 这 个 完 整的地址。攻击者从HTTP请求消息和响应消息开始发起攻击。当服务器返回给客户端一个重定向 地 址 https://www.security.com/../../index.jsp,从地址中的https可以看出,服务器要求客户端建立一个安全的SSL连接,但仅仅是在攻击者和服务器端建立了一个安全的连接,而攻击者将重定向地址修改为http://www.security.com/../../index.jsp,浏览器则根据这个地址与攻击者建立一个普通的http连接,所有的安全信息对Attacker都是可视未加密的。
上述2种攻击方式都是针对浏览器漏洞进行的攻击。在SSL Sniffing中,由于D-H算法中的参数p和g公开,中间人能根据相同的p和g分别与客户端和服务器端建立不同的安全连接,导致不同步;在SSL Stripping中,由于客户通常在浏览器中只输入简单易记的网址,而浏览器则根据服务器的响应做永久转移(http 301状态)或者暂时转移(http 302状态),所以中间人能修改跳转地址,导致不同步。
为完成密钥交换,必须在客户端和服务器端同步2个必要参数p和g。在SSL协议中,p和g是在相互进行身份认证的过程中明文传输,对整个网络公开。引入可信第三方,由第三方在客户端和服务器端同步p和g,以达到p和g只有客户端和服务器端所有。同时,在客户端和服务器端同步一个用于生成CRC校验码的生成多项式g(x)。建立模型如图3所示,其中电信运营商为可信第三方,具体步骤如下。
图3 SSL Sniffing解决方案
(2)Org→Client,Org→Server,p‖g‖g(x)。Org分别用Client和Server的公钥在双方同步p、g和g(x)。当电信运营商接收到Client的会话请求后,便分别向Client和Server端发送p、g和g(x),并且用Client和Server的公钥加密传输,保证p、g和g(x)只由通信双方所有,攻击 者 无 法 获 取,即,其中,和分别为Client和Server的公钥。
(5)Client接收到Server的预主密钥,利用g(x)验证有效性,若用g(x)除YS‖ R(YS),余数不为0,则断定出错或存在攻击,不进行下一步的连接。验证通过,利用(3)式计算会话密钥K:
(6)Server接收到Client的预主密钥,同样利用g(x)验证有效性,若用g(x)除YC‖R(YC),余数不为0,则断定出错或存在攻击,不进行下一步的连接。验证通过,利用(4)式计算会话密钥:
至此整个解决方案完成。若通过身份验证,则交换密钥,在客户端和服务器端计算出同样的一个会话密钥K,用于记录协议中的信息加密解密。SSL Sniffing攻击就是利用网络上公开的p和g分别与Client和Sever建立一条安全连接,改进后的通信过程同样由Client端发起,但与Server建立SSL安全连接之前,Client首先将能识别Client和Server的ID发送给可信第三方Org,由Org同步p和g。同时同步一个g(x),判断预主密钥是否是对方发送的预主密钥。p和g是Client和Server私有,可以对预主密钥进行验证。Attacker进行中间人攻击之后,不能与Client和Server进行密钥交换,不能计算出相同的密钥,因而不能形成攻击。
为预防SSL Stripping攻击,引入数字签名技术和还原重定向地址的思想。
数字签名技术主要应用在服务器端。服务器端响应HTTP请求消息返回响应消息时,对响应消息中的重定向地址部分用私钥进行数字签名,然后将原重定向地址与签名结果连接后发送给客户端。还原重定向地址主要应用在客户端。客户端用服务器端的公钥对该重定向地址进行验证,若验证不通过,对HTTP响应码做判断,若是302重定向,则断定为存在中间人攻击,还原重定向地址,否则断定为出现差错或者其他类型攻击,直接断开连接。建立模型如图4所示。
图4 SSL Stripping解决方案
首先客户端进行数字签名的认证,其次才是重定向类型的判断。返回值若为TRUE,表示HTTP响应消息中的响应码是302,随即采取还原重定向地址机制,否则就断开连接。具体步骤如下。
(2)Client接收到Redirect响应消息,首先对该消息进行数字签名的认证,即利用Server的公钥对字段进行解密:
若解密后的字段与RedirectLocation字段能够匹配,则判定通过数字签名的验证,继续进行相关连接,否则数字签名验证不能通过,判断是否需要还原重定向地址。
(3)根据步骤(2)中数字签名的结果,若不能通过数字签名的验证,利用BHO插件对重定向地址类型进行判断,若响应消息中的响应码为302,还原重定向地址,同时与服务器端建立安全的SSL连接。
解决方案中客户端对重定向地址的判断及修改利用的是BHO插件技术,BHO(Browser Helper Object)即浏览器辅助对象。BHO是实现了特定接口的COM组件,可以开发自定义功能的浏览器插件。编写代码使得BHO插件在注册表中注册完成,浏览器会根据注册表中的插件信息创建实例,执行插件的相关功能。在浏览器的工作过程中,BHO会接收到浏览器的各种事件,如浏览新地址、前进后退、生成新窗口等等。BHO可以在这些事件的响应中实现与浏览器的交互。
在插件开发过程中,重写虚函数OnBeforeNavigate2(),浏览器浏览新地址之前触发该方法。OnBeforeNavigate2()函数原型如下所示:
OnBeforeNavigate2函数在浏览器浏览新地址之前触发,所以对重定向地址的判断和修改都在该函数中执行。客户端的BHO插件部分主要有2个方面的操作,首先判断是否为302重定向,其次修改重定向地址或者断开连接,修改重定向地址部分伪代码如下所示:
其中QueryInfoStatusCode方法是返回HTTP响应码并保存在参数dwStatusCode中,Navigate2方法是指定浏览器导航地址。
断开连接部分则直接利用OnBeforeNavigate2中的参数pbCancel。该参数表示是否继续导航。赋值为TRUE表示取消导航,断开连接,赋值为FALSE表示继续导航,进行数据传输。伪代码如下所示:
当HTTP返回码不是302,且不能通过数字签名认证,则表示存在其他攻击,直接断开连接。
本文主要针对SSL协议的2种基于中间人攻击的攻击方式提出解决方案,分别是引入可信第三方和数字签名技术以及还原重定向地址的思想,保证了信息传输的安全性。
(1)针对SSL Sniffing攻击,由可信第三方分配D-H算法中的重要参数,因此p和g只对通信双方公开,攻击者完成中间人攻击之后,不能与客户端和服务器端分别建立安全连接,同时利用CRC校验码验证预主密钥的有效性。
(2)SSL Stripping攻击主要是修改服务器的响应信息,用普通的http连接取代安全的https连接,迷惑浏览器,从而达到攻击目的。对于该攻击原理,为实现消息同步,在服务器端和客户端分别对HTTP响应消息进行签名和判断。服务器端为防止302重定向地址在传输过程中被修改,利用数字签名的不可篡改性,将重定向地址与签名结果一起发送给客户端。客户端首先必须对数字签名进行验证,若通过验证,直接进行地址的跳转。若不能通过验证,继续对HTTP响应码进行判断,若响应码为302,采取还原重定向地址的手段。
本文对SSL协议的工作机制以及密钥交换算法进行了详细介绍,同时针对SSL协议的2种攻击方式提出了解决方案。引入可信第三方同步D-H密钥交换算法中的重要参数,有效控制了SSL Sniffing攻击;引入数字签名技术和还原重定向地址的思想,确保浏览器跳转之后的连接是安全连接,预防SSL Stripping攻击。2种方案都提高了针对浏览器漏洞攻击的安全性。
[1]El-Hajj W.The most recent SSL security attacks:origins,implementation,evaluation,and suggested countermeasures[J].Security ComMNetworks,2012,5(1):113-124.
[2]方 勇.信息系统安全理论与技术[M].北京:高等教育出版社,2008:125-129.
[3]于宝证,徐枞巍.基于口令的跨服务器认证密钥交换协议研究[J].合肥工业大学学报:自然科学版,2007,30(11):1393-1398.
[4]Li Xin.An improvement of Diffie-Hellman protocol[J].Network & Computer Security,2007,12:22-23.
[5]Howard M.Man-in-the-Middle attack to the HTTPS protocol[J].IEEE Computer Society,2009(2):78-81.
[6]Qin Dong,Zeng Hongliang.Study for client authenticationpolicy based on SSL[J].Computer Engineering and Design,2008,15(2):98-101.
[7]Ren Tao,Xie Dongqing.Analysis and research of access control mechanisMbased on SSL protocol[J].Microcomputer Information,2009,21(3):112-115.
[8]莫爱民.主流VPN技术的安全性研究与改进[D].南京:南京理工大学,2009.