2.5 OpenSSL面临的安全问题及其解决思路
2.5.1 OpenSSL面临的安全问题
SSL是一个相当不错的安全机制,然而若应用在特殊要求方面,它还存在这样那样的问题。SSL常见的安全问题有下面三种。
1.攻击证书
类似Verisign之类的公共CA机构并不总是可靠的,系统管理员经常犯的错误就是过于信任Verisign等公共CA机构。例如,如果Verisign发放一个证书“某某某”,系统管理员很可能就会相信“某某某”。但是,对于用户的证书,公共CA机构可能不像对网站数字证书那样重视和关心其准确性。例如,Verisign发放了一个“keyman”组织的证书,其中一员“JACK”在一个网站要求认证用户身份时,提交了“JACK”的证书,他可能会对其返回的结果大吃一惊。
如果黑客不能利用非法的证书突破服务器,他们可能尝试暴力攻击(Brute-Force Attack)。虽然暴力攻击证书比暴力攻击口令更为困难,但仍然是一种攻击方法。要暴力攻击客户端认证,黑客编辑一个可能的用户名字列表,然后为每一个名字向CA机构申请证书。每一个证书都用于尝试获取访问权限。用户名的选择越多越好,其中一个证书被认可的可能性就越高。暴力攻击证书的方便之处在于它仅需要猜测一个有效的用户名,而不用猜测用户名和口令。
2.窃取证书
除上面的方法外,黑客还可能窃取有效的证书及相应的私有密钥。最简单的方法是利用特洛伊木马。这种攻击几乎可使客户端证书形同虚设。它攻击的是证书的一个根本性弱点:私有密钥——整个安全系统的核心——经常保存在不安全的地方。对付这些攻击的唯一有效方法或许是将证书保存到智能卡或令牌之类的设备中。
3.安全盲点
系统管理员没办法使用现有的安全漏洞扫描(Vulnerability Scanners)或网络入侵侦测系统(Intrusion Detection Systems,IDS),来审查或监控网络上的SSL交易。网络入侵侦测系统是通过监测网络传输来寻找没有经过认证的活动。任何符合已知的攻击模式或者并未经过政策上授权的网络活动,都被标识以供系统管理者监视。而要让IDS能够发生作用,IDS必须能够监视所有的网络流量信息,但是SSL的加密技术却使得通过HTTP传输的信息无法让IDS辨认。虽然我们可以用最新的安全扫描软件审查一般的网页服务器来寻找已知的安全盲点,这种扫描软件并不会检查经过SSL保护的服务器。受到SSL保护的网页服务器的确拥有与一般服务器同样的安全盲点,可是也许是因为建立SSL连接所需要的时间及困难度,安全漏洞扫描软件并不会审查受到SSL保护的网页服务器。没有网络入侵侦测系统再加上没有安全扫描软件审查,使得最重要的服务器反而成为受到最少防护的服务器。
4.安全漏洞
负责维护软件确保通信畅通的开源软件组织OpenSSL Project在2003年9月30日发布了一个补丁,修复英国政府在安全测试中发现的三个安全漏洞。这些安全漏洞存在于OpenSSL Project版本的安全套接层(SSL)软件中。网站和浏览器使用这种软件为数据加密,在这些安全漏洞中,其中两个安全漏洞可以导致拒绝服务攻击,第三个安全漏洞能够让黑客从互联网上突破计算机系统。OpenSSL安全小组的开发人员Mark Cox表示,英国政府在对这种软件进行严格测试的过程中发现了这些安全漏洞。
2.5.2 解决思路
1.勤打补丁
Linux服务器运行的软件主要包括OpenSSL、SSH、MySQL、PHP、Apache等,这些软件大都是开源软件,而且都在不停升级,稳定版和测试版交替出现。在www.apache.org上,最新的ChangeLog中都写着bug fix或security bug fix的字样。所以Linux网管员要经常关注相关网站的bug fix,及时升级或添加补丁。
2.通过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对于尚未经过授权的网站认证所发出的告警。