论文研究-基于权限验证图的Web应用访问控制漏洞检测.pdf

所需积分/C币:5 2019-09-07 08:58:59 863KB .PDF

针对Web应用中的访问控制漏洞缺乏有效检测手段的问题,提出了一种基于权限验证图的检测算法。首先,在程序控制流图(CFG)的基础上,识别权限验证节点和资源节点,通过T和F边将节点连成权限验证图。然后,遍历资源节点对应的所有权限验证路径,计算路径验证权限,与资源节点访问权限比较,检测是否存在访问控制漏洞。实验结果表明,在7个Web应用中,发现了8个已知和未知漏洞,相比较于已有的访问控制漏洞检测算法,该算法可以有效检测4种访问控制漏洞,扩大了漏洞检测范围。
夏志坚,彭国军,胡鸿富:基于权限验证图的wcb应用访问控制漏洞检测 2018,54(12)65 表1简单权限控制实例 delete ph cess. php I. session start() 2. Slogined-S COOKIE[“ islogined”]; if( S SESSION[ admin’]!-yes”) 3. if(! Slogined Msg("No logined!") 3. header("location: login. php") 4. else if(! check Admin($ COoKi[usert exit(); 4. exit() 5. else deleteUser() 糸权限路径,比较资源节点对应的杈限路径验证权限 与资源节点访问权限,即可检测权限控制漏洞。因此本 val-val op expr, delete expr from cond 文算法分为以下两步 if cond==NULL break op=opl, delete op I from cond (2)深度优先搜索权限验证图,获取每个资源节点 15. return [w, var 对应的所有权限路径,计算权限路径验证权限,并与资 算法1中,第3~14行遍历条件表达式cond中的所 源节点访问权限比较,判定是否存在权限控制漏洞。 有简单条件表达式。首先取第一个简单条件表达式 3.1节点识别 expr,然后针对expr中的所有变量进行后向数据流分 权限验证节点分为页面内权限验证节点和页面析,判断变量是否为权限变量。如果是,则用权限变量 间权限验证节点,页面内权限验证节点山分支语句值替换cxpr中变量,计算expr值:将expr值与条件表达 ( if-then-else或者 switch)和包含权限变量的条件表达式式值val进行运算,然后删除当前expr,接着替换运算符 组成,权限变量预先配置:页面间权限验证节点包括封0p,并删除p,重复直到com为NUL。最终返回节点 装权限验证节点的函数和贞面。表1中“ 'delete. php”包验证权限和条件表达式值。 含3个权限验证节点,行4的“ else if(! Icheckadmin 页面间权限验证节点是西数或页面封装了页面间 ( S COOKIE¨ uSername))”和行3的f(! Slogined)”权限验证节点,因此只需要对函数调用或 include等包 为页面权限验证节点,行1的 ""include('acep)”为含的页面,重复h述步骤即可。页面间权限验证节点验 页面间权限验证节点,在“ access. php”中包含了页面内证权限为其包含的页面内权限节点权限。 权限验证模块。 本文中的资源节点主要为数据库操作,包括删除、 页面间权限验证节点均可等价为if(cond),其中更新插入、查峋某一张表,针对不同表的不同操作对应 cond= expr1 opl expr?2op2expr3…,而 expri为不包含的角色也不同,因此可以用三元组(操作,表,角色)表示 逻辑运算符&&和的简单条件表达式权限变量格式为一个资源节点。预先配置时可以根据系统的权限表生 {变量名,参数,验证通过取值权限}(变量不为函数时,成资源权限表,每一项包含一个三元组。识别资源节点 参数取值为NUL),例如列表1中“{$ COOKIE[ isLog-时,首先识别数据库操作函数,然后从函数参数中匹配 ined'],NULL,l,‘ isLogined'’}”,表示cook中变量操作和表,如果匹配到,则将这个代码模块视为资源 isLogined值为1时,权限高于“user的角色可通过验节点 证。页面内权限验证节点算法 每个页面均有唯一的起始节点,而终止节点则包括 算法1页面内权限验证节点识别算法 页面结東, returN语句,exit和de等终止执行函数,以及 输入:条件表达式cond,权限变量集合 auth var 页面跳转语句。页面跳转语句包含多种形式,表2给出 输出:节点验证权限w,条件表达式值wal ∫页面跳转实例。文献[0提出了一个链接提取的综 1. Dis AuthNode( cond. auth va 合性方法,本文只需要识别跳转语句,因此首先匹配 2. W=NULL, op=&&, val=True, op=&&, val=Truc P函数,例如 Header、echo、 print”,然后在函数参数中 hile cond 4. expr=GeLFirstExpr(cund)/取第一个简单表达式 匹配是否包含本地线远程地址。当匹配到 Header函数 for var in 时,下一个节点必须为终止执行函数,否则不识別为终 if var in auth Var or DataFlaw(var)in 止节点。 表2PHP页面跳转方法实例 tVar(auth 1. Header("Location: Surl"): exit() replace(expr,var,tmp)/用tmp值替 换expr中的va if SC 662018,54(12) Computer Engineering and4 pplications计算机工程与应用 32生成权限验证图 输出:漏洞vu 生成权限验证图只需要遍历CFG图,识别节点类 1. DelectVuk( G, s) 型,将节点加入权限验证图,然后递归得到节点的T边 stack push(G> estart)∥入栈 和F边指向的权限验证节点,其中资源节点的T边和 G->start->visited=1 边指向同一节点,终止节点的T边和F边指向NUL 算法如卜: node= GetChild( stack top)/获取节点的非空未 被访问子节点 算法2权限验证图生成算法 6. if node =s 输入:CFG,权限变量 checkNodes,资源集s 7 var= stack traverse()/k为栈底节点,k+1为 输出:权限验证图Grph 下·个节点,如果k→>!+1,如mp=tmpk,重复直到k为 1. GraphBuilder( CFG, checkNodes, s) NULL,返回tp ode=curCFG->start 8 i'var<s.var小于表示var权限集不能包含 3. if curr=exit! currlcurr为终止节点 s var 44 node->T=node->F=NULL 9 report vul,return 5.else incur是权限验正节点 clsc if nodeI=NULL 6. node-2>T=Graph Builder( curr True, checkNodes, 5) stack push(node node->F-Graph Builder( curr->False, check Nodes, s) node->visited=1 8. else if curt是资源节点 continue node->T-node->F-Graph Builder( curr->child, chec stack pop()栈顶节点被访问,出栈 kNodes,s) 15. while !stack isEmpty() 10. else 在算法3中,建立了一个节点栈 stack,首先将权限 11. node=GraphBuilder( curr->child, check Nodes, s 验证图G的首节点入栈,并设置为已访问,然后第4~15行 12. return( Graph-node 为对G的深度优先搜索。当搜索到日标资源节点s时 算法2为递归算法,取CFG中首节点,判断节点类 此时栈中所有节点即为s的一条权限路径,从栈底遍历 型,如果节点为终止节点或者NUL则将节点整个栈,根据定义4,计算权限路径验证权限,比较 node的T边和F边均指向NULL。cur→Tue、cur τr与资源节点5.wr,如果有漏洞则报告漏洞。如果 False表示当前节点跳转条件为真或假的子节点,cur节点不为s且不为NULL,则将节点入栈,然后直接跳转 chid表小当前节点的子节点(无跳转)。节点为权限验到循环开始,否则当前节点出楼,楼为NU时,循环遍 证节点、资源节点时,分别将noe的T边和F边指向不历结束。通过该算法,图1中n到的权限验证路径 同的节点。节点如果为其他类型节点,则忽略当前节 总共有两条,即{ut,1.2,3,s和stwt,1,2,4,s}。因为 点,直接递归当前节点子节点。图1是通过上述算法生 3→T=3→F=s,所以计算权值时,节点3不是有效权 成的一个权限验训图,从图中可以清晰地获取从起始节限节点,因此,它们的有效权限验证节点集合为1,2} 点到资源节点的所有路径 {1,4},假设权限验证节点1和4的权限均小于资源节点 s的权限,则存在一条权限验证路径 start,1,2,4,s的 权值小于资源节点s的权限,因此资源节点s存在权限 控制漏洞,报告漏洞信息。遍历所有的资源节点后,就 start 可以完成对页面的漏泂检测。通过构建权限验证图的 方法,可以简化程序逻辑,将无规则的权限验证逻辑转 换为清晰的权限验证路径,从而较大地提高权限控制漏 End ○权限验证节点 洞分析效率和准确度。 图1权限验证图 33漏洞检测 4实验与结果分析 根据定义5,通过深度优先遍历权限验证图,获取起4.1漏洞检测工具 始节点到目标资源节点的所有权限验证路径的权值,每 为∫殓证算法有效性,本文实现」权限控制漏洞检 获取一条权限验证路径的权值后,比较权值与资源访问测T具: Acc ulhunter php-parser是由PHP编写的一 节点权值,从而判断漏洞是否存在,具体算法如下: 个语法分析器,直接生成抽象语法树(AST),功能简单, 算法3漏洞检测算法 易于扩展,因此,将 PHP- Parser作为语法分析器。整个 输入:权限验证图G,日标资源节点s L具包括全局信息收集、CHG生成部分、权限验证图构 夏志坚,彭国军,胡鸿富:基于权限验证图的wcb应用访问控制漏洞检测 2018,54(12)67 建、权限控制漏洞检测和漏泂报告等5个部分。整个L SlimCMs中的 redirect. php”中包含插入新管理员 具的系统结构如图2。 的资源节点,但在页面中被未发现权限验证节点,因此 控制流图构建||权限变量 检测出了一个权限验证缺失的漏洞(CVE-2008-5708)。 Redaxscript中检测到了1个权限控制漏洞,在¨ admir 全局信息 收集 权限图 center.php”中,不同权限用户属于不同组,在生成新用户 页面代码 CFG构建 构建 中,虽然验证了用户是否有权注册为 admin,但是没有 验证川户注册的组,因此可以通过将川户组改为管理 结束 漏洞报告←漏洞检测k資源杈限 组,使得普通用户具有管理员权限,这个漏洞属于权限 图2 Acc Vulhunter工具系统结构图 验证不当的漏洞 Acc Vulhunter还在 DDCMS和 SlimCMS中检测到 Acc VulHunter针对权限控制漏泂的检测主要步骤为:了两个未知漏洞,在 DDCMS中,通过权限变量“$ admin 步骤1将负面分为功能贞面和定义贞面初始化程验正管理员,在面“ wap admin cg. php”中,虽然通过 序主要参数。 权限节点“if($ admin!=1)”进行了权限验证,但是当权限 步骤2对功能页面进行分析,生成AST抽象语法验证失败时,调用 header函数跳转, Acc Vulhunter在 树,然后遍历AST,收集全局信息,并构建CFG控制流图。 header I函数后未匹配到ext或d函数,因此并未视为终 步骒3遍历CFG图,识別权限验证节点和资源访t节点,因此仍能访问到后续节点,因此存在一个权限 问节点根据权限验证图构建算法构建贞面权限验证图。验证处理逻辑不当的漏洞。在 SImms中,系统通过 步骤4判断页面所有资源访间是否在权限控制漏查询管理员用户名和用户提交用户名是否一致判断用 洞,如果存在通过xm报告漏洞位置信息和对应资源信息。户权限,而在“ install. php”中可以重新设置管理员用户 42实验与结果分析 名和密码,但是在文件中并未对创建者身份进行验证 为了测试漏润检测算法的有效性,本文选取了4个(数据库用户名密码直接调用配置文件,未进行验证) Web开源应用 mantisbt-master. SlicES、dx个如果攻击者重新访间该页面,则可以创建新的管理员用 DDCMS以及在文献|6-7中测试的3个Web应用名和密码,从面提升权限,因此存在一个强制访间权 限控制漏洞 SCARF、 PHP Calendars、 PHPOLL。 实验的结果如表3所示,总共报告漏洞12个,经过 本文工具采用了基于权限验证图的检测算法。该 算法定义了将权限控制漏洞的检测转为资源节点对应 人工确认漏洞数为8个,确认漏洞中未知漏洞2个,已知 的权限路径验证权限与资源节点访问权限的比较的检 漏洞6个。 Acc VulHunter在 SCARE、 PHPCalendars中各 测模型,而前述4种权限控制漏洞中均存在一条权限低 检测到∫1个已知权限控制洞,分別为CVE-2006-于资源节点权限的权限路径,因此本文的检测模型可以 599和CⅤE20100380。 SCARF的 generaloptions. php覆盖这四种权限控制漏润。文献[10中算法只判断页 中缺少权限验证节点 require_admin(”,导致任意角色面是否包含防护,并使川强制访问进行确认,因此只能 可以编辑应用配置,而 PHPCalendars的 instll. php中可以覆盖强制访问权限控制漏洞。而文献[中,忽略了权 编辑系统配置然而并未验证用户权限,因此仵在权限验证失败后的处理逻辑检查,号致尢法检测权限验证 限控制漏涧。文献[o屮的工具在 PHPPOLI屮检测处理逻辑不当的权限控制漏润。表4是本文工具与文 到了3个新的漏洞,在 modifica configurazione. php”、献1-1]中L具的漏涧发现类型比较,从表中可以看出 modifica_ votanti. php¨"、 modifica_ band. php”中检测到了文献[中工具只能检测强制访问权限控制漏洞,文 权限控制漏洞,而本文工其检测出∫“ modifica votanti.献[1.ACMA可以检测除权限验证处理逻辑不当以 php”中缺乏权限验证,导致用户可以修改其他用户信外的权限控制漏洞,而 Acc Vulhunter可以检测全部4种 息,另外两个漏泂由于版本更新已修补。这3个漏洞属权限控制漏洞。因此通过实验对比,可以证明本文算法 于均为强制访问权限控制漏洞 具有更好的漏洞检测广度。 表3 Acc ulhunter打描结果 应用 文件数杈限变量杈限验证节点资源节点报告漏洞确认漏洞运行时间 lanlisbl-master 712 DDCMS 33 133 PHPCalendars 17 PHPOLL 3 14 2 68 2018,54(12) Computer Engineering and4 pplications计算机工程与应用 表4漏洞发现类型比较 for Security, 2006: 27-36 工具 [5 Su Z, Wassermann G. The essence of command injection 类型 本文工具文|6中文献7中 wcb applications[J].ACM Sigplan Notices AccVul hunter工具工具ACMA 2006,41(1):372-382 强制访问 [6 Dallon M, Kozyrakis C, Zeldovich N Nemesis: Prevent 权限验证不当 g authentication access control vulnerabilities 权限验证缺失 权限验证后处理逻辑不当 Web applications[C]//Proceedings Usenix Security Sym osium. Montreal, Canada, 2009: 267-282 Acc VulHunter扫描Web系统的时间与系统的文件[7] Stergiopoulos G, Katsaros p, Gritzalis d. Automated detec 数和资源节点数以及权限节点数正相关,由于权限验证 tion of logical crrors in programs[C]/International Con 节点识别涉及到更多的数据流分析和过程间分析,相对 Terence on Risks and Security of Internet and Systeins 于外两者,扫描时间相对较长,未来通过优化节点湨 2014:35-51. 别,仍然可以提高算法分析速度 [8 Gauthier F, L.ctarte D, L avic T, ct al. Extraction and com 综合实验结果看,本文的权限控制漏洞检测算法可 prehension of moodle s access control model: A case 以快速、有效地发现权限控制漏洞,相对于已有方法,能 study[C]/ Conference on Privacy, Security and Trust(PST 够检测更多的权限控制漏洞,具有更高的实用性。另外 2011).Montreal, Qucbcc, Canada, 2011: 44-51 山于相对更大的代码分析量 AccVulhunter在时间消耗( Letarte, Merlo E上 Extraction of inter-procedural simple 上较大,但相对亍人工审查,仍然能较大提高分析速率。 role privilege models from PHP code[]/working Con ference on Reverse Engineering, 2009(Wcre 09), 2009 5结束语 [10 Sun F, Xu L, Su ZStatic delection of access control 本文提出了一种基于权限殓证图的访问控制漏洞 vulnerabilities in Web applications[J]. Shanxi Architec 检测算法,通过静态识别权限验证节点,建立权限验证 ture,20ll,2:6392-6396 图,生成权限验证路径,快速有效地检測权限控制灀洞 [l Gauthier F, Merlo E Fast detection of access control 相对于已有方法,扩大了权限控制漏洞检测范围并提升 vulnerabilities in PHP Applications[J]. Reverse Engineering 了检测准确性。设计了漏洞检测L具 Acc Vulhunter,针 2012:247-256 对7个Web内容管理系统进行了漏洞检测实验,证明了[12]zhuJ,ChuB, Lipford H Detecting privilege escalation 漏洞检测算法的有效性,下一步将优化教据流分析和节 attacks through instrumenting Web application source 点识别算法,进一步加快工具扫描速度。 code[ cyiprocccdings of the 21st ACM on Symposium on Access Control Models and Technologies, 2016: 73-80 参考文献 [3 Liu T, Lin Y, Wen X, et al. BindingDB: A Web-accessible []刘金晓,马素霞,齐林海.web应用系统中权限控制的研究 database of experimentally determined protein-ligand 与实现]计算机T程与设计,2008,29(10):2550-2553 binding affinities J. Nucleic Acids Research, 2007,35 [2] Kolovski V, Hendler J, Parsia B Analyzing web access s1):198-201 control policics[C]International Conference on World [14] Hills M Streamlining control flow graph construction Wide Web(www 2007), Banff, Alberta, Canada, May with DCFlow[C /International Conference on Software 2007:677-686 Language Engineering. [S.I.: Springer International Pub 3]OWASP. Owasp top 10-2013 the ten most critical Web lishing,2014:322341 applicationsecurityrisks[eB/oL]-[2013-06-12].https:/www.[151NandiA,MandalA,aTrcjaS,ctal.Anomalydetection owasp.org/index. php/Top 10OWASP Top 10 for 2013 using program control flow graph mining from execu [4 Jovanovic N, Kruegel C, Kirda EPrecise alias analysis tion logs[C]/Proceedings of the 22nd ACM SIGKDD for static detection of web application vulnerabilities[C] International Conference on Knowledge Discovcry and The Workshop on Programming Languages Analysis Data Mining, 2016: 215-224.

...展开详情
img
  • 至尊王者

    成功上传501个资源即可获取

关注 私信 TA的资源

上传资源赚积分,得勋章
    最新推荐