CN103645987B - 基于代码生成和符号执行的访问控制策略测试自动生成方法 - Google Patents

基于代码生成和符号执行的访问控制策略测试自动生成方法 Download PDF

Info

Publication number
CN103645987B
CN103645987B CN201310711611.2A CN201310711611A CN103645987B CN 103645987 B CN103645987 B CN 103645987B CN 201310711611 A CN201310711611 A CN 201310711611A CN 103645987 B CN103645987 B CN 103645987B
Authority
CN
China
Prior art keywords
xacml
strategy
code
value
code pattern
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201310711611.2A
Other languages
English (en)
Other versions
CN103645987A (zh
Inventor
王林章
李永超
赵建华
李宣东
陈志�
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Nanjing University
Original Assignee
Nanjing University
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Nanjing University filed Critical Nanjing University
Priority to CN201310711611.2A priority Critical patent/CN103645987B/zh
Publication of CN103645987A publication Critical patent/CN103645987A/zh
Application granted granted Critical
Publication of CN103645987B publication Critical patent/CN103645987B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Abstract

本发明提出一种基于代码生成和符号执行的访问控制策略测试自动生成方法,以针对XACML策略测试的实际需求,弥补现有测试XACML策略技术和工具的不足。该发明方法首先对用户指定受测试的XACML策略进行数值化处理,然后将受测试的XACML策略转换为语义等价的C代码表示形式;再通过符号执行工具生成C代码的测试输入,将生成的测试输入翻译为XACML请求;最后以生成的XACML请求作为策略评估器的输入,发送到XACML策略进行评估,得到授权结果。本发明方法利用符号执行测试技术,能够高效地生成充分覆盖XACML策略的测试请求,有利于发现XACML策略中的错误。

Description

基于代码生成和符号执行的访问控制策略测试自动生成方法
技术领域
本发明涉及访问控制策略的测试方法,利用软件测试中的符号执行技术,针对XACML策略,生成有效的XACML测试请求,对XACML策略的正确性进行测试,属于软件工程、软件测试、信息安全交叉技术应用领域。
背景技术
访问控制是安全策略的重要因素之一,它控制非预期的主体访问受保护的敏感资源,尤其在金融、政府等安全关键性领域,对访问控制具有较为严格的要求,访问控制策略中的微小错误都会引发严重的安全后果。据Symantec公司2013年发布的互联网安全威胁报告指出,基于web攻击的数量在2012年较2011年上涨了三分之一,同时,宾夕法尼亚大学早期进行的一项研究表明,错误的访问控制描述,排在十大网络应用安全缺陷类型的第二位。因此,在实施和部署访问控制系统之前,对访问控制策略进行充分的测试是极其重要的。
XACML(eXtensibleAccessControlMarkupLanguage)是一种可扩展的访问控制标记语言,它由OASIS于2003年发布了第一个版本,目前最新版本为3.0,发布时间是2010年。XACML策略具有较强的可扩展性、平台无关性以及强大的策略表达性,目前已被广泛应用于企业、政府以及学术等领域的访问控制的实现。一个XACML策略由若干策略集组成,每个策略集包含若干策略,每个策略包含若干规则。策略集、策略和规则都包含一个被称为目标(Target)的段,目标中定义了对主体,动作,资源和环境的约束,该约束限定了策略集、策略或规则可适用的访问请求。主体、动作、资源以及环境绑定了若干属性,这些属性的属性值表述了特定的主体、动作、资源以及环境。XACML策略中微小的错误都可能引发严重的安全后果,例如机密信息窃取,隐私数据泄露等。
符号执行技术于1976年由JamesC.King提出。程序中被符号化的变量在符号执行时没有具体的值,程序执行过程中会在分支语句的位置产生分叉(fork),从而执行每一条可能的路径,同时收集由符号变量组成的当前路径的约束。当达到一条路径的结尾或者出现错误,约束求解器求解对应的路径约束,赋予符号化变量具体的值,则得到了覆盖该路径的程序的具体输入。KLEE是目前功能较强的符号执行工具,于2008年由C.Cadar设计开发。
目前测试XACML的技术和工具主要有美国学者EvanMartin于2006年开发的Targen工具。受测试的XACML策略被表示为树形结构。每个叶子节点表示策略中的一个规则,每个非叶子节点表示一个策略集或策略,其中记录了对应的目标所定义的约束。针对每个叶子节点,收集到达它的路径上的节点嗦保存的约束,通过对该约束求解,可以得到覆盖该叶子节点表示的规则的XACML请求。该方法的不足是,生成的XACML请求存在较多的冗余。2007年,EvanMartin提出了基于变化分析(Change-impactAnalysis)的XACML请求生成技术并基于此开发了XACML请求生成工具Cirg。现有访问控制策略分析验证工具Margrave可以针对同一个XACML策略的两个不同版本中的差异给出相应的反例,该反例即是能够覆盖并通过策略的响应体现此差异的访问请求。通过向受测试的XACML策略植入特定类型的差异,能够得到覆盖受测试XACML策略各个规则的请求。该方法的一个重大不足是进行变化分析的时间开销巨大,导致方法受限于受测试的XACML的规模,实用性不足。另一项XACML测试技术和工具X-CREATE由意大利学者AntoniaBertolino于2010年提出和开发。X-CREATE充分解析XACML对应的请求模式(RequestSchema),由请求模式,通过基于XML的划分测试(XML-basedPartitionTesting)技术生成大量的中间请求(IntermediateRequest),然后收集受测试的XACML策略中出现的所有属性值,最后通过组合测试(CombinationTesting)方法将这些属性值填充到中间请求中生成最终的XACML请求。该方法有两个不足,首先是生成的XACML请求存在大量的冗余;第二是生成请求的时间开销巨大。
发明内容
技术问题:本发明目的针对XACML策略测试的实际需求,提出一种基于代码生成和符号执行的XACML策略测试自动生成方法,弥补现有测试XACML策略技术和工具的不足,提高生成的XACML请求的覆盖率,查错能力,满足对XACML策略进行测试的实用性需求,确保企业、政府等安全关键性领域的访问控制策略实现的可靠性。
技术方案:本发明所述的基于代码生成和符号执行的访问控制策略测试自动生成方法具体流程如下:
步骤1:用户指定受测试的XACML策略所在的文件,该文件采用XML格式存储;
所述的XACML的全称是可扩展的访问控制标记语言,被用来描述访问控制策略,所述的XML的全称是可扩展标记语言,用来标记数据、定义数据类型,允许用户对自己的标记语言进行定义;
步骤2:对受测试的XACML策略进行数值化处理,得到属性值-整型值映射表,步骤2具体过程如下
步骤21:初始化属性值-整型值映射表;
所述的属性值-整型值映射表存储了XACML策略中出现的每个属性值和它相对应的整型值的映射,通过查询该映射表能很快从属性值得到其整型值,或者从整型值得到相应的属性值;
所述的属性值-整型值映射表中的属性值有四类,分别是:主体属性值、动作属性值、资源属性值和环境属性值;
所述的属性值-整型值映射表根据属性值的类别区分有四种,分别是主体属性值-整型值映射表,动作属性值-整型值映射表,资源属性值-整型值映射表,环境属性值-整型值映射表,不同表之间的整型值能相同,表之内的整型值不能相同;
步骤22:深度优先遍历XACML策略,对发现的新属性值进行整型化处理;
步骤23:将得到的每个属性值对应的属性值-整型值对加入到属性值-整型值映射表;得到受测试XACML的属性值-整型值映射表;
步骤3:将受测试的XACML策略文件中所描述的访问控制策略转换为语义等价的C代码表示形式,具体过程如下:
步骤31:深度优先遍历受测试的XACML策略;
步骤32:每遍历到一个策略元素,若该元素为策略集,转步骤33;若该元素为策略,转步骤34;若该元素为规则,转步骤36;
步骤33:查看当前遍历到的策略集对应的策略组合算法;转步骤35;
步骤34:查看当前遍历到的规则对应的规则组合算法;
步骤35:根据组合算法,选择组合算法对应的代码模式;转步骤37;
所述的代码模式包含8种,分别是:最先适用策略组合算法代码模式、最先适用规则组合算法代码模式、允许覆盖策略组合算法代码模式、允许覆盖规则组合算法代码模式、拒绝覆盖策略组合算法代码模式、拒绝覆盖规则组合算法代码模式、唯一适用策略组合算法代码模式以及规则代码模式;
步骤36:选择规则代码模式;
步骤37:解析该策略元素,填充代码模式,得到该元素对应的C语言代码;
所述的元素对应的C语言代码具体形式为C函数定义,函数的参数个数为4个,类型皆为整型,函数返回值为整型,返回值域为{-1,0,1},-1表示不适用,0表示允许,1表示拒绝;
所述填充代码模式的方法是,找出目标中出现的属性值,查找属性值-整型值映射表得到属性值对应的整型值,填充到代码模式中的条件语句中,查找规则所定义的效果,填充函数的返回值;
步骤38:当遍历结束,构造主函数;
步骤39:得到受测试的XACML策略对应的C代码表示形式;
步骤4:通过符号执行工具,即采用开源工具KLEE生成C代码的测试输入;
所述的KLEE是由美国科学家CristianCadar于2008年发布的一款符号执行工具,它支持大规模程序的符号执行,并生成具有较高代码覆盖率的测试输入。
步骤41:自动对C代码进行编译,采用的编译环境为LLVM,生成LLVM字节码文件;
所述的LLVM是由美国的伊利诺伊大学香槟分校开发的编译器框架,可用于将C/C++代码编译生成可执行的目标代码。
步骤42:自动启动KLEE,将步骤41生成的字节码文件作为KLEE的输入进行符号执行;
步骤43:KLEE输出,得到C代码的测试输入;
步骤5:将步骤43生成的C代码的测试输入翻译为XACML请求;
步骤51:自动生成shell脚本,将KLEE的多个输出文件整合到一个文件中;
所述的shell为操作系统为用户提供的使用操作系统功能的接口,shell脚本为用户编写的,可以被shell识别并执行的文件。
步骤52:对KLEE产生的每一个C代码输入,将输入即整型值代入属性值-整型值映射表查询,得到一组属性值;
步骤53:将得到的每组属性值填充到XACML请求的相应位置;
步骤54:直到所有输入都被翻译完,得到受测试的XACML策略的一组请求;
步骤6:以生成的XACML请求作为策略评估器的输入,发送到XACML策略进行评估,得到授权结果。
有益效果:本发明给出一种基于代码生成和符号执行的访问控制策略测试自动生成方法,具有如下的有益效果:
(1)本发明所述的方法利用符号执行测试技术,能够高效地生成充分覆盖XACML策略的测试请求,有利于发现XACML策略中的错误。
(2)本发明所述的方法利用符号执行测试技术,生成的XACML测试请求数量较少,能够有效地减少人工审查测试结果的开销。
(3)本发明所述的方法自动化程度高,测试生成过程需要较少的人工参与。
(4)本发明所述的代码生成技术,具有较强的扩展性,便于应用于更多的访问控制策略描述语言。
附图说明
图1是本发明的总体系统及流程框图;
图2是属性值-整型值映射表的结构;
图3是符号执行器的输出示例;
具体实施方式
下面结合附图对本发明进一步说明。
参照图1,本发明有5个功能部件,分别是:数值化处理器、C代码生成器、符号执行器、测试输入翻译器以及策略评估器。其中,数值化处理器将XACML策略中出现的复杂属性值转换为整型值,C代码生成器将XACML策略转换为语义等价的C代码,符号执行器利用符号执行工具生成C代码的测试输入,测试输入翻译器将得到的测试输入翻译为XACML请求,策略评估器评估XACML请求并返回响应结果。
在具体实施中,各功能部件的工作过程以及输入输出如下:
(1)数值化处理器
参照图1,数值化处理器以受测试的XACML策略文件作为输入,将策略中出现的属性值转换为整型值,存放于属性值-整型值映射表中,具体过程是:数值化处理器从XACML策略的第一个策略集或策略开始,以深度优先遍历的方式分析XACML策略,遍历每一个策略集、策略以及规则。每当遍历到一个新的策略集、策略或者规则,数值化处理器查看其中目标定义的约束,对每一个出现在约束中的主体、动作、资源或者环境的属性值,如果该属性值在之前的遍历中已经出现则不作处理,否则,数值化处理器将为该属性值分配一个唯一的整型数值,并将该属性值-整型值对加入到属性值-整型值映射表中。直到访问完最后一个规则,所有出现在XACML策略中的属性值都被转换为整型值。属性值-整型值表的结构参照图2。表的第一列是属性值所属的XACML的元素的标识,可以是Sub(主体)、Act(动作)、Res(资源)或Env(环境)。表的第二列是XACML策略中出现的属性值。表的第三列是该属性值的数据类型,XACML支持的属性值数据类型包括字符串,URL等。表的第四列是该属性值对应的整型值。同一元素的属性值对应的整型值不允许相同,而不同元素对应的属性值的整型值可以相同。
(2)C代码生成器
C代码生成器以数值化处理器的输出即属性值-整型值映射表和受测试的
XACML文件为输入,将XACML策略转换为语义等价的C代码。具体过程是:从XACML策略的第一个策略集或策略开始,C代码生成器以深度优先的方式遍历XACML策略。对每一个访问到的策略集、策略或规则,C代码生成器首先确定其适用的代码模式。对于策略集和策略,C代码生成器检查其定义的策略组合算法或规则组合算法,进而依据组合算法选择适用的代码模式。对于规则,则直接选用规则代码模式。确定适用的代码模式之后,C代码生成器解析该策略集、策略或规则的目标,收集目标中出现的属性值。然后将这些属性值代入属性值-整型值映射表进行查询,得到各自对应的整型值,进而将这些整型值填充到代码模式中。最后,对于规则,C代码生成器检查其定义的效果以决定函数的返回值。
本发明定义了8个代码模式。每一个策略集、策略或规则被转换为C语言函数定义,函数的参数个数为4,所有的参数类型皆为整型,四个参数依次表示主体,动作,资源和环境。函数的返回值为整型。返回值的值域为{-1,0,1},分别表示不适应、允许和拒绝。下面对各代码模式进行详细说明:
1、最先适用策略组合算法代码模式
以下代码描述了最先适用策略组合算法代码模式:
最先适用策略组合算法代码模式中,定义了函数PolicySet_0(实际生成的C代码中,各个策略集、策略以及规则对应的函数名不相同)。函数体第一行定义了一个整型局部变量effect,该变量用于记录当前策略集所包含的策略或者策略集的响应结果。第一个条件语句是策略集的目标对应的等价C代码,条件语句包含定义在函数的四个参数之上的约束,s_1到s_h,a_1到a_h等,表示属性值对应的整型值,其具体值由C代码生成模块在遍历XACML策略时决定。一次执行中,如果函数的输入使条件语句的约束式为真(对应XACML请求中包含的主体、动作、资源和环境满足目标定义的约束),则执行条件语句体内的代码(对应令策略集包含的策略或策略集对XACML请求进行进一步评估),否则直接返回-1,表示不适用。最先适用策略组合算法代码模式中,条件体内的代码,由若干条件语句构成。每个条件语句的约束定义在effect之上。effect接收其他策略集或策略对应的函数调用的返回值(对应策略集包含的策略或策略集对XACML请求进行进一步评估的响应结果)。如果effect的值不为-1,即响应结果不为不适应,根据最先适应策略组合算法的定义,应将该响应结果作为PolicySet_0对应的策略集的最终响应结果并返回,用“returneffect”语句表达。反之若effect的值为-1,即响应结果为不适应,根据最先适应策略组合算法的定义,应当继续将XACML请求发送给后续的策略集或策略(如果存在)进行评估。
2、最先适用规则组合算法代码模式
以下代码描述了最先适用规则组合算法代码模式:
最先适用规则组合算法代码模式的函数体代码结构与最先适用策略组合算法代码模式相似,差别在于最先适用规则组合算法代码模式的函数体代码中,只有对规则对应的函数的调用,这是因为XACML策略中,策略只能包含规则。具体地,在最先适用规则组合算法代码模式中,定义了函数Policy_0,函数体第一行定义了一个整型局部变量effect,该变量用于记录当前策略所包含的规则的响应结果。第一个条件语句是策略的目标对应的等价C代码,条件语句包含定义在函数的四个参数之上的约束,s_1到s_h,a_1到a_h等,表示属性值对应的整型值,其具体值由C代码生成模块在遍历XACML策略时决定。一次执行中,如果函数的输入使条件语句的约束式为真(对应XACML请求中包含的主体、动作、资源和环境满足目标定义的约束),则执行条件语句体内的代码(对应令策略包含的规则对XACML请求进行进一步评估),否则直接返回-1,表示不适用。最先适用规则组合算法代码模式中,条件体内的代码,由若干条件语句构成。每个条件语句的约束定义在effect之上。effect接收其它规则对应的函数调用的返回值(对应策略包含的规则对XACML请求进行进一步评估的响应结果)。如果effect的值不为-1,即响应结果不为不适应,根据最先适应规则组合算法的定义,应将该响应结果作为Policy0对应的策略的最终响应结果并返回,用“returneffect”语句表达。反之若effect的值为-1,即响应结果为不适应,根据最先适应规则组合算法的定义,应当继续将XACML请求发送给后续的规则(如果存在)进行评估。
3、允许覆盖策略组合算法代码模式
以下代码描述了允许覆盖策略组合算法代码模式:
允许覆盖策略组合算法代码模式中,定义了函数PolicySet_0。函数体第一行定义了一个整型局部变量effect,该变量用于记录当前策略集所包含的策略或者策略集的响应结果。第一个条件语句是策略集的目标对应的等价C代码,条件语句包含定义在函数的四个参数之上的约束,s_1到s_h,a_1到a_h等,表示属性值对应的整型值,其具体值由C代码生成模块在遍历XACML策略时决定。一次执行中,如果函数的输入使条件语句的约束式为真(对应XACML请求中包含的主体、动作、资源和环境满足目标定义的约束),则执行条件语句体内的代码(对应令策略集包含的策略或策略集对XACML请求进行进一步评估),否则直接返回-1,表示不适用。允许覆盖策略组合算法代码模式中的条件体内的代码,由若干条件语句构成。每个条件语句的约束定义在effect之上。effect接收其他策略集或策略对应的函数调用的返回值(对应策略集包含的策略或策略集对XACML请求进行进一步评估的响应结果)。如果effect的值不为-1,说明被包含的某策略集或策略适用于请求,进而继续判断effect的值是否为0。如果effect的值为0,意味着被包含的策略集或策略的响应请求为允许,根据允许覆盖策略组合算法的定义,当遇到响应结果为允许的策略集或策略时评估停止,将允许作为当前策略集的最终响应结果,用“return0”语句表达。若effect为-1或effect不为0,表示被包含的策略集或策略不适用于请求或响应结果不为允许,根据允许覆盖策略组合算法的定义,应将请求发送给后序的策略集或策略(如果存在)继续评估。
4、允许覆盖规则组合算法代码模式
以下代码描述了允许覆盖规则组合算法代码模式:
允许覆盖规则组合算法代码模式中,定义了函数Policy_0。函数体第一行定义了一个整型局部变量effect,该变量用于记录当前策略所包含的规则的响应结果。第一个条件语句是策略的目标对应的等价C代码,条件语句包含定义在函数的四个参数之上的约束,s_1到s_h,a_1到a_h等,表示属性值对应的整型值,其具体值由C代码生成模块在遍历XACML策略时决定。一次执行中,如果函数的输入使条件语句的约束式为真(对应XACML请求中包含的主体、动作、资源和环境满足目标定义的约束),则执行条件语句体内的代码(对应令策略包含的规则对XACML请求进行进一步评估),否则直接返回-1,表示不适用。允许覆盖规则组合算法代码模式的条件体内的代码,由若干条件语句构成。每个条件语句的约束定义在effect之上。effect接收其他规则对应的函数调用的返回值(对应策略包含的规则对XACML请求进行进一步评估的响应结果)。如果effect的值不为-1,说明被包含的规则适用于请求,进而继续判断effect的值是否为0。如果effect的值为0,意味着被包含的规则的响应请求为允许,根据允许覆盖规则组合算法的定义,当遇到响应结果为允许的规则时评估停止,将允许作为当前策略的最终响应结果,用“return0”语句表达。若effect为-1或effect不为0,表示被包含的规则不适用于请求或响应结果不为允许,根据允许覆盖规则组合算法的定义,应将请求发送给后序的规则(如果存在)继续评估。
5、拒绝覆盖策略组合算法代码模式
以下代码描述了拒绝覆盖策略组合算法代码模式:
拒绝覆盖策略组合算法代码模式的代码结构与允许覆盖规则组合算法代码模式相似,差别在于对effect的值的判断和处理。具体地,拒绝覆盖策略组合算法代码模式中定义了函数PolicySet_0,函数体第一行定义了一个整型局部变量effect,该变量用于记录当前策略集所包含的策略或者策略集的响应结果。第一个条件语句是策略集的目标对应的等价C代码,条件语句包含定义在函数的四个参数之上的约束,s_1到s_h,a_1到a_h等,表示属性值对应的整型值,其具体值由C代码生成模块在遍历XACML策略时决定。一次执行中,如果函数的输入使条件语句的约束式为真(对应XACML请求中包含的主体、动作、资源和环境满足目标定义的约束),则执行条件语句体内的代码(对应令策略集包含的策略或策略集对XACML请求进行进一步评估),否则直接返回-1,表示不适用。拒绝覆盖策略组合算法代码模式的条件体内的代码,由若干条件语句构成。每个条件语句的约束定义在effect之上。effect接收其他策略集或策略对应的函数调用的返回值(对应策略集包含的策略或策略集对XACML请求进行进一步评估的响应结果)。如果effect的值不为-1,说明被包含的某策略集或策略适用于请求,进而继续判断effect的值是否为1。如果effect的值为1,意味着被包含的策略集或策略的响应请求为拒绝,根据拒绝覆盖策略组合算法的定义,当遇到响应结果为拒绝的策略集或策略时评估停止,将拒绝作为当前策略集的最终响应结果,用“return1”语句表达。若effect为-1或effect不为1,表示被包含的策略集或策略不适用于请求或响应结果不为拒绝,根据拒绝覆盖策略组合算法的定义,应将请求发送给后序的策略集或策略(如果存在)继续评估。
6、拒绝覆盖规则组合算法代码模式
以下代码描述了拒绝覆盖规则组合算法代码模式:
拒绝覆盖规则组合算法代码模式的代码结构与允许覆盖规则组合算法代码模式相似,差别在于对effect的值的判断和处理。具体地,拒绝覆盖规则组合算法代码模式中定义了函数Policy_0,函数体第一行定义了一个整型局部变量effect,该变量用于记录当前策略所包含的规则的响应结果。第一个条件语句是策略集的目标对应的等价C代码,条件语句包含定义在函数的四个参数之上的约束,s_1到s_h,a_1到a_h等,表示属性值对应的整型值,其具体值由C代码生成模块在遍历XACML策略时决定。一次执行中,如果函数的输入使条件语句的约束式为真(对应XACML请求中包含的主体、动作、资源和环境满足目标定义的约束),则执行条件语句体内的代码(对应令策略包含的规则对XACML请求进行进一步评估),否则直接返回-1,表示不适用。拒绝覆盖规则组合算法代码模式的条件体内的代码,由若干条件语句构成。每个条件语句的约束定义在effect之上。effect接收其他规则对应的函数调用的返回值(对应策略包含的规则对XACML请求进行进一步评估的响应结果)。如果effect的值不为-1,说明被包含的某规则适用于请求,进而继续判断effect的值是否为1。如果effect的值为1,意味着被包含的规则的响应请求为拒绝,根据拒绝覆盖规则组合算法的定义,当遇到响应结果为拒绝的规则时评估停止,将拒绝作为当前策略的最终响应结果,用“return1”语句表达。若effect为-1或effect不为1,表示被包含的规则不适用于请求或响应结果不为拒绝,根据拒绝覆盖规则组合算法的定义,应将请求发送给后序的规则(如果存在)继续评估。
7、唯一适用策略组合算法代码模式
以下代码描述了唯一适用策略组合算法代码模式:
根据XACML对组合算法的定义,唯一适用组合算法只可应用于策略集或策略。唯一适用策略组合算法代码模式中定义了函数PolicySet_0。函数体第一行定义了两个整型参数,分别是applicable和effect,前者用于记录被包含的策略集或策略对请求的适用情况,后者用于记录被包含的策略集或策略的响应结果。第一个条件语句是策略集的目标对应的等价C代码,条件语句包含定义在函数的四个参数之上的约束,s_1到s_h,a_1到a_h等,表示属性值对应的整型值,其具体值由C代码生成模块在遍历XACML策略时决定。一次执行中,如果函数的输入使条件语句的约束式为真(对应XACML请求中包含的主体、动作、资源和环境满足目标定义的约束),则执行条件语句体内的代码(对应令策略集包含的策略或策略集对XACML请求进行进一步评估),否则直接返回-1,表示不适用。唯一适用策略组合算法代码模式的条件体内的代码,由若干条件语句构成。每个条件语句的约束定义在effect之上。effect接收其他策略集或策略对应的函数调用的返回值(对应策略集包含的策略或策略集对XACML请求进行进一步评估的响应结果)。如果effect的值不为-1,说明被包含的某策略集或策略适用于请求。对于第一个适用的策略集或策略,直接将applicable赋值为1,表示目前已有被包含的策略集或策略适用于请求,进而将请求发送给后续策略集或策略(如果存在)进行评估。对于后续适用的策略集或策略,首先判断applicable的值,如果为1,表示在当前适用的策略集或策略之前,已有适用的策略集或策略,根据唯一适应策略组合算法的定义,一个策略集中有且仅能有一个适用的策略集或策略,因此,此时直接返回不适应作为该策略集的最终响应结果。否则,将applicable赋值为1,继续进行后续的评估。当所有被包含的策略集或策略都被评估完毕,检查applicable的值,如果为0,表示被所有包含的策略集或策略都不适用请求,返回不适应作为策略集最终的响应结果,否则,返回effect作为最终的响应结果。
8、规则代码模式
以下代码描述了规则代码模式:
规则代码模式中的函数体中的条件语句是策略集的目标对应的等价C代码,条件语句包含定义在函数的四个参数之上的约束,s_1到s_h,a_1到a_h等,表示属性值对应的整型值,其具体值由C代码生成模块在遍历XACML策略时决定。一次执行中,如果函数的输入使条件语句的约束式为真(对应XACML请求中包含的主体、动作、资源和环境满足目标定义的约束),则返回规则的效果,否则直接返回-1,表示不适用。
(3)符号执行器
符号执行器是基于开源符号执行工具KLEE构建的,其将代码生成器输出的C代码作为输入,输出覆盖C代码所有可达路径的测试输入。符号执行器通过系统调用,启动KLEE并向其传递运行参数,以实现通过符号执行得到C代码输入的功能。如图3所示为符号执行器输出的一个示例,通过将KLEE的输出重定向到指定文件所得。图中为生成的C代码输入中的一个输入,由Sub,Act,Res和Env四个整型变量构成,变量的值被保存在“data”字段。
(4)测试输入翻译器
测试输入翻译器以符号执行器输出的C代码测试输入和数值化处理器输出的属性值-整型值映射表作为输入,目的是将C代码的测试输入转换为可用于XACML测试的请求。如图3所示为符号执行器输出的一个示例,对每一个测试输入,测试输入翻译器依次读取Sub,Act,Res和Env的值,之后,将得到的值依次代入属性值-整型值映射表,查询其对应的属性值,最后,将得到的属性值依次填充到XACML请求的对应位置,即得到一个XACML请求。
(5)策略评估器
策略评估器的功能是将XACML请求批量地发送到受测试的XACML策略进行评估,收集响应结果,以便测试员通过观察响应结果并与访问控制需求进行比对,以确认策略中是否存在错误。策略评估器的评估引擎是基于Sun提供的开源XACML评估引擎实现的。
基于代码生成和符号执行的访问控制策略测试自动生成方法为:
步骤1:用户指定受测试的XACML策略所在的文件,该文件采用XML格式存储;
步骤2:对受测试的XACML策略进行数值化处理,得到属性值-整型值映射表,步骤2具体过程如下
步骤21:初始化属性值-整型值映射表;
步骤22:深度优先遍历XACML策略,对发现的新属性值进行整型化处理;
步骤23:将得到的每个属性值对应的属性值-整型值对加入到属性值-整型值映射表;得到受测试XACML的属性值-整型值映射表;
步骤3:将受测试的XACML策略文件中所描述的访问控制策略转换为语义等价的C代码表示形式,具体过程如下:
步骤31:深度优先遍历受测试的XACML策略;
步骤32:每遍历到一个策略元素,若该元素为策略集,转步骤33;若该元素为策略,转步骤34;若该元素为规则,转步骤36;
步骤33:查看当前遍历到的策略集对应的策略组合算法;转步骤35;
步骤34:查看当前遍历到的规则对应的规则组合算法;
步骤35:根据组合算法,选择组合算法对应的代码模式;转步骤37;
所述的代码模式包含8种,分别是:最先适用策略组合算法代码模式、最先适用规则组合算法代码模式、允许覆盖策略组合算法代码模式、允许覆盖规则组合算法代码模式、拒绝覆盖策略组合算法代码模式、拒绝覆盖规则组合算法代码模式、唯一适用策略组合算法代码模式以及规则代码模式;
步骤36:选择规则代码模式;
步骤37:解析该策略元素,填充代码模式,得到该元素对应的C语言代码;
所述的元素对应的C语言代码具体形式为C函数定义,函数的参数个数为4个,类型皆为整型,函数返回值为整型,返回值域为{-1,0,1},-1表示不适用,0表示允许,1表示拒绝;
所述填充代码模式的方法是,找出目标中出现的属性值,查找属性值-整型值映射表得到属性值对应的整型值,填充到代码模式中的条件语句中,查找规则所定义的效果,填充函数的返回值;
步骤38:当遍历结束,构造主函数;
步骤39:得到受测试的XACML策略对应的C代码表示形式;
步骤4:通过符号执行工具,即采用开源工具KLEE生成C代码的测试输入;
步骤41:自动对C代码进行编译,采用的编译环境为LLVM,生成LLVM字节码文件;
步骤42:自动启动KLEE,将步骤41生成的字节码文件作为KLEE的输入进行符号执行;
步骤43:KLEE输出,得到C代码的测试输入;
步骤5:将步骤43生成的C代码的测试输入翻译为XACML请求;
步骤51:自动生成shell脚本,将KLEE的多个输出文件整合到一个文件中;
步骤52:对KLEE产生的每一个C代码输入,将输入即整型值代入属性值-整型值映射表查询,得到一组属性值;
步骤53:将得到的每组属性值填充到XACML请求的相应位置;
步骤54:直到所有输入都被翻译完,得到受测试的XACML策略的一组请求;
步骤6:以生成的XACML请求作为策略评估器的输入,发送到XACML策略进行评估,得到授权结果。

Claims (1)

1.一种基于代码生成和符号执行的访问控制策略测试自动生成方法,其特征在于该方法包含的步骤为:
步骤1:用户指定受测试的XACML策略所在的文件,该文件采用XML格式存储;其中XACML(eXtensibleAccessControlMarkupLanguage)是一种可扩展的访问控制标记语言;
步骤2:对受测试的XACML策略进行数值化处理,得到属性值-整型值映射表,步骤2具体过程如下:
步骤21:初始化属性值-整型值映射表;
步骤22:深度优先遍历XACML策略,对发现的新属性值进行整型化处理;
步骤23:将得到的每个属性值对应的属性值-整型值对加入到属性值-整型值映射表;得到受测试XACML的属性值-整型值映射表;
步骤3:将受测试的XACML策略文件中所描述的访问控制策略转换为语义等价的C代码表示形式,具体过程如下:
步骤31:深度优先遍历受测试的XACML策略;
步骤32:每遍历到一个策略元素,若该元素为策略集,转步骤33;若该元素为策略,转步骤34;若该元素为规则,转步骤36;
步骤33:查看当前遍历到的策略集对应的策略组合算法;转步骤35;
步骤34:查看当前遍历到的规则对应的规则组合算法;
步骤35:根据组合算法,选择组合算法对应的代码模式;转步骤37;
所述的代码模式包含8种,分别是:最先适用策略组合算法代码模式、最先适用规则组合算法代码模式、允许覆盖策略组合算法代码模式、允许覆盖规则组合算法代码模式、拒绝覆盖策略组合算法代码模式、拒绝覆盖规则组合算法代码模式、唯一适用策略组合算法代码模式以及规则代码模式;
步骤36:选择规则代码模式;
步骤37:解析该策略元素,填充代码模式,得到该元素对应的C语言代码;
所述的元素对应的C语言代码具体形式为C函数定义,函数的参数个数为4个,类型皆为整型,函数返回值为整型,返回值域为{-1,0,1},-1表示不适用,0表示允许,1表示拒绝;
所述填充代码模式的方法是,找出目标中出现的属性值,查找属性值-整型值映射表得到属性值对应的整型值,填充到代码模式中的条件语句中,查找规则所定义的效果,填充函数的返回值;
步骤38:当遍历结束,构造主函数;
步骤39:得到受测试的XACML策略对应的C代码表示形式;
步骤4:通过符号执行工具,即采用开源工具KLEE生成C代码的测试输入:
步骤41:自动对C代码进行编译,采用的编译环境为LLVM,生成LLVM字节码文件;
步骤42:自动启动KLEE,将步骤41生成的字节码文件作为KLEE的输入进行符号执行;
步骤43:KLEE输出,得到C代码的测试输入;
步骤5:将步骤43生成的C代码的测试输入翻译为XACML请求:
步骤51:自动生成shell脚本,将KLEE的多个输出文件整合到一个文件中;
步骤52:对KLEE产生的每一个C代码输入,将输入即整型值代入属性值-整型值映射表查询,得到一组属性值;
步骤53:将得到的每组属性值填充到XACML请求的相应位置;
步骤54:直到所有输入都被翻译完,得到受测试的XACML策略的一组请求;
步骤6:以生成的XACML请求作为策略评估器的输入,发送到XACML策略进行评估,得到授权结果。
CN201310711611.2A 2013-12-20 2013-12-20 基于代码生成和符号执行的访问控制策略测试自动生成方法 Active CN103645987B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201310711611.2A CN103645987B (zh) 2013-12-20 2013-12-20 基于代码生成和符号执行的访问控制策略测试自动生成方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201310711611.2A CN103645987B (zh) 2013-12-20 2013-12-20 基于代码生成和符号执行的访问控制策略测试自动生成方法

Publications (2)

Publication Number Publication Date
CN103645987A CN103645987A (zh) 2014-03-19
CN103645987B true CN103645987B (zh) 2016-01-20

Family

ID=50251208

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201310711611.2A Active CN103645987B (zh) 2013-12-20 2013-12-20 基于代码生成和符号执行的访问控制策略测试自动生成方法

Country Status (1)

Country Link
CN (1) CN103645987B (zh)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104536877B (zh) * 2014-11-28 2017-09-12 江苏苏测软件检测技术有限公司 一种基于混合策略的测试数据生成方法
JP6419953B2 (ja) * 2015-04-28 2018-11-07 株式会社日立製作所 ソースコード等価性検証装置、および、ソースコード等価性検証方法
CN104965788B (zh) * 2015-07-03 2017-07-28 电子科技大学 一种代码静态检测方法

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101339591A (zh) * 2008-08-29 2009-01-07 中国科学院软件研究所 一种xacml策略规则检测方法
CN101771683A (zh) * 2009-01-07 2010-07-07 北京航空航天大学 访问控制策略生成方法及装置

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8020191B2 (en) * 2007-06-19 2011-09-13 International Business Machines Corporation Method and system for determining policy similarities
US8495701B2 (en) * 2008-06-05 2013-07-23 International Business Machines Corporation Indexing of security policies

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101339591A (zh) * 2008-08-29 2009-01-07 中国科学院软件研究所 一种xacml策略规则检测方法
CN101771683A (zh) * 2009-01-07 2010-07-07 北京航空航天大学 访问控制策略生成方法及装置

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
基于XACML的策略评估优化技术的研究;陈伟鹤等;《计算机应用研究》;20130331;第30卷(第3期);第900页到第905页 *

Also Published As

Publication number Publication date
CN103645987A (zh) 2014-03-19

Similar Documents

Publication Publication Date Title
Backes et al. Efficient and flexible discovery of php application vulnerabilities
Lemieux et al. General LTL specification mining (T)
Calcagno et al. Modular safety checking for fine-grained concurrency
CN103577324B (zh) 移动应用中隐私信息泄露的静态检测方法
Alhuzali et al. Chainsaw: Chained automated workflow-based exploit generation
Brucker et al. On the static analysis of hybrid mobile apps: A report on the state of apache cordova nation
CN103645987B (zh) 基于代码生成和符号执行的访问控制策略测试自动生成方法
Delgado‐Pérez et al. Performance mutation testing
Hayes et al. Comparing degrees of non-determinism in expression evaluation
Wang et al. Scaling static taint analysis to industrial soa applications: A case study at alibaba
Marriott et al. Resource usage verification
Ko et al. Weakly sensitive analysis for JavaScript object‐manipulating programs
Hesselink et al. Formalizing a hierarchical file system
Song et al. Esbmc-solidity: An smt-based model checker for solidity smart contracts
Falleri et al. Incremental inconsistency detection with low memory overhead
Bonacina et al. Proofs in conflict-driven theory combination
Dam Decidability and proof systems for language-based noninterference relations
Jiang et al. Evolutionary approach to generating test data for data flow test
Vanciu et al. Ownership object graphs with dataflow edges
Wolschke et al. An agnostic domain specific language for implementing attacks in an automotive use case
Li et al. A proof system for cyber-physical systems with shared-variable concurrency
Keil et al. Type-based dependency analysis for javascript
Beringer et al. Verifying pointer and string analyses with region type systems
Borodin et al. Intraprocedural Analysis Based on Symbolic Execution for Bug Detection
Dadeau et al. Grey-box testing and verification of Java/JML

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant