基于静态分析的安全代码检测.doc

上传人:滴答 文档编号:1273344 上传时间:2019-01-26 格式:DOC 页数:54 大小:1.20MB
下载 相关 举报
基于静态分析的安全代码检测.doc_第1页
第1页 / 共54页
基于静态分析的安全代码检测.doc_第2页
第2页 / 共54页
基于静态分析的安全代码检测.doc_第3页
第3页 / 共54页
基于静态分析的安全代码检测.doc_第4页
第4页 / 共54页
基于静态分析的安全代码检测.doc_第5页
第5页 / 共54页
点击查看更多>>
资源描述

1、摘 要 I 基于静态分析的安全代码检测 【 摘要 】 随着软件应用规模的日益扩大和软件应用环境的日益复杂,保障软件质量是一个必不可少的系统活动,贯穿整个软件开发过程;它的一个重要原则就是缺陷发现的时间越早越好,缺陷被遗漏到下一阶段将使得修复缺陷的成本扩大到原来的 5 10 倍,甚至造成无法修复的局面。根据静态分析的创始者 M.E.Fagan 的统计,在设计和编码阶段的软件静态分析可以发现软件 30 70的缺陷。 随着计算机辅助技术的发展,手工静态分析开始向计算机自动静态分析发展。 论 文 首先 介绍 了安全代码检测的两种方法:动态分析 和静态分析; 接着 详细 分析 了 静态分析的所需的技术,

2、如模型建立和分析算法,并举例说明静态分析的手工检测过程;最后 论 文在研究现有静态分析技术与理论的基础上,针对 Java 面向对象语言的特性,利用JavaCC 解析器生成源代码的抽象语法树,给出了以抽象语法树为基础的软件静态分析 模型,阐述了该工具中各个模块的设计与实现方法,从而提高软件质量和评审效率。 【关键字】 安全代码 静态分析 JavaCC 抽象语法树 规则库 Abstract II Secure Code Test Based on Static Analysis Abstract As the scale of software applications grows increas

3、ingly, meanwhile the applications situation becomes more complex, protecting software quality is an indispensable system activity ,which is through the whole software development process. One of most important principle is that the earlier the faults are detected the better the result will be ,for a

4、djusting cost will extend to five to 10 times as much as former if rectifying is delayed to next phase, what s worse ,it will induce an unable recover situation. According to the statistics provided by the founder of static analysis , M.E.Fagan, 30 percent to 70 percent of faults are detected in the

5、 design and coding phase. With the development of computer-assisted technology, computer automatic static analysis are replacing manual static analysis step by step. This dissertation is about static analysis. First of all, it introduces the concept of secure code and the principles of writing secur

6、e code as well as two methods detecting secure code: static analysis and dynamic analysis. Secondly, it deeply analyzes the techniques that static analysis needs, for example constructing models and analysis algorithms. Then illustrates the manual static test process. Whats more, based on the resear

7、ch of static analysis techniques and theory, and according to the java languages object-oriented character ,by using abstract syntax tree producing by JavaCC , it proposes a static analysis model basing on AST, and implementation method of some crucial modules, improving software quality and efficie

8、ncy assessment. Key word Secure Code Static Analysis JavaCC Abstract Syntax Tree Rulesets 目 录 III 目 录 第一章 绪论 . 1 1.1 选题背景和研究意义 . 1 1.2 研究现状 . 2 1.3 论文的研究内容和组织结构 . 2 第二章 安全代码的简介 . 4 2.1 编写安全代码的原则 . 5 2.2 安全缺陷的分类 . 6 2.3 安全代码检测的方法 . 6 2.3.1 静态分析 . 7 2.3.2 动态分析 . 9 2.3.3 静态分析与动态分析的关系 . 9 2.4 小结 . 10 第三

9、章 静态分析原理 . 11 3.1 静态分析工具所需的技术 . 11 3.1.1 程序模型的建模 . 11 3.1.2 分析算法 . 15 3.1.3 安全规则定义 . 17 3.1.4 结果输出 . 19 3.2 实例分析 . 19 3.3 小结 . 22 第四章 Java 安全代码检测系统的设计 . 23 4.1 系统的总体设计 . 23 4.2 核心子模块的设计 . 25 4.2.1 源代码分析器 . 25 4.2.2 规则库的建立 . 27 4.3 小结 . 36 第五章 Java 安全代码检测系统的实现 . 37 5.1 开发环境 . 37 5.2 关键模块的实现 . 37 5.2.

