C语言源代码静态检测工具设计与实现.doc

上传人:文****钱 文档编号:40418 上传时间:2018-05-07 格式:DOC 页数:40 大小:1.01MB
下载 相关 举报
C语言源代码静态检测工具设计与实现.doc_第1页
第1页 / 共40页
C语言源代码静态检测工具设计与实现.doc_第2页
第2页 / 共40页
C语言源代码静态检测工具设计与实现.doc_第3页
第3页 / 共40页
C语言源代码静态检测工具设计与实现.doc_第4页
第4页 / 共40页
C语言源代码静态检测工具设计与实现.doc_第5页
第5页 / 共40页
点击查看更多>>
资源描述

1、C语言源代码静态检测工具设计与实现学院计算机学院专业计算机科学与技术班级04010101学号2010040101015姓名指导教师负责教师沈阳航空航天大学2014年6月沈阳航空航天大学毕业设计(论文)1摘要随着信息社会的发展,网络的不安全问题越来越严重,其中许多安全问题都是由于软件本身存在安全漏洞所引起的,并且造成了巨大的经济损失。一方面是程序员编程上的疏忽,一方面也是相关语言没有提供完整的安全机制。在众多的语言中,C语言也被认为是最容易遭到攻击的语言。所以代码的安全检查就变得极其重要。但是由于现代软件工程越来越复杂,致使传统的检查方法在准确度和效率上都不能满足要求,所以代码的静态安全检测应运

2、而生。本文将首先调研并介绍国内外的关于静态安全检测的研究现状以及代码安全检测技术的主要趋势,然后提出我们的构想与设计目标,详细论述了系统的需求分析、概要设计、详细设计与实现、系统测试等相关过程,通过使用PYTHON语言整合开源的静态检测工具SPLINT和FLAWFINDER,实现代码的静态安全检查以及生成分析图表等功能。关键词安全检测;C源代码;静态代码分析沈阳航空航天大学毕业设计(论文)2DEVELOPMENTOFCLANGUAGESOURCECODESTATICANALYSISTOOLABSTRACTWITHTHEDEVELOPMENTOFTHEINFORMATIONSOCIETY,THE

3、PROBLEMOFINTERNETINSECURITYISBECOMINGMOREANDMORESERIOUSMANYOFTHESEPROBLEMSAREDUETOTHEFLAWOFTHESOFTWAREITSELFANDTHEREFORECAUSEHUGEECONOMICLOSSESONONEHAND,ITISBECAUSEOFTHEPROGRAMMERSNEGLIGENCEONSOFTWAREPRODUCING,ANDONTHEOTHERHAND,ITISALSOBECAUSETHERELATIVELANGUAGESDOSENOTPROVIDEACOMPLETESECURITYMECHAN

4、ISMAMONGMANYLANGUAGES,CLANGUAGEISBELIEVEDASTHEMOSTVULNERABLEONETOBEATTACKEDASARESULT,THECODESAFETYCHECKSEEMSVERYIMPORTANTHOWEVER,BECAUSETHEMODERNSOFTWAREENGINEERINGISBECOMINGMOREANDMORECOMPLICATED,THETRADITIONALCHECKMETHODSCANNOTMEETTHEREQUIREMENTINACCURACYANDEFFICIENCY,SOTHESTATICCODEANALYSISEMERGE

5、ASTHETIMESREQUIRETHISPAPERWILLFIRSTINVESTIGATETHECURRENTSITUATIONANDMAINTRENDOFTHESTATICCODEANALYSISATHOMEANDABROADANDTHENPUTFORWARDOURIDEASANDDESIGNOBJECTIVESDISCUSSESINDETAILABOUTTHESYSTEMREQUIREMENTSANALYSIS,PRELIMINARYDESIGN,DETAILEDDESIGNANDIMPLEMENTATION,SYSTEMTESTINGANDOTHERRELATEDPROCESSES,I

6、NTEGRATINGOPENSOURCESTATICDETECTIONTOOLSSPLINTANDFLAWFINDERTHROUGHTHEUSEOFTHEPYTHONLANGUAGE,IMPLEMENTSTATICSECURITYCHECKCODEANDGENERATEANALYTICCHARTSANDOTHERFUNCTIONSKEYWORDSSAFETYTESTINGCSOURCECODESTATICCODEANALYSIS沈阳航空航天大学毕业设计(论文)3目录1绪论611研究背景612设计目标7121主要内容7122设计要求713国内外现状7131模型检验8132携带源代码8133词法扫

7、描8134简单语义分析814软件代码风险介绍与原理9141内存访问错9142缓冲区溢出10143竞争条件11144随机数滥用12145异常处理12146空指针引用1215技术简介13151PYTHON语言简介13152PYQT图形类库简介13153SQLITE数据库简介132需求分析1521用户需求1522系统需求15221实现代码静态安全分析需求15222代码检查工具基本控制需求15223待检测代码列表管理需求16224检测代码工具参数设置需求16沈阳航空航天大学毕业设计(论文)4225图表化显示安全漏洞需求1623技术需求16231ERIC5集成开发环境16232QTDESIGNER图形开

8、发环境16233PYTHON面向对象开发语言16234静态检测工具调研173概要设计1831总体设计目标18311功能完备18312用户界面友好1832总体功能设计1833代码安全检测界面功能设计1934数据库存储设计19341SQLITEDATABASE数据库19342SPLINT表设计20343FLAWFINDER表设计204详细设计2241代码检测功能模块设计22411代码的静态检查功能设计与实现22412待检测代码目录列表设计与实现24413结果显示界面设计与实现2742模式选择与参数的添加功能设计2843生成分析图表功能设计30431生成安全漏洞统计表格30432生成安全漏洞分析图表

9、315系统测试3251代码检测功能模块测试32511代码检查功能主界面测试32512待检测本地目录列表测试33513代码安全检测功能测试3352模式选择与参数的设定功能测试34沈阳航空航天大学毕业设计(论文)5521命令行模式测试34522自定义模式测试3553生成分析图表功能测试36参考文献38致谢39沈阳航空航天大学毕业设计(论文)61绪论随着信息社会的发展,我们在享受计算机带来的方便快捷的同时,计算机软件的安全问题也愈演愈烈。这其中大部分的安全问题是软件本身存在安全漏洞所致,这些安全漏洞不仅造成了信息的泄露,也造成了巨大的经济损失。软件安全漏洞的频繁出现,一方面是一些程序员缺乏编写高质量

10、代码的意识,另一方面,编程语言本身在设计上的不安全性也增加了程序员在无意中编写出存在安全漏洞的代码的几率。在众多编程语言中,C/C语言是目前公认的最容易引起安全问题的语言,黑客往往就利用这些安全问题产生的漏洞来绕过安全防范策略,以达到网络攻击的目的。针对这种现状,我们在程序测试的过程中,使用代码的静态安全检查工具对程序源代码进行安全检查成为了一种有效并且必要的方法。11研究背景在信息社会中,互联网规模越来越大,在享受着网络带来的方便的同时,人们也不得不面临网络安全问题。据权威机构统计,目前因特网上20的企业的防火墙、80的计算机网络包含严重的安全缺陷。研究表明,所有的入侵都是因为软件本身存在漏

11、洞。当前的计算机软件系统越来越复杂,程序员难免会在设计时产生一些没有意识到的安全漏洞,这些漏洞就经常被黑客利用来绕过安全防护策略,以达到自身的不正当目的。对程序源代码进行静态安全检查的目的就是在程序设计阶段之后,在系统正式运行之前通过分析源代码尽可能多的发现潜在的安全漏洞与安全缺陷。本节讨论C语言源代码的静态安全检查原理,首先对时下流行的安全漏洞做一个简介,并调研一些成熟的静态安全漏洞检查方法。C语言是一个语法形式自由的语言,程序效率更高,更加贴近于计算机的底层。使用C语言能编写高性能程序,包括系统程序和应用程序,尤其是在航空领域,控制领域等对代码性能要求很高的领域,更是占有很高的地位。可是,

12、C语言与它支持的库本身就存在许多不安全的隐患,编程人员无意间的设计失误就可能导致十分严重的结果,尤其是大型控制程序,网络系统程序,通讯设备程序等。但是传统的代码安全检查具有很大的不易操作性,很大的难度性。并且在软件系统工程日益庞大的今天,沈阳航空航天大学毕业设计(论文)7软件代码量不断的增多,原有的代码走查方式几乎成为不可能,效率低下的弱点逐渐暴露。静态源代码理论则应运而生,也是近些年来被研究与应用较多的的软件安全解决方案之一。它是指在软件开发的流程中,编程人员在写好源代码后,无需生成目标代码经编译器编译,而是使用一些静态安全扫描工具检测,找出代码中的安全漏洞,并且提出相应的解决方案。所以使用

13、代码的静态安全检查具有很大的现实意义。另一方面,由于它面对的是问题本身而非征兆,所以有时它比动态检测更加有效。12设计目标121主要内容静态源代码扫描是近年被人提及较多的软件应用安全解决方案之一,它是指在软件工程中,程序员在写好源代码后,无需经过编译器编译,而直接使用一些扫描工具对其进行扫描,找出代码当中存在的一些安全漏洞的解决方案。本项目研究任务如下1静态代码分析工具调研,研究目前主流的静态代码分析工具和安全漏洞原理,调研目前最新的研究成果并形成研究报告。2静态代码分析工具研制检查C、C程序潜在的安全隐患,并发现编译器不能发现的事情。编译环境为GCC,测试用例为开源的IPSECSSLSSHV

14、PN,针对的操作系统为LINUX内核26和30版本。122设计要求1对C语言程序进行检查;可以检查出跨越函数的错误;可以对程序内的循环和分支进行处理2检查的错误为缓冲区溢出错误,包括非用户输入造成的缓冲区溢出错误和用户输入造成的缓冲区溢出错误。13国内外现状在软件的安全性分析方面国内外的许多研究机构做了许多的研究,并取得了一些可观的研究成果,他们提出了许多切实可行的代码静态安全性检测方法,也开发了许多相关的代码静态分析工具,如FLAWFINDER,SPLINT,ITS4等。当前相关领域学者们提出的较为成熟的代码静态分析方法主要分为模型检验,沈阳航空航天大学毕业设计(论文)8携带代码验证,词法分

15、析,简单语义分析,基于信息流的安全性分析等。131模型检验模型检验是以有限状态自动机原理为基础的,它尽可能多的将系统能够处于的可能状态列出,它将将要检验的代码转换成时序逻辑公式,在运行有限状态自动机的过程中,检查自动机所有状态是否满足安全条件,检查状态是否违反用户制定的规则和条件,并根据分析结果报告导致不合法的状态。根据检测工具中的检测模型的复杂程度,可以分析复杂的语法语义逻辑,从而精确的检测出系统中潜在的安全性漏洞。132携带源代码PCCPROOFCARINGCODE,简称PCC检测方法是一种类似于密码匹配的方法。首先,我们为代码定义一组预先设定的安全策略。然后,代码的编写者在编写代码时必须

16、遵守这些安全策略,并在程序源代码中加入验证的代码以证明源程序的代码遵守了这些安全策略。最后由代码使用者确认这些代码的安全性。133词法扫描词法扫描是一种以词法分析为基础的静态代码安全检测方法。在通过对源代码的静态的扫描过程中,找出可能存在的安全漏洞。它的基本原理是,首先,将一个或多个源代码文件作为输入,并将文件中的源代码转换为相应的词法符号流。然后使词法符号流与预先设定好的安全漏洞字典相比对。如果发现比对命中,则报告漏洞。例如一旦发现C源程序中存在STRCPY,STRCAT等函数即认为可能存在缓冲区溢出这种安全性漏洞。这种方法易于操作,但是采用词法分析的扫描工具容易出现误报。134简单语义分析

17、基于简单语义分析的的检查工具采用了类似于编译器的设计原理。结合了语法分析和语义分析技术。同时也加入了数据流分析和控制流分析。因此,这种方法具有较高的准确性,较低的错报率和误报率。同时具有较强的可扩展性且可适用于对大规模程序的分析。沈阳航空航天大学毕业设计(论文)914软件代码风险介绍与原理我们调研了现今最常出现的代码安全漏洞风险。他们是网络安全问题的罪魁祸首,我们应采取各种方法尽量避免他们的出现。以下我们来做详细介绍。他们分别是内存访问错,缓冲区溢出,竞争条件,随机数的滥用,异常控制,空指针的使用。141内存访问错C语言程序中引发安全漏洞的问题,绝大多数属于内存访问错误,因为C语言并没有提供完

18、善的内存保护策略。内存访问错误可能由数组、指针或内存管理造成。对指针和数组缺乏边界检查是造成内存访问错误的根源。据统计,超过50的软件安全漏洞都是由指针和数组访问造成的。被列为攻击手段之首的“缓冲区溢出攻击”就是利用此类安全漏洞。首先,我们要仔细分析一下C语言程序能够使用的内存是怎样分配的1从静态存储区域分配,这块内存在程序的整个运行期间都存在,例如全局变量、STATIC变量。2在栈上创建,函数内的局部变量的存储单元都可以在栈上创建。3从堆上分配,亦称动态内存分配。程序在运行的时候用MALLOC或NEW申请任意多少的内存,程序员自己负责在何时用FREE或DELETE释放内存。动态内存的生存期由

19、程序决定,使用非常灵活,但问题也最多。针对内存从分配、使用到释放的整个过程,可能发生如1内存未成功分配,却在后续代码中使用。典型的情况就是在堆中动态的申请一部分内存空间,许多有安全漏洞的代码总是假设内存是分配成功的,继续其他操作。但是,在实际程序运行的过程中,内存的空间可能被占满,造成内存分配不成功,所以程序必须在使用内存空间之前检查内存是否成功分配,以预防出错。2内存空间虽然分配成功,但是使用前没用进行初始化。在C语言中,内存的缺省初值没有统一的标准,尽管有些时候为零值。如果变量的引用处和其定义处相隔比较远,变量的初始化很容易被忘记。如果引用了未被初始化的变量,可能会导致程序错误。3内存分配

20、成功并且已经初始化,但操作越过了内存的边界。这类错误在C语言中又称为空间访问故障,即通过指针或数组访问合法范围外的空间。C语言缺乏数组边界检查,数组下标越界是一种典型的空间访问故障。如在使用数组时经常发生下沈阳航空航天大学毕业设计(论文)10标“多1”或者“少1”的操作,特别是在FOR循环语句中,循环次数很容易搞错,导致数组操作越界,致使整个程序崩溃。4忘记了释放内存,造成内存泄露。C语言中并没有强行的限制程序员要在使用完内存后释放内存空间。所以经常回有不安全的代码致使许多内存空间泄露。内存泄露时黑客常用的一种攻击手段,其根本原因就是某个内存泄露安全漏洞,忘记释放内存空间,导致每被调用一次就丢

21、失一块内存。刚开始时系统的内存充足,你看不到错误,因而调试阶段不能发现错误,当终于一天内存耗尽程序突然死掉,系统将提示内存耗尽。5释放了内存却继续使用它。这类故障也称为时间访问故障,即在其生存期之外访问内存空间,一个典型的时间访问故障是访问一个已经释放的堆分配单元,由于释放的单元归还系统后可以重新分配,因此再次访问时具有不确定的值。内存访问错误很难检测和修改,因为编译器一般不能自动发现这些错误,通常是在程序运行时才能捕捉到。内存访问错误一般没有明显症状,除非在异常的情况下。导致内存访问错误的异常条件可能不能再现,增加了差错纠错的困难;一旦错误再现,也可能很难把程序错误与内存访问错误联系142缓

22、冲区溢出1988年大规模蠕虫传染了成千上万台联网主机,罪魁祸首就是缓冲区溢出漏洞。在过去10年里,尽管已经意识到缓冲区溢出的危害,但缓冲区溢出攻击仍在增长,据CERT/CC统计,在过去10年里,在所有的脆弱性中缓冲区溢出漏洞占据了50,而且这个数据随时间的流逝还在增长,作为一类内存访问错误,由于它的重要性,因此在此进一步分析缓冲区溢出的根源。缓冲区溢出就是越过了数组边界进行读写。标准C库提供的许多字符串操作,如GETS、STRCPY、STRCAT、SPRINF,它们本质上是不安全。程序员有责任检查这些操作能否溢出缓冲区。例如程序执行GETSSTR指令,STR是内存一个连续的存储区的首地址,GE

23、TS从程序的标准输入读取文本,把第一个字符放在这个存储区的首地址,后续的字符依次存放,直到从标准输入读到新行或文件结束符,在对应的存储区放上空字符/0。程序员没法指出一个缓冲区有多大。因此,如果读入的文本长度超过给定的存储区长度,那么,读入的字符将覆盖STR所代表的存储区的后续空间。这就是缓冲区溢出。缓冲区溢出可能造成两个风险1与该缓冲区相邻的内存空间很容易被覆盖,如果该空间存储的信息非常关键,那么可能造成非常严重的安全隐患;2通过覆盖运沈阳航空航天大学毕业设计(论文)11行栈中函数返回地址,攻击者可以引诱程序执行任意代码,这类栈溢出是目前最常见的安全缺陷。在C库函数中,每个这样的字符函数都有

24、相应的安全函数对应STRNCPY,STRNCAT,SNPRINTF等,在使用这些函数时,可以由程序员指出实际缓冲区大小,避免发生缓冲区溢出。例如,STRNCPYDST,SRC,10指明,从SRC向DST拷贝不多于10个字符。然而,这些替代函数也有不足一方面用起来不太方便,有些系统不支持这些函数;另一方面,跟踪缓冲区实际大小的任务仍由程序员来完成。143竞争条件所有操作系统都有一些陷入TRAPDOOR,允许特权用户完全控制系统,竞争条件是在多进程环境里,特权程序或与特权程序并发运行的程序中可能被利用的一类缺点。例如一个超级用户为一个普通用户创建一个文件CREATEFILE,并把该文件的所有者更改

