深蓝海域KMPRO

Web服务防黑谈(二)

2002-09-17 10:14

Web服务防黑谈(二)

在Web服务防黑谈系列的第1篇文章里,我们讨论了Web服务开发者所必须正视和优先防范的黑客类别,同时,我们还研究了SSL的原理以及为什么说SSL可能无法提供自身足够安全性的原因。现在,我们就向读者提出若干种防范Web服务免遭信息和功能窃贼危害的技术。

Web服务路由器和IP阻塞

先说说Web服务路由器和IP阻塞技术。当然,这些技术在本系列文章的第一篇中就讨论过了。对Web服务开发者来说,他们最担心的无非是敏感功能在暴露给外部世界的时候所面临的巨大危险。可是功能的暴露不正是 Web服务的目的吗?Web服务不就是为了能在公司或个人之间公开地分享和消费有用的功能吗?然而,这种开放性的共享却比传统型的标准网站制造出了更大的危险,显然,大多数网站都在用户界面之后隐蔽了它们的功能。

黑客要想获得访问Web服务器上保存数据的非法权限可以采取多种方法。黑客们可以设法模仿合法的用户或 IP 地址;或者也可以通过服务器开放的端口或五花八门的攻击方式获得访问权限。这就是为什么大多数公司在防火墙后面隐蔽雇员计算机的原因:为了让黑客访问计算机或者偷窃数据更为困难。

拒绝黑客的访问正是采用Web路由器和IP阻塞技术的目标。在这种情形下,在访问Web服务的时候要用到两种服务器。第一种服务器作为路由器位于防火墙之外。第二种服务器则位于防火墙之内并包含了实际的Web服务代码。当授权客户调用Web服务时,他们实际调用了防火墙之外的服务器上的路由器Web服务,同时传递参数表明它们想调用的真正Web服务。路由器对参数进行检验决定向哪儿发送请求。接着,路由器调用Web服务并等候回应。在收到回应后,路由器就可以把回应传回给客户(参看图A)。

图A

采用带IP阻塞的Web服务路由器

这种灵活性实现了通过单一路由器访问任何Web服务的可能。单一路由器Web服务能把请求路由给内部服务器上的任何方法。而且,因为Web服务可以在多种操作系统之间互操作,这种内部服务就可以在任何平台上用任何语言编写而不考虑路由器Web服务的语言或平台。

为了安全起见,防火墙内部的服务器只能接受来自具有已知IP地址的服务器的请求,而这些服务器还必须包含路由器Web服务。这样就可以把实际的服务代码放在防火墙之内,保护代码免于受到常见的非法攻击。而且,访问防火墙内的开放端口或执行远程命令可就困难多了。

虽然以上的技术措施提升了Web服务功能的整体安全性,但却并没有为防范IP地址欺诈或者其他非法认证方法提供额外的保护。如果黑客设法欺骗路由器Web服务,那么他们仍然能获取实际Web服务的访问权限。

参数迷惑

由于采用Web服务路由器和IP阻塞技术尚不能防止真实服务被未授权路由器Web服务的非法使用,从而令非法攻击者可以重定向到真实的Web服务,因此,你需要采用其他技术方案来保护路由器Web服务。Web服务的问题之一是非授权用户可以很轻松地找出访问函数所需要的特定方法和参数名、类型。这类信息可以方便地通过WSDL文件获取。某些产品,比如Visual Studio .NET可以自动地创建示例网页允许有兴趣的用户在标准的HTML表单中键入参数。

所有这一切使得有意的黑客可以采取随机参数值的方法轻松访问你的Web服务并尝试调用它。例如,如果黑客看见某个方法被称为RefundCreditCardCharge并接受两个参数,CardNumber和Amount,那么他可以很轻松地创建自己的函数调用,同时把他自己的信用卡号和需要的美元数量传递给你的Web服务。

当然,这类Web服务自然会采取其他安全措施,比如我们在以前文章中所讨论的Web服务安全技术等。然而,如果黑客能克服这些安全措施,那么再也没有什么办法能阻止他们给自己的的信用卡非法加入大量的金钱。

对策还是有的,这就是所谓的参数迷惑技术(parameter obfuscation),通过这种措施隐藏Web服务调用的细节来防止黑客的窥探(参见图B)。在图B的例子中,我们把两个必需的参数组合为难以复制的单一参数,从而模糊了服务的调用细节。这个单一参数可以是一个简单的XML字符串或复杂的、由用户定义的必要参数的组合。

图B

参数迷惑技术使得黑客难以发起Web服务调用

使用参数迷惑技术的好处是黑客眼里看到的Web服务调用方法RefundCreditCardCharge只有唯一的参数Data。黑客无法知道Data参数的结构组成方式,因此对他而言就很难发起有效的Web服务调用了。接着,Web服务首先采取的行动就是验证数据参数的结构,如果结构不对就返回错误信息。

当参数迷惑技术再应用到Web服务路由器时更带来了额外的益处。这样设置就可以让路由器只接受两个参数,一个参数标识目标方法,而另一个参数则包含目标Web服务所需要的数据。这样从路由器调用多少方法都无所谓了,而且也不再为各种方法所需要的参数数量和类型费脑筋。

参数和结果加密

先前我们已经讨论了采用迷惑参数的办法防止黑客采用随机参数值执行Web服务功能。这个解决方案在黑客直接窥测服务的情形下很管用。然而,这一方法并没有在黑客拦截服务调用的情况下提供额外的安全性。

如果黑客们能拦截Web服务调用,他们自然也就能获取所有参数的名字和细节。就算多个参数经过迷惑性的组合之后成为单一的XML参数,黑客也能很容易地搞清楚单一参数的结构并且通过模仿它的方式非法调用Web服务。

因此,我们这里要用到另一种逻辑技术,这就是在把参数发送给服务器之前对客户程序上的参数加密。这种技术实现起来不难,而且在Web服务开发者控制或影响客户程序的状况下也能起到很好的作用。本系列的第一篇文章中曾经举过股票经纪人的例子,经纪人业务站点调用股票购买Web服务。我们能够很容易地采用相应的加密解决方案以便经纪人业务可以采用专门设计的定制代码,而这些代码则是对那些发送给Web服务的参数的加密。然后, Web服务将在完成请求之前对参数解密。

在这种情形下,Web服务开发者就可以控制客户程序调用Web服务的方式,因此开发者实际上成为唯一知道密钥的人。由于同一实体拥有加密通信的双方所以也没有必要采用公钥体系结构了。这种加密策略是很难攻破的。

如果Web服务包含了敏感信息,那么对Web服务的响应进行加密就更是必要的了。例如,我们的金融股票购买服务会返回一个包含客户敏感信息(比如社会保障号码)对象。我们需要加密这一结果来防范响应信息被拦截。

多种技术保安全

经过以上的综述我已经讨论了阻止Web服务受到黑客攻击以及其他非法使用的若干技术。采用任何敏感数据或功能的Web服务都至少应该包括SSL这样的最低安全形式。而其他技术对典型的Web服务来说则更具一定的安全性,它们对那些诸如银行和股票购买应用程序等极其敏感的Web服务来说具有非常重要的作用。为了实现高水平的安全性,以上所有这些技术可以通过联合运用的方式来增加安全层的难度。发送加密的迷惑性参数给采用SSL加密的路由器Web服务会让那些蠢蠢欲动的黑客们冻得发抖。

浏览:Web服务防黑谈(一)

相关推荐