一种源代码缺陷检测方法及装置制造方法及图纸

技术编号:26845380 阅读:21 留言:0更新日期:2020-12-25 13:07
本发明专利技术公开了一种源代码缺陷检测方法及装置,该方法包括:采集已知样本的包含源代码敏感点特征信息的特征代码片段作为训练数据;根据所获取的特征代码片段,采用深度学习的方法训练神经网络模型,得到训练后的神经网络模型,用于判断敏感点是否存在安全缺陷;将未知样本的包含源代码敏感点特征信息的特征代码片段输入到训练后的神经网络模型,以确定该特征代码片段对应的敏感点是否存在安全缺陷。采用本发明专利技术能够有效提高源代码缺陷检测效率和准确率。

【技术实现步骤摘要】
一种源代码缺陷检测方法及装置
本专利技术涉及人工智能
,特别涉及一种源代码缺陷检测方法及装置。
技术介绍
国内外有许多工具和系统用于软件代码缺陷检测。国外常见的代码检测工具和公司有Checkmarx,Parasoft,Coverity,Fortify等。Checkmarx是以色列一家公司生产的一个源代码安全检测产品,专门为识别、追踪和修复软件源代码技术上和逻辑上的安全漏洞而设计,可检测多程式安全缺陷、支持多系统平台、程式语言和开发框架。其优点是规则自定义、集成性强,缺点是速度慢,精确率较低,昂贵。Parasoft公司是全球顶尖的软件质量、服务虚拟化及软件生命周期管理解决方案供应商。其产品包括c/c++test,jtest,测试功能齐全,价格相对便宜,性价比较高,但支持的语言环境不够多。Coverity是Synopsys公司旗下一个品牌,包括静态代码分析和动态代码分析工具,提供收费服务与免费的开源产品,可供不同需求的个人与企业使用。其缺点是页面的用户体验较差,列表中的目标缺陷不易查找。可检测语言相对较少,并且工具存在一些不可滤过的误报。FortifySCA是惠普科技公司旗下一个静态、白盒的软件源代码安全测试工具,通过语言编译器,将前端语言(如C/C++、Java等)转换成中间文件NST,将源代码间调用关系、环境等分析清楚,再通过分析引擎,与规则库进行匹配、查找,抓取源代码中存在的安全漏洞,并整理出FPR结果文件。但FortifySCA的使用费用较高,根据一些使用者反馈,FortifySCA的缺陷误报率较高。>国内常见的代码检测工具有CoBOT,360代码安全保障系统,OpenRASP,ScantistSCA,pinpoint,DMSCA等。CoBOT(库博)是北京大学软件工程中心联合北大软件企业的研发团队打造的国内首款商业化的具有知识产权的代码安全类检测工具,打破了国外产品在软件缺陷检测和安全漏洞分析领域的垄断地位,借助北京大学平台,在军方、政府、科院院所推广相对较多。360代码安全保障系统,借助其公司品牌和免费杀毒软件等宣传,行业内知名度较高,能力涵盖了源代码缺陷检测、源代码合规检测、源代码溯源检测三大方向。OpenRASP是百度安全推出的一款免费、开源的应用运行时自我保护产品,直接注入到被保护应用的服务中提供函数级别的实时防护,可以在不更新策略以及不升级被保护应用代码的情况下检测、防护未知漏洞,适合大量使用开源组件的互联网应用以及使用第三方集成商开发的金融类应用。ScantistSCA是上海控安打造的结合了源代码与二进制文件分析的解决方案,其能够协助用户或企业对应用程序中所使用的第三方组件提供详细的分析。Pinpoint由源伞科技研发,基于学术界第五代定理证明技术,发展自香港科技大学8年科研成果,通过分析软件的源代码、二进制代码理解软件行为,查找代码缺陷,编码规范违反,恶意或违规行为,其速度快,较精确,可灵活定制开发,价格透明,C++/C和Java/Android检测能力强。DMSCA是上海端玛科技推出的源代码安全漏洞、质量缺陷和逻辑缺陷扫描分析服务平台,以静态分析技术为基础,分析软件源代码安全漏洞及质量缺陷和逻辑缺陷,便于企业评估、监视、提高软件安全和产品质量、管理开发团队及外包团队,支持客户化平台定制。现有技术存在以下问题:1、需要人工编写规则。现有检测方法和工具通常需要专业从业者分析每一类代码缺陷的每一种模式,编写相应的检测规则,或使用者根据自己的需求编写自定义规则。不同研究机构、不同企业会根据其情况制定源代码检测标准,针对各种编程语言也有其适用的编码规范。通过人类专家定义规则远远不能覆盖所有的标准和漏洞类型,且有新的漏洞类型出现还需要人类专家重新定义新的检测规则。编写检测规则需要较大人力投入,且得到的规则主观性较强,质量良莠不齐,有时难以覆盖代码缺陷模式的所有可能性。2、误报率与漏报率高。对于已有的源代码静态分析工具,虽然各自的分析机理不同,但都有一个共同的弱点,误报率或漏报率较高,使真实场景中检测工具的可用性下降。造成这一弱点的原因主要有两个,一是静态分析技术本身有局限性,在最坏情况下是不可判定问题,二是为简化设计,大多数的分析模型都采用了流不敏感和上下文不敏感的分析方式。由于分析方式的不精确,上下文信息获取不足,导致采用形式化方法进行编码规则检查会带来不确定性。而完整的精值化分析诸如指向分析、守卫值分析、非守卫值分析等在技术上较难实现,且往往有很高的时间复杂度和空间复杂度,现有检测系统的规则匹配机制通常不够完善。3、无法发现新的缺陷模式。现有检测工具不具备自动发现新缺陷模式的能力,由于检测规则均由人工定义,可以检测的内容也将为已知的代码缺陷。如果检测规则本身不严谨,很有可能漏掉某些缺陷模式。
技术实现思路
本专利技术的目的在于提供一种源代码缺陷检测方法及装置,能够有效提高源代码缺陷检测效率和准确率。为实现上述专利技术目的,本专利技术提供了一种源代码缺陷检测方法,该方法包括:采集已知样本的包含源代码敏感点特征信息的特征代码片段作为训练数据;根据所获取的特征代码片段,采用深度学习的方法训练神经网络模型,得到训练后的神经网络模型,用于判断敏感点是否存在安全缺陷;将未知样本的包含源代码敏感点特征信息的特征代码片段输入到训练后的神经网络模型,以确定该特征代码片段对应的敏感点是否存在安全缺陷。为实现上述专利技术目的,本专利技术还提供了一种源代码缺陷检测装置,该装置包括:采集模块,采集已知样本的包含源代码敏感点特征信息的特征代码片段作为训练数据;训练模块,根据所获取的特征代码片段,采用深度学习的方法训练神经网络模型,得到训练后的神经网络模型,用于判断敏感点是否存在安全缺陷;检测模块,将未知样本的包含源代码敏感点特征信息的特征代码片段输入到训练后的神经网络模型,以确定该特征代码片段对应的敏感点是否存在安全缺陷。综上所述,本专利技术提出一种源代码缺陷检测方法,该方法包括:采集已知样本的包含源代码敏感点特征信息的特征代码片段作为训练数据;根据所获取的特征代码片段,采用深度学习的方法训练神经网络模型,得到训练后的神经网络模型,用于判断敏感点是否存在安全缺陷;将未知样本的包含源代码敏感点特征信息的特征代码片段输入到训练后的神经网络模型,以确定该特征代码片段对应的敏感点是否存在安全缺陷。由于本专利技术的方案,是通过不断训练神经网络模型而使源代码检测越来越准确,所以解决了现有技术存在的需要人工编写规则,以及误报率与漏报率高的问题。附图说明图1为本专利技术实施例一提出的一种源代码特征提取方法的流程示意图。图2为本专利技术实施例二简化的抽象语法树示意图。图3为本专利技术实施例二特征代码片段代码行排列过程示意图。图4为本专利技术实施例三提出的一种源代码缺陷检测方法的流程示意图。图5为本专利技术实施例五提出的一种源代码缺陷检测装置的结构示意图。具体实施方式为使本专利技术的目的、技术方案及优点更加清楚明白,本文档来自技高网...

【技术保护点】
1.一种源代码缺陷检测方法,其特征在于,该方法包括:/n采集已知样本的包含源代码敏感点特征信息的特征代码片段作为训练数据;/n根据所获取的特征代码片段,采用深度学习的方法训练神经网络模型,得到训练后的神经网络模型,用于判断敏感点是否存在安全缺陷;/n将未知样本的包含源代码敏感点特征信息的特征代码片段输入到训练后的神经网络模型,以确定该特征代码片段对应的敏感点是否存在安全缺陷。/n

【技术特征摘要】
1.一种源代码缺陷检测方法,其特征在于,该方法包括:
采集已知样本的包含源代码敏感点特征信息的特征代码片段作为训练数据;
根据所获取的特征代码片段,采用深度学习的方法训练神经网络模型,得到训练后的神经网络模型,用于判断敏感点是否存在安全缺陷;
将未知样本的包含源代码敏感点特征信息的特征代码片段输入到训练后的神经网络模型,以确定该特征代码片段对应的敏感点是否存在安全缺陷。


2.如权利要求1所述的方法,其特征在于,特征代码片段的获取方法包括:根据源代码文件中的每一个敏感点,进行数据流分析,得到包含源代码敏感点特征信息的特征代码片段。


3.如权利要求2所述的方法,其特征在于,所述根据源代码文件中的每一个敏感点,进行数据流分析,得到包含源代码敏感点特征信息的特征代码片段,具体包括:
确定源代码文件中的每一个敏感点;
对于每一敏感点,根据每个敏感点的初始敏感变量,追踪所述初始敏感变量的数据流,获取其他敏感变量,得到与每一敏感变量语义相关的代码行集合;
将获取到的各个代码行集合按源代码文件中的顺序排列,得到包含源代码敏感点特征信息的特征代码片段;
其中,所述敏感点包括敏感函数调用、数组敏感操作或指针敏感操作;其中,敏感函数包括库函数或者API函数;数组敏感操作包括对数组元素的访问或赋值;指针敏感操作包括对指针的访问或赋值;
当敏感点是敏感函数调用时,初始敏感变量为敏感函数调用的参数;
当敏感点是数组敏感操作时,初始敏感变量为该数组;
当敏感点是指针敏感操作时,初始敏感变量为该指针。


