源代码缺陷检测系统的分析与设计

发表时间:2021/8/16   来源:《中国建设信息化》2021年8期   作者:张阳 张静 周杰 蔺森 程晗晗
[导读] 开源代码中存在的代码缺陷也被企业应用软件所继承,由此造成一系列不可预期的软件安全漏洞。
        张阳 张静 周杰 蔺森 程晗晗
        山东协和学院 山东 济南 250109
        摘要;开源代码中存在的代码缺陷也被企业应用软件所继承,由此造成一系列不可预期的软件安全漏洞。针对开源代码存在大量代码缺陷,对依赖其进行开发的企业应用软件造成严重的软件安全威胁这一问题,本文设计并实现了一套面向开源代码的缺陷检测系统,实现了缺陷检测及对缺陷和缺陷关联规则的管理。本系统设计采用 MVC 模式,整个架构共分为四层,展示层由 Bootstrap 前端框架搭建,AJAX 负责数据传输;接口层采用 Restful API 形式;应用层采用 SSM架构搭建;数据层采用 MySQL 数据库。本文搭建的缺陷检测系统实现了对开源代码的缺陷检测,能够有效降低后续软件开发引用开源代码存在的安全风险。        
关键词:开源代码;缺陷检测;Restful API;SSM 架构;关联分析
1、引言
        随着互联网的蓬勃发展,信息技术给人们的生活带来了巨大的改变。无论是在生活上还是在日常的生产活动中,人们在大部分工作中都对计算机产生了依赖。 在日常生活中,人们在对系统进行设计与使用时,经常会出现代码错误以及系统缺陷等情况。以往的缺陷代码检测技术出现了较多的问题,比如速度不快、成本比较高、结果稳定性较差,这些缺点的存在使得缺陷检测不能够广泛地应用在源代码中。除此之外,在许多的缺陷检测之中,由于系统的源代码过于复杂,传统的源代码缺陷检测系统在实际应用过程中对特征向量的提取有效性较低,导致最终检测结果较差。考虑到现在这种状况,在检测过程中使用卷积神经网络具有较高的价值。通过采用卷积神经网络技术设计源代码缺陷检测系统,构建卷积神经网络结构,可以有效提升缺陷检测的准确性,实现检测系统的自动化处理。
2、系统概述
2.1静态分析技术
        静态分析技术从早期的词法分析到形式化验证得到了迅速发展,检测性能也取得了很大进步。目前最常用的分析技术有词法分析,类型检查,定理证明,数据流分析等。
        (1)词法分析
        词法分析是最早出现的静态分析技术,它基于语法结构分析,类似于 C 编译器,仅仅进行语法上的检查。该分析方法首先把程序划分为小的程序片断,再把每个片断与一个“嫌疑数据库”进行对比,若属于嫌疑,则进一步实行启发式判断。词法分析不考虑程序的语义和各子程序间的交互,误报率和漏报率都相对较高。
        (2)规则检查
        程序本身的安全性可由安全规则描述,规则检查使用预先建立的安全规则对程序进行安全检查。在程序设计中有一些通用的安全规则,比如程序在root 权限下调用 exec 函数,将会隐含安全问题。规则检查方法将这些规则以特定语法描述,由规则处理器接收,并将其转换为分析器能够接受的内部表示,然后再将程序行为进行对比检测。
        (3)定理证明
        定理证明基于程序的语义分析,首先把程序转化成逻辑公式,然后通过各种判定过程来验证程序抽象公式是否为真。具体判别的方法取决于公式的形式,如不等式的合取:首先由合取式构造成一个图,合取式中每个条件对应于图中的一个节点,然后利用给出的等式将对应的顶点合并,在顶点合并的过程中对合取式中的不等式进行检查,如发现存在不成立,则该合取式不可满足。
        (4)数据流分析
        数据流分析是指从程序中收集语义信息,并用代数方法来确定在编译时变量的定义和使用。数据流分析的基础是控制流图,其原理是计算在程序的不同点对变量的不同赋值信息。到达定值是数据流分析的重要概念,其含义是到达某语句时所有变量的可能赋值集合
2.2. 动态检测技术
        动态检测技术通过构造非标准输入数据,调试运软件系统,根据系统输出或数据流向,观察程序是否出现异常,从而判断被测软件系统是否存在漏洞。动态检测技术准确率高,但由于各种软件系统的功能和流程是不同的,所以不能进行统一的扫描,导致其检测效率低下。且此方法仅能穷举有限个输入,并不能对所有的输入都进行测试,因此存在覆盖率低和输入数据针对性不强等缺点
