学术堂首页 | 文献求助论文范文 | 论文题目 | 参考文献 | 开题报告 | 论文格式 | 摘要提纲 | 论文致谢 | 论文查重 | 论文答辩 | 论文发表 | 期刊杂志 | 论文写作 | 论文PPT
学术堂专业论文学习平台您当前的位置:学术堂 > 计算机论文 > 计算机应用技术论文

浅析C语言代码漏洞的静态检测工具

来源:电脑编程技巧与维护 作者:刘素娇
发布于:2020-01-16 共3686字

c语言论文第八篇:浅析C语言代码漏洞的静态检测工具

  摘要:由于C语言本身缺乏对内存边界的检查、不对接收参数类型做校验、安全保护机制和异常处理机制的缺失,使得C语言开发的软件存在安全漏洞,为了确保软件质量,软件开发人员都会对软件进行代码检测。而软件结构之间的关联性决定了,越早发现漏洞,修复越及时,漏洞所导致的损失越小,软件上线时间越早,质量越容易保证。在分析了静态检测和动态检测的基础上,进一步分析了静态检测的关键技术,并分析和研究了4种比较常见的静态检测工具。

  关键词:静态检测; 静态检测技术; 静态检测工具;

  1 概述

  随着软件技术的飞跃发展,软件规模的不断扩大,软件结构也越来越复杂,软件的稳定性、可靠性等质量问题越来越难保障。由于C语言缺乏对内存边界的检查、不对接收参数类型做校验、安全保护机制和异常处理机制的缺失,使得C语言开发的软件存在安全漏洞,而安全隐患一旦发生,有可能造成数据错误、信息被窃取或篡改、系统运行缓慢、系统被攻击甚至崩溃。为了保障软件的稳定性、可靠性和安全性都会在软件生命周期的各个阶段采用软件检测来检测、预防漏洞的产生。由于漏洞发生的原因比较多,没有一种统一的解决方案来杜绝安全隐患的发生。依据检测漏洞时是否需要程序运行,可以将软件检测分为静态检测和动态检测。

  2 软件检测

  2.1 动态检测

  动态检测技术是指在真实或虚拟的环境下运行程序,检测程序运行时的情况,即通过改变对某次执行过程中产生的真实信息进行检测和分析,判断是否在预期范围内。由于程序是在真实的或虚拟的环境下运行的,所涉及到的环境及变量信息都是真实的,此时所进行的错误检测准确率是比较高的,原则上是没有误报的。动态检测技术主要是利用插桩技术在代码运行时进行代码检测。主要的内存错误检测技术有基于对象技术、值验证技术、影子内存技术、扩展指针技术和基于指针技术等5种技术,这些技术都在不同程度上满足了对内存错误进行检测的目的[1]。

  但动态检测存在以下缺点:(1)动态检测需对进程做插桩或修改,如果检测不够深入,在接下来的程序运行中,可能会引发一些安全问题,如对运行环境或系统等造成损害。(2)由于动态检测技术需要的是运行时的真实信息,可能会存在分支路径覆盖不完全、不能枚举所有路径的情况,不可避免地造成漏报的问题,如并发程序和递归。(3)因为动态检测是依靠测试用例驱动被测源程序运行来进行的检测,动态检测的结果与测试用例的设计质量、测试人员的能力以及对测试用例的选择密切相关。(4)随着软件规模的不断扩大,测试用例集合将会变得非常庞大,路径覆盖率变低,测试结果的漏报率将会变高。尤其是许多边界条件的故障难被检测到。(5)动态检测需要对不同条件进行测试,意味着重复动态的运行软件,代价比较高。

  而静态检测不需要执行源程序,只对代码进行静态的分析和评估,并且现在绝大多数的静态检测技术已经集成到测试工具,静态测试前不需要做太多的前期准备,只需要按照测试工具的要求或说明进行测试即可。动态检测存在于软件生命周期的各个阶段,且动态检测依赖测试用例的设计,测试人员的能力,导致测试结果漏报率高、分支覆盖不全面,以及测试效率低。

  2.2 静态检测

  静态检测是指代码处于非运行状态下对程序源代码或二进制代码进行检测,以其找到发生程序错误的代码片段。静态检测的过程可以分为创建源程序代码、建立漏洞特征库、判定漏洞以及检测结果分析等4个步骤[2]。

  静态检测技术是在非运行状态下对代码检测,通常是利用静态检测工具,执行效率高,但因存在路径覆盖不全和建模的不完善等缺点,会存在错报或漏报。因为静态检测和动态检测都存在不同的优缺点,一般是静态和动态结合使用。以下内容将重点研究静态检测技术。

  3 静态检测工具

  为了确保软件的健壮性和鲁棒性,软件公司会在软件生命周期的各个阶段进行漏洞检测。对于软件来说,漏洞越早被检测出来,越容易修改,造成的损失越小。因为软件结构之间是相互关联的,某一模块的漏洞有可能影响其他的模块。越晚发现漏洞,安全威胁越大,造成的损失越大。而静态检测由于不需要运行程序,在开发早期能尽快发现软件中的错误,及时进行软件修复,加快开发进度,缩短产品上线时间和降低安全隐患,从而使得静态检测受到广泛关注。

  3.1 静态检测技术

  静态分析技术分为4类:基本分析、基于形式化方法的分析、指向分析和其他辅助分析。

  基本分析是许多编译器中采用的检测技术,由于涉及到编译原理,研究的比较早也比较深入,包含词法分析、语法分析、类型分析、数据流分析、控制流分析等。其中数据流分析依据包含程序重要信息的有向图———控制流图来实现的,是一种编译时的技术。

  基于形式化方法的分析是通过采用分析、研究思维形式结构的数学分析方法来检测代码。首先对软件代码进行形式化的描述,再把此描述和程序代码输入静态检测工具,从而得到分析报告,此检测技术包含模型检测、定理证明、约束分析、抽象解释等。

  而指向分析主要包含别名分析和指针分析两种,辅助分析技术则是其他分析技术的补充和辅助,如符号执行和切片分析等。其中符号执行对计算机性能和路径调度策略要求比较高,符号执行技术依靠由代码所有执行路径组成的控制流图,利用符号值来表示代码中的变量值,从而模拟真实运行的测试用例值,进而对照检测规则,生成代码检测漏洞的报告,达到测试的目的。随着代码的结构越来越复杂,规模越来越大,会出现路径爆炸的可能[3]。

  3.2 静态检测工具

  随着软件技术的飞跃发展,软件结构越来越复杂,软件规模也不断增大。实行静态检测的人工走查方式越来越不现实,而自动化工具的使用,使得静态检测能快速地发现软件中存在的编程不规范问题和安全隐患。

  3.2.1 Splint

  Splint是一款开源的检测C语言程序安全漏洞和编码格式缺陷的静态检测工具,通过在源代码中添加检测辅助注释后,再对源程序代码进行语法、语义分析,然后与漏洞特征库进行比较,分析判定程序中有可能出现的漏洞,最后形成漏洞检测报告。Splint实现了对内存漏铜、类型错误、未使用的变量、使用未定义的变量和无限循环等安全漏洞。

  3.2.2 Coverity

  Coverity是一款商用的能够自动检测软件有可能存在安全隐患的自动化检测工具。随着软件结构的复杂化,传统的测试工具已不能满足测试需求。Coverity在对程序进行代码检测时通过采用把程序漏洞建立成具有表示数据相关安全性质的状态机模型,在对代码进行分析检测过程中,分析引擎对程序所有执行路径进行静态遍历检测,随着当前运行语句的语义驱动状态机的不断运行,当程序处于预定义好的非安全状态时,就认为发现了疑似漏洞,分析引擎将漏洞特征、触发路径等信息传给用户,由用户依据漏洞特征库来确认是否是漏洞。

  Coverity通过在操作系统流程层面监控构建系统来获得操作的清晰视图。具有强大的可配置功能和快速部署,通过采用过程间数据流分析和统计分析来评审整个程序的交互和检测遍历所有可能路径来增强检测的深度,并通过最先进的检测技术来发现系统崩溃、内存泄漏、内存错误、不确定行为、并发缺陷和安全性问题,精确误报率低于15%,低于其他静态检测工具。

  3.2.3 Polyspace

  Polyspace是一款商用的静态检测工具,采用语义分析技术,依靠大量的数学定理分析软件的动态行为,检测到软件运行时存在错误,即利用通过静态方法来检测程序运行时的错误。Polyspace通过运用语义分析技术对软件所有危险的操作进行分析,在程序运行之前,甚至最早在编码阶段就能发现程序运行时的漏洞。Polyspace能直接指出漏洞的根源,节省成本,分析采用的自动化分析,只需源代码。

  Polyspace主要应用在嵌入式领域,在汽车行业、医疗卫生和航空航天等领域应用广泛[4]。

  3.2.4 Fortify SCA

  Fortify SCA是一款针对安全性检测的静态检测工具,以非常全面的安全编码规则为基础,并且编码规则库不断更新,以便发现新的代码漏洞,能准确地定位到漏洞发生的路径。Fortify SCA通过将源代码换成中间代码,利用内置的功能强大的分析引擎和漏洞代码特征库对中间代码进行漏洞判断,形成漏洞分析报告。

  3.3 静态检测工具的比较

  在选择静态检测工具时,会从多方面来进行选型和评价。其中常用的比较重要的评价指标有误报率和漏报率。

  误报率高需检测人员人工对代码进行二次判断是否真的存在漏洞,耗费检测人员的分析时间。而漏报率是指检测工具没有分析出代码中实际存在的缺陷。如果误报率和漏报率都比较低的话,就被认为性能越好。在实际的代码检测工具中,为了降低误报率和漏报率通常不会只采用单一的静态分析技术,大多会采用综合的静态分析技术。

  4 结语

  静态检测具有自动化高、节约成本、高效等特点,并且在早期能快速发现软件中的漏洞,随着人们对软件质量的要求越来要高,静态测试越来越受到广泛的关注。静态检测工具都能检测部分软件中的漏洞和缺陷,都有各自的侧重点、优势和不足,应结合软件开发的实际情况来进行选择。

  参考文献

  [1]严俊琦. C程序内存安全错误的运行时检测技术研究与实现[D].南京:南京航空航天大学, 2017.
  [2]陈小全,薛锐.程序漏洞:原因、利用与缓解——以C和C++语言为例[J].信息安全学报, 2017,(2):42-48.
  [3] 刘航源.基于静态分析的软件内存漏洞检测[D].北京:北京邮电大学, 2016.
  [4]田雪. C程序静态分析中并发性漏洞检测技术的研究[D].北京:北京邮电大学, 2018.

 

点击查看>>c语言论文(优秀论文推荐8篇)其他文章
作者单位:河南护理职业学院
原文出处:刘素娇.C语言代码检测的分析和研究[J].电脑编程技巧与维护,2019(07):50-52.
相关标签:
  • 报警平台
  • 网络监察
  • 备案信息
  • 举报中心
  • 传播文明
  • 诚信网站