17.2 共享主机与应用程序服务提供商

许多组织通过外部提供商向公众提供他们的Web应用程序。这些服务包括组织通过其访问Web与数据库服务器的简单主机服务,以及代表组织主动维护应用程序的成熟应用程序服务提供商(Application Service Provider,ASP)。缺乏能力与资源部署自己的应用程序的小型企业常常采用这种服务,但一些知名公司有时也使用这些服务来部署特殊的应用程序。

大多数Web与应用程序主机服务提供商拥有众多客户,且常常使用相同的基础架构或者紧密相连的基础架构支持许多客户的应用程序。因此,选择使用其中一种服务的组织必须考虑以下相关威胁。

img002 服务提供商的一名恶意客户可能试图破坏该组织的应用程序及其数据。

img002 一名不知情的客户可能部署一个易受攻击的应用程序,使得恶意客户能够攻破共享的基础架构,从而攻击组织的应用程序及其数据。

在共享系统中运行的Web站点是企图丑化尽可能多的Web站点的“脚本小子”的主要攻击目标,因为只要攻破一台共享主机,他们就能在短期内向数百台明显自治的Web站点实施攻击。

17.2.1 虚拟主机

简单的共享主机配置中,一台Web服务器只需要支持几个域名各不相同的虚拟Web站点。它通过Host消息头达到这个目的,在HTTP 1.1中,请求中必须包含该消息头。当浏览器提出一个HTTP请求时,请求中即包含一个Host消息头,该消息头中含有相关URL中的域名;然后,请求被传送到与域名关联的 IP 地址中。如果解析几个域名得到相同的IP地址,在这个地址上的服务器仍然能够确定请求希望访问哪一个Web站点。例如,可以配置Apache使用以下配置支持几个Web站点,这个配置为每个虚拟主机站点设定各不相同的Web根目录。

img507

17.2.2 共享的应用程序服务

许多ASP提供现成的应用程序,可由客户修改与定制后使用。对于拥有大量业务、需要部署功能强大复杂、能为终端用户提供基本相同功能的应用程序的行业,使用这种模型可以节省大量成本。使用ASP提供的这种服务,商家可迅速获得一个知名品牌的应用程序,而且不必投入大量的安装与维护成本。

在金融服务行业,ASP 应用程序市场特别成熟。举例来说,在某个国家,可能有数千家小型零售商希望向顾客提供店内支付卡与信贷服务。这些零售商将这项服务外包给若干不同的信用卡提供商,其中许多提供商为新创办的企业,而非历史悠久的知名银行。这些信用卡提供商提供一种商品化服务,而成本是其中一个关键的竞争因素。因此,许多提供商使用一家ASP为终端用户提供Web应用程序。因此,每一家ASP都对相同的应用程序进行定制处理,以满足大量不同零售商的需求。

图17-5说明了这种服务的典型组织结构与责任划分。从不同代理商与相关任务的角度看,这种服务存在与共享主机基本模型相同的安全问题,但这些问题可能更复杂。而且,这种服务还存在其他特殊的问题,如17.2.3节所述。

img508

图17-5 一家典型应用程序服务提供商的组织结构

17.2.3 攻击共享环境

共享主机与ASP环境引入一系列新的潜在漏洞,攻击者可利用它们针对共享基础架构中的一个或几个应用程序进行攻击。

1.针对访问机制的攻击

因为各种外部组织需要更新与定制共享环境中的不同应用程序,提供商必须执行实现这种远程访问的机制。在最简单的虚拟主机Web站点中,FTP或SCP之类的上传工具即可达到这种目的,客户通过它们在自己的Web根目录中写入文件。

如果主机服务提供一个数据库,客户可能需要直接访问数据库,以配置数据库设置,获取应用程序保存的数据。这时,提供商可执行一个实现某些数据库管理功能的接口,或者通过因特网提供数据库服务,允许客户直接建立连接,并使用他们自己的工具。

在成熟的ASP环境中,各种类型的客户需要对共享应用程序的组件进行不同程度的定制,这时,提供商通常会运行功能强大的应用程序,帮助客户完成这些任务。通常,通过一个VPN(Virtual Private Network,虚拟专用网络)或一个连接ASP基础架构的专用连接,就可以访问这些应用程序。

根据远程访问机制所涵盖的范围,攻击者可针对共享环境实施各种不同的攻击。

img002 远程访问机制本身并不安全。例如,FTP协议未加密,使得处在适当位置(例如,在客户自己的 ISP 内)的攻击者能够截获登录证书。访问机制中还可能包含未打补丁的软件漏洞 或配置缺陷,使得匿名攻击者能够避开访问机制,破坏客户的应用程序和数据。

