当前位置:文档之家› Web安全渗透测试(SSL)

Web安全渗透测试(SSL)

Web安全渗透测试(SSL)
Web安全渗透测试(SSL)

企业级Web安全渗透测试之SSL篇

一、简介

目前,许多重要的Web服务都使用了SSL和TLS协议对通信进行保护。我们知道,http 协议是使用明文进行传输的,但是像网络银行之类的web应用如果使用http协议的话,那么所有的机密信息都会暴露在网络连接中,这就像银行用一个透明的信封给我们邮寄信用卡帐号和密码一样,在从银行到达用户之间任何接触过这封信的人,都能看到我们的帐号和密码。为了提高其安全性,经常需要通过SSL或者TLS隧道传输这些明文,这样就产生了https 通信流量。例如网络银行之类的应用,在服务器和客户端之间传输密码,信用卡号码等重要信息时,都是通过https协议进行加密传送的。

SSL和TLS是两种安全协议,它们通过加密技术为传输的信息提供安全信道、机密性和身份验证等安全功能。我们知道由于对高级密码技术的出口限制,会造成遗留系统使用的是弱加密技术。如果系统采用了弱密码,或者说密码强度过低的话,攻击者可以在有效的时间内破解密钥,而攻击者一旦得到了密钥,就像小偷得到了我们家的钥匙一样,所有的锁都会形同虚设。但是,新Web服务器就不会使用弱加密系统了吗?答案是否定的,因为许多新Web服务器也经常被配置成处理虚密码选项。为了实现这些安全特性,协议必须确保使用的密码算法有足够的强度,并且密码算法得到了正确的实现。即使服务器安装使用了高级的加密模块,但是如果配置不当的话,也有可能为安全特性要求较高的通信信道的设置了较弱的加密技术。下面,我们将详细介绍如何对这两种协议的配置进行安全审计。

二、测试SSL/TLS的密码规范

我们知道,http协议是使用明文进行传输的,为了提高其安全性,经常需要通过SSL

或者TLS隧道传输这些明文,这样就产生了https通信流量。除对传输的数据进行加密处理之外,https(安全超文本传输协议,HTTPS)还能利用数字证书为服务器或客户端提供身份标识。

过去,美国政府对加密系统的出口有许多限制,如密钥长度最大为40位,因为密钥长度越短,它就越容易破解。后来,密码出口条例已经放宽了许多,但是,检查服务器的SSL 配置仍然十分重要,因为它有可能配置使用了弱加密技术。基于SSL的服务不应该提供选择弱密码的机会。

注意,我们这里所说的弱密码,指的是加密强度不够、容易破解的加密系统。不同的加密算法具有不同的密码强度,但是在算法一定的情况下,密钥的长度越长,加密强度越高。

技术上,选择加密技术的过程如下所示:在建立SSL连接的初期,客户端向服务器发送一个Client Hello消息,以告知服务器它支持哪些加密技术等。一般情况下,客户端通常

例4.中间人攻击

这样就能读取iframe的内容,如下图所示:

五、测试SSL证书的有效性

通过https协议访问Web应用程序时,就会在客户端(通常为浏览器)和服务器之间建立一个安全信道。然后,通过数字证书为通信的一方(服务器)或双方(客户和服务器)建立身份标识。为了进行通信,这些证书需要通过多道检测。基于SSL和证书的身份验证超出了本文的范围,我们这里主要探讨证书有效性的主要标准:检查认证中心是否是可信的机构;检查证书当前的有效性;站点名称和证书中所声称的是否一致。要经常升级您的浏览器,因为CA证书也会过期,在浏览器的不同版本中,CA证书会重新生成。另外,因为越来越多

的网站要求强度高于40或者56位的加密,这时也需要更新浏览器,因为一些老版本不支持这些高强度加密。下面我们做进一步的解释。

1.每个浏览器都带有一个预装的受信CA列表,当我们收到证书时,可以到签发该证书的认证中心CA去验证一下。当然,这个列表是可以随意定制和扩展的。在与https服务器的初步磋商期间,如果服务器证书是浏览器不了解的认证中心签发的,那么就会抛出一个警告。出现这种情况,一般是因为Web应用程序的证书是由一个自建的认证中心所签发的。对于内部网环境来说,自建认证中心是比较合适的,因为企业web电子邮件是通过https传输的,同时,企业内的所有用户都会信任这个内部认证中心。但是,当通过Internet向公众提供服务时,则需要使用一个所有公共用户都信任的认证中心。

2.证书都有一个有效期,因此,它也是会过期的。同样,如果证书过期的话,浏览器也会抛出一个警告。公用服务需要一个暂时有效的证书;否则,当我们跟一个服务器通信时,只要它的证书是受信任的认证中心颁发的,即使过期也无需重新生成。