3、系统设计与实现
        (1) 系统设计
        基于缺陷的静态分析系统所能检测缺陷的数量和种类是由缺陷规则决定的。

不同类型的静态检钡工具对缺陷规则有着不同的实现方式。词法类的检测方法是将缺陷描述嵌入在程序代码的解析过程中完成缺陷检测的?这样就导致其只能检测固定类型的软件缺陷?而且难以进行缺陷规则的扩展与配置。其他类型的检测方法也在一定程度上受缺陷规则的限制为了提高软件代码缺陷检测效率,本文设计并实现了一个多策略软件代码缺陷检测系统。
        数据预处理模块。
        对载入的数据进行一些处理使之符合静态检测工具的处理格式。主要针对源代码难以获取,用户得到的是可执行程序代码的情况,此模块将运用相应的反编译工具进行处
        理,以得到有利于静态检测的数据。
        静态检测模块。
        采用不同机理的静态检测工具,检测到的代码缺陷也是不同的,即使是分析技术大致相同的一类工具,他们的检测结果既有相交的部分,也有不同的部分。该模块将综合运用各种静态检测工具,发挥他们的优点和特点,使检测结果集更加可靠。
        统计分析模块。
        该模块的主要功能是对各个工具的检测结果进行统计分析。统计不同工具在漏洞类型、问题函数以及漏洞位置的属性值,如果超过指定阈值,则划分为确定漏洞,将所有工具检测结果交集的补集划分为存疑漏洞。
        动态检测模块。
        利用工具或者构造一些测试用例对存疑漏洞进行进一步的检测
        (2) 系统实现
        系统选择当前使用最流行的编程语言Python进行检测,总体上看被设计成两个主要模块前端解析模块和后端检测模块。其中解析模块,顾名思义,主要完成的功能是对输入的源代码文件进行读入扫描后?经过预处理子模块对源码文件的内部信息进行一些包装进而通过词法分析、语法分析来提取每一行代码的内容?根据抽象语法树提取各个元素的语义,最后得到满足一定规范的中间模型。系统后端检测模块的工作基于前端进行。它的主要功能是执行安全子集的检测,而安全子集具体通过前端解析生成的中间模型进行逐条导入。用户通过方案配置界面对需要检测安全子集的集合进行配置后端通过读入前端生成的文件以及该方案配置文件通过检测驱动模块得到最后的检测缺陷报表.
4、总结
        软件测试是提高软件安全性和可靠性的重要手段?对软件质量的保证有着极其重要的意义。静态检测作为软件测试的一种重要检测方法?在软件开发的各个阶段对程序代码进行测试是当今最实用、最有效的安全漏洞检测方法之一。基于静态分析的自动化检测可以有效的提高软件测试的质量和速度大幅降低检测的成本。本文设计了一套基于规则的缺陷自动检测系统。该系统通过用将源代码进行抽象和解释成中间承载模型利用基于安全规则的缺陷模式对承载模型进行缺陷匹配最终实现对软件代码安全检测。本缺陷检测系统可以有效的提高软件测试的质量和速度?将检测的时间成本降低到人工测试的。经大量有效测试表明本文所设计的自动化检测系统拥有较高的实用价值和商业价值在系统可靠性、移植性以、扩展性及维护性上也具有重要参考价值。
         
参考文献:
[1] 常超,刘克胜,赵军等.基于复用代码检测的缺陷发现方法[J].系统工程与电子技术,2019,39(9): 2157 -2164.
[2] 刘臻,武泽慧,曹琰,等.基于漏洞指纹的软件脆弱性代码复用检测方法[J]. 浙江大学学报(工学版)2018,52(11):2180-2190 .
         [作者简介]:
         张阳,男,2002年12月,山东协和学院计算机科学与技术专业学生,主要研究方向为计算机应用技术、系统开发等
         周杰,男,2001年11月,山东协和学院计算机科学与技术专业学生,主要研究方向为安全开发 SDL、应用安全以及代码审计等
         蔺森,男,2001年,10月,山东协和学院计算机科学与技术专业学生,主要研究方向为软件安、漏洞检测等
         张静,女,2002年12月,山东协和学院计算机科学与技术专业学生,主要研究方向为数据驱动、智能算法等
         程晗晗,女,硕士,山东协和学院计算机学院实践教学秘书,主要研究方向为云计算安全、软件定义安全与主动防御等
投稿 打印文章 转寄朋友 留言编辑 收藏文章
  期刊推荐
1/1
转寄给朋友
朋友的昵称:
朋友的邮件地址:
您的昵称:
您的邮件地址:
邮件主题:
推荐理由:

写信给编辑
标题:
内容:
您的昵称:
您的邮件地址: