论文研究-基于污点分析的JavaScript应用脆弱性检测工具研究与实现 .pdf

所需积分/C币:16 2019-08-15 14:11:46 741KB .PDF
收藏 收藏
举报

基于污点分析的JavaScript应用脆弱性检测工具研究与实现,张磊,车力军,JavaScript语言是Web中最重要的动态语言,如果代码操作没有经过严格的分析和处理的危险数据,则非常容易侵犯用户�
山国利技论文在线 http://www.paper.edu.cn 将别名分析的过程中收集到的名称用于污点分析,有助于降低误报率。在污点分析中,解决 了PHP动态语言带有的多维数组的索引问题,提升了工具的效率 但是周瓒的成果尚不支持面向对象的特性,只能通过简单的类型分析来决定类的方法调 用 85 总结如表1所示。 表1前人工作总结 Tab. I Summary of former works 作者 文章 主要内容 不足之处 《基于污点分析的Java借助工具实现了一个代码的諍敏感AP集合是通过 梁北海web程序脆弱性检测方态分析的前端,进行源代码的经验总结的,无法覆 法研究》 识别以及中间的转换,讨论了盖所有的脆弱点 基于数据流分析的方法级数据 依赖关系以及程序方法调用依 赖关系提取方法。 《基丁污点分析的Web提出了参照渗透测试的思想来通过代码重写的方式 肖雯敏安全监测系统的研究与模拟攻击,来检测是否存在漏实现的,系统的拓展 实现》 洞 性较差。 《一种改进的动态污点釆用了一种二缴表动态标记方只是提出了一种模型 黄昭分析模型》 法替代了 Taintcheck模型中的并没有考虑足够的用 回溯链表。 户场景。 昊小伟《其于动态污点分析的提出了ˉ种基于污点分析的网无法识别协议中出现 网络程序漏洞挖掘方络程序 uzzing的方法 的所有控制字段,这 法》 是因为某些控制字段 的候选值很少 周瓒《一种PIP程序自动化深入研究了过程间别名的分不支持面向对象的 缺陷分析工具的设计与析,并将别名分析收集的别名特性,只能通过简单 开发》 信息应用于量值分析和污点分的类型分析来决定类 析 的方法调用。 技术背景 代码的形式虽然是多种多样千变万化,但是也有它该有的规则,利用规则对代码进行分 90解和标识,这就是对代码进行相应的词法分析和语法分析。在词法分析的过程中,可以对语 言进行一个初步校验,保证语言没有严重问题,符合语法规范且可以运行。词法和语法分析 结束后代码将被表示为抽象语法树,对抽象语法树进行遍历和分析就可以得到所需的数据控 制流进行污点分析。 词法分析 95 词法分析器是一种将代码的字符流,转换成为某种格式下的单词流的一种程序,并且将 每个单词都归类到语法的某个范畴之中,这个范畴又叫做词类。词法分析器为」完成这种 分类和聚合的操作,会按照一组描述输入语言的词法结枃来分解代码,这种词法结枃说明了 如何将字符重组为单词,特别要说明的是在词法分析领域,标点符号也是单词。 国技论文在线 http:/www.paper.edu.cn 般的基于英语的编程语言都非常简单,按照字丹聚集为单词,通过空格和标点符号标 识着单词的结東。但是这样的算法仅仅能够起到分割单词的作用,而在词沄中有需要特殊处 理一些单词,因为他们具有特殊的含义和标识作用,这样的单词被称为关键字。例如在 Javascript程序中 function、var、case、 const、let等。 对识别单词最简单的做法是遥过逐个遍历单词的字母,将单词与目标关键字逐个匹配, 例如识别一个case的关键字的状态转移图如图1 sO [S2 S4 图1Cae状态转移图 Fig. 1 State of Case 从初始状态为S0,开始匹配,经过c、a、s、e一直到结束状态为S4,到达S4的时候 就标记着当前的单词被成功识别为case这个关键字。在仼何状态没有匹配到下·个都会失 110 败并回到S0重新进行匹配,匹配失败的状态不进行特殊标记。 使用同样的方法可以标记一个新的单词 const,如图2: 图2Cons状态转移图 Fig 2 Statc of const 如果同时对 const和case进行匹配可以得到,如图3的状态转移图。 S5 S6 S7 图3Case和 Const状态转移图 Fig 3 State of Case and Co 同样的引入更多的单词的之后状态会变得更多,最后形成只有很多状态的算法,这个算 12C 法被称为有限状态机。输入的字符流通过词法分析器转换为∫由关键字和标识符组成的单词 [7 语法分析 单词流并不能支撑我们对于污点分析的要求,需要将单词流转化为更加只有抽象意义的 4 国科技论文在线 http://www.paper.edu.cn 抽象语法树,而语法分析器就是用来完成这个工作的。语法分析器的核心工作是确定当前的 125 代码和 JavaScript语言的语法模型中是否有效8。假如 Javascript的语言模型是一个形式语 法G,输入的代码为S。语法分析器会尝试构建一个推导过程,以表示S可以在G中推导出 来,这个推倒过程也就被称为语法分析 抽象语法树 通过对代码进行词法分析和语法分析我们得到了抽象语法树,抽象语法树是一种对代码 更加细粒化的表达,通过分析抽象语法树可以得到很多信息,后面的数据控制流也会从抽象 语法树中推导得出。为了方便分析,工具对抽象语法中可能出现的各个节点的类型以及 带有的参数和变量进行了定义。 如表2所小: 表2抽象语法树类型说明 135 Tab 2 DctailofAST 类型 描述 Expression statement普通的表达式语句 Block statement 由大括号包围的一系列语句 Empty statement 空语句 Debugger Statement调试语句 With Statement JavaScript中with的语句 Return statement Javascript中 return语句 Break Statement JavaScript中 break语句 JavaScript中其他关键字语句,数量原因,不再赘述 Function Declaration函数声明语句 Variabledeclaration变量声明语句 ThisExpression JavaScript中This表达式 Array expression 数组表达式 ObjectExpression 对象衣达式 Update Expression 自更新运算符,如++, Binary expression 元运算表达式,如12,4*3 AssignmentExpression赋值语句 LogicalExpression 逻辑判断语句 Callexpression 函数调用语句 应用脆弱性检测工具架构 脆弱性是指在应用中可以被用来攻击或者利用的缺陷或者错误。为了发现这种错误,需 要匚具能够理解代码的作用和功能,并且通过配置了解哪些变量可以被认为是污染源,哪些 函数又可以被认为是敏感AP所以设计了如图3所示的工具架构。 山国科技论文在线 http:/www.paper.edu.cn 词分析器河流语法分器A5T叫污点分析算法 感AP和 代 快置 ⊥栏h对程序 进行修复 攻击路径图 140 图3检测工具架构图 Fig 3 Architectureof Tool 工具首先利用前文中提到的词法分析器对代码进行词法分析获得单词流,之后对单词流 进行语法分析得到抽象语法树,这里的语法分析器是可以调节 Java Script语言版本号的,可 145 以针对ES5、ES6或者更高级的语法进行分析。在抽象语法树被输入污点分析算法的时候还 有一份和敏感APⅠ、污染源以及污染消除相关的配置文件,两者共同在污点分析算法中生成 攻击路径图,之后工程师会对程序进行修复,从而保证用户信息安全。下文将重点介绍污点 分析算法 基于数据控制流的污点分析算法的原理 15〔 抽象语法树已经很好的表示了代码的结构并且包含了非常丰富的信息,但是数据与代码 之间的流向关系并没有被清晣的表示,我们需要对抽象语法树进行深废优先遍历来生成一份 控空制流图,控制流图中包含了数据控制的流向,搭配上配置文件可以通过污点分析算法生成 亏染路径图。总结,算法的流程图如图4所示: 配文 AST 深度优先遍历 控利流 污点分析法 图4算法流程图 Fig. 4 flowchartofalgorithm 深度优先遍历 为了保沚抽象语法树中信息不丢失,同时对每一种语句的情况进行了处理,所以要对 AST抽象语法树进行遍历,在树的遍历算法中般有深度优先遍历和广度优先遍历。因为 抽象语法树的递归特性,工具采用基于递归的深度优先遍历算法。算法会从根节点开始对树 枝进行遍历,基于深度优先的原则会在遍历至没有更下层的节点时进行回溯,这恰好方便我 们在遍历过程中对语句进行分析。 6 山国科技论文在线 http:/www.paper.edu.cn 将根结点放入 以妙是含为空 从队列中取出 第一个节点 请用半前节点 应区处理 女 将它的子节点 入队列 图5深度优先遍历算法流程图 165 Fig 5 flowchartofDF Salgorithm 流程图中提到的节点对应的处理两数,是用来表示针对当前节点对应的子节点与自身之 间应该如何连接,例如变量定义节点可以直接连接下一句的节点,但是i语句需要根据条 件判断进行跳转,跳转结束后共同连接至卜一步的节点,节点的种类繁多,需要一一处理, 为了保证各个种类和类型的节点都被特殊处理,同吋保证程序的可拓展性,作者将各个节点 17 类型的处坦方法进行总结如表3所示: 表3抽象语法树节点描述 Tab 3 BuildofaSt 节点类型 节点描述 Catch Clause 连接父子节点并递归 Do While statement将判断条件与内部语句用true连接,将后代节点与判断条件用 false 连接。 Expression Statement直接连接后台节点 Function Declaration提纯为单独的函数库,调用遍历算法 ForStatcment 连接初始化节点与比较节点,将比较节点连接后续代码与内部语 句节点,内部代码节点连接更新节点,更新节点连接比较节点。 IFStatement 谝历子节点,并且用true连接比较语句与子节点,如果存在 false 节点,谝历 false节点并用 false连接比较语句与子节点 Return Statement 连接函数退出节点 SwtichStatement 用true连接语句, false连接下一次判断 7 山国科技论文在线 http:/www.paper.edu.cn 用上面的算法针对·个带有for循环的代码可以生成如图6的数据流图 va c b vari=0: false return c, c T- a ocIt 175 图6数据流图 Fig 6 controlnlowgraph 通过图6可以发现,控制流图可以很好的表示出在 Javascript中数据是如何根据各种控 制语句在各个变量和函数中问发生传递,工具卜一步的任务就是通过控制流图分析出污染的 数据源以及它们的传播路径 18C 污点分析算法 对」一个函数来说,如果它被想象成一个黑箱,那么箱子的输入就是参数,输出就是返 回值,而函数内部就如图6所示,是·个有向有环图,算法下一步的任务就是在有向有环图 中搜索到一条路径,存在于被污染的参数和返回值之间,那么我们就可以认为这个函数是 个会传播污染行为的函数。调用他得到的返回值也就是危险的。同样如果在函数内部调用敏 感AP的参数是被标记为污染的参数,那么这时说明我们发现了一条可以从污染源到敏感 API的路径,应用可以被用来攻击和利用的缺陷也就被发现了。 在图是一个无环图的情况下,我们可以从算法的初始点开始分析,利用深度优先算法, 分析每一个节点有没有发生污染行为,有没有调用敏感API,有没有返回语句,当搜索到敏 感APⅠ调用或者返回污染值的行为时,我们就可以对跞数认定为危险函数,当搜索到用污 染参数调用敏感AP吋,我们就可以认定我们发现了·条攻击路径,并且在绘图中展示出 来 针对有环的情况,如果继续采用如上述措述的算法,会遇到两个问题,第一是算法会陷 入死循环,第二是算法中判定污染数据传播流程无法准确判断数据传播的路径,所以在无环 图的算法基础上我们更新算法如下 195 参数说明:α代表已经污染的变量集合,β代表树中已经被访问的节点集合,γ代表控制 8 国科技论文在线 http://www.paper.edu.cn 流图中的节点集合,μ代表会从参数污染返回值的函数,δ代表污染消除的函数集合,ε代表 敏感AP集合 主要步骤: 1.如果γ为空,退出;否则进行下一步。 200 2.读取配置文件中标记为污染点的变量。 C=101, C 3.读取配置文件中标记为污染消除点的函数 β={B,B2,,B…,B1≤i≤n 4.读取配置文件中标记为敏感AP的函数,添加至ε 205 E=1E,E2, 从γ中选取第个节点,开始下步 6.假设节点为。 7.如果o∈β中,进行步骤10;否则将φ添加至β中,进行下一步。 8.如果o节点发生了污染传播行为,则将节点的变量名添加至a,并且以q的子节点 210 添加至γ中,表4中说明了会发牛污染传播行为的情况。 表4污染传播列表 Tab. 4 list oftaint 序号φ节点类型 q节点行为 VariableDeclaration将α中的一个或者名个变量赋值给不存在于α中 的变量 CallExpression 假设调用函数为f,且f∈u Binary expression 假没参与运算的参数为a1,a20如果a1∈a或者 2∈a,则发生污染行为 9.如果o调用函数f,且f∈ε,则根据当前在α中记汞的传播路径行为,进行汇报。 10.如果γ为空,退出;取γ第一个节点,赋给p,回到第7步。 215 工具评测 为了验证算法的结果,作者设计了一些实验,选取其中一个进行说明: 代码如下 220 配置文件中标记a为污染点,其余项目为空配置,分析代码可以发现,c在c+=a:这句 代码中被污染,a到c,c再到 return的。 代码经过工具分析,渲染出了如图7所示的结果 山国科技论文在线 http:/www.paper.edu.cn VEr C-D 0 false ce tuT c CT一彐 cnit 图7实验结果 23C Fig. 7 ResultofExp 对于如上的代码我们成功分析出了代码中存在一条污染路径,可以被用于攻击和破坏。 算法证实了代码中的攻击路径,所以算法是成功有效地 结论 作者总结了前人在静态分析领域內的成果,了解了现在市场上污点分析算法的区别和不 足,发巩截止目前为止仍然没有针对 Javascript语言的静态分析方法出现,为了填补这一技 术空白,作者设计了基于数据控制流的污点分析算法,并应用在了 JavaScript语言上,为污 点分析的静态方案打开了新的大门。但是工具当前仍然只能分析 JavaScript语言中代码相对 规范的部分,对于动态语言本身所特有的动态特性仍然无法做到很好的支持,该工具的算法 可以在将来的学习中继续完善和改进。 24C 参考文献 [1]梁北海.基于污点分析的 Jaya Web程序脆弱性检测方法研宄[D].华屮科技大学,2013 [2]肖雯敏.基于污点分析的web安全检测系统的研究与实现[D].湖南大学,2014. [3]黄昭.一种改进的动态污点分析模型[D]华中科技人学,2011 [4]吴小伟.基于动态污点分析的网络程序漏洞挖掘方法[D].华屮科技大学,2012 245 [S]周瓒.一种PHP程序自动化缺陷分忻工具的设计与开发[D]电子科技大学,2014 [6] Wagner D, Dean R. Intrusion detection via static analysis[C], IEEE Symposium on Security and Privacy IEEE Computer Society, 2001: 156 η」孔德光,郑烩,帅建梅,等.基于污点分析旳源代码脆弱性检测技木凵.小型微型计算机系统,200, 30(1):78-82 256 [8 Newsome J, Song D. Dynamic taint analysis for automatic detection, analysis, and signature generation of exploits on commodity softwarc[]. Chinesc Journal of Enginccring Mathematics, 2005, 29(5): 720-724 [9] Clause J, Li w, Orso A. Dytan: a generic dynamic taint analysis framework[C]/ International Symposium on Sottware Testing and Analysis. ACM, 2007: 196-206 [0]闫东晓.基于动态污点分析技术的模构测试研究D西安电子科技大学,2013 255 10

...展开详情
试读 10P 论文研究-基于污点分析的JavaScript应用脆弱性检测工具研究与实现 .pdf
立即下载 低至0.43元/次 身份认证VIP会员低至7折
    抢沙发
    一个资源只可评论一次,评论内容不能少于5个字
    img

    关注 私信 TA的资源

    上传资源赚积分,得勋章
    最新推荐
    论文研究-基于污点分析的JavaScript应用脆弱性检测工具研究与实现 .pdf 16积分/C币 立即下载
    1/10
    论文研究-基于污点分析的JavaScript应用脆弱性检测工具研究与实现 .pdf第1页
    论文研究-基于污点分析的JavaScript应用脆弱性检测工具研究与实现 .pdf第2页
    论文研究-基于污点分析的JavaScript应用脆弱性检测工具研究与实现 .pdf第3页

    试读已结束,剩余7页未读...

    16积分/C币 立即下载 >