4.如权利要求3所述的方法,其特征在于,
在确定源代码文件中的每一个敏感点之前,该方法还包括对源代码文件进行预处理,包括对源代码文件进行规范化和宏定义展开;
在将获取到的各个代码行集合按源代码文件中的顺序排列之后,该方法还包括对所述源代码文件进行后处理,获取特征代码片段编号、源代码文件路径、敏感点所在行号。


5.如权利要求3所述的方法,其特征在于,所述确定源代码文件中的每一个敏感点,包括:
将源代码文件生成抽象语法树;
对所述抽象语法树进行解析,记录源代码文件中的每一个敏感点位置,形成敏感点列表;存储用户自定义函数调用的函数名及参数,用户自定义函数的函数名及参数,以及函数间的调用关系。


6.如权利要求3所述的方法,其特征在于,所述对于每一敏感点,根据每个敏感点的初始敏感变量,追踪所述初始敏感变量的数据流,获取其他敏感变量,得到与每一敏感变量语义相关的代码行集合,具体包括:
循环遍历敏感点列表,对于每一个敏感点,获取其初始敏感变量加入到敏感变量列表中,通过解析所述抽象语法树,追踪所述初始敏感变量的数据流,记录与初始敏感变量语义相关的代码行集合;
以所述初始...

【专利技术属性】
技术研发人员:笋大伟华嘉仪
申请(专利权)人:北京软安科技有限公司
类型:发明
国别省市:北京;11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1