3.如果证书中的名称跟服务器的名称不相配怎么办呢?如果出现这种情况,就说明很可疑。一个系统可以托管许多基于名称的虚拟主机,这些虚拟主机共享同一个IP地址,彼此靠HTTP 1.1的Host:头部相互区别。在这个例子中,因为在处理HTTP请求之前,SSL握手时会检查服务器证书,所以它不可能为每个虚拟服务器分配不同的证书。因此,如果站点的名称和证书中所指出的名称不匹配,那么我们浏览器就会发出通知。为了避免这种情况,必须使用基于IP的虚拟服务器。RFC2817(https://www.doczj.com/doc/7817715507.html,/rfc/rfc2817.txt)和RFC3546(https://www.doczj.com/doc/7817715507.html,/rfc/rfc3546.tx)这两个文档描述了处理这个问题并允许正确引用基于名称的虚拟主机的方法。

证书有效性的黑盒测试

下面介绍如何检查应用程序使用的证书的有效性。当浏览器遇到过期的证书、由不可信的认证中心签发的证书以及证书上的名称跟服务器名称不一致时,它就会发出一个警告。访问https站点的时候,我们只要单击在浏览器窗口中的―锁‖图标,就能看到与证书有关的信息,如证书签发机构、有效期、加密特性等。

如果应用程序要求客户端证书,那也不要紧,因为访问该程序之前我们很可能已经安装过证书,所以可以通过查看浏览器证书列表中已安装的的相关证书来获得必要的证书信息。

对于应用程序所用的所有SSL通信信道,必须进行上述检查。虽然https服务通常运行在443端口上,但还可能有依赖这个Web应用程序的其它服务,从而导致https管理端口一直打开,或者在非标准的端口上运行https服务,等等。因此,要对所有已经发现的使用SSL 进行封装的端口进行检查,比如,nmap扫描程序提供了一个扫描模式——需要在命令行中加上–sV选项来启用该模式——专门用来查找使用SSL进行封装的服务。安全漏洞扫描程序Nessus也能对所有使用SSL/TLS封装的服务进行检查。

证书有效性的白盒测试

在服务器和客户端级别都检查应用程序所用的证书的有效性。证书最初是应用在Web 服务器级别的,然而,SSL还可能用来保护其它通信路径,例如DBMS使用的路径。您应该检查应用程序体系结构来寻找所有的SSL保护的通道。

六、测试工具

下面介绍在测试加密信道的安全性的时候,可能有到的测试工具:

安全漏洞扫描器可以检查证书的有效性,包括名称匹配情况和过期情况。此外,它们通常还报告其他信息,诸如颁发证书的机构等等。请记住,哪些CA是可信的,完全取决于人们的观念和软件的配置;不过,浏览器通常带有一组预设的可信认证中心。如果您的Web 应用程序使用的CA没有位于这个列表中的话,例如依靠一个自建的认证中心,那么您应该让用户重新配置他们的浏览器,让浏览器认可这个认证中心。

扫描程序Nessus有一个插件可以用来检查已经过期的证书、或者在60天内将过期的证书。该插件的id为15901,名字为SSL certificate expiry。这个插件将检查安装在服务器上的证书。

有的安全漏洞扫描器也能检查弱密码,比如,扫描程序Nessus,它就能指出存在的SSL 弱密码。

此外,我们还可能需要一些特殊的工具,例如SSL Digger

(https://www.doczj.com/doc/7817715507.html,/resources/proddesc/ssldigger.htm);或者Openssl工具,它能直接从UNIX命令行下访问Openssl加密函数,该工具的下载地址为https://www.doczj.com/doc/7817715507.html,。为了识别基于SSL的服务,可以使用具有服务识别能力的安全漏洞扫描程序或者端口扫描程序。扫描程序nmap具有一个-sV扫描选项,用以识别服务;安全漏洞扫描程序Nessus则能识别在任意的端口上的基于SSL的服务,并对这些服务进行安全漏洞检查——不管它们是在标准端口还是非标准的端口上。

如果需要与SSL服务交互但是您喜爱的工具却不支持SSL的话,可以求助于SSL代理,例如stunnel,它能在底层协议中打通隧道跟SSL服务进行通信。

最后,尽管人们乐于使用常规浏览器来检查证书,但是浏览器通常具有许多漏洞,此外浏览器进行检测时可能受到许多不易察觉的配置设置的影响。相反,依靠安全漏洞扫描器或者专门的工具来进行检查则要好得多。

七、小结

如果Web服务中的SSL和TLS协议出现安全问题,后果会如何?很明显,这样的话攻击者就可以拥有你所有的安全信息,包括我们的用户名、密码、信用卡、银行信息……所有的一切。本文向读者详细介绍了如何针对Web服务中的SSL和TLS协议进行安全渗透测试:我们首先对这两种协议进行了概述,然后详细介绍了针对加密信道安全性的黑盒测试和白盒测试。最后还列出了一些常用的安全测试工具。

相关主题
文本预览
相关文档 最新文档