2.3 跨领域信息交换安全技术

安全保障体系是跨领域信息交换可靠、安全运行的基础。跨领域信息交换需要具备良好的安全策略、安全手段、安全环境、安全管理措施,实现合法的用户采用正确的方式,在正确的时间对相应的数据进行正确的操作,确保数据的机密性、完整性、可用性和合法使用。

传统安全体系结构往往采用防火墙和入侵检测系统实现基于边界的安全控制,以阻止安全威胁。在跨领域信息交换中,由于数据传输要通过其安全边界,因此这样的安全模型不能够满足要求。跨领域信息交换在安全性上必须满足如下要求:

(1)认证:所有的服务提供者都要求服务使用者在接受服务请求时进行身份验证。作为服务使用者,在收到响应时也需要验证服务提供者。

(2)授权:除了服务使用者的身份验证,访问服务还要求服务使用者具有一定的授权。这种授权通常基于某种访问控制策略,如基于属性的访问控制。

(3)保密:保护底层的通信传输或传送中的消息,使未经授权方无法获取信息。

(4)数据完整性:提供保护,避免消息在传输过程中被篡改或破坏。

(5)不可抵赖性:确保消息发送者不能否认已发送的消息,消息接收方不能否认已收到的消息。

(6)可管理性:安全架构应提供上述安全功能的管理能力,包括凭证管理、用户管理、访问控制策略管理等。

(7)可审计性:包括安全日志和审计,这也是支持不可抵赖性的要求。

此外,对于跨领域信息交换,还需要考虑以下安全需求问题。

(1)跨信任域的安全。安全体系结构必须提供一个信任模型,可以跨不同信任域进行Web服务调用。

(2)安全策略的定制。在传统安全域,资源和服务往往有一套统一的安全保护机制,在跨领域信息交换中服务提供者的要求可能会有所不同。例如,一个服务可能需要X.509证书进行认证,而另一个服务的身份验证可能只需要用户名和密码认证。因此,安全策略必须能够根据需要进行灵活调整。

(3)与现有信息安全解决方案的整合。跨领域信息交换的安全架构并不取代现有的安全基础设施;相反,应充分利用现有的安全基础设施,应与现有的安全工具和应用程序无缝集成。

(4)确保基础设施服务的安全,如服务发现、消息传递和服务管理等。

(5)不可见性。安全体系结构应不影响其他服务的实现。具体地说,新安全体系结构的部署不会给服务提供者带来以下问题:被限制使用任何一个特定的编程语言,向一个特定的硬件平台进行服务迁移,针对任何特定供应商的API接口修改现有的服务实现,重新编译或重建现有的代码集。

为了满足跨领域信息交换安全的需求,可以综合运用基于XML的安全标准和规范,包括基于属性的访问控制(ABAC)、XML加密标准(XML Encrypt)、XML数字签名标准(XML Digest)、XML公钥管理规范(XKMS)、安全断言标记语言(SAML)、扩展访问控制标记语言(XACML)、Web服务安全规范(WS-Security)等。由于篇幅有限,本节重点介绍本书所涉及的几种安全协议的基本原理。

2.3.1 基于属性的访问控制(ABAC)

传统的基于角色的访问控制(Role-Based Access Control,RBAC)模型,通过对用户分配角色,再对角色赋予相应的权限来达到访问控制的目的。但是,在开放的SOA环境中,基于角色的访问控制存在一定的缺陷。

(1)角色是静态的,随着用户和访问资源的增多,需要定义更多角色。大量的角色将会增加维护的难度和成本。

(2)在多个角色访问同一个资源的情况下,不能提供细粒度的访问控制。

(3)在跨领域的访问控制中,一个安全域角色和权限在另一个安全域内有可能会失效。

基于属性的访问控制(Attribute-Based Access Control,ABAC)模型,以访问控制实体的属性作为最小粒度,特别适合开放式环境,可为其提供细粒度的访问控制。属性作为访问控制中的基本单位,主要包括主体属性、资源属性、环境属性。

主体是指请求对某种资源执行某些动作的请求者。主体属性主要定义主体的身份和特性,包括身份、角色、职位、年龄、IP地址等。

资源是指系统提供给请求者使用的数据、服务和系统组件。资源属性包括资源的身份、URL地址、大小、类型等。

环境是指访问发生时的、可操作的、技术层面的环境或上下文。环境属性包括当前时间、日期、网络的安全级别等。

