SOA使企业能够将自身业务打包提供给客户和合作伙伴使用,推动了电子商务的发展。同时,企业还承担了公开(或有限开放)所带来的一系列管理、安全和法律方面的风险。越拉越多的黑客行为已经表现出有组织犯罪的特征,攻击者也从过去单纯地炫耀和寻找刺激的心理转变为有目的的牟利。因此,我们在为SOA摇旗呐喊的时候,不能忽视SOA面临的安全挑战。
1 SOA安全性特点
1.1 跨技术、身份和管理边界的身份转换和传播
一套完整的业务流程可能由不同厂商的基于异构平台的多种服务组合而成,每个服务都具有各自独立的安全域。这些安全域可能由不同企业的不同部门负责管理和维护,这要求必须在SOA架构范围内建立统一的信任体系,使得请求者(人或程序)能够在服务间自由流动,系统能够自动地将请求者身份随着边界的不同而转换。
1.2 与合作伙伴建立信任
借助Web服务的强大能力,企业往往需要与合作伙伴建立紧密地服务和数据交换,发挥各自的优势来共同组成一个完整的一站式服务。比如一个旅行服务系统,机票订购由专门的机票代理公司提供,旅游线路设计和行程服务则由旅行社负责,而食宿则由当地旅店提供。为了保证客户信息能够在多个系统安全完整地流动,并及时地反映客户实时的旅行状态,必须在企业与合作伙伴之间建立可靠、安全的信任关系。
1.3 跨多个应用程序统一、重用和共享公共安全性
SOA具备来自异构系统的多样性,要求建立一个统一的安全基础设施和标准。每个应用系统可以使用共享安全组件,比如CA认证中心、信道加密方式和SOA安全网关等。此外,统一的安全标准遵从对于SOA整体安全性而言至关重要。
1.4 政府和行业规范要求的可追究性和可跟踪性
在业务合作伙伴之间交换敏感信息时,敏感信息必须受到保护,同时可能还需要用安全的方式在一定时期内保存敏感信息。在启用验证、审核和许可之前,必须保证消息源的完整性(如通过公证服务)。消息的完整性和保密性可以通过对敏感信息进行加密和数字签名来实现。完整的 SOA 设计必须不但涵盖消息级和传输级安全性,而且还要满足保存保护的内容以遵守政府规章制度和业界最佳实践的需要。企业需要对其提供的服务进行担保,确保服务仅执行其公开申明的操作,同时有义务为用户提供足够的安全保障。因此,企业必须保存系统操作记录,以此来跟踪其用户或消息,也就是说企业必须具有很强的服务审计能力。
1.5 SOA强调机器与机器的交互,而大多数IT安全性都是基于人与机器的交互
身份验证和授权在这个环境中变得更加富于挑战性。在未受保护的SOA中,想要阻止Web服务的未授权使用实际上是不可能的。未授权用户可以非常轻松地访问Web服务,而Web服务往往不具备跟踪谁在使用它们或者谁被允许使用它们的固有功能。传统的安全防御对象主要是针对人,而SOA更多地强调了机器与机器的交互,即所谓服务的互操作性,如何应对来自合作伙伴或第三方服务交互请求的威胁(大多数情况下,这些请求被人恶意利用和操纵)将是SOA安全防御的一项重要课题。
2 SOA面临的安全挑战
2.1 XML通信协议消耗大量带宽,引发安全问题
与传统的二进制通信协议相比,XML最高可以消耗高达50倍的带宽,这不仅会导致交互系统性能下降,而且会为分布式拒绝服务攻击提供可趁之机。因此,未经优化的XML通信将导致严重的安全问题。
由于SOA架构的开放性本质,您很难控制SOA中未知的第三方,比如您的合作伙伴,它们可以间接访问未受保护的Web服务。因此,未受保护的Web服务很容易超负荷运转,如果没有访问控制,未受保护的Web服务很容易被来自黑客的大量SOAP消息所“淹没”,结果可能导致拒绝式攻击从而损害系统的正常功能。
为了解决这类问题,市场上已出现了专门的XML加速器。利用基于64位平台架构的语法分析器,该设备可以用来加速XML/SOAP的解析、XML模式的确认、XPath的处理以及 XSLT的功能转换。据公开的产品测试报告称,这种XML加速器能够达到每秒处理1万多条XML消息的能力。
2.2 基于XML的服务间通信易受到监听和窃取
由于XML的纯文本的本质,未经保护的XML在互联网传输过程中很容易被监听和窃取。为了保障基于XML的通信安全,我们需要从传输层和消息层两个层面进行保护。通过传输安全,可以保证只允许授权用户可以访问基于XML的Web服务,目前可扩展访问控制标记语言(Extensible Access Control Markup Language,XACML)和Web服务策略(WS-Policy)是专门用来解决这个问题的两个标准;通过消息安全,可以保证Web服务环境中交换的XML消息的完整性和保密性,Web服务安全(Web Service Security,WSS)和安全声明标记语言(Security Assertion Markup Language,SAML)则用来解决这方面的问题。
目前主要的XML安全标准包括:XML加密、XML签名语法和处理、数字签名和XML密钥管理规范(XML Key Management Specification,XKMS)等。值得一提的是,现有的XML安全标准已经可以实现对XML文档进行有选择的签名处理,而这在以前是不可能做到的,要么整个文档被签名,要么根本不签名。
下面我将重点介绍XML加密和XML签名。它们已经由W3C发布为标准,可以用来把安全加入到基于XML的数据中去。
XML加密是用来把原始的XML数据通过密码依次加密,从而让数据能够在请求者和服务端之间以一种模糊的方式传输。密码仅由请求者和服务端掌握,这就能保证即使是在传输的过程中有数据被截取,窃取者也只能看到一堆毫无意义的字符串,从而防止敏感信息泄露。
另一方面,XML签名则用来防止XML文档的被非法篡改。通过使用XML签名,一个服务供应商可以提供给任何的服务消费者以一种确定的方式来检测XML的有效负载是否相对于它原来的方式或者原来的状态发生了改变。
需要特别指出的是,XML加密和XML签名适用于任何的XML类型的文档。意识到这一点是很重要的,因为它们不仅仅可以用来保护服务交互的有效负载的交换,同样的它们也可以用来保护类似WSDL这种契约,这些文档也是基于XML的,并且也是SOA中的一个重要组成部分。
同样,市场上也出现了专门解决这类问题的产品,称为XML安全网关。类似传统的防火墙,企业可以把它部署在网络边界上,从而对所有进出的XML数据进行保护。XML安全网关遵循包括XML和WS-Security在内的行业标准,对XML数据进行验证、加密、签名以及认证,来提供安全的基于XML的Web服务通信。此外,它还可提供防火墙功能和访问控制功能。有些产品还可以与网络管理软件集成,帮助企业降低IT管理成本,并解决依从性需求。
2.3 缺乏良好的编程模型严重威胁企业安全
对于任何应用程序来说,保护信息访问的安全都是最基本的要求。由于按 SOA 原则而构造实现的服务、应用程序以及跨组织操作所具有的松耦合特性,这种环境往往更加容易暴露现有安全实现的弱点或局限性,因此缺乏良好的编程模型将严重威胁Web服务的安全。
仅采用边界防御(如防火墙和路由器)来保护企业信息安全是不够的,因为企业必须能够随着其合作伙伴、客户和雇员之间的关系发展而建立和断绝动态的信任关系。因此,企业需要灵活的、可自定义的基础设施,以适应新要求和规章制度。要提供这种灵活性,不应简单的指望将策略生搬硬套到基础设施中,应该在服务的开发过程中建立和遵循由策略驱动的编程模型。SOA 编程模型可以确保每个服务调用都符合对请求者和服务端点均有效的安全策略。
从安全的角度来看,编程模型负责对于谁负责实现安全策略(如基础设施或应用程序)以及需要让请求者得到此信息的哪一部分等做出决策。另一方面要考虑的是调用服务的变数。服务的消费者是否通过可在订阅期间定制的选择得到了灵活性。最后,在实现安全解决方案时,还应该考虑安全工程用于构建安全应用程序的工程方法。
3 其它SOA安全保护方法
3.1 应用程序代理
一种非常有效的保护核心系统的方法是避免让任何人直接访问提供服务的平台,可以通过为SOA中的Web服务部署一个代理做到这一点。一个受保护的代理可以代表实际的Web服务接收所有Web服务请求,并对其做出响应,从而保护Web服务免遭恶意的侵害。代理方法的另一个好处在于,它能够减轻企业安全性基础架构的负担。代理可以降低网络流量,具体方法是集中管理和缓存对Web服务请求的身份验证和授权,而不是每次用户想调用Web服务时,就在网络上使用大量消息对该用户进行身份验证和授权。代理还可以在消息中插入了身份验证和授权SAML断言,从而消除了Web服务请求者直接查询核心安全性系统的风险。
3.2 契约管理
作为主要的SOA 管理问题之一,契约管理在SOA安全性中起着举足轻重的作用。所谓契约就是用于管理Web服务使用情况的一组规则。例如,某个契约可能会规定某个特定用户有权每天调用某个特定的Web服务五百次,而且在调用过程中,服务水平必须满足特定的参数,比如所有请求都必须在2秒钟内响应。
在安全性方面,契约有助于确定SOA是否运行正常,或者由于违反安全性规则而被误用。例如,SOA拦截器把Web服务请求和响应数据发送给SOA安全管理中心,然后该SOA安全管理中心确定该请求是否满足契约。如果某个安全性行为(比如拒绝式服务攻击)使Web服务的响应速度降低到契约规定的服务水平以下,SOA安全管理中心就会警告系统管理人员有问题存在,甚至可以根据预设的策略自动采取必要的措施,比如对某些攻击请求进行阻断或限制次重要服务的使用频率等。尽管一次足够严重的攻击可以导致整个网络崩溃,但是合理的契约管理至少可以使我们得到及时的安全问题通知,从而有效地采取行动。
总之,为了应对SOA的安全挑战,需要在企业范围内(还应包括其合作伙伴)建立一套统一的安全基础设施,通过对请求者进行身份验证和对其授予服务访问权、基于基本信任模型跨Web服务请求传播安全上下文、审核重要事件,以及有效地保护数据和内容,安全基础设施帮助企业形成一套完整的保护基于组件和服务的SOA环境的结构。
所有SOA 安全的核心都是基于策略的基础设施和策略的管理。在理想的情况下,SOA 应用程序的重点在于业务逻辑、委派安全策略的实现,以及处理基础设施的信任关系。而基于 Web 服务安全规范的Web服务安全模型和方法有助于解决保护面向服务的应用程序的难题。