XACML学习

Posted 亮亮至上

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了XACML学习相关的知识,希望对你有一定的参考价值。

学习资料

  1. 基本概述与语法。
    https://medium.com/identity-beyond-borders/a-beginners-guide-to-xacml-6dc75b547d55

说明
可以通过此链接从整体是认识XACML.同时能简单的使用xacml生成策略。

  1. 手册。
    https://is.docs.wso2.com/en/6.0.0/references/extend/access-control/xacml3-sample1/

  2. 其他网贴

3.1 基本概念。

XACML简介

1.1 基本概念

本节介绍Web服务访问控制中的如下一些基本概念。

(1)主体(Subject)

主体即请求对某种资源执行某些动作的请求者。

(2)资源(Resource)

资源即系统提供给请求者使用的数据、服务和系统组件。

(3)策略(Policy)

策略是一组规则,规定主体对资源使用的一些要求,多个策略组合形成策略集(Policy Set)。

(4)策略执行点(Policy Enforcement Point,PEP)

它是在一个具体的应用环境下执行访问控制的实体,将具体应用环境下访问控制请求转换为适应XACML要求的决策请求。然后根据决策请求的判决结果执行相应的动作,如允许用户请求和拒绝用户请求等。

(5)策略决策点(Policy Decision Point,PDP)

它是系统中授权决策的实体,依据XACML描述的访问控制策略以及其他属性信息进行访问控制决策。

(6)策略管理点(Policy Administration Point,PAP)

它是在系统中产生和维护安全策略的实体。

(7)策略信息点(Policy Information Point,PIP)

通过它可以获取主体、资源和环境的属性信息的实体。

1.2  访问控制框架

本节介绍Web服务的访问控制框架,在此基础上介绍访问控制的基本过程,如图所示。

在该框架下,访问控制的基本过程如下。

第1步:策略管理点(PAP)产生需要的安全策略,这些策略使用XACML语言描述,是访问控制决策的基础。

第2步:在一个具体的应用程序环境下,策略执行点(PEP)截获用户发送的访问控制请求,这个访问控制请求的内容和格式根据不同的应用程序而不同。

第3步:策略执行点将截获的访问控制请求发送给上下文处理器,由上下文处理器把请求统一成XACML格式的访问控制请求。

第4步:上下文处理器将产生的XACML格式的访问控制请求发送给访问控制决策点(PDP),请求PDP进行访问控制决策。

第5步:PDP在处理访问控制决策的时候可能需要其他的一些条件,如主体的属性、资源的属性及环境的属性,PDP将这些额外条件请求发送给上下文处理器。

第6步:上下文处理器将依据属性请求的类型,向策略信息点(PIP)发送属性请求。

第7步:PIP根据请求向不同的实体请求不同的属性信息,包括主体的属性信息、环境的属性信息和资源的属性信息,并将得到的信息返回给上下文处理器。

第8步:上下文处理器将属性信息和资源的上下文信息(资源的上下文信息可选)发送给PDP。

第9步:PDP根据策略信息、属性信息,以及资源的上下文信息进行访问控制决策,并将决策结果返回给上下文处理器。上下文处理器将决策结果返回PEP,以执行相应的决策结果。

第10步:在返回的决策结果中可能是拒绝,也可能是许可,还可能带上有相应的职责信息,如需要进行日志记录等。 

1.3  策略描述语言——XACML

随着分布式系统的发展,对分布式系统的资源访问控制由集中管理方式变成了分布式管理方式。

一个大型企业组织内部,相同的安全策略可能在组织内部的多个点执行。一个资源的安全策略可能由多个部门共同完成,如信息系统部门、人力资源部门、法律部门,以及金融部门等。

同一个安全策略可能应用于内部网络防护、邮件系统、远程访问系统,以及一个具体的平台系统。

因此在分布式系统中,策略交互非常必要。需要一种能够相互理解的策略描述语言,XACML(eXtensible Access Control Markup Language)语言就是为了解决策略描述问题而设计的。

1.4  XACML策略语言模型

本节介绍XACML语言,并根据一些情况给出一些例子。首先通过策略语言模型图来了解XACML语言的基本要素及其之间的相互关系。