25、为该普通用户CHOWN,但在更改所有权之前,该用户把此文件删除,并建立了此文件到系统关键文件,如/ETC/PASSWORD的链接,这样,所有权的更改致使系统文件被这个普通用户拥有。这个例子说明,在多进程的环境里,创建CREATE和更改CHANGE必须是原子,其完整性不可破坏。进程访问文件的方式有两种一种即通过完整的文件路径访问文件;另一种是通过文件描述符访问文件。在系统内部,文件系统在概念上讲是一棵树,内部结点代表目录,叶结点代表文件,路径名指出了从树根到要访问的文件或目录所经过的各结点。每个结点记录了它的下层结点的地址,因此通过路径访问文件类似于间接指针访问。文件描述符是在每个进程的基础上,

26、为每个文件赋予的一个标志,它直接与目标绑定,当访问文件时,直接通过文件描述符,而不需要通过文件系统一步一步查找,因此它的使用方式类似于直接指针。现假设有两个系统调用要访问文件,如果两次访问都使用文件描述符,他们本质上是原子的。因为文件描述符是以进程为基础的,其它进程不能改变文件描述符与目标的绑定。但如果一个访问以路径形式进行,那么其它的进程可以更改路径与具体目标文件的绑定,这就可能发生竞争条件。具体地,如果相邻的两个系统调用都使用路径访问同一个文件,那么可能存在竞争条件,如果一个使用路径,一个使用文件描述符,那么,如果第一个系统调用是把文件描述符与路径相关,则不会发生竞争条件,否则可能发生竞争

27、条件。如果两个系统调用都使用文件描述符,那么这两个系统调用间不会发生竞争条件。沈阳航空航天大学毕业设计(论文)12144随机数滥用C程序中涉及许多随机数的选取,例如,创建一个临时文件,用于存取一些临时数据,创建一个挑战号、创建密钥,出于安全性考虑,临时文件名和挑战号等使用由系统函数RAND产生的随机数,以防攻击者猜测。但是,系统提供的RAND是一个伪随机数,其内部的实现根据给定的种子能够产生可重复的输出值。因此,需要程序员选定一个安全的种子。如果不精心选择安全的种子,对精明的攻击者来说,使用随机数同使用固定数一样可以猜测。145异常处理C语言没有异常处理机制,所有的异常检测和处理都必须由程序员

28、主动完成,如果程序员没有明确处理异常情况,那么异常发生时系统将出现不可预测的错误。例如FILEFPCHARBUFFER128FPFOPEN“/ETC/PASSWORD”,“R”FGETSBUFFER,SIZEOFBUFFER,FP这个程序假设系统一定有“/ETC/PASSWORD”这个系统文件,并且打开总能成功,如果这个文件被恶意地删除,或者程序运行的权限不够,或者其他程序正在独占使用该文件,致使打开不成功,那么,后续的读操作将发生核心错COREDUMP。因此C程序员有义务增加异常检测和处理代码,进行主动防错设计。从C发展而来的JAVA语言提供了非常强大的异常处理机制,强制程序员对“可检测异常

29、”进行处理。146空指针引用空指针即指向没有分配的内存区域,例如TYPEDEFCHARFILECONTENTFILECONTENTFILE1FILECONTENTFILE2STRCPYFILE2,FILE1该程序本意是让FILE1指向源,让FILE2指向目标,通过STRCPYFILE2,FILE1把FILE1指向的内容拷贝到FILE2中。一般情况下,这种拷贝不会有问题,但是当FILE1没有指向任何合法的静态、局部或动态分配的空间时,程序运行出错。为此程序在使用指针时,不仅要沈阳航空航天大学毕业设计(论文)13关心指针本身是否定义,还要关心指针是否已经指向了合法的内存空间。应该检查从FILE1定

30、义到其引用的每条可能路径,检查FILE1是否一定指向了合法的内存空间。15技术简介本系统主要使用PYTHON开发后台程序,PYQT库设计界面,SQLITE作为后台数据库。基于LINUX操作系统下进行开发。151PYTHON语言简介PYTHON是一种解释型、面向对象、动态数据类型的高级程序设计语言。自从20世纪90年代初PYTHON语言诞生至今,它逐渐被广泛应用于处理系统管理任务和WEB编程。PYTHON已经成为最受欢迎的程序设计语言之一。2011年1月,它被TIOBE编程语言排行榜评为2010年度语言。自从2004年以后,PYTHON的使用率是呈线性增长。众多开源的科学计算软件包都提供了PYT

31、HON的调用接口,例如著名的计算机视觉OPENCV、三维可视化库VTK、医学图像处理库ITK。而PYTHON专用的科学计算扩展库就更多了,例如如下3个十分经典的科学计算扩展库NUMPY、SCIPY和MATPLOTLIB,它们分别为PYTHON提供了快速数组处理、数值运算以及绘图功能。因此PYTHON语言及其众多的扩展库所构成的开发环境十分适合工程技术、科研人员处理实验数据、制作图表,甚至开发科学计算应用程序。152PYQT图形类库简介PYQT是一个创建GUI应用程序的工具包。它是PYTHON编程语言和QT库的成功融合。QT库是目前最强大的库之一。PYQT是由PHILTHOMPSON开发。PYQ

32、T实现了一个PYTHON模块集。它有超过300类,将近6000个函数和方法。它是一个多平台的工具包,可以运行在所有主要操作系统上,包括UNIX,WINDOWS和MAC。PYQT采用双许可证,开发人员可以选择GPL和商业许可。在此之前,GPL的版本只能用在UNIX上,从PYQT的版本4开始,GPL许可证可用于所有支持的平台。153SQLITE数据库简介SQLITE,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持WINDOWS/LINUX/UNIX

33、等等主流的操作系统,同时能够跟很多程序语言相结合,比如沈阳航空航天大学毕业设计(论文)14PYTHON、C、PHP、JAVA等,还有ODBC接口,同样比起MYSQL、POSTGRESQL这两款开源世界著名的数据库管理系统来讲,它的处理速度比他们都快。SQLITE第一个ALPHA版本诞生于2000年5月。至今已经有14个年头,SQLITE也迎来了一个版本SQLITE3已经发布。沈阳航空航天大学毕业设计(论文)152需求分析需求分析是软件工程中最重要的一个环节,它完成的质量会直接影响到软件的后续开发。一般情况,用户对计算机编程的相关知识并不了解,而程序员对相关的业务领域并不了解。所以开发人员和用户

34、之间在设计环节之前的需求分析环节在整个过程中非常重要。以下主要从用户需求和系统需求层面去分析该系统,详细分析了用户的各项需求。21用户需求软件的安全性是软件开发质量的一个重要指标。多数的软件安全问题都是因为软件自身存在安全漏洞。程序员在编码的过程中十分有可能因为考虑不全面造成安全漏洞。为软件的安全留下隐患。所以有必要对代码进行系统的,全面的,严格的安全检查。安全性测试不同于传统的程序测试。传统的黑盒测试,白盒测试均为动态测试,主要强调软件应当做什么。而安全性测试则要测试的是软件不应当做什么。所以开发一款方便,易用,高效静态安全检测的软件具有强大的实际意义。22系统需求根据对市场的充分研究,了解

35、用户的总体需求后,我们从中提炼出更加精炼细致的系统需求。本文分成五部分来概括用户的基本需求。221实现代码静态安全分析需求实现代码的静态安全检测,要尽可能多的检查出各种C语言代码中的各种安全漏洞,如缓冲区溢出漏洞,空指针漏洞。并且直观的显示出来,返回给用户。并且方便快捷,便于操作和查看。222代码检查工具基本控制需求要具有图形界面,能够方便用户控制整个程序。能够设定代码的安全检测模式。根据强度可调节为简易模式,自定义模式,命令行模式。要能够加载待检测的目标代码。要能够直观观察安全漏洞。要提供开始检测和生成图表的按钮。沈阳航空航天大学毕业设计(论文)16223待检测代码列表管理需求用户可以手动读

36、取计算机中的C语言文件,也可以读取带有C语言文件的工程文件夹,并在控制窗口左侧显示加载进来的程序名称。便于用户直观的选择要检测的对象。224检测代码工具参数设置需求如果用户选择了自定义模式,就可以对安全检查工具进行参数设定。根据检测强度的不同,用户可以设定不同的安全检测强度,也可以对特定的某一个检测参数进行选择。这样就提供了更加灵活的检查方式,从源头上减少了静态安全检查工具中普遍存在的误报和漏报问题。225图表化显示安全漏洞需求对代码进行检查结束之后,可以选择生成图形和表格,这样可以直观的观察安全漏洞的数量和分布。通过图形查看安全漏洞的分布情况,通过表格可以将安全漏洞分为几类,分类查看。23技

37、术需求231ERIC5集成开发环境ERIC5是一个集成了项目管理功能的PYTHON集成开发环境。提供无限制数量的编辑器、集成的PYTHONSHELL、集成调试器、集成对包括SUBVERSION和MERCURIAL版本控制系统的支持。集成单元测试等等。可通过插件系统来进行功能扩展,与ERIC4相比,ERIC5是基于PYTHON3的变种。是一个在LINUX操作系统下非常实用的集成开发环境。232QTDESIGNER图形开发环境QT是一个跨平台应用程序和UI开发框架。使用QT只需一次性开发应用程序,无须重新编写源代码,便可跨不同桌面和嵌入式操作系统部署这些应用程序。使用QT提供的QTDESIGNER

