如果属性无法解析,ABAC PIP应该怎么做?

时间:2018-07-26 14:18:48

标签: security policy xacml abac alfa

PIP和整个ABAC引擎在无法解析属性的情况下应如何表现。 有几种情况:

  1. 找不到用于解析属性的目标对象
  2. 属性无法解析,因为提供的属性不足以请求附加信息。就像我们传递单个userId和不带id的资源名称一样。
  3. 如果在属性解析链中(当某些属性依赖于另一个属性时)缺少某些东西,使得无法解析目标属性。

2 个答案:

答案 0 :(得分:3)

ABAC是一个宽泛的概念,没有指定这种低级别的行为。而且对于所有ABAC框架,都难以给出通用的最佳实践,因为其中越来越多的框架可能完全不同:其中一些是标准的(例如OASIS XACMLNIST NGAC),而另一些则不是-标准但通用(例如OPA),其他特定于产品(例如Kubernetes ABAC)。

由于该规范更加成熟,因此更容易给出XACML(3.0)标准的提示:

  1. §5.29 说:如果上下文中没有匹配的属性,则 MustBePresent 属性决定该元素是否返回空袋或“不确定”。请参阅第7.3.5节。(MustBePresent是在XACML策略中的AttributeDesignator元素上定义的。AttributeDesignator是对属性的引用,在这种情况下,如果该属性不可用,则应调用PIP在当前请求上下文中。)

  2. §7.3.5 提供了更多详细信息:如果缺少属性,则MustBePresent将控制属性指示符或属性选择器返回空包还是“不确定”结果。如果MustBePresent为“ False”(默认值),则缺少属性将导致一个空袋子。如果MustBePresent为“ True”,则缺少的属性将导致“ Indeterminate”。该“不确定”结果应根据涵盖的表达式,规则,策略和策略集的规范进行处理。如果结果是“不确定的”,则该属性的AttributeId,DataType和Issuer可以在授权决策中列出,如第7.17节所述。但是,出于安全原因,PDP可以选择不返回此类信息。不管策略评估期间对请求上下文进行任何动态修改,PDP的行为都应像每个属性值袋在第一次测试之前在上下文中被完全填充一样,然后在评估期间是不变的。 (也就是说,该属性的所有后续测试均应使用与最初测试相同的值袋。) 最后一句话尤其意味着,如果PIP属性解析导致空包且MustBePresent = False ,对于其余的策略评估,应将属性值保留为空袋,即不要尝试在相同的上下文中再次调用同一属性的PIP(可能会导致值更改)。

    < / li>
  3. §7.19.3 指定PDP如何在其响应中包括有关缺失属性的信息。

  4. 请注意,XACML中的组合算法也会影响最终结果。例如。即使AttributeDesignator由于子Rule / Policy(Set)中的PIP错误而返回Indeterminate,封闭策略的算法(如deny-unless-permit(resp.permit-unless-deny))也可能返回Deny(resp.Permit),无论

这就是标准所说的,然后就有特定于实现的行为。例如,在AuthzForce XACML实现中,我们在尝试尽可能符合XACML的同时区分了以下情况:

  1. 如果在属性解析期间发生PIP内部错误(连接问题,配置错误,缺少依赖项等),则AttributeDesignator的评估结果为Indeterminate(无论MustBePresent为何),因为我们认为这很关键,并添加了信息 Missing属性XXX ;我们还会添加有关原因的信息,例如缺少依赖项:属性YYY ,如果PIP需要上下文中缺少的某些属性来执行其工作(例如,缺少依赖项:属性'subject-id',如果PIP获取了用户的角色,但需要subject-id属性来执行此操作(此属性已丢失)。
  2. 如果PIP属性解析正确无误,但没有找到值,换句话说,结果为空(例如,某些PIP从数据库成功获取用户的角色,但由于没有分配角色给用户而得到一个空列表) ),则如果MustBePresent = false,则AttributeDesignator会计算出一个空包,否则(如果MustBePresent = true)则返回信息为 Missing属性XXX 的Indeterminate。

答案 1 :(得分:2)

XACML标准未指定PDP和PIP之间的交互。取决于每种实现(AuthZForce,Axiomatics ...),以确定它们如何处理每种情况。

通常来说,使用PIP可能会发生3个错误:

  1. 连接问题:无法达到目标PIP(例如LDAP服务器)
  2. 映射配置问题:该属性的映射无效。例如,您要从不存在的SQL表或列中检索属性。
  3. 数据问题:基础源中没有要读取的数据

此外,还有另一个可能的问题:映射中使用的键(例如用户名)根本没有值。在这种情况下,很明显根本不会调用映射(例如,检索角色)。

点1和2可能导致不确定。这可以帮助管理员解决安装问题。

对于使用该属性的分支,点3应该导致NotApplicable。如果没有价值,那就去吧。为什么一定会有一个值?

我希望这会有所帮助,

大卫。