1.4.1 XACML策略语言模型

XACML策略语言模型如图所示。

XACML策略语言模型中各元素的含义及其之间的相互关系将在后面介绍。

1.4.2 组合算法

XACML策略语言是一种分布式策略语言,对于同一资源可能由不同的策略管理点(PAP)为其制定不同的策略。这些策略之间有可能存在冲突,如有的规则可能允许访问,有的规则可能不允许,这些冲突必须得到解决。也可能多条策略的执行效用一样,这样的策略只要执行一条即可得到相应的策略效用。通过XACML策略语言模型可以看出,一条策略可能包含多条规则,这些规则同样有可能存在冲突或具有相同的效用。

因此在XACML语言中需要一个组合算法来解决冲突,并且避免不必要的运算。在XACML语言中,规定了4种类型的组合算法,即拒绝优先算法(Deny-overrides)、许可优先算法(Permit-overrides)、首先应用算法(First-applicable)和唯一应用算法(Only-one-applicable)。在这些算法中,除了唯一应用算法只适用于策略组合外,其他适用于规则组合算法和策略组合算法。

(1)拒绝优先算法

拒绝优先算法的基本思想是一旦有一条规则或者策略应用得到一个拒绝的结果,则返回结果为拒绝(Deny);如果在处理某一规则或者策略过程中出现了错误,并且这个规则或者策略的效用(Effect)是拒绝,同时也没有其他规则或者策略的应用结果是拒绝,则返回结果为不确定(Indeterminate);如果在处理过程中没有规则或者策略的应用结果为拒绝,并且至少有一条规则或者策略的应用结果是许可,同时在处理过程中效用为拒绝的规则或者策略没有出现错误,则返回结果为许可(Permit);如果应用所有的规则中没有一条规则或者策略可以应用,则返回结果为不可应用(NotApplicable)。

(2)许可优先算法

许可优先算法的基本思想是只要有一条规则或者策略的应用结果是许可(Permit),则返回结果是许可;如果在处理某一规则或者策略过程中出现了错误,并且这个规则或者的策略的效用(Effect)是许可,同时没有其他规则或者策略的应用结果是许可,则返回结果为不确定(Indeterminate);如果在处理过程中没有规则或者策略的应用结果为许可,同时至少有一条规则或者策略的应用结果是拒绝,而且在处理过程中效用为许可的规则或者策略没有出现错误,则返回结果为拒绝(Deny);如果应用所有的规则中没有一条规则或者策略可以应用,则返回结果为不可应用(NotApplicable)。

(3)首先应用算法

该算法的基本思想是在应用一组规则或者策略的过程中,如果有一条规则或者策略是可以应用(其结果可以得到许可或者拒绝),则算法立即停止,并返回这一条规则或者策略的应用结果;如果没有任何一条规则或者策略可以应用,则返回结果是不可应用;如果在处理规则或者策略的过程中出错,则返回结果是不确定的。

(4)唯一应用算法

唯一应用算法只适用于策略组合算法,它要求在策略中有且只有一条可以应用。

该算法的基本思想是如果策略中有且只有一条策略可以应用,则返回这条策略的应用结果;如果没有一条策略可以应用,则返回结果是不可应用;如果有多于一条策略可以应用,则返回结果是不确定的;如果在处理过程中有出错的情况,或者发现策略无效,则返回结果也是不确定的。

1.4.3 规则

从XACML策略语言模型图中可以看出,规则(Rule)是策略语言中一个重要的基本元素。为了更好地理解规则的含义,首先需要了解规则的基本组成部分及其之间的相互关系。

规则包括3个组成部分,即目标(Target)、效用(Effect)和条件(Condition)。

目标(Target)表示规则应用的对象,其中包括4个基本元素,即资源(Resource)、主体(Subject)、动作(Actions)和环境(Environment)。一个目标的基本含义是主体对资源执行的某些动作,这些动作是在一定的环境下执行的。在应用规则的时候,根据请求的主体、资源、动作,以及相关的环境因素来查找可以应用的规则。