38、图形开发环境可快速开发图形界面。233PYTHON面向对象开发语言PYTHON是一种面向对象、解释型计算机程序设计语言,由GUIDOVANROSSUM于沈阳航空航天大学毕业设计(论文)171989年底发明,第一个公开发行版发行于1991年。PYTHON语法简洁而清晰,具有丰富和强大的类库。它常被昵称为胶水语言,它能够很轻松的把用其他语言制作的各种模块(尤其是C/C)轻松地联结在一起。且学习简单,编程方便,对于对效率要求不苛刻的程序能提高开发效率,降低开发成本。234静态检测工具调研关于C语言程序的静态分析工具,目前我关注的是SPLINT和FLAWFINDER。这两个工具的应用范围不同。SPLI

39、NT主要应用在分析代码是否符合编程规范。FLAWFINDER主要应用在代码是否有漏洞,是否存在被攻击的可能。(1)FLAWFINDERFLAWFINDER是一种PYTHON实现的静态代码检查工具,可以根据危险级别来报道代码中的安全问题。主要基于词法扫描和分析,内嵌了一些漏洞数据库,如缓冲区溢出、格式化串漏洞等,扫描快,按照代码中漏洞的风险等级对漏洞进行划分,可以快速找到存在的问题,误报较高。(2)SPLINTSPLINT是一个动态检查C语言程序安全弱点和编写错误的程序。SPLINT会进行多种常规检查,包括未使用的变量,类型不一致,使用未定义变量,无法执行的代码,忽略返回值,执行路径未返回,无限

40、循环等错误。SPLINT是一款开源静态源代码检查工具,能对源代码进行全面的分析。是一个GNU免费授权的LINT程序。沈阳航空航天大学毕业设计(论文)183概要设计概要设计是软件开发过程中必不可少的一个环节,主要说明对程序系统的设计考虑,包括程序系统的基本处、流程、程序系统的组织结构、模块划分、功能分配等,为程序的详细设计提供基础。以下从设计目标、功能设计、数据存储层面说明该程序系统的概要设计。31总体设计目标在该系统中,主要从满足用户需求,优化界面设计等方面考虑,提出了以下两点设计目标。311功能完备本系统力求把每一个可实现的功能实现的尽善尽美,功能模块之间相对的独立,以消除可能的潜在错误,同

41、时采用高效的算法提高访问执行效率等。不仅有代码的安全检查功能,同时也集成了图表显示功能。使整个系统更加实用。312用户界面友好本系统主要的需要实现的功能是能够让用户更加方便的使用代码安全检查工具。所以我们应该提供更好的用户界面,便于用户去使用。提供更多的安全检测参数给用户,使其能够方便使用。32总体功能设计本系统把程序分成若干个功能模块,如图所示。主要分为代码检查功能,代码浏览功能,图表显示功能,参数设定功能,程序列表功能,模式选择功能。我们力求整个系统达到“高内聚,低耦合”的设计理念。使整个系统模块化。沈阳航空航天大学毕业设计(论文)19代码静态安全检测系统代码检测代码浏览图表显示参数设定程

42、序列表模式选择图31系统总体功能图33代码安全检测界面功能设计代码安全检查功能是整个系统的核心部分。检测界面也是程序的主控界面,控制整个程序的流程。如图所示,主控界面连接着系统的不同功能,其中参数设定功能,又分为两个不同的工具配置。控制界面代码浏览图表查询参数设定结果显示源码列表SPLINT配置FLAWFINDER配置图32界面功能图34数据库存储设计341SQLITEDATABASE数据库SQLITE是一个嵌入式数据库引擎,针对内存等资源有限的设备(如手机、PDA、MP3)提供的一种高效的数据库引擎SQLITE数据库不像其它的数据库(如ORACLE),它没有服务器进程。所有的内容包含在同一个

43、单文件中。该文件是跨平台的可以自由拷贝。基于其自身的先天优势,SQLITE在嵌入式领域得到了广泛应用。沈阳航空航天大学毕业设计(论文)20因为本系统中使用的数据库的部分只有图表功能,数据库作为一个反应数据的中间功能存在,所以对功能和效率要求并不苛刻,所以我们选择了轻量级的SQLITE作为数据库。342SPLINT表设计SPLINT数据库表中包含七个元主,分别是工具名称,行数,文件名称,安全漏洞类型,安全危险程度,所属函数,详细描述。该数据表主要作为一个数据的暂存空间使用,方便后期的生成图形和表格。具体ER图如下工具名称SPLINT数据表文件名称行数安全危险程度安全漏洞类型所属函数详细描述图33

