电子商务安全管理的基本趋势似乎可用“谁经营、谁负责”六个字来概括,也可以说是谁管理谁负责,这就强调业界要自律,要对安全问题承担责任。网络技术可以从技术上体现安全的需求,电子商务的安全管理协议就起到了重要的作用。
9.1.1SSL协议概述
SSL(Secure Sockets Layer)安全套接层协议是Netscape公司于1994年推出的一种安全通信协议。在SSL中,采用了公开密钥和私有密钥两种加密方式,它对计算机之间整个会话进行加密,从而保证了安全传输。SSL的安全服务位于TCP和应用层之间,可为应用层(如HTTP、FTP、SMTP)提供安全业务,服务对象主要是Web应用,即客户浏览器和服务器。它现已成为保密通信的工业标准。
SSL服务器认证允许用户确认服务器身份。支持SSL协议的客户机软件能使用公钥密码标准技术(如用RSA和DSS等)检查服务器证书、公用ID是否有效和是否由在客户信任的认证机构CA列表内的认证机构发放。
SSL客户机认证允许服务器确认用户身份。使用应用于服务器认证同样的技术,支持SSL协议的服务器软件能检查客户证书、公用ID是否有效和是否由在服务器信任的认证机构列表内的认证机构发放。
一个加密的SSL连接要求所有在客户机与服务器之间发送的信息由发送方软件加密和由接受方软件解密,对称加密法用于数据加密(如用DES和RC4等),从而连接是保密的。所有通过加密SSL连接发送的数据都被一种检测篡改的机制所保护,使用消息认证码(MAC)的消息完整性检查、安全散列函数(如SHA和MD5等)用于消息认证码计算,这种机制自动地决定传输中的数据是否已经被更改,从而连接是可靠的。
SSL主要工作流程包括:网络连接建立;与该连接相关的加密方式和压缩方式选择;双方的身份识别;本次传输密钥的确定;加密的数据传输;网络连接的关闭。
应用数据的传输过程如下:
应用程序把应用数据提交给本地的SSL;
发送方根据需要,使用指定的压缩算法,压缩应用数据;
发送方使用散列算法对压缩后的数据进行散列,得到数据的散列值;
发送方把散列值和压缩后的应用数据一起用加密算法加密;
密文通过网络传给对方;
接收方用相同的加密算法对密文解密,得到明文;
接收方用相同的散列算法对明文中的应用数据散列;
计算得到的散列值与明文中的散列值比较。
如果传输结果一致,则明文有效,接收方的SSL把明文解压后得到应用数据上交给接收方的应用。否则就丢弃数据,并向发送方发出报警信息。严重的错误有可能引起再次的协商或连接中断。
SSL是一个两层协议,包括SSL握手层协议和SSL记录层协议。SSL握手层有SSL握手协议(SSL Handshake Protocol)、SSL更改密码说明协议(SSL Change Cipher Spec Protocol)、SSL报警协议(SSL Alert Protocol);SSL记录层有SSL记录协议(SSL Record Protocol),它为更高层提供基于客户/服务器模式的安全传输服务。
SSL协议提供的服务可以归纳为如下三个方面:
(1)用户和服务器的合法性认证。
使得用户和服务器能够确信数据将被发送到正确的客户机和服务器上。客户机和服务器都有各自的识别号,由公开密钥编排。为了验证用户,SSL协议要求在握手交换数据中做数字认证,以此来确保用户的合法性。
(2)加密数据以隐藏被传送的数据。SSL协议采用的加密技术既有对称密钥,也有公开密钥。具体来说,就是客户机与服务器交换数据之前,先交换SSL初始握手信息。在SSL握手信息中采用了各种加密技术,以保证其机密性和数据的完整性,并且经数字证书鉴别,这样就可以防止非法用户破译。
(3)维护数据的完整性。SSL协议采用Hash函数和机密共享的方法,提供完整信息服务,来建立客户机与服务器之间的安全通道,使所有经过SSL协议处理的业务在传输过程中都能完整、准确无误地到达目的地。
9.1.2SSL握手和记录协议
1.SSL握手协议
SSL握手协议被封装在记录协议中,该协议允许服务器与客户机在应用程序传输和接收数据之前互相认证、协商加密算法和密钥。在初次建立SSL连接时服务器与客户机交换一系列消息。
这些消息交换能够实现如下操作:
(1)客户机认证服务器。
(2)允许客户机与服务器选择双方都支持的密码算法。
(3)可选择的服务器认证客户。
(4)使用公钥加密技术生成共享密钥。
(5)建立加密SSL连接。
SSL握手协议报文头包括三个字段:
类型(1字节):该字段指明使用的SSL握手协议报文类型。SSL握手协议报文包括10种类型。
长度(3字节):以字节为单位的报文长度。
内容(≥1字节):使用报文的有关参数。
当客户从服务器端传送的证书中获得相关信息时,需要检查以下内容来完成对服务器的认证:时间是否在证书的合法期限内;签发证书的机关是否是客户端信任的;签发证书的公钥是否符合签发者的数字签名;证书中的服务器域名是否符合服务器自己真正的域名。服务器被验证成功后,客户继续进行握手过程。
同样的,服务器从客户传送的证书中获得相关信息认证客户的身份,需要检查:用户的公钥是否符合用户的数字签名;时间是否在证书的合法期限内;签发证书的机关是否是服务器信任的;用户的证书是否被列在服务器的LDAP(Lightweight Directory Access Protocol,轻量级目录访问协议)里用户的信息中;得到验证的用户是否仍然有权限访问请求服务器资源。
2.SSL记录协议
SSL记录协议为SSL连接提供两种服务:机密性和报文完整性。
在SSL协议中,所有的传输数据都被封装在记录中。记录是由记录头和长度不为0的记录数据组成的。所有的SSL通信都使用SSL记录层,记录协议封装上层的握手协议、警告协议、改变密码格式协议和应用数据协议。SSL记录协议包括了记录头和记录数据格式的规定。
SSL记录协议位于SSL协议的底层,用于定义传输数据的格式,加密/解密、压缩/解压缩、MAC计算等操作。SSL记录协议将高层的协议数据分成较小的单元,并对它进行压缩、附加消息认证码MAC、加密、附加SSL记录头,然后通过低层的传输层协议发送。接收消息的过程正好与发送消息的过程相反,即解密、验证、解压、拼装,然后送给高层协议。
(1)分段:把上层传送来的数据信息块切分为小于或等于214字节的SSL明文记录。记录中包含类型、版本号、长度和数据字段。
(2)压缩:使用当前会话状态中定义的压缩算法对被切分后的记录块进行压缩。压缩算法将SSL明文记录转化为SSL压缩记录。压缩必须是无损压缩,且对原文长度的增加不能超过1024字节。
(3)增加MAC:将消息认证代码(MAC)附加在SSL压缩记录后。
(4)加密:所有的记录均采用在当前的加密约定中定义的加密算法和报文验证MAC算法加以保护。当握手结束后,参与双方共享一个用于加密记录和计算消息认证码MAC的公开密钥。加密和消息认证码(MAC)函数将一SSL压缩记录转换为SSL密文记录。传输时将包含一序列号,这样即使包丢失、被改变或包被重复收到时也可以及时发现。
(5)增加SSL记录:SSL记录头由5个字节组成,第一个字节说明使用SSL记录协议的上层协议类型,如:20表示修改加密约定协议、21表示报警协议、22表示握手协议、23表示应用;第二、第三个字节表示版本号,如:SSL2.0或SSL3.0;第四、第五个字节表示消息的长度。
从上层传来的信息进行分组形成不超过规定长度的明文数据,填充到数据结构t中,针对每一个明文数据结构,采用事先协商好(握手协议)的压缩算法进行压缩。这种压缩既不能引起数据的损失,数据长度的增加也不能超过1024字节。压缩好的数据将利用在握手协议中协商好的加密算法和MAC算法进行加密和保护,最终形成密文数据结构进行传输。
9.1.3SSL协议安全性分析
1.安全机制分析
SSL协议可以被用来建立一个在客户和服务器之间安全的TCP连接。它可以鉴别服务器(有选择地鉴别客户)、执行密钥交换、提供消息鉴别、提供在TCP协议上的任意应用协议数据的完整性和机密性服务,其安全机制包括以下几个方面:
(1)鉴别机制。SSL协议通过使用公开密钥技术和数字证书可以实现客户端和服务器端的身份鉴别。采用SSL协议建立会话时,客户端(也是TCP的客户端)在TCP连接建立之后,发出一个client_hello发起握手,这个消息里面包含了自己可实现的算法列表和其他一些需要的消息。SSL的服务器端会回应一个server_hello,里面确定了这次通信所需要的算法,然后发过去自己的证书(里面包含了身份和自己的公钥)。默认情况下,客户端可以根据该证书的相关内容对其认证链路进行确认,最终实现对服务器端身份的鉴别,同样在需要时也可以采用类似的方法对客户端进行身份鉴别。
(2)加密机制。
混合密码体制的使用提供了会话和数据传输的加密性保护。在进行SSL握手过程中,双方使用非对称密码体制协商出本次将要使用的会话密钥,并选择一种对称加密算法,并应用于此后数据传输的机密性保护。其中非对称密码体制的使用保证了会话密钥协商过程的安全,而对称加密算法的使用可以克服非对称加密的速度缺陷,提高数据交换的时效性。另外,由于SSL使用的加密算法和会话密钥可适时变更,如果某种算法被新的网络攻击方法识破,它只要选择另外的算法就可以了。
(3)完整性机制。SSL握手协议还定义了共享的、可以用来形成消息认证码MAC(Message Authentication Code)的密钥。SSL在对所传输的数据进行分片压缩后,使用单向散列函数(如MD5、SHA-1等)产生一个MAC,加密后置于数据包的后部,并且再一次和数据一起被加密,然后加上SSL首部进行网络传输。这样,如果数据被修改,其散列值就无法和原来的MAC相匹配,从而保证了数据的完整性。
(4)抗重放攻击。SSL使用序列号来保护通信方免受报文重放攻击。这个序列号被加密后作为数据包的负载,在整个SSL握手中,都有一个唯一的随机数来标记这个SSL握手,这样重放便无机可乘。序列号还可以防止攻击者记录数据包并以不同的次序发送。
2.脆弱性分析
SSL协议是为解决数据传输的安全问题而设计的,实践也证明了它针对窃听和其他的被动攻击相当有效,但是由于协议本身的一些缺陷以及在使用过程中的不规范行为,SSL协议仍然存在不可忽略的安全脆弱性。
(1)SSL协议自身的缺陷。
①客户端假冒。因为SSL协议设计初衷是对Web站点及网上交易进行安全性保护,使消费者明白正在和谁进行交易要比商家知道谁正在付费更为重要,为了不至于由于安全协议的使用而导致网络性能大幅下降,SSL协议并不是默认地要求进行客户鉴别,这样做虽然有悖安全策略,但却促进了SSL的广泛应用。针对这个问题可在必要的时候配置SSL协议,使其选择对客户端进行认证鉴别。
②SSL协议无法提供基于UDP应用的安全保护。SSL协议需要在握手之前建立TCP连接,因此不能对UDP应用进行保护。如果要兼顾UDP协议层之上的安全保护,可以采用IP层的安全解决方案。
③SSL协议不能对抗通信流量分析。由于SSL只对应用数据进行保护,数据包的IP头和TCP头仍然暴露在外,通过检查没有加密的IP源和目的地址以及TCP端口号或者检查通信数据量,一个通信分析者依然可以揭示哪一方在使用什么服务,有时甚至揭露商业或私人关系的秘密。然而用户一般都对这个攻击不太在意,所以SSL的研究者们并不打算去处理此问题。
④可能受到针对基于公钥加密标准(PKCS)的协议的自适应选择密文攻击。由于SSL服务器用一个比特标识来回答每条消息是不是根据PKCS#1正确地加密和编码,攻击者可以发送任意数量的随机消息给SSL服务器,再达到选择密文攻击的目的。最广泛采用的应对措施就是进行所有三项检查而不发送警示,不正确时直接丢弃。
⑤进程中的主密钥泄漏。除非SSL的工程实现大部分驻留在硬件中,否则主密钥将会存留在主机的主存储器中,这就意味着任何可以读取SSL进程存储空间的攻击者都能读取主密钥,因此,不可能面对掌握机器管理特权的攻击者而保护SSL连接,这个问题要依靠用户管理策略来解决。
⑥磁盘上的临时文件可能遭受攻击。对于使用虚拟内存的操作系统,不可避免地有些敏感数据甚至主密钥都交换到磁盘上,可采取内存加锁和及时删除磁盘临时文件等措施来降低风险。
(2)不规范应用引起的问题。
①对证书的攻击和窃取。公共CA机构并不总是可靠的,系统管理员经常犯的错误是过于信任这样的公共CA机构。因为对于用户的证书,公共CA机构可能不像对网站数字证书那样重视和关心其准确性。由于微软公司的IIS服务器提供了“客户端证书映射”功能,用于将客户端提交证书中的名字映射到NT系统的用户账号,在这种情况下“黑客”就有可能获得该主机的系统管理员权限!如果“黑客”不能利用上面的非法的证书突破服务器,他们还可以尝试暴力攻击。虽然暴力攻击证书比暴力攻击口令更为困难,但仍然是一种攻击方法。要暴力攻击客户端鉴别,“黑客”编辑一个可能的用户名字列表,然后为每一个名字向CA机构申请证书。每一个证书都用于尝试获取访问权限。用户名的选择越好,其中一个证书被认可的可能性就越高。暴力攻击证书的方便之处在于它仅需要猜测一个有效的用户名,而不是猜测用户名和口令。除此之外,“黑客”还可能窃取有效的证书及相应的私有密钥。最简单的方法是利用特洛伊木马,这种攻击几乎可使客户端证书形同虚设。它攻击的是证书的一个根本性弱点:私有密钥,整个安全系统的核心,经常保存在不安全的地方。对付这种攻击的唯一有效方法或许是将证书保存到智能卡或令牌之类的设备中。
②中间人攻击。中间人(man-in-middle)攻击是指A和B通信的同时,有第三方C处于信道的中间,可以完全听到A与B通信的消息,并可拦截、替换和添加这些消息。如果不采取有证书的密钥交换算法,A便无法验证B的公钥和身份的真实性,从而C可以轻易地冒充,用自己的密钥与双方通信,从而窃听到别人谈话的内容。为了防止中间人攻击,对于所有站点发行的证书,客户最好用自己的公钥来检查证书的合法性。当客户端收到消息后,使用服务器以前公开的公钥解密,然后比较解密后的消息与他原先发给服务器的消息,如果它们完全一致,就能判断正在通信的服务器正是客户端期望与之建立连接的服务器。任何一个中间人不会知道服务器的私钥,也不能正确加密客户端检查的随机消息,从而达到防止中间人攻击。当使用交互式程序在网上冲浪的用户遇到“公司使用未知的CA”的提示信息时,如果无法辨认该信息是真的还是自己遭到了中间人攻击,最好能立刻终止该连接;尽量少的信任自签发证书,因为对于一些机警的用户,他们可能会把伪造的证书变成自签发证书用来打消对方的疑虑。
③即使采用了有证书的密钥交换算法,攻击者还可以从与服务器握手过程中获得一些内容,用于伪造一个与服务器非常相似的证书(如证书发行者的OU域比真证书多一个空格等),这样,当攻击者以中间人的形式与用户进行连接时,虽然客户程序能够识别并提出警告,但仍然有相当多的用户被迷惑而遭到攻击。只要用户有一定的警惕性,是可以避免这种攻击的。
④安全盲点。系统管理员不能使用现有的安全漏洞扫描或网络入侵检测系统来审查或监控网络上的SSL交易。网络入侵检测系统是通过监测网络传输来找寻没有经过鉴别的活动,任何符合已知的攻击模式或者未经授权的网络活动都被标记起来以供审计,其前提是IDS必须能监视所有的网络流量信息,但是SSL的加密技术却使得通过网络传输的信息无法让IDS辨认,这样,既没有网络监测系统又没有安全审查,使得最重要的服务器反而成为受到最少防护的服务器。对此,恶意代码检测、增强的日志功能等基于主机的安全策略会成为最后防线。
⑤IE浏览器的SSL身份鉴别缺陷。通常情况下,用户在鉴别对方身份时根据证书链对证书逐级验证,如果存在中间CA,还应检查所有中间证书是否拥有合法的CA Basic Constraints(CA基本约束,决定该证书是否可以做CA的证书),这种情况下攻击者不可能进行中间人攻击,但实际上IE5.0、5.5、6.0浏览器对是否拥有合法的CA Basic Constraints并不做验证,所以攻击者只要有任何域的、合法的CA签发证书,就能生成其他任何域的合法CA签发证书,从而导致中间人攻击。对此可以给IE打补丁,也可以使用Netscape4.x或Mozilla浏览器。对于一些非常敏感的应用,建议在进行SSL连接时手工检查证书链,如果发现有中间证书,可以认为正在遭受中间人攻击,立即采取相应保护措施。
⑥由于美国密码出口的限制,IE、Netscape等浏览器所支持的加密强度是很弱的。如果只采用浏览器自带的加密功能的话,理论上存在被破解的可能。所以我们坚持这样一个观点:关键的系统、核心的技术应该拥有自主的知识产权。