




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、利用PQL发现程序安全缺陷摘要:许多有效的程序缺陷检测工具的机理是检查该程序是否满足已制定好的规则。那么如何用已制定好规则这种类,对相关对象集合进行处理呢。本文提出了PQL(程序查询语言),方便程序查找类与相关对象之间的匹配,当发现匹配时,记录相关信息或者进行错误纠正。本文提出的静态分析器能够查找到所有潜在的匹配,该静态分析器使用上下文敏感指针分析。静态分析结果为动态分析减少了代码执行量。1. 概述指针是很多编程语言中所涉及的一种特殊的数据类型,指针变量中存储的是内存对象的地址,用户可以借此操作程序对象。虽然java不存在指针,但是通过new关键字来实现了调用对象,所以从这个角度讲,java语
2、言存在与指针类似的功能,在java语言中同样可以用指针分析。通过下面例子来说明使用指针分析的理由:序号代码1HttpServletRequeset requeset=.;2String s1 = request.getParameter(“name”);3.4StringBuffer sbuf1;5StringBuffer sbuf2;6.7sbuf1.append(s1);8String query = sbuf2.toString();9Connection con = .10con.executeQuery(query);在这段代码中,如果我们认为s1是被污染的,s1通过request.
3、getParameter()获得,而sbuf1是由s1通过append方法获得的,最后字符串query通过executeQuery执行。这段代码是否存在缺陷,这要确定sbuf1和sbuf2是否涉及过一个相同的对象,否则只能假设他们之间有交集。因为如果sbuf1被污染,那么查询语句query也可能设计过被污染的对象。对于一般的缺乏指针分析的静态检测工具很有可能会根据上面的判断直接认为第10行的执行时不安全的,只能通过人工审查进行判断,这不仅是误报率增大,而且增加了检测人员的工作量。con.execute(request.getParameter("query");这行代码从H
4、TTP请求中读参数,并且直接把该参数传递给数据库后台。如果使用合适的查询语句,恶意用户可以获得非授权的访问权限,从而破坏数据库中的内容或者在服务器上执行任意的恶意代码。2. PQL语言使用PQL来查询程序脆弱性。它是一种查询语言,它允许用户使用类似编程语言的语法来表示漏洞查询,即用户可以使用展示了一个特定模式本质的代码片段来指定查询。PQL是一种BUG模式,它描述了一些列动态事件以及指向动态事件的实例变量。Matches字句指定对象变量为了匹配match而必须发生的事件序列。最后return子句指定当查询成功,即发现在matches子句中存在一组对象实例参与该事件,由查询返回的对象。其中use
5、s子句定义该查询所使用的对象变量。Matches则解释为:对象source必须通过HttpServletRequest.getParameter得到;对temp对象调用StringBuffer.append方法把source作为第一个参数;对temp对象调用StringBuffer.toString方法来获得对象derived;调用execute方法并且把对象derived作为参数执行。上述这些操作必须按顺序执行。最后,return子句指定查询返回的对象对<source,derived>。PQL静态分析能够发现对于一个给定的漏洞查询的所有可能匹配。PQL系统利用指针分析技术,指针分
6、析按照是否考虑调用函数时的上下文信息可分为两类,分别是上下文敏感(context-sensitive)指针分析和上下文不敏感(context-insensitive)。上下文敏感分析是指会区分同一函数不同的调用而产生不同的分析结果,而上下文不敏感分析则对于同一函数的不同调用只产生一个近似的结果。在精度上,上下文敏感分析要比上下文不敏感分析优越很多。序号代码1Class FindName2 String name;3 FindName(String name)4 T = name;5 6 String getName()7 return ;8 . 9 10 St
7、ring passedName = request.getParameter(“.”)11 FindName name1 = new FindName(passedName);12 String localName = “xxx”;13 FindName name2 = new FindName(localName);14 String s1 = name1.getName();15 String s2 = name2.getName();这段代码中FindName类对name进行了封装。构造了两个FindName类对象,并且两个name对象都调用了getName方法。对于上下不文敏感分析来说
8、,它会将14,15行合并,因为他们都调用了getName方法。name1.getName(),name2.getName()都属于无参数调用,所以按照上下文不敏感分析来讲,指向的可能是第10行的返回值或者是第12行的返回值“x”。这样,s1和s2都会被认为是被污染的数据,但是使用上下文敏感指针分析,只会判断s1是被污染的。可以看出,上下文敏感分析要比不敏感分析更精确,但上下文不敏感分析效率更好,比较适合用于某些需要海量源码分析的系统中。2.1 PQL执行迹对于下面的一段代码,PQL是如何进行查询匹配的O1是names的对象,o2,o6是数组o1的元素。O3是request的对
9、象,o4,o7是string s的对象,o5是connection的对象。2.2 DatalogDatalog是一种演绎数据库查询语言。PQL语言作为Datalog查询的语法糖,这样用户可以通过一种语法类似于java的语言来描述缺陷模式。Joeq工具:是系统中程序识别器,原始java代码的字节经过joeq识别后,转换成代表程序原始信息。Bddbddb:解释器,分析静态代码中的安全漏洞。Datalog对程序安全漏洞进行描述,经过bddbddb的分析最后得出程序的静态安全漏洞结果。在bddbddb数据库中,原代码参数、变量的输入关系为:1. allocation型:v=new Object()表示在堆中分配了新的对象h,并使变量v指向对象h。2. Simple assignment型:v1=v2 表示如果v2指向h,那么v1也指向h。3. Field store型:v1.m=v2 表示如果变量v1指向对象h1,v2指向h2,那么h1.m也指向h2.4. Filed load型:v2=v1.m表示如果变量v1指向对象h1,h1.m指向h2,那么v2也指向h2.V: 程序变量H:堆对象M:方法Datalog与原始语句之间的翻译过程:拿原始语句h1.m=h2来举例,表示堆对象h1.m指向对象h2,但在bddbddb中是这样执行的,先进
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年法律知识竞赛判断题库及答案
- 智能能源管理平台开发合作协议
- 工业制造业技术创新成果展示表
- 智慧校园信息化建设委托代理协议
- 时尚品牌代理合作合同
- 服装行业年度报告表
- 血液循环课件+-2024-2025学年北师大版生物七年级下册
- 生物科技研发项目知识产权保护免责协议
- 数字内容制作与发行合作协议
- 技术应用开发及推广服务协议
- 安全生产责任体系重点岗位履职清单
- 四川省成都市2024年中考道德与法治真题试卷(含答案)
- 大学物理实验(绪论)学习通超星期末考试答案章节答案2024年
- 不合格产品处置管理制度
- 《现代家政导论》电子教案 2.2模块二项目二家庭制度认知
- 商务礼仪课件教学课件
- 2024年普通高等学校招生全国统一考试·新课标卷(生物)附试卷分析
- 优化热处理工艺的机器学习
- 2024年1月时政热点题库及答案
- 2023年山东省夏季普通高中学业水平合格考试会考生物试题及参考答案
- 非正常接发列车作业标准
评论
0/150
提交评论