44、SPLINT数据表ER图343FLAWFINDER表设计FLAWFINDER数据库表中包含七个元主,分别是工具名称,行数,文件名称,安全漏洞类型,安全危险程度,所属函数,详细描述。该数据表主要作为一个数据的暂存空间使用,方便后期的生成图形和表格。具体ER图如下沈阳航空航天大学毕业设计(论文)21工具名称FLAWFINDER数据表文件名称行数安全危险程度安全漏洞类型所属函数详细描述图34FLAWFINDER数据表ER图沈阳航空航天大学毕业设计(论文)224详细设计在软件开发过程中,详细设计关系到软件开发的细节问题。以下是从各个不同功能模块详细介绍其实现的过程。该系统主要实现的是代码的静态检查功能

45、,参数的添加功能,生成分析图表功能。41代码检测功能模块设计411代码的静态检查功能设计与实现代码的静态安全检测功能是系统中的重要组成部分,根据之前的调研结果,在此我们调用了两个开源的代码检查工具SPLINT和FLAWFINDER检测工具。当用户打开本系统时,弹出系统控制主界面。主控制界面中有方便用户操作的按钮。第1步首先要求用户选择一个系统工程或者选择单个文件进行检测。这一功能分别由PYTHON中的QTGUIQFILEDIALOG类中的GETEXISTINGDIRECTORY和GETOPENFILENAME方法实现,等待用户选择一个工程,或者单个文件。第2步选择完成之后进行模式设置,调用模式

46、设置的模块代码,可分为简易模式,自定义模式,命令行模式,等待用户选择相应的模式,默认情况为简易模式。我们采用槽函数进行触发,弹出相应的对话框。第3步开始检测,将用户选择好的参数与模式,转换为后台命令行,然后分别调用SPLINT模块和FLAWFINDER模块。产生相应的检测结果,存入文件中,再将文件中的数据读出,显示在结果框中。主要代码如下DEFFLAWFINDERWD,PATHNAME,FILENAME,COMMANDLINETMPPATHWD/TMP存放结果文件的目录OSCHDIRPATHNAMEOSSYSTEMFLAWFINDERDATAONLYQUIETCOMMANDLINEFILENA

47、METMPPATH/FILENAMEFLAWFINDERTXTANALYSISFILETMPPATH/FILENAMEFLAWFINDERTXT分析文件目录沈阳航空航天大学毕业设计(论文)23PRINTANALYSISFILERETURNANALYSISFILESTATICMETHODDEFSPLINTWD,PATHNAME,FILENAME,COMMANDLINEPRINTCOMMANDLINETMPPATHWD/TMP存放结果文件的目录OSCHDIRPATHNAMEOSSYSTEMSPLINTI用户自定义头文件FILENAME被检测的文件SKIPSYSHEADERS设置FLAG,不提示,不

48、检测系统头文件POSIXLIB使用POSIXLIB库文件STREAMOVERWRITECOMMANDLINEMESSAGESTREAMTMPPATH/FILENAMESPLINTTXT把STATUS写入文件ERRORSTREAMTMPPATH/FILENAMESPLINTERRORTXT把FATALERROR写入文件WARNINGSTREAMTMPPATH/FILENAMESPLINTWARNTXT把WARN写入文件ANALYSISFILEPREFIXTMPPATH/FILENAME分析文件前缀PRINTANALYSISFILEPREFIXRETURNANALYSISFILEPREFIX第4步

49、调用图表分析模块,生成相应的统计图表。具体流程图见下图沈阳航空航天大学毕业设计(论文)24开始打开载入目录打开工程目录选择一个工程选择文件开始检测生成图表分析调用图表分析模块获得检测结果结束模式设置YNYN图41代码检测功能流程图412待检测代码目录列表设计与实现在QT库中,用一个控件叫做QLISTVIEW,我们使用它进行待检测文件或工程的显示,我们将其命名为DIRLIST。其中向列表中添加内容为INSERTITEM方法。第一步使用QTGUI类库中的GETEXISTINGDIRECTORY方法打开一个文件选择框。第二步如果为空不进行任何操作,如果不为空则将打开的工程文件方法加载到目录文档QDIR中,QDIR为一个QT库中用于暂存目录的类。第三步判断QDIR中各个文件的后缀名如果后缀名为C,则使用INSERTITEM()方法将该文件加载到我们之前的定义好的列表框DIRLIST中。沈阳航空航天大学毕业设计(论文)25主要代码如下DEFSLOT_OPENFILESSELFTMPQTGUIQFILEDIALOGGETEXISTINGDIRECTORYSELF,“OPENFILES“,“/HOME“IFTMPSELFSOURCEFILETMPSELFSUFFIXFILE

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

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

Copyright © 2018-2021 Wenke99.com All rights reserved

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

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

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