img002 远程访问机制许可的访问可能过于宽泛,或者未能对客户进行适当的隔离。例如,当用户只需要文件访问时,访问机制可能会为用户提供一个命令shell。另外,访问机制可能并没有限制客户只能访问自己的目录;相反,却允许他们更新其他客户的内容,或者访问服务器操作系统中的敏感文件。

img002 在文件系统访问方面,同样的注意事项也适用于数据库。访问机制可能没有对数据库进行适当的隔离,为每名客户提供不同权限的账户。直接数据库连接可能使用标准ODBC之类的非加密渠道来实现。

img002 如果部署一个定制应用程序实现远程访问(例如,通过一家ASP),这个应用程序必须负责控制不同客户对共享应用程序的访问。管理应用程序中存在的任何漏洞都可能会导致恶意客户,甚至是匿名用户破坏其他客户的应用程序,还会使拥有有限权限的客户能够更新应用程序的皮肤,从而提升其权限,或者修改应用程序核心功能组件,以实现他们的目的。如果部署了这种类型的管理应用程序,那么该应用程序中存在的任何漏洞都可能会导致针对终端用户访问的共享应用程序的攻击。

2.应用程序间的攻击

在一个共享主机环境中,不同的客户通常需要向服务器合法上传并执行任意脚本。这会导致单主机应用程序中并不存在的问题。

img007 预留后门

在最明显的攻击中,恶意客户可能会上传攻击服务器自身或其他客户应用程序的内容。例如,下面的 Perl 脚本在服务器上运行一个远程命令工具:

img509a

从因特网上访问以下这段脚本,客户就能够在服务器上执行任意操作系统命令:

img509b

img510

由于恶意客户的命令以Apache用户的身份执行,这很可能使得该客户能够访问属于共享主机服务其他客户的脚本和数据。

ASP 管理的共享应用程序中也存在这种威胁。虽然核心应用程序功能由ASP控制并更新,但个体用户还是能够以某种确定的方式修改这项功能。恶意客户可以在他们控制的代码中引入其他人难以察觉的后门,从而攻破共享应用程序,访问其他客户的数据。

img004  提示  后门脚本可以用大多数Web脚本语言创建。欲知更多以其他语言编写的脚本实例,请访问:http://net-square.com/ papers/one_way/one_way.html#4.0。

img007 易受攻击的应用程序间的攻击

即使共享环境中的所有客户全都并无恶意,且仅上传经过环境所有者确认的合法脚本,但如果个别用户对存在于应用程序中的漏洞并不知情,应用程序之间的攻击仍有可能发生。在这种情况下,恶意用户可以利用某个应用程序中的漏洞攻破该应用程序以及共享环境中的所有其他应用程序。许多常见的漏洞都属于这种类型,如下所示。

img002 攻击者可以利用某个应用程序中的SQL注入漏洞在共享数据库中执行任意 SQL 查询。如果没有完全隔离访问数据库的不同客户,攻击者就可以读取并修改所有应用程序使用的数据。

img002 攻击者可以利用某个应用程序中的路径遍历漏洞读取或写入服务器文件系统中的任意文件,包括那些属于其他应用程序的文件。

img002 攻击者可以采用与前面描述的恶意客户使用的方法类似的方法,利用某个应用程序中的命令注入漏洞攻破服务器以及服务器上运行的其他应用程序。

img007 ASP应用程序组件间的攻击

前面描述的各种攻击全部可能会在共享ASP应用程序中发生。由于客户可以按照自己的需求对核心应用程序功能进行定制,因此定制应用程序的用户可以利用某名客户引入的漏洞攻击主共享应用程序,从而窃取所有ASP客户的数据。

除这些攻击以外,由于共享应用程序的各种组件必须彼此交互,因而恶意客户或用户能够攻破其他共享的应用程序,如下所示。

img002 由不同应用程序生成的数据通常被分配到一个公共的位置,可以被共享应用程序中拥有较高权限的ASP级用户查看。这意味着攻击者可以利用定制应用程序中存在的XSS漏洞攻破共享应用程序。例如,如果攻击者能够在日志文件条目、支付记录或者个人联系信息中注入JavaScript代码,他们就可以劫持一名ASP级用户的会话,从而访问敏感的管理功能。

img002 ASP通常使用一个共享数据库保存所有客户的数据。应用程序与数据库层面是否对数据访问实施了严格的隔离,这一点无法确定。但是,无论是哪一种情况,都会存在一些共享组件,如数据库存储过程,它们负责处理属于多名客户的数据。恶意客户或用户可以利用这些组件中存在的有缺陷的信任关系或漏洞访问其他应用程序中的数据。例如,一个定义者权限共享存储过程中的SQL注入漏洞可能会导致整个共享数据库被攻破。