《用于同时定义和实行访问控制和完整性策略的系统、方法和装置的制作方法》由会员分享,可在线阅读,更多相关《用于同时定义和实行访问控制和完整性策略的系统、方法和装置的制作方法(6页珍藏版)》请在金锄头文库上搜索。
1、用于同时定义和实行访问控制和完整性策略的系统、方法和装置的制作方法专利名称:用于同时定义和实行访问控制和完整性策略的系统、方法和装置的制作方法技术领域:本发明涉及计算系统中的访问控制和信息流完整性策略。背景技术:现代编程运行时环境(诸如Java和Microsoft. NET公共语言运行时(CLR)赋予一种用于定义和实行访问控制策略的架构。运行时环境具有预定义的受保护资源的列表。这样的列表可以由个别系统管理员扩展。每个受保护资源在运行时间受权限防护。当即将访问受保护资源时调用运行时中的特殊组件(Java中的AccessController.checkPermission和CLR中的Demand)
2、。这一组件为“访问控制实行器”。访问控制实行器当在特定资源上被调用时遍历执行栈并且验证栈上的所有调用者已经被授予访问受保护资源的足够权限。这一方式存在一个主要问题。访问控制策略没有被恰当地实行,因为访问控制实行器仅遍历当前执行栈,这要求栈上的参与方(principal)(即用户或者程序组件)出示必要的权限。然而,这一栈遍历不捕获已经影响了安全性敏感操作(例如被修改的文件的名称)的代码或者主体,除非那些代码或者主体仍然在栈上活跃。情况可能并非如此,因为代码可能已经被从它的栈弹出,但是可能已经在堆中记录了它的影响或者传递该影响作为来自不再在当前执行栈上的方法的返回值并且用于安全性敏感操作。另一方面
3、,存在其中有必要定义和实行信息流完整性策略的许多系统。在信息流策略中,目标是防止非信任参与方影响受信任操作。其中必须实行完整性的系统的典型示例为Web应用服务器。对于从潜在非信任用户持续接收非信任输入的Web应用,在安全性敏感操作中使用那些输入之前验证它们颇为重要。这些完整性策略存在两个问题。首先是它们难以定义,因为系统管理员经常不知非信任输入来自何方以及流向何处。其次,它们难以实行,因为恰当的实行要求检测所有影响源并且跟踪那些影响直至值被使用。另一难点是检测隐式信息流。在隐式流中,攻击者并不直接修改或者定义将在安全性敏感操作中使用的数据。相反,攻击者影响将使用哪个数据。发明内容本发明的示例性
4、实施例集成访问控制和信息流完整性策略定义和实行。根据一个示例性实施例,本发明涉及一种用于在计算系统中实行访问控制和完整性策略的方法。根据这一方法,在用于在计算系统上运行的应用的软件代码中检测安全性敏感汇点(sink)。在一个实施例中,检测安全性敏感汇点包括对软件代码使用程序分析,这包括对代码和底层库使用静态程序分析。在一个实施例中,检测安全性敏感汇点包括分析软件代码并且标识软件代码中的、对计算系统中的访问控制实行器的调用。在一个实施例中,访问控制实行器实行访问控制策略。该方法还包括从对计算系统可访问的数据库获取访问控制策略。访问控制策略将计算系统内的访问权限集映射到多个參与方中的每个參与方。在
5、一个实施例中,与软件代码独立地陈述性定义访问控制策略。对于每个检测到的安全性敏感汇点,确定影响该安全性敏感汇点的所有參与方,并且通过取得用于每个安全性敏感汇点的所有有影响的參与方的访问权限集的交集,向该安全性敏感汇点分配总访问权限。当给定安全性敏感汇点的总访问权限不足以满足来自计算系统内的资源的所需权限吋,报告完整性违规。在一个实施例中,每个访问权限包含计算系统内的、已经向參与方授予的安全性敏感操作集。每个參与方是与计算系统交互的实体,实体的身份可以通过认证来验证并且实体通过授权来被授予特权。在一个实施例中,多个參与方包括用户參与方、机器參与方或者服务參与方。在一个实施例中,本发明的方法还包括
6、标识在安全性敏感汇点中使用的变量,每个变量具有可由一个或者多个參与方影响的值;以及向每个变量的每个值分配权限标签。每个权限标签包括向该值授予的权限集。在一个实施例中,分配权限标签出现于在计算系统上运行的应用的软件代码的运行时间。在一个实施例中,根据映射到影响与每个权限标签相关联的值的參与方的权限集,推导该权限标签的权限集。在一个实施例中,本发明的方法还包括检测根据两个或者更多现有值创建的新 值;以及使用与用来创建新值的每个值和定义新值的參与方相关联的权限集的交集来计算新值的权限标签。在一个实施例中,分配权限标签还包括使用控制条件语句的任何值的权限标签以约束用于对由条件语句主导的软件代码定义的任
7、何值的权限标签。本发明的示例性实施例还涉及种用于通过以下操作在计算系统中实行访问控制和完整性策略的方法在用于在计算系统上运行的应用的软件代码中检测安全性敏感汇点;从对计算系统可访问的数据库获取访问控制策略;标识在安全性敏感汇点中使用的变量,每个变量具有可由一个或者多个參与方影响的值;向每个变量的每个值分配权限标签;以及使用所分配的权限标签以针对计算系统内的安全性敏感汇点做出访问控制决策。访问控制策略将计算系统内的访问权限集映射到多个參与方中的每个參与方,并且每个权限标签包括向该值授予的权限集。在一个实施例中,分配权限标签出现于在计算系统上运行的应用的软件代码的运行时间。在一个实施例中,根据映射
8、到影响与每个权限标签相关联的值的參与方的权限集,推导该权限标签的权限集。该方法还包括检测根据两个或者更多现有值创建的新值;以及使用与用来创建新值的每个值和定义新值的參与方相关联的权限集的交集来计算新值的权限标签。在一个实施例中,分配权限标签的步骤还包括使用控制条件语句的任何值的权限标签,以约束用于对由条件语句主导的软件代码定义的任何值的权限标签。图I是基于栈的访问控制的示意表示;图2是图示了基于栈的访问控制的问题的示意表示;图3是图示了基于历史的访问控制的一个问题的示意表示;图4是图示了基于历史的访问控制的另问题的示意表示;以及图5是根据本发明的访问控制和完整性实行的一个实施例的示意表示。具体
9、实施例方式根据本发明的系统和方法的示例性实施例提供在计算系统(诸如分布式计算系统或者基于Web的计算系统)中自动定义信息流策略。对于许多计算系统存在访问控制策略。这些访问控制策略附着到文件、目录或者资源并且支配计算系统的参与方(即,使用计算系统和在这些计算系统上运行的应用的个人)对这些文件、目录和硬件组件(统称为资源)的访问。访问控制包括认证和授权,并且访问控制的目标之一是保护被访问的资源(例如数据)的完整性。访问控制系统利用权限以控制用户的资源访问。向用户分配权限。资源制定来自 用户的权限需求。如果来自给定用户的权限满足需要的权限,则向该用户提供对该资源的访问。然而,访问控制系统不利用信息流
10、策略并且未考虑信息如何流过计算系统。特别是,访问控制系统无法考虑给定信息流中和针对多个信息流的多个施动者或者多个参与方。在基于组件的系统中,问题不仅关于谁执行代码而且关于谁拥有待执行代码,因为代码提供者也是在信息流中涉及到的参与方。当尝试访问受限制资源时,可能涉及到具有不同信任水平的不同组件。挑战用于验证负责该安全性敏感访问的所有组件具有访问该资源的足够的权利。一种尝试的解决方案是基于栈的访问控制(SBAC)。参照图1,其图示了 SBAC内的静态权限和动态权限。在方法调用栈Iio中,向栈内的每个所属参与方授予单独静态权限集120。这些静态权限集可以重叠,并且针对栈内的每个参与方基于用于该参与方
11、和栈中更高的每个其它参与方的静态权限集的交集来确定动态权限140。因此,栈中的最后参与方代表所有静态权限120的交集,并且这代表栈的总权限160。从负责调解计算系统中的安全性敏感访问的受信任应用程序接口(API)调用专用测试函数。校验当前执行栈上的所有调用者(即参与方)的权限,并且计算复合参与方,该复合参与方的访问权是栈中的所有参与方的访问权或者权限集的交集。如图2中所示,SBAC中的授权决策仅依赖于当前嵌套调用系列220。SBAC不考虑其它参与方(例如其它嵌套调用系列240中的参与方)。不考虑在软件组件之间的其它种类的交互(包括使用从非信任代码返回的结果、可变状态、副作用和并行性)。例如,另
12、一栈240中的给定参与方260可以向被校验的栈220中的参与方280提供文件270的名称。应当校验与这一其它参与方260相关联的权限。如图所示,这一其它参与方260具有空权限集,并且这为攻击提供可以经过被校验的栈220的途径。然而,SBAC不校验与当前栈以外的参与方相关联的权限集,并且因此潜在地过于宽容。基于历史的访问控制(HBAC)提供更有限制的访问控制机制,该机制校验与任何参与方和曾经被执行的任何代码相关联的权限。因此,HBAC比SBAC更有限制性,并且在图2的所示示例中将基于涉及到缺乏任何相关联权限集的其它参与方来拒绝访问。在HBAC中,计算具有如下访问权的复合参与方,这些访问权代表拥有
13、曾经被执行的任何代码的所有参与方的访问权的交集(无论该代码是否对即将执行的安全性敏感操作具有影响)。虽然HBAC可以是SBAC的安全备选,但是HBAC可能事实上过于限制性。如图3中所示,对于具有所有可能权限的给定参与方320,如果未向有兴趣的栈360以外的甚至从未影响这一栈的参与方340给予权限集,则该栈以外的参与方340将使HBAC拒绝来自该栈的给定调用。然而,如图4中所示,在拥有执行的代码的参与方的给定布置的时序给定时,HBAC可能表现不一致。如图所示,对于具有所有可能权限420的參与方、调用栈460和具有空权限集440的单独參与方的相似布置,HBAC将允许来自调用栈的期望的资源访问。这基
14、于在调用栈之后执行由具有空权限集440的參与方执行的代码这样的事实。这表现导致不一致的结果,因为可能出现同一安全性敏感动作在某些情形之下被允许而在其它情形之下原因不明地被拒绝。參照图5,根据本发明的系统和方法的示例性实施例考虑与影响安全性敏感操作的所有參与方相关联的权限。动态标签附着在值上和程序计数器上。值由代码组件生成,并且值代表与该值相关联的标签或者权限集。根据与生成该值的代码组件(即參与方)相关联的权限以及与代码组件用来生成该值的所有值相关联的标签来推导给定标签。在个实施例中,与给定值相关联的权限或者标签是来自输入值和代码组件的权限的交集。因此,用信息流跟踪来扩充动态栈检查,并且权限用来
15、表达整个信息流中的完整性。对于给定调用栈510,提供对用于给定安全性敏感操作530的测试原语520的调用。所有权限集与调用栈510中上至第一授予调用540的所有调用者或者參与方相关联。此外,测试原语对从调用栈540、550、560以内和以外两者的參与方获得的值验证所有标签(即权限集),这些值被读取到由测试520保护或者防护的安全性敏感操作530中。将总权限集R表示为所有校验权限集的权限集的交集或者/ Qf)R2 O。由于对访问控制实行器的调用已经防护完整性使用,所以根据本发明示例性实施例的系统和方法采用现有访问控制策略并且通过检测对访问控制实行器的调用来标识安全性敏感使用是什么。安全性敏感动作
16、或者对安全敏感性信息的使用称为汇点,并且源是生成信息处或者信息进入程序处。在已经标识了汇点时,现有访问控制策略用来推断预期的信息流策略。在一个实施例中,安全性敏感操作由权限P防护。这是被访问的资源需要的用户权限。任何信息流必须仅受已经被授予至少权限P的參与方影响。这包括当前调用栈中的參与方(如同在栈检查中)和当前调用栈以外的參与方。由于访问控制实行器仅考虑当前执行栈,所以根据本发明的系统和方法的示例性实施例通过贯穿代码的执行而不仅仅在当前调用栈中检测对安全性敏感操作的所有数据依赖性和控制依赖性影响来扩充访问控制执行者的操作。每当未充分授权的參与方影响安全敏感性操作时报告违规,因为这将使权限交集缺乏所需权限。在一个实施例中,可以可选地忽略控制依赖性,因为通过控制依赖性的攻击通常不易利用,并且如果在统计上完成实行,则考虑控制依赖性可能生成大量误报。如果在向影响完整性敏感操作的主体授予的权限交集中检测到缺乏权限,则报告完整性违规。在一个实施例中,通过使用程序分析并且标识对访问控制实行器的调用来检测安 全性敏感汇点。获取程序的访问控制策略