10、1 源代码分析器的实现 . 37 5.2.2 规则库的实现 . 40 5.2.3 结果输出 . 42 5.3 小结 . 43 第六章 总结与展望 . 45 6.1 总结 . 45 6.2 展望 . 46 目 录 IV 致谢 . 47 参考文献 . 48 CONTENTS 5 CONTENTS Chapter 1 Forword . 1 1.1 The Background and Research Significance . 1 1.2 Research Situation. 2 1.3 Reasearch Content and Structure of the Dissertation.

11、 2 Chapter 2 Introduction to Secure Code . 4 2.1 Principles of writing Secure Code. 5 2.2 Categories of Secure Faults . 6 2.3 Methods of Secure Code Testing . 6 2.3.1 Static Analysis . 7 2.3.2 Dynamic Analysis . 9 2.3.3 Relations between Static and Dynamic Analysis. 9 2.4 Brief Summary .10 Chapter 3

12、 Theory of Static Analysis . 11 3.1 Technologies Used by Static Analysis Tools . 11 3.1.1 Establishing Program Model. 11 3.1.2 Analysis Arithmetic .15 3.1.3 Secure Rules Principles Definition .17 3.1.4 Results Output .19 3.2 Instance Analysis.19 3.3 Brief Summary .22 Chapter 4 Design Secure Code Tes

13、t System of Java .23 4.1 System Frame Design .23 4.2 Kernel Sub-Module Design.25 4.2.1 Source Code Analyzer .25 4.2.2 Rulesets Design.27 4.3 Brief Summary .36 Chaper 5 Implementation of Secure Code Test System of Java .37 5.1 Development Environment .37 5.2 Implementation of Key Modules .37 5.2.1 Im

14、plementation of Source Code Analyzer .37 5.2.2 Rulesets Establish .40CONTENTS 6 5.2.3 Results Output .42 5.3 Brief Summary .43 Chaper 6 Summary and Prospect .45 6.1 Summary .45 6.2 Prospect.46 Acknowledgements .47 References .48 基于静态分析的安全代码检测 1 第一章 绪论 进入 Internet 时代,应用程序正呈现高度互联的趋势。安全问题成了社会关注的焦点。传统的安

15、全解决方案存在缺陷,防火墙、病毒防护和入侵侦测服务已经不能保护那些没有防护措施和易受攻击的软件免受外部的攻击。近几年,软件漏洞 呈 增长趋势 1。 1.1 选题背景和研究意义 2003 年 8 月 12日,利用 MS03-26 漏洞的“冲击波”蠕虫病毒开始在全世界范围内爆发,造成巨大破坏。在国内,两天时间里就使数千个局域网陷于瘫痪状态,受害者中既包括几十人的小规模企业,也有电信、政府等大型事业单位。而且个人用户, 尤其是使用宽带网的用户,也遭到了此病毒的攻击。在感染此病毒后,会造成系统反复重启、不能收发邮件、无法浏览网页等影响,导致无法正常工作,给企业和个人都造成了巨大的损失。 2004 年

16、5 月 1日,“震荡波 (Worm.Sasser)”病毒在网络出现,该病毒也是通过系统漏洞进行传播的,感染了病毒的电脑会出现系统反复重启、机器运行缓慢,出现系统异常的出错框等现象。 2007 年度全球网络安全威胁和漏洞趋势统计研究报告显示, 2007 年严重安全漏洞比2006 年增加了 28%,同时安全漏洞纰漏 的公司主要有 微软、苹果电脑、 IBM、甲 骨 文和思科 ,这些厂商纰漏之和占总数的 13.6%2。 2007 年,全球广为关注的黑帽安全大会的重大变化就是:人们的关注焦点从病毒转向程序安全。 这种变化反映出安全行业的趋势:即恶意攻击正从普通的病毒转变为更有针对性的攻击,这些攻击所针对

17、的目标是存在漏洞的企业 IT 系统 3。 由以上事件和统计数据我们不难发现,软件漏洞带来的安全威胁问题越来越严重。为了减少软件安全漏洞,我们从就必须从软件自身出发,保证软件的安全。软件自身的安全问题涉及到软件开发的整个过程,即包括需求分析阶段,系统设计阶段,编码阶段,系统测试, 系统评估等。增强程序员的安全意识,增加他们对安全代码知识的了解,以及根据现有的经验,开发自动化或是半自动化的安全代码检测工具成了迫在眉睫的工作。 软件安全检测中一个 重要原则就是缺陷发现的时间越早越好,缺陷被遗漏到下一阶段 将 使得修复缺陷的成本 将 扩大,甚至造成无法修复的局面。根据静态分析的创始者 的 统计,在设计

18、和绪论 2 编码阶段的软件静态分析可以发现软件 30 70的缺陷。 随着计算机辅助技术的发展,手工静态分析开始向计算机自动静态分析发展。 所以论文 以 基于 静态分析 的安全代码 检测为题,对静态分析理论和技术进行深入研究,同时 还建立静态分析的模型,使其实现对源代码的自动静态分析功能。 1.2 研究现状 国内外在软件的安全性分析领域做了一 些 的研究,提出了 可行的 基于静态分析的安全代码检测 方法,并且 制成了 相应的软件安全性分析工具。其中比较著名,功能比较齐全,效率比较高的就是 Fortify公司 开发的 Fortify SCA 软件,它针对多种语言,如 Java , C, C#, C

19、+等。 目前静态的安全性分析方法可分为:模型检验,词法分析,语义分析等。这些检测算法各有侧重,并在现有的检测工具中加以运用,具有一定效果。但 这些工具存在较大的局限性 。例如 ITS4会将所有使用的 strcpy语句报告,认为不安全。这将直接导致误报率过高 , 影响代码审查的效率和积极性;基于模式的安全漏洞并不多,这将直接导致 MOPS 所能维护的规则库有限,并且只能检查某些特定类型的漏洞; BOON 虽然引入了上下文的信息,但是由于没有精确处理控制分支的信息,仅根据数据流走向取并集,仍然存在一定程度的误报,且该方法针对缓冲区溢出和整数溢出,具有一定的局限性。而且目前的工具存在的工具大多数功能

20、单一,不全面,如 ARCHER只是一个用于检查数组边界的分析工具, SATURN使用布尔型可满 足性来检测临时性安全属性的违规。 最重要的问题是 直到最近 , 静态源代码分析工具还只是用于开发过程的晚期 。 所以随着软件应用环境的日益复杂,代码安全性 要求的日益增加,静态代码分析理论的 进一步 研究和工具 的完善 迫在眉睫 。 1.3 论文的研究内容和组织结构 安全代码检测的方法分为静态分析和动态分析,前者是在源码阶段、编译阶段或链接阶段,并且不需要程序的执行环境进行的软件漏洞检测。后者是在程序运行阶段通过分析程序的执行时信息进行漏洞检测。本文在安全代码的理论基础上,对静态分析技术作了深基于静

21、态分析的安全代码检测 3 入的分析,并且提出了基于静态分析的 java 安全代码检测,最后借助现有的工具和技术对模型的部分进行了原型设计和实现。 论文的主要研究内容如下 : (1)简要介绍了安全代码相关内容,对软件开发过程进行 了安全改进,并且介绍了安全代码检测的两种方法:静态分析和动态分析。分析了两种方法的特点,以及在软件检测过程中的关系。 (2)研究了静态分析的原理,阐述了现有的基于静态分析的安全代码检测工具 所需的技术:程序模型的建模、分析算法、安全规则、输出结果,并且以 Java 程序 SQL 注入漏洞为例描述了静态分析的过程。 (3)提出了 基于静态分析 的 Java 安全代码 检测

22、 系统 模型,并 借助现有的工具 JavaCC 和JJTree 实现了原型系统。 本论文基本组织结构如下 : 第一章:简要介绍了本文的研究背景和意义,研究内容和所做的工作。 第二章:描述了安全代码概念、 原则,对安全缺陷进行了分类,并分析了安全代码检测的两种方法。 第三章:深入分析了静态分析的原理、 关键技术 第四章:提出了 基于静态 分析的 Java 安全代码检测系统原型。 第五章:介绍 基于静态 分析 的 Java 安全代码检测系统的实现。 第六章:总结本论文的工作并对后续研究内容进行了展望。 安全代码的简介 第二章 安全代码的简介 安全代码是 指代码自身不存在安全漏洞,能防止非法者入侵。

23、代码是否安全并没有明确的标准,它是在软件开发过程中实现的。 在软件开发过程中 ,无论选择哪种生命周期模型,都可以改进软件开发开发生命周期的每一步。图 2.14是改进的软件开发过程,按步骤完成每项工作,该过程无论按照哪种软件生命周期开发,都能大大提高软件的安全性。 设 计 阶 段 开 发 阶 段测 试 阶 段发 行 / 维 护 阶 段概 念 形 成设 计 完 毕测 试 计 划 完毕编 码 完 毕发 行审 查 旧 的 缺 陷签 字 确 认安 全 编 码 规 则数 据 变 化 和最 小 特 权 测试安 全 小 组 审查教 育威 胁 建 模响 应 过 程安 全 运 动设 置 B u g 门 槛 和 终结 计 划外 部 审 查图 2.1 对开发过程的安全改进 在实际的软件开发过程中, 代码安全 与否 并没有 固定的标准 , 开发人员要根据软件系统的功能,软件系统的安全要求,用户的 特征等等 。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文资料库 > 毕业论文

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。