预览加载中,请您耐心等待几秒...
1/4
2/4
3/4
4/4

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

第34卷增刊Ⅰ北京化工大学学报Vol.34,Sup.Ⅰ 2007年JOURNALOFBEIJINGUNIVERSITYOFCHEMICALTECHNOLOGY2007 基于静态检测的程序安全漏洞测试 孙茜1宫云战2杨朝红2,3 (1.北京邮电大学信息工程学院,北京100876;2.北京邮电大学计算机科学与技术学院,北京100876; 3.装甲兵工程学院信息工程系北京100072) 摘要:静态分析方法可以自动地提取软件的行为信息,从而检测出软件中的安全漏洞。和其他程序分析方法相 比,该方法具有自动化程度高和检测速度快的优点。本文介绍了Java语言的安全漏洞的故障模式,说明了类型推 断、数据流分析和约束分析等主要静态分析方法及两种特别的分析方法,最后介绍了几种常用的静态代码安全检 测工具。 关键词:静态分析;安全漏洞;故障模式;静态检测工具 中图分类号:TP31115 理,将会发现表面上形态各异的安全漏洞很可能是 引言 由同一个原因引起的。NASA对不同语言存在的安 随着社会信息化的不断加深,网络的安全问全漏洞做了详细的分析,本文在此基础上对Java语 题[1]越来越突出。安全漏洞是软件中的一种故障言中出现的典型的安全漏洞故障模式进行了分类, 模式。此类漏洞的存在可能为他人攻击软件提供方主要有如下几类:数值的泄露、垃圾回收器访问权限 便。而一旦软件被攻击成功,系统就可能发生瘫痪,问题、对象变量合并、方法存储静态域问题和有关域 所造成的危害可能更大,因此,此类漏洞应当尽量避的相关问题。 免。111数值的泄露 最近几年,静态分析作为一类高效的程序分析数值的泄露有返回值泄露和Static方法中的数 方法,受到越来越多的重视。当用户给出语言的抽组泄露等。 象语义以后,该类方法能够自动发现满足所有可能返回值泄露是指返回一个与存储在对象域中的 (不一定实际存在)执行状态的软件属性。静态分析易变对象的相关值时可能泄漏该对象的内部表示。 方法具有自动化程度高,分析速度快,并且可以检验如果实例被不受信任的代码访问,和对易变对象的 无穷状态系统的优点。尽管静态分析方法可能产生未受限制的修改将威胁程序安全性或一些重要性 一定的漏报(falsenegatives)或误报(falsepositives),质。返回一个对象的复本在很多情况下是一种好的 但仍然是当今最实用、最有效的安全漏洞检测方法方法。例如,当返回一个对象的引用时可能导致将 之一。引用所调用的对象内部信息同时返回,是private的 信息被对象外的内容调用。 常见的安全漏洞故障模式 1Static方法中的数组泄露指的是公共静态方法 程序中的安全漏洞形式多样、种类繁多。如果返回与类的静态域中的一个数组相关内容。任何调 针对每一个漏洞进行分析、处理,那么安全分析将会用这个方法的代码都可以自由的修改这个基本的数 有很多重复工作,同时浪费大量系统资源,而且处理组。修补这个漏洞的方法之一是返回对这个数组的 速度缓慢。如果透过漏洞的表现形式分析其产生机副本。 112对象变量合并 收稿日期:2007205215代码将与外部的易变对象相关的内容存储到对 基金项目:国家“863”计划(2006AA01Z184)象内部中。如果实例被不受信任的代码访问,或对 第一作者:女,1982年生,硕士生对象的不受限制的改变,将威胁安全性和其他一些 E2mail:sq82child@gmail.com 重要性质。在很多情况下,存储一个对象的复本是 ·10·北京化工大学学报2007年 一种更好的方法。因为可能有其他外部引用可以通变。为了解决这个问题,可以把该域从类中移出,并 过访问外部对象来访问内部信息。且进行包保护来避免攻击。 113垃圾回收器访问权限问题 2静态检测安全漏洞的方法 一个类的垃圾回收器应该是protected访问的, 不应该是public访问的。静态检测使用静态分析技术,直接分析程序的 对于一个类,垃圾回收器应该是保护访问的,如源代码,通过词法分析、语法分析和静态语义分析, 果是public的,可能会被攻击,导致不正确的释放空检测程序中潜在的安全漏洞。目前,静态分析主要 间。同时不建议使用垃圾回收器,如果必须释放时,有类型推断、数据流分析和约束分析3种方法。 最好自己编写释放代码,因为无法确定垃圾回收器211类型推断 释放的时间。程序语言的类型系统包括一种定义类型的机 114方法存储静态域问题制,一套有关类型等价、类型相容和类型推理的规 代码存储异变对象的相关信息到静态域中。如则。在将运算符作用于运算对象,执行赋值,或者把 果对异变对象进行不受限制的修改,可能会威胁安实际参数传递给子程序时,都存在着类型是否合适 全性或者其他的重要性质。存储对象的复本是一种的问题。类型推断是一个处理过程,其目的是保证