效用表示规则应用后的结果,包括两个值,即许可(Permit)和拒绝(Deny)。效用的含义是如果某一个决策请求中的要素(包括主体、资源、动作和环境)和规则中的目标相同,并且效用是许可,则决策结果是许可;如果效用是拒绝,则决策结果是拒绝。

同一规则可能有不同的应用环境,这样在决策时还需要一些辅助的额外信息,这些额外信息需要条件(Condition)来描述。条件是一些谓词结构,其结果是True或者False,通过这些条件可以描述主体、动作、资源,以及环境的一些属性和上下文信息(如操作的时间限制要求)。

1.4.4 策略

策略是基于XACML语言的访问控制框架中可以交互的最小单元,它由策略管理点产生并维护,策略决策点(PDP)依据相应的策略进行决策判断。

策略包括4个组成部分,即目标、组合算法、规则集和职责集。

一个策略的目标可以由策略管理人员在策略中明确规定,也可以从策略、策略集或者规则集中推导出来。一旦在策略中明确了目标,则所有规则中的目标都要忽略。

组合算法规定了策略中的规则组合算法。

规则集即策略中的一条或者多条规则组合。

职责集在应用规则的过程中由策略决策点(PDP)返回给策略执行点(PEP),除了执行相应的许可或拒绝操作外。策略执行点(PEP)还需要执行的一些职责,如需要记录相应的日志等。

1.4.5 策略集

把多个策略组合在一起形成一个策略集,在XACML语言中,策略集用来描述同时引用多条策略的情况。

1.5  XACML上下文

XACML策略描述语言试图提供一种适合Internet环境下的策略描述和交换语言,但是具体的应用程序可能有其自身的特殊描述方式,应用程序环境下的请求可能和XACML语言描述的请求有所区别。因此需要将特定应用程序环境的请求转换为XACML能够识别的请求,这就是XACML上下文的由来。

XACML上下文如图所示。

特定应用程序域的请求通过上下文处理器转换为XACML上下文中的请求,在引用策略及决策判断的过程都是在XACML上下文中进行,处理后的XACML应答需要由上下文处理器转换为特定域的输出。

1.6  安全和隐私方面的考虑

本节首先分析XACML访问控制框架下的威胁模型,在此基础上介绍应用XACML语言实现访问控制还需要注意的安全和隐私方面的问题及其相应的保障措施。

1.6.1威胁模型

从XACML的访问控制框架中可以看出,要应用XACML实现访问控制需要多个角色之间的相互协作,如PEP、PDP及PAP等。假设敌方可以访问角色之间的通信信道,那么可能存在的威胁如下。

(1)非授权信息泄露

XACML语言本身没有规定任何保护数据信息机密性的措施,因而存在非授权信息泄露威胁。这种威胁可能导致敌方能够获取通信中的消息,从而知道访问请求主体、资源或者动作的一些属性信息。在有些情况下这些属性信息是敏感的,比如在病历的访问控制请求中,包含了请求主体的一些个人信息,这些信息对于个人来说属于隐私。

(2)消息重放

消息重放攻击是指敌方记录并重放XACML角色之间的消息,通过应用过时信息、伪造信息或者直接发送记录信息,敌方可以发起拒绝服务攻击。

XACML语言本身并没有在消息重放攻击预防方面有任何防范措施,在应用XACML时需要额外的安全保障措施配合。

(3)消息插入

消息插入攻击是指敌方在XACML角色之间的交互消息中加入自己的消息。

XACML语言本身没有防范消息插入攻击的任何措施,在应用XACML时需要额外的安全保障措施配合,如使用SSL等。

(4)消息删除

消息删除攻击是指敌方删除XACML角色之间交互消息序列中的一条或多条消息,这样可能导致拒绝服务攻击。

XACML语言本身没有防范消息删除攻击的任何措施,在应用XACML时需要配合采取额外的安全保障措施,如完整性保护措施等。

(5)消息修改

消息修改攻击是指敌方修改XACML角色之间交互的消息的内容,通过这样的修改,敌方可能改变访问控制决策结果,从而实现非授权访问。

XACML语言本身没有防范消息修改攻击的任何措施,在应用XACML时需要配合采取额外的安全保障措施,如完整性保护措施等。

(6)“没有应用”威胁

“没有应用”是指策略决策点进行访问控制决策时,策略的目标和决策请求中的信息不匹配,这样得到访问控制决策结果是“没有应用”。

一般情况下,没有策略可以应用,则意味着访问请求被拒绝。推荐使用这样一种处理方式。但是在一些安全模型中,访问决策的结果是“没有应用”,则访问被允许,这样可能导致非授权的访问发生。

(7)“否定规则”威胁

“否定规则”是指规则发挥效用的条件是一些谓词结果不为真(True),该规则使用需要非常小心。如果使用不当,可能导致违背策略本意的事情发生,一些安全专家建议不要使用否定规则。但是在有些情况下,使用该规则使得规则的描述非常简单。XACML语言中允许使用否定规则,因此也带来了一些潜在的威胁。

1.6.2 安全保障措施

为了解决上面提到的各种威胁,在部署和应用XACML时需要一些安全保证机制的配合,本节介绍需要的一些安全保障措施。

(1)身份验证

身份验证机制提供了一种验证对方身份的手段,它既可以是单向的,也可以是双向的。如在访问控制过程中,PEP需要验证PDP的身份,以确保决策判断执行主体的可靠性。同时,PDP也需要验证PEP的身份,然后发送相关的决策信息。即使最简单的同意或者拒绝消息,敌方也可能从中推导出很多有用的信息。

存在多种技术可以实现身份验证,如VPN及数字签名等。身份验证可能需要在XACML的消息级或者会话级上实现。

(2)策略管理

如果策略的内容泄露给了访问控制系统以外的主体,则其可能应用这些策略来推导是否可以获取非授权的访问。而在XACML访问控制中使用分布式方式维护策略,这样的情况更容易发生。

为了防止这样的威胁,存放策略的地方本身需要采取访问控制措施。

(3)机密性保护

应用机密性保护机制可以只允许授权的接受者才可以读出消息中的内容,XACML机密性保护包括两部分的内容,即XACML角色通信过程的机密性保护和策略的机密性保护。

通信过程的机密性保护即保护XACML角色在交互过程中的信息机密性,防止非授权的信息泄露的威胁。实现机密性保护的技术有多种,如SSL等。

策略的机密性保护即保护策略中的部分敏感信息的泄露,为此需要对策略中的部分信息加密。可以用XML加密技术实现,XML加密技术可以应用于全部或者部分XML文档的加密。

(4)策略完整性保护

XACML策略是PDP用来评估XACML请求上下文的依据,是访问控制系统的核心,因此需要保护策略的完整性。策略完整性保护包括策略没有被修改过,以及策略没有添加或者删除过。完整性包括两个状态,一是静态的,即保存在某一处,如PAP的策略库中;二是动态的,即在XACML角色之间交互过程中。

可以应用XML签名技术来保护策略的完整性,该技术可以用来对XML文档中的部分或者全部内容实现完整性保护。

(5)策略标识符

策略可以通过标识符被别的策略引用,因此PAP需要维护策略标识符的唯一性,策略的维护人员应避免相同标识符的情况发生。

(6)信任模型

所有的机密性、完整性保护措施中都需要一个信任模型,即如何确定用来加密或者签名的密钥就是可信的?有多种不同的信任模型可以使用,如严格的分层模型、桥接模型和信任网模型等。

(7)隐私保护

需要着重声明的是,在任何和访问控制有关的事务处理过程中都可能泄露个人的隐私信息。如在一个策略中规定,只有金卡成员才能够访问。如果有主体访问成功,则泄露了其金卡成员的隐私信息。需要一种很好的机制来保护主体的隐私信息,但隐私保护机制的选择不是XACML规范的内容。

以上是关于XACML学习的主要内容,如果未能解决你的问题,请参考以下文章

如何在 XACML 策略中实现这些规则?

XACML 政策 - 是不是正确?

XACML 策略位置

允许访问 XACML 失败

XACML Authzforce PDP 自定义策略

XACML 策略 - 获得“不确定”响应