在先前的文章中,我们针对如何保证具有合法授权的付费用户访问Web服务这一问题提出了若干种安全方案。在这篇文章里,我们继续讨论Web服务安全的另一方面问题,那就是如何把黑客狙击在Web服务之外。尽管常用于网站的常规安全技术大多数也完全可以应用于Web服务,但是,在具体的实践中我们还是应该对Web服务多加一份小心。这篇分为两个部分的文章其宗旨就是讨论如何解决这些问题以保证你的Web服务具有最高的安全性。
在我们深入钻研有关Web服务独有的安全问题之前,你首先得弄清楚你正试图防范的Web服务黑客到底分成哪些类型。当然,我们无法窥测潜在的Web服务黑客到底具有怎样的动机,不过,理解可能攻击服务的黑客类型还是非常重要的。我们主要关注3种类型的黑客,他们分别是破坏者、信息窃贼和功能窃贼。
这类黑客的行事目的很简单——纯粹就是制造混乱。破坏者会尝试关闭你的Web服务、修改Web服务器上的数据或者实施其他恶意行为,反正就是为了取乐或者脑子里有水!这类黑客行为不但令人愤怒,而且,从服务可用性的角度看还会损害你的业务运行,但是它的影响通常也可以通过网站的周密监视和优秀的备份策略减到最小。另两种Web服务黑客才是对你的业务和公司的最大威胁。
信息窃贼的攻击目的就是非法地获取公司或顾客的信息。这类信息可以用来进行信用卡犯罪、敲诈企业或提供给商业间谍。相比普通的网站,信息窃贼对Web服务更具危险性,因为许多Web服务特别设计为传播敏感信息。例如,如果你所在公司的Web服务向你提供的客户报告包括了信用卡信息、地址或者电话号码,那么黑客就能够假冒经过认证的用户窃取这类信息并把它出售给需要这些信息的人。同样的,如果你的咨询公司通过一种Web服务为你提供了潜在客户的有关报告,那么你的竞争对手就能通过非法攻击Web服务的方式把你的客户揽到自己麾下。尽管所有的网站都面临此类黑客攻击的风险,但是,因为你公开发布直接指向信息的链接,所以Web服务相对而言在发生此类攻击的情况下特别脆弱。
这类黑客是随着Web服务的出现而产生的最新威胁。大多数普通网站都不会向用户直接暴露其内部功能。网站的核心功能,不论是购买股票还是资金转帐,通常都隐藏在用户界面之后而且受到多重安全检查。但Web服务就不一样了,同类的功能(具体表现为编程时的函数或者方法调用)必须直接暴露给消费服务的最终用户。这样一来,由于黑客只需要拦截Web服务的单一功能调用就足以获得他(或她)所需要的全部知识来发起自己的服务功能调用,所以这种劫持Web服务的行为相对而言更容易实现。
例如,你不妨想象下面的场景:假设你提供的Web服务可以让用户通过经纪人购买股票。经纪人的网站允许用户选择他们想要购买的股票类别和数量,然后即可获取购买股票的资金。接着该网站调用你的股票购买Web服务,指出股票的类别和数量以及用户购买股票的各类信息。如果某一位黑客拦截了这一Web服务并用他(或她)自己的信息替代购买者的信息,那么Web服务就会把合法用户支付资金之后购买的股票付给黑客。或者,再举个例子,假如黑客登录到经纪人的站点为他(或她)购买股票,因为他或她正在进行这一购买交易,所以他或她能确切地知道什么时候会对Web服务进行调用,这样一来要拦截Web服务调用就更容易了。黑客随后即可增加他或她所购买股票的数量。虽然他或她仅仅支付了购买10股股票所需的资金,但你的Web服务却可能在黑客的帐户上分配了1000股。
为所有网站和Web服务提供保护的第一个层次就是所谓的SSL(安全套接字层)。这是一种当前常用在网站上保护所有信用卡交易的工业标准;市场上的各种主要浏览器都支持SSL。 SSL采用公钥体系结构(PKI)保护客户机和服务器之间的通讯安全。PKI使用VeriSign之类的认证中心(Certification Authority)决定客户机和服务器之间所采用的加密措施。
进行一宗 SSL 交易的第一步是客户机向服务器提出安全通讯的请求。如果服务器配置了数字证书,它就用该证书的一份拷贝及其密钥的公共部分(参见图A)响应请求。客户机通过认证中心验证公钥保证它没有被伪造。一旦公钥被接受,客户机就准备自己请求,同时用它从服务器那里收到的公钥对请求进行加密。经过加密的消息随后被发送给服务器,服务器则使用自己存储的秘钥的私有部分对该消息解密。
图A
SSL是一种具有最少开发时间和使用完全透明的安全通讯机制。因为
SSL 对客户机上的通讯全部进行加密,所以拦截Web服务调用的黑客只能看见经过加密之后的消息,从而保护了你的方法名和参数定义等秘密信息。
但是,在单单依赖SSL保护你的Web服务之前还需要考虑一些可能的缺点。比如从认证中心购买数字证书和服务是要钱的。有时费用可能高达1000美元之多,具体取决于发出证书的认证中心和证书的加密强度。
而且,不管费用多少,购买证书的加密强度并一定能决定每宗交易所采用的加密强度。大多数的浏览器都支持完整的128位加密。然而,由于出口法律的某些规定,同类浏览器还必须提供强度更弱的40位加密版本。用来对消息加密的位数决定了解密的难度。就算你为你的Web服务器购买了128位证书,如果客户浏览器(或其他应用程序)仅仅支持 40 位的加密算法,那么消息将自动地采用强度更弱的保护措施实施加密。
黑客的解秘能力是值得我们关注另一焦点问题。黑客可以通过访问安全Web服务并分析客户机和服务器之间数据流量的方式非常容易地获取SSL秘钥公共部分。采用这一公钥就有可能确定出私钥,这样,黑客就可以解密所有到达Web服务的流量。这是一个实施起来很困难的过程而且对那些毛头黑客而言简直是可望而不可及,但是,如果你的Web服务具有很高的价值,比如资金转帐或购买股票等,那么总会有黑客无法抗拒诱惑而穷尽全力、蠢蠢欲动。
在这篇文章的第二部分,我们将继续讨论可用来保护Web服务安全的其他技术,例如使用Web服务路由器、参数扰乱以及其他加密技术等。