分类: LINUX
2010-12-25 10:31:31
1 SSL(Secure Socket Layer)是netscape公司设计的主要用于web的安全传输协议。这种协议在WEB上获得了广泛的应用。
2 IETF()将SSL作了标准化,即RFC2246,并将其称为TLS(Transport Layer Security),从技术上讲,TLS1.0与SSL3.0的差别非常微小。由于本文中没有涉及两者间的细小差别,本文中这两个名字等价。
3 在WAP的环境下,由于手机及手持设备的处理和存储能力有限,wap论坛()在TLS的基础上做了简化,提出了WTLS协议(Wireless Transport Layer Security),以适应无线的特殊环境。
============================
SSL(Secure socket layer)协议最初由Netscape企业发展,现已成为网络用来鉴别网站和网页浏览者身份,以及在浏览器使用者及网页服务器之间进行加密通讯的全球化标准。由于SSL技术已建立到所有主要的浏览器和WEB服务器程序中,因此,仅需安装数字证书,或服务器证书就可以激活服务器功能了。
IETF()将SSL做了标准化,即RFC2246,并将其称为TSL(Transport Layer Security),从技术上讲,TLS1.0与SSL3.0的差别非常微小。由于本文中没有涉及两者之间的细小差别,所以在本文中这两个名词等价。
SSL是介于HTTP和TCP之间的一个可选层,其大致位置如下
———————
HTTP
———————
SSL
———————
TCP
———————
IP
———————
SSL层在TCP层之上建立了一个加密通道,通过这一层的数据经过了加密,因此达到了保密的效果。SSL层借助下层协议的信道安全协商出一份加密密钥,并用此密钥来加密HTTP请求;而TCP层与Web Server的443端口建立连接,传递SSL处理后的数据。
虽然 SSL 最适合用于 HTTP,但它也可以用于 FTP 或其它相关协议。它在传输层运行并且是独立于应用程序的,因此象 FTP 或 HTTP 之类的相关协议可以放在该层之上。使用初始握手来对服务器进行认证。在这一过程中,服务器把证书提交到客户机并指定要使用的首选密码。然后,客户机生成在即将进行的会话期间使用的秘钥,然后将它提交给服务器,并相应地用服务器的公钥对它加密。服务器使用其私钥解密消息,恢复秘钥,然后通过向客户机发送一条使用该秘钥加密的消息来向客户机认证自己。使用这一达成协议的秘钥对加密的数据进行进一步的交换。可以用第二阶段(可选)来进一步增加安全性。这里,服务器发送一个质询,客户机对此作出响应,向服务器返回该质询的数字签名和客户机的公钥证书。质询阶段通常是使用带有用于消息摘要的 MD5 的 RSA 执行的。也可以使用各种对称密码,包括 DES、三重 DES、IDEA、RC2 和 RC4。公钥证书符合 X.509 标准。SSL加密在缺省状态下只进行Server端的认证,客户端的认证是可选的。
[SSL的安全漏洞]
虽然一个网站可能使用了SSL安全技术,但这并不是说在该网站中正在输入和以后输入的数据也是安全的。所有人都应该意识到SSL提供的仅仅是电子商务整体安全中的一小部份解决方案。SSL在网站上的使用可能会造成管理员对其站点安全性的某些错觉。使用了SSL的网站所可能受到的攻击和其它服务器并无任何区别,同样应该留意各方面的安全性。简言之,加密和数字证书,SSL的主要组成,从来都无法保护服务器--它们仅仅可以保护该服务器所收发的数据。
SSL常见安全问题下面三种:
1、攻击证书
类似Verisign之类的公共CA机构并不总是可靠的,系统管理员经常犯的错误是过于信任Verisign等的公共CA机构。例如,如果Verisign发放一个证书说我是“某某某”,系统管理员很可能就会相信“我是某某某”。但是,对于用户的证书,公共CA机构可能不象对网站数字证书那样重视和关心其准确性。例如,Verisign发放了一个“keyman”组织的证书,而我是其中一员“JACK”。当一个网站要求认证用户身份时,我们提交了“JACK”的证书。你可能会对其返回的结果大吃一惊的。更为严重的是,由于微软公司的IIS服务器提供了“客户端证书映射”(Client Certificate Mapping)功能,用于将客户端提交证书中的名字映射到NT系统的用户帐号,在这种情况下我们就能够获得该主机的系统管理员特权!
如果黑客不能利用上面的非法的证书突破服务器,他们可以尝试暴力攻击(brute-force attack)。虽然暴力攻击证书比暴力攻击口令更为困难,但仍然是一种攻击方法。要暴力攻击客户端认证,黑客编辑一个可能的用户名字列表,然后为每一个名字向CA机构申请证书。每一个证书都用于尝试获取访问权限。用户名的选择越好,其中一个证书被认可的可能性就越高。暴力攻击证书的方便之处在于它仅需要猜测一个有效的用户名,而不是猜测用户名和口令。
2、窃取证书
除上面的方法外,黑客还可能窃取有效的证书及相应的私有密钥。最简单的方法是利用特洛伊木马。这种攻击几乎可使客户端证书形同虚设。它攻击的是证书的一个根本性弱点:私有密钥--整个安全系统的核心--经常保存在不安全的地方。对付这些攻击的唯一有效方法或许是将证书保存到智能卡或令牌之类的设备中。
3、安全盲点
系统管理员没办法使用现有的安全漏洞扫描(vulnerability scanners)或网络入侵侦测系统(intrusion detection systems,IDS),来审查或监控网络上的SSL交易。网络入侵侦测系统是通过监测网络传输来找寻没有经过认证的活动。任何符合已知的攻击模式或者并未经过政策上授权的网络活动都被标起来以供系统管理者检视。而要让IDS能够发生作用,IDS必须能够检视所有的网络流量信息,但是SSL的加密技术却使得通过http 传输的信息无法让IDS辨认。再者,虽然我们可以用最新的安全扫描软件审查一般的网页服务器来寻找已知的安全盲点,这种扫描软件并不会检查经过SSL保护的服务器。受到SSL保护的网页服务器的确拥有与一般服务器同样的安全盲点,可是也许是因为建立SSL连结所需要的时间以及困难度,安全漏洞扫描软件并不会审查受到SSL 保护的网页服务器。没有网络监测系统再加上没有安全漏洞审查,使得最重要的服务器反而成为受到最少防护的服务器。
那么针对于这些问题我们有如下三种解决方法:
1、通过Proxy代理服务器的SSL
我们可以在一个SSL Proxy代理程序上使用这项资料审查技术。SSL Proxy是一个在连接埠80上接收纯文字的 HTTP通讯请求的软件,它会将这些请求通过经由SSL加密过的连结,转寄到目标网站。我们在连接埠80开一个听取的socket,通过上述的OpenSSL指令,将所有进入这个proxy的数据传送出去。这在Unix上,只是个小技巧:你只须将以下的指令加到你们的/etc/inetd.conf档案里面,这个inetd.conf包含所有inetd所提供的网络服务的设定:
www stream tcp nowait root /usr/sbin/tcpd /usr/local/bin/ssl_proxy.sh
而/usr/local/bin/ssl_proxy.sh的内容则如下所述:
#!/bin/sh
/usr/local/ssl/bin/openssl s_client -no_tls1 -quiet -connect 168.172.100.10:443 2>/dev/null
168.172.100.10是SSL防护下的网站的地址所在。其中“-no_tls1”以及“-quiet”选项将SSL交谈(handshake)的标题显示关掉,并且也删除了SSL对于尚未经过授权的网站认证所发出的警告。
如果你要想测试你的proxy连结,那么你只要以纯文字的方式,在执行SSL proxy的系统的连接端口80建立联机。这个proxy会使用SSL来转寄接收的请求到目标网站。
$ telnet 182.197.110.180 GET / HTTP/1.0
在这里,服务器正在182.197.110.1的地址执行SSL proxy机制,而真正受到SSL保护的地址则是在168.172.100.10。通过这个SSL proxy机制,我们只要将安全扫描软件指向proxy的IP地址,就可以使用它来审查一个SSL服务器。
2、OpenSSL
OpenSSL包含了一套程序以及函式库,提供前端使用者SSL功能,并且允许软件工程师将SSL模块与他们的程序结合。在众多由SSL提供的产品里面,最能够用来让我们在这里讨论的是命令列模式的(command-line)SSL客户端以及伺服端工具软件。OpenSSL程序是一个指令列接口的程序,它是用来以手动的方式起始SSL连结。OpenSSL让你重新导引与其它程序之间的资料输入以及输出。
3、监测SSL服务器
现在的网络IDS只能够监视纯文字资料内容,所以我们只能够有两项选择:监视服务器上的SSL连结或者将整个连结资料转为纯文字格式。大部分的网页服务器都有一些基本的日志纪录功能。例如:Microsoft的IIS Web server有内建的日志制作功能,使用的是W3svc1格式,它可以侦测到很多一般的网络攻击状况。我通过前述的SSL proxy针对Windows NT 4.0上具备有SSL防护的IIS服务器,来作示范性的攻击。我们用的是由Rain Forest Puppy发现的一般性常见的msadc安全穿透技术。我们的IIS服务器在C:\WINNT\system32\LogFiles的目录下,记载了以下的日志:
12:25:45 10.0.0.1 GET /msadc/msadcs. dll 200
12:25:48 10.0.0.1 POST / msadc/msadcs.dll 200
然而,因为这些日志文件通常是存在网页服务器上面,因此,一个成功的攻击事件表示黑客很可能已经对日志文件下了手脚了。此外,安全管理员必须每天检查服务器上的日志文件(另外还有IDS,防火墙等等),这实在不是个最佳的解决方案。
除了使用主机日志文件的以外,另一个方式是将SSL连结转换成纯文字格式。如此一来网络的IDS就能够监视资料往来。有几种产品提供这项功能,不过他们主要是为了要提升数据处理效能,而不是为了网络安全的理由。建立以及维护SSL连结,必须耗用相当的CPU时间,如此一来会减损网页服务器的效能。市面上有几家厂商提供“电子商务加速器”,用来将与SSL交涉的工作移到不同的装置或处理器。你可以将IDS置放于加速器跟网页服务器之间,以监控纯文字格式的网络交通。用这种方式监控的话,有一个问题。那就是你必须有至少一个网络区隔(network segment)。这个网络区隔必须是安全的,而且与其它的网络装置分开来。