1.ABAC的定义

基于属性的访问控制模型的定义如下[9]

(1)设S表示主体,R表示资源,E表示环境。

(2)SAk(k∈[1,K])、RAm(m∈[1,M])、EAn(n∈[1,N])为主体S、资源R和环境E的预定义属性。

(3)ATTR(s)、ATTR(r)、ATTR(e)分别表示主体S、资源R和环境E的属性赋值关系,则有

img

例如,对主体的单个属性进行赋值Age(s)=30,Role(s)=Employee等。

(4)用一个基于s、r、e的布尔函数来判断主体S能否在环境E的条件下访问资源R。

Rule:img函数根据s、r、e的属性值进行判断,如果返回true则允许访问,返回false则拒绝访问。

(5)一种策略可以由多条规则组成,每条规则都包含了主体S、资源R、环境E的属性值。

一条最简单且一般化的策略规则包括彼此独立的主体、资源、环境属性。访问控制决策是通过匹配主体、资源、环境属性得出的。例如,规则“具有角色‘Manager’的用户可以访问‘Approve-Purchase’服务”表示为

img

2.ABAC的基本结构

ABAC的基本结构如图2-32所示[10],其功能描述如下。

img

图2-32 ABAC的基本结构

(1)策略实施点(Policy Enforcement Point,PEP)。

PEP是一个访问控制的实体,可拦截SOAP服务请求,并向策略决策点(PDP)发送授权请求;然后根据授权响应结果,执行相应的动作,如允许用户请求和拒绝用户请求等。

(2)策略决策点(Policy Decision Point,PDP)。

PDP用于收集主体、资源和环境的属性,并利用策略规则集来判断用户的访问请求是否满足要求,从而决定是许可还是拒绝,并将决策结果返回PEP。

(3)策略管理点(Policy Authority Point,PAP)。

PAP用于编写策略和策略集,策略中主要定义了获得访问权必须满足的属性要求。

(4)属性授权机构(Attribute Authority,AA)。

AA主要负责给PDP提供决策所需的各项属性,主要包括主体属性、资源属性和环境属性。

2.3.2 安全断言标记语言(SAML)

跨领域信息交换需要满足现有的各业务领域相互交织的、复杂的信任关系。如果按照各自为政的信任服务体系的构建方式,必然造成各业务领域之间的信任管理错综复杂、交叉认证链过长,从而导致整个信任服务体系难以有效地管理和运行。因此,可以采用一种新的机制,通过对自然人、机构和设备分别建立基准的职能信任服务体系,并在此基础上进一步构建相应的授权服务体系来实现各业务领域的管理权限。安全断言标记语言(Security Assertion Markup Language,SAML)提供了一种信任与授权的标准架构。它与具体的实现无关,允许对实体、特权、权限进行声明,通过XML文档来定义服务对象的鉴别、授权、权限和会话信息。因此,基于SAML构建跨领域的信任与授权系统,能够以更加便捷和灵活的方式构建跨领域的安全体系。

SAML是一个基于XML的标准,是用于在不同的安全域(Security Domain)之间交换用户身份、身份验证和属性信息的OASIS 开放标准,是OASIS组织安全服务技术委员会(Security Services Technical Committee)的产品。

SAML是一个XML框架,也就是一组协议,可以用来传输安全声明。例如,两台远程机器之间要通信,为了保证安全,可以采用加密等措施,也可以采用SAML来传输,传输的数据以XML形式,符合SAML规范,这样就可以不要求两台机器采用什么样的系统,只要求能理解SAML规范即可。这显然比传统的加密方式更好。

1.SAML声明

SAML将传输的安全信息定义为相应的声明。声明用XML来描述,以Request/Response的形式在多个信任合作者之间传送。声明提供主体所执行的验证、主体属性、是否允许主体访问特定资源的授权决策等信息。通过SAML声明的形式将信任与授权信息绑定到SOAP等开放性协议中,并通过HTTP、SMTP等通用的应用层协议在网上传递,以达到信任与授权信息共享的目的。SAML定义了验证、属性和授权3种声明。

(1)验证声明(Authentication)。

验证声明定义了用户的认证信息,如认证机构、方式和有效期等;处理主体在特定时刻、特定机制下的身份验证。

(2)属性声明(Attribute)。

属性声明提供将主体与特定属性联系起来的一种机制,如主体的系统用户标志、所属用户组、角色、可访问的资源、权限等。

(3)授权声明(Authorization Decision)。

授权声明管理是否允许用户访问特定的资源及权限。

每个声明都包含Version、AssertionID、Issuer、IssueInstant(声明创建时间)等必要信息,而<Conditions>元素则定义了声明有效性验证所依赖的条件。<Statement> 包含以下3个子元素:<SubjectStatement>用来描述认证对象的相关信息,<AuthenticationStatement> 记录了认证方式、认证时间、IP 地址等内容,<AuthorizationDecisionStatement>记录了授权的依据、权限等信息。声明只能由认证授权方产生,用户只是声明的使用者,不能创建声明。

2.SAML工作原理

SAML可以实现在不同的安全系统中跨信任域交换认证和授权信息。SAML本身没有定义新的认证与授权机制,但定义了用于不同授权系统间传输安全信息的交换机制。所以,SAML不仅是一种用来描述信任与授权信息的标准,更是一种解决分布式应用系统中信任与授权共享问题的框架体系。

SAML体系结构如图2-33所示[11]。资源的请求方与提供方以SAML声明传递安全信息,SAML声明由认证与授权权威机构颁发,确保声明的有效性。SAML工作流程具体给出了SAML声明的传递过程,其步骤如下。

img

图2-33 SAML体系结构

(1)客户端向身份鉴别提交凭证信息。

(2)身份鉴别调用认证管理服务系统对客户端凭证信息进行验证,并产生认证声明;同时,通过认证的客户端将得到一个含有SAML声明的令牌。

(3)客户端使用这个含有SAML声明的令牌请求访问被保护的资源。

(4)客户端对被保护资源的SAML访问请求被策略实施点截获,提交给策略决策点。

(5)策略决策点根据决策参考信息产生SAML授权声明,批准或拒绝客户端的访问请求。

2.3.3 扩展访问控制标记语言(XACML)

扩展访问控制标记语言(eXtensible Access Control Markup Language,XACML)是OASIS组织发布的一种基于XML、用于表示访问控制规则和策略的安全标准。XACML最大的优点就在于它提供了统一的策略描述语言,能适应多种应用环境,支持广泛的数据类型和规则联合算法,策略表达能力很强,可用来描述各种复杂和细粒度的访问控制安全需求。

XACML定义了授权决策所需规则的策略语言,提供了根据策略和规则来控制Web服务访问的更细粒度的安全机制,能够在Web Services这种分布式环境中根据主体、资源和环境属性等动态评估访问请求,并进行授权决策[12]

XACML在策略表达上结构清晰,将安全规则表示为主体、客体、行为和约束4个主要属性的属性值集合。XACML是基于XML的访问控制策略标记语言,使用标签来标识安全策略的各个元素。XACML的标签规定了策略名、规则名、规则属性等,种类丰富。XACML通过<Policy>标签及其属性值声明策略ID、策略适用群组和规则联合算法,以对策略做出标识和说明。PolicyID和PolicyTarget分别用于声明策略ID和策略适用群组;RuleCombiningAlgId声明了规则联合算法,规则联合算法的作用是解决安全策略中不同安全规则可能造成的冲突,以保证每个访问请求只得到一个最终授权结果。策略是由规则组成的,XACML用标签<RuleID></Rule>来标识规则。在规则标签头中,RuleID是规则ID,Effect标识该规则是一个许可规则还是一个拒绝规则。在规则体内,用<Target></Target>标识规则的各属性,包括主体(Subject)、客体(Resourc)和行为(Action),对每个属性,都在相应标签中先标识属性名称,如“FileType”,再标识该属性的属性值。约束属性用<Condition>标签标识,位于<Target>之后。在安全规则的4个属性中,如果对某个属性没有安全约束限制,则可以省略该属性的标签。XACML策略表达举例如图2-34所示。

img

图2-34 XACML策略表达举例

XACML与SAML体系结构紧密相关,都涉及处理身份验证、授权和访问控制问题,但解决的问题又不尽相同。SAML负责在不同安全域中交互的实体间安全传递身份认证信息和授权决策信息;XACML则给出了一种安全架构,完成授权决策的判定。虽然XACML提供了一个标准化的安全访问控制决策模型,但没有定义这些构件之间的通信协议和安全机制来提供消息的机密性和完整性保护;而SAML定义了声明、协议和传输安全机制。所以,XACML和SAML的结合可以提供一个完整的Web服务授权访问控制方案。