SSL的安全漏洞及解决方案.docx
《SSL的安全漏洞及解决方案.docx》由会员分享,可在线阅读,更多相关《SSL的安全漏洞及解决方案.docx(8页珍藏版)》请在冰豆网上搜索。
SSL的安全漏洞及解决方案
SSL安全漏洞及解决方案
·cool007
如果你在互联网上访问某些网站时在浏览器窗口下方有一个锁小图标,就表示它表示该网页被SSL保护着。
但用SSL防护网站真能够防范黑客吗?
现在国内有很多人对SSL存在这么一个认识误区:
SSL很安全,受到SSL防护网页服务器资料就一定是万无一失,这也导致这样一个局面,只要有着SSL防护网站服务器很少接受审查以及监测。
其实不然,对于安全要求不甚高交易或认证,SSL还是一个相当不错安全机制,然而若应用在特殊要求方面,它还存在有这样那样问题。
在下面文中我将为大家简单介绍SSL存在安全漏洞及解决方案,希望本文对你有所帮助。
一、认识SSL
一般人认为SSL是保护主机或者只是一个应用程序,这是一个误解,SSL不是设计用来保护操作系统。
SSL是SecureSocketsLayer通讯协议简称,它是被设计用来保护传输中资料,它任务是把在网页以及服务器之间数据传输加密起来。
这个加密(encryption)措施能够防止资料窃取者直接看到传输中资料,像是密码或者信用卡号码等等。
在这里谈到SSL,你就必须了解数字证书(DigitalCertificates)概念。
数字证书是一种能在完全开放系统中准确标识某些主体机制。
一个数字证书包含信息必须能鉴定用户身份,确保用户就是其所持有证书中声明用户。
除了唯一标识信息外,数字证书还包含了证书所有者公共密钥。
数字证书使用允许SSL提供认证功能--保证用户所请求连接服务器身份正确无误。
在信用卡号或PIN号码等机密信息被发送出去前让用户确切知道通讯另一端身份是毫无疑问重要。
很明显,SSL技术提供了有效认证。
然而大多数用户并未能正确意识到通过SSL进行安全连接必需性。
除非越来越多用户了解SSL和安全站点基本知识,否则SSL仍不足以成为保护用户网络连接必需技术。
除非用户能够充分意识到访问站点时应该注意安全连接标识,否则现有安全技术仍不能称为真正有效。
目前几乎所有处理具有敏感度资料,财务资料或者要求身分认证网站都会使用SSL加密技术(当你看到https在你网页浏览器上URL出现时,你就是正在使用具有SSL保护网页服务器。
)。
在这里我把SSL比喻成是一种在浏览器跟网络服务器之间“受密码保护导管”(cryptographicpipe),也就是我们常说安全通道。
这个安全通道把使用者以及网站之间往返资料加密起来。
但是SSL并不会消除或者减弱网站所将受到威胁性。
在SSL这个安全通道背后,一般没有受到SSL防护网站一样具备了相同网页服务器程序,同样网页应用程序,CGIscript以及后端数据库。
目前普遍存在这么一个错误认识:
很多系统管理者却认为,受到SSL防护网页服务器自动就变得安全了。
其实不然,事实上,受到SSL防护网页服务器同样还是会受到与一般其它网站服务器遭受攻击威胁,受到SSL防护网页服务器不一定是万无一失。
二、SSL安全漏洞
虽然一个网站可能使用了SSL安全技术,但这并不是说在该网站中正在输入和以后输入数据也是安全。
所有人都应该意识到SSL提供仅仅是电子商务整体安全中一小部份解决方案。
SSL在网站上使用可能会造成管理员对其站点安全性某些错觉。
使用了SSL网站所可能受到攻击和其它服务器并无任何区别,同样应该留意各方面安全性。
简言之,加密和数字证书,SSL主要组成,从来都无法保护服务器--它们仅仅可以保护该服务器所收发数据。
SSL常见安全问题下面三种:
1、攻击证书
类似Verisign之类公共CA机构并不总是可靠,系统管理员经常犯错误是过于信任Verisign等公共CA机构。
例如,如果Verisign发放一个证书说我是“某某某”,系统管理员很可能就会相信“我是某某某”。
但是,对于用户证书,公共CA机构可能不象对网站数字证书那样重视和关心其准确性。
例如,Verisign发放了一个“keyman"组织证书,而我是其中一员“JACK”。
当一个网站要求认证用户身份时,我们提交了“JACK”证书。
你可能会对其返回结果大吃一惊。
更为严重是,由于微软公司IIS服务器提供了“客户端证书映射”(ClientCertificateMapping)功能,用于将客户端提交证书中名字映射到NT系统用户帐号,在这种情况下我们就能够获得该主机系统管理员特权!
如果黑客不能利用上面非法证书突破服务器,他们可以尝试暴力攻击(brute-forceattack)。
虽然暴力攻击证书比暴力攻击口令更为困难,但仍然是一种攻击方法。
要暴力攻击客户端认证,黑客编辑一个可能用户名字列表,然后为每一个名字向CA机构申请证书。
每一个证书都用于尝试获取访问权限。
用户名选择越好,其中一个证书被认可可能性就越高。
暴力攻击证书方便之处在于它仅需要猜测一个有效用户名,而不是猜测用户名和口令。
2、窃取证书
除上面方法外,黑客还可能窃取有效证书及相应私有密钥。
最简单方法是利用特洛伊木马。
这种攻击几乎可使客户端证书形同虚设。
它攻击是证书一个根本性弱点:
私有密钥--整个安全系统核心--经常保存在不安全地方。
对付这些攻击唯一有效方法或许是将证书保存到智能卡或令牌之类设备中。
3、安全盲点
系统管理员没办法使用现有安全漏洞扫描(vulnerabilityscanners)或网络入侵侦测系统(intrusiondetectionsystems,IDS),来审查或监控网络上SSL交易。
网络入侵侦测系统是通过监测网络传输来找寻没有经过认证活动。
任何符合已知攻击模式或者并未经过政策上授权网络活动都被标起来以供系统管理者检视。
而要让IDS能够发生作用,IDS必须能够检视所有网络流量信息,但是SSL加密技术却使得通过http传输信息无法让IDS辨认。
再者,虽然我们可以用最新安全扫描软件审查一般网页服务器来寻找已知安全盲点,这种扫描软件并不会检查经过SSL保护服务器。
受到SSL保护网页服务器确拥有与一般服务器同样安全盲点,可是也许是因为建立SSL连结所需要时间以及困难度,安全漏洞扫描软件并不会审查受到SSL保护网页服务器。
没有网络监测系统再加上没有安全漏洞审查,使得最重要服务器反而成为受到最少防护服务器。
三、解决方法
至于如何保护证书安全,你可以采用IDS(IntrusionDetectionSystem),它是一种用于监测攻击服务器企图技术和方法。
典型IDS监视网络通讯,并将其与保存在数据库中已知攻击“特征”或方法比较。
如果发现攻击,IDS可以提醒系统管理员、截断连接或甚至实施反攻击等。
问题在于如果网络通讯是加密,IDS将无法监视。
这反而可能会使攻击更为轻松。
假设在一个典型被防火墙和IDS防护DMZ环境中,黑客能轻松地探测被SSL保护网站,因为SSL对数据加密使得IDS无法正常监测攻击。
通常一台单一网站服务器会同时使用SSL和普通TCP协议。
由于黑客攻击服务器而不是网络连接,他们可以选择任意一种途径。
通过SSL途径,黑客知道SSL加密为他们带来好处,这样更容易避开IDS系统监测。
在这里我主要介绍是如何解决系统管理员没办法使用现有安全漏洞扫描或网络入侵侦测系统而存在网页服务器安全盲点情况,目前解决这个困扰常用方法大致有以下三种:
1、通过Proxy代理服务器SSL
我们可以在一个SSLProxy代理程序上使用这项资料审查技术。
SSLProxy是一个在连接埠80上接收纯文字HTTP通讯请求软件,它会将这些请求通过经由SSL加密过连结,转寄到目标网站。
我们在连接埠80开一个听取socket,通过上述OpenSSL指令,将所有进入这个proxy数据传送出去。
这在Unix上,只是个小技巧:
你只须将以下指令加到你们/etc/inetd.conf档案里面,这个inetd.conf包含所有inetd所提供网络服务设定:
wwwstreamtcpnowaitroot/usr/sbin/tcpd/usr/local/bin/ssl_proxy.sh
而/usr/local/bin/ssl_proxy.sh内容则如下所述:
#!
/bin/sh
/usr/local/ssl/bin/openssls_client-no_tls1-quiet-connect168.172.100.10:
4432>/dev/null
168.172.100.10是SSL防护下网站地址所在。
其中“-no_tls1”以及“-quiet”选项将SSL交谈(handshake)标题显示关掉,并且也删除了SSL对于尚未经过授权网站认证所发出警告。
如果你要想测试你proxy连结,那么你只要以纯文字方式,在执行SSLproxy系统连接端口80建立联机。
这个proxy会使用SSL来转寄接收请求到目标网站。
$telnet182.197.110.180GET/HTTP/1.0
在这里,服务器正在182.197.110.1地址执行SSLproxy机制,而真正受到SSL保护地址则是在168.172.100.10。
通过这个SSLproxy机制,我们只要将安全扫描软件指向proxyIP地址,就可以使用它来审查一个SSL服务器。
在这里,你可以使用whisker程序(网址:
SSL防护网站服务器。
Whisker是一个由RainForestPuppy写出来script,可以用来检查已知比较容易受到入侵网站应用程序以及CGIscript。
./whisker.pl-h168.172.100.2
--whisker/v1.3.0a/rainforestpuppy/ADM/wiretrip--
-Loadedscriptdatabaseof1691lines
=-=-=-=-=-=
=Host:
168.172.100.2
=Server:
Microsoft-IIS/4.0
+404ObjectNotFound:
GET/cfdocs/
+404ObjectNotFound:
GET/cfide/Administrator/startstop.html
+404ObjectNotFound:
GET/cfappman/index.cfm
+404ObjectNotFound:
GET/cgi-bin/
+403AccessForbidden:
HEAD/scripts/
+403AccessForbidden:
HEAD/scripts/cpshost.dll
+404ObjectNotFound:
HEAD/samples/search/queryhit.htm
+404ObjectNotFound:
HEAD/adsamples/config/site.csc
+403AccessForbidden:
HEAD/scripts/counter.exe
+403AccessForbidden:
HEAD/scripts/samples/
以上情况是在182.197.110.1上执行whisker,然后whisker使用SSL将所有HTTP请求转寄到168.172.100.10。
SSLproxy观念已经存在一阵子了。
目前有一个名为sslproxy.c程序可以执行以上功能(网址:
http:
//www.obdev.at/Products/sslproxy.html)。
另外还有一个最近才出来,执行SSLproxy还有它额外功能工具程序,叫做stunnel(http:
//www.stunnel.org/),是由BrianHatch开发。
然而,因为使用命令列模式操作OpenSSL软件相对来说比较简单,所以我将在下面介绍这种方式。
2、OpenSSL
OpenSSL(相关资料网址:
http:
//www.openssl.org/)包含了一套程序以及函式库,提供前端使用者SSL功能,并且允许软件工程师将SSL模块与他们程序结合。
在众多由SSL提供产品里面,最能够用来让我们在这里讨论是命令列模式(command-line)SSL客户端以及伺服端工具软件。
OpenSSL程序是一个指令列接口程序,它是用来以手动方式起始SSL连结。
OpenSSL让你重新导引与其它程序之间资料输入以及输出。
使用普遍可得安全扫描软件来审查SSL服务器在研究技术文件时,我们在Apache提供给OpenSSL接口模块mod_ssl(相关资料网址:
http:
//www.modssl.org/)读到了一些有趣信息。
其中有一段常见问题讨论到有关测试在SSL保护下网站服务器。
你可以利用Telnet连到网页服务器第80号连接埠,然后下达如下httpget指令,从网页服务器取得网页:
因为SSL通联必须要经过一个安全连接埠,而在这里我们使用是没有安全防护连接埠80,因此,这个技巧在HTTPS通讯协议上是行不通。
然而,如果我们用是OpenSSL程序,我们就可以在SSL连接上做同样一件事情。
下面是OpenSSL连结细节
openssl:
s_client-connect:
443
CONNECTED(00000003)
depth=0/C=US/ST=Washington/L=NewCastle/O=RampartSecurityGroup
LLC/OU=Web/OU=Termsofuseat
(c)99/CN=
verifyerror:
num=20:
unabletogetlocalissuercertificate
verifyreturn:
1
depth=0/C=US/ST=Washington/L=NewCastle/O=RampartSecurityGroup
LLC/OU=Web/OU=Termsofuseat
(c)99/CN=
verifyerror:
num=27:
certificatenottrusted
verifyreturn:
1
depth=0/C=US/ST=Washington/L=NewCastle/O=RampartSecurityGroup
LLC/OU=Web/OU=Termsofuseat
(c)99/CN=
verifyerror:
num=27:
certificatenottrusted
verifyreturn:
1
depth=0/C=US/ST=Washington/L=NewCastle/O=RampartSecurityGroup
LLC/OU=Web/OU=Termsofuseat
(c)99/CN=
verifyerror:
num=21:
unabletoverifythefirstcertificate
verifyreturn:
1
---
Certificatechain
0s:
/C=US/ST=Washington/L=NewCastle/O=RampartSecurityGroup
LLC/OU=Web/OU=Termsofuseat
(c)99/CN=
i:
/C=US/O=RSADataSecurity,Inc./OU=SecureServerCertification
Authority
---Servercertificate
-----BEGINCERTIFICATE-----
MIIClTCCAgICEGJTOhcnU+VNQDZ7fqS1K8UwDQYJKoZIhvcNAQEEBQAwXzELMAkG
A1UEBhMCVVMxIDAeBgNVBAoTF1JTQSBEYXRhIFNlY3VyaXR5LCBJbmMuMS4wLAYD
VQQLEyVTZWN1cmUgU2VydmVyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTAw
MDEyNDAwMDAwMFoXDTAxMDEyMzIzNTk1OVowgbsxCzAJBgNVBAYTAlVTMRMwEQYD
VQQIEwpXYXNoaW5ndG9uMRMwEQYDVQQHFApOZXcgQ2FzdGxlMSMwIQYDVQQKFBpS
YW1wYXJ0IFNlY3VyaXR5IEdyb3VwIExMQzEMMAoGA1UECxQDV2ViMTMwMQYDVQQL
FCpUZXJtcyBvZiB1c2UgYXQgd3d3LnZlcmlzaWduLmNvbS9SUEEgKGMpOTkxGjAY
BgNVBAMUEXNlY3VyZS5yYW1zZWMuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCB
iQKBgQD+0K9xpPTh79iWWXc5JmTeJrg5YNdmwP5EwfKSPqOk2E8QSRNk8+Huv7h7
h636cDbmIh+J+VuRO5x5YP8apUCcqRfIMmQevTFzaIyCf3Mwm/OKNTs+4tqA5kjT
SedbBUGaaY2A1VcK0uby1djc+oX8XoCMoRWy+VGBkBrLK51t2QIDAQABMA0GCSqG
SIb3DQEBBAUAA34AhT7v59KwTvldIHJV7U4Doca+/wQ6ivbyd35K9hC/wxwE/jnO
oBXFKaJvV6mHk9hVz37CtLauUGYIZb3x7Cw6GajhhPicLi0l6ndH4VF9C4tbUb4t
2yw/6Jy9i+TfsO/Ldcu4KV0688vfORWm663+6miLYHKGNqFMaR3QaXc=
-----ENDCERTIFICATE-----
subject=/C=US/ST=Washington/L=NewCastle/O=RampartSecurityGroup
LLC/OU=Web/OU=Termsofuseat
(c)99/CN=
issuer=/C=US/O=RSADataSecurity,Inc./OU=SecureServer
Certification
Authority
---
NoclientcertificateCAnamessent
---
SSLhandshakehasread801bytesandwritten312bytes
---
New,TLSv1/SSLv3,CipherisRC4-MD5
Serverpublickeyis1024bit
SSL-Session:
Protocol:
TLSv1
Cipher:
RC4-MD5
Session-ID:
020000001E9F693D9F9D5FF87E6DF24A0BAFC85391992415991DF3AB74522BCB
Session-ID-ctx:
Master-Key:
08FD7A5E6D058A45D0855AD359C0428F3BB5A685E6D74DFB9CDAB6D6A2ED7D53
E97147155DC7B9C61B946BE6
Key-Arg:
None
StartTime:
963184785
Timeout:
300(sec)
Verifyreturncode:
0(ok)
---
GET/HTTP/1.0
HTTP/1.1200OK
Server:
Microsoft-IIS/4.0
Content-Location:
http:
//216.182.36.154/index.html
Date:
Mon,10Jul200011:
41:
25GMT
Content-Type:
text/html
Accept-Ranges:
bytes
Last-Modified:
Thu,23Mar200001:
41:
15GMT
ETag:
"305fc7e06894bf1:
38441"
Content-Length:
886
通过上面OpenSSL这项技术,我们就可以直接传送资料到有SSL保护网站,然后用我们一般审查任何HTTP服务器安全性方式来审查这个SSL网页服务器。
3、监测SSL服务器
现在网络IDS只能够监视纯文字资料内容,所以我们只能够有两项选择:
监视服务器上SSL连结或者将整个连结资料转为纯文字格式。
大部分网页服务器都有一些基本日志纪录功能。
例如:
MicrosoftIISWebserver有内建日志制作功能,使用是W3svc1格式,它可以侦测到很多一般网络攻击状况。
我通过前述SSLproxy针对WindowsNT4.0上具备有SSL防护IIS服务器,来作示范性攻击。
我们用是由RainForestPuppy发现一般性常见msadc安全穿透技术。
我们IIS服务器在C:
\WINNT\system32\LogFiles目录下,记载了以下日志:
12:
25:
4510.0.0.1GET/msadc/msadcs.dll200
12:
25:
4810.0.0.1POST/msadc/msadcs.dll200
然而,因为这些日志文件通常是存在网页服务器上面,因此,一个成功攻击事件表示黑客很可能已经对日志文件下了手脚了。
此外,安全管理员必须每天检查服务器上日志文件(另外还有IDS,防火墙等等),这实在不是个最佳解决方案。
除了使用主机日志文件以外,另一个方式是将SSL连结转换成纯文字格式。
如此一来网络IDS就能够监视资料往来。
有几种产品提供这项功能,不过他们主要是为了要提升数据处理效能,而不是为了网络安全理由。
建立以及维护SSL连结,必须耗用相当CPU时间,如此一来会减损网页服务器效能。
市面上有几家厂商提供“电子商务加速器”,用来将与SSL交涉工作移到不同装置或处理器。
你可以将IDS置放于加速器跟网页服务器之间,以监控纯文字格式网络交通。
用这种方式监控话,有一个