大规模程序缺陷漏洞自动检测的世界难题:看国产软件怎么解决

  • 一、军用产品软件安全重要性

各国军事力量比拼激烈,战略资源、战略要地以及主导权的争夺日益严重,随时可能爆发武装斗争。我国面临的这些传统安全问题依然没有缓解,更有新的威胁如恐怖主义、信息安全等问题都进一步显现出来。作为军工科技输出的基本单位,近年的创新科技成果爆发式增长,这不仅加强了军事实力,也为国民经济的增长提供支持。加大科技创新力度就要增加自主可控程度,就是增加国家的整体实力。只有在军工产品生产中,使用国内的自主可控工具才能更好的保障军工产品的安全和国家的安全。

军工企业的产品中尤其是防务产品,质量安全是首位,从零部件原材料开始需严格把关,质量第一。例如我国台湾自主研发的IDF 号战斗机初期事故频发,甚至无法保证最基本飞行,根本无法保证产品安全。军工企业科技项目产品质量安全是国家安全的第一保障。保证产品安全就要有一套配套的科学产品安全管理体系。随着数字化时代的到来,军工产品中软件的部分也越来越重要,相比于硬件实现,软件实现占比越来越高。在国外战斗机中的应用,软件部分占比从1960年的8%,增长到近些年的85%以上。NASA航天飞机的机载系统有近50万行的代码。

面临着国防安全挑战日益严峻的情况下,军用装备软件系统的应用已纷繁复杂。系统的规模,已从早期的千行代码,发展到现在的数十万到数百万行代码量。随着代码量的增加,软件功能和逻辑的复杂度更是急剧增加。一旦出现缺陷,将导致不可估量的灾难。例如1997年9月美国舰船由于软件非法计算导致推进系统运转失败。2016年7月美国西南航空调度系统由于软件缓冲区溢出导致系统崩溃,影响了7000次航班的飞行。

  • 二、军用产品软件安全问题及解决

软件系统越来越复杂,代码量越来越多,为了快速响应开发的需求,引入了很多“不可控”成分,增加了软件安全评估的难度,也提高了军工产品的风险,导致军用软件系统的整体安全防护难度越来越大。针对这些问题我国也颁布了一些软件安全编码规范,用来约束军用软件代码的安全性和可靠性,比如《GJB8114国家军用标准C/C++语言可靠性编程规范》、《GJB5369国家军用标准航天型号软件C语言可靠性编程规范》等规范。通过规范约束,军用软件的研发保障能力有所提升,但每套编程规范有上百条的规范条目,如果不使用相关的自动化代码测试工具很难对数百万行军用软件代码进行一一检查,这就阻碍了军工单位的代码质量保障体系的具体实行。

基于对此现实的认知,从而要求装备研制管理方和研发方从管理角度和技术角度开展风险管控工作。管理上对软件代码质量的日常关注提上日程,技术上按照软件六性要求,通过代码测试工具衡量军用装备软件是否达标,从而为软件质量提供有效的技术支持和保障。使用代码测试工具,通过自动化的方式对代码进行扫描,发现代码里边的安全漏洞、质量缺陷以及代码规范问题,大大减少人力成本,提高了效率。

但很多代码测试工具也存在问题,比如:没有军工特定的编程规范检测,或者只支持很少量的规范条目检测。工具不是自主可控,无法按需修改,对于军队、军工行业内规则和缺陷的定制,很难实现。用自研的外壳包了国外检测工具的检测引擎,安全性无法保障,给军工产品、国家安全带来风险。

  • 三、科学构建国产测试工具技术能力框架

基于各种代码测试工具存在的问题,国内代码检测技术也在积极的探索和实践。通过工程领域不断研究,探索出缺陷库+六层分析技术的技术架构,可有效检测软件代码的质量问题,具体描述如下:

缺陷库:库中保存了各种要检查的缺陷特征,比如《GJB8114国家军用标准C/C++语言可靠性编程规范》等规范中提到的各种错误的代码写法。缺陷的种类包括规则错误、故障、安全漏洞等,这个缺陷库是军用软件代码检测的基础,缺陷库可以不断完善和添加新的缺陷特征。

  1. 预处理层:对被测试的军用软件代码进行转换,抽象为代码树结构。
  2. 基本分析层:对代码树结构进行进一步的语义分析,分析出函数、变量及相互之间的调用关系,形成代码依赖图。
  3. 精度提高层:对基本分析层得到的代码依赖图进一步精确化,作为下一步的自动检测的基础。
  4. 自动检测层:从缺陷库中获取所有缺陷特征,检测精确化后的被测软件代码的代码依赖图中是否能匹配到缺陷库中的缺陷特征,对满足缺陷特征的军用软件代码的缺陷进行报出。
  5. 接口层:提供代码测试工具的编程工具插件、功能调用接口、持续集成接口等,并且可以根据用户需要定制接口。
  6. 展示层:错误代码及其缺陷问题的展示、代码正确写法的提示、统计结果的展示、检测报告的生成。

     四、国产代码测试工具的特性

基于上述检测原理,好的代码测试工具功能应至少具备如下特点:

  1. 全面支持国产化操纵系统、国产化芯片,自主可控。
  2. 支持片段代码检测(缺少编译环境或无法通过编译的程序),满足代码质量日常上报的管理需求。
  3. 支持运行时缺陷+安全漏洞+编码规范几种缺陷的同时检测,工具应支持500种以上的条目的检测,支持国内标准《GJB8114国家军用标准C/C++语言可靠性编程规范》、《GJB5369国家军用标准航天型号软件C语言可靠性编程规范》、《航天型号软件C语言可靠性编程规范》等,以及国外标准工业标准C/C++语言嵌入式可靠性编码规范的MISRA2004、MISRA20042008、MISRA2012,ISO17961的C语言安全漏洞等全系列编码标准。除此之外,还可以根据军工单位的实际情况,在工具中定制检测规范和标准,使代码测试更加符合军队、军工的需求。
  4. 为了提高代码的可维护性,工具可以提供软件代码行、圈复杂度、扇入扇出度等各个角度的度量指标统计,量化的展示代码的质量情况。
  5. 在以上工具的基本要求的基础上,代码测试工具还应该具有功能易用、检测效率高,如:可并发、排队检测软件代码,可以快速检测上百万行甚至上千万行的软件代码等特性。并且可以随时根据军工单位的要求,随时添加更多的安全漏洞、质量缺陷以及代码规范的检测项,工具随着军工单位质量保障体系的发展而同步发展,做好相应的支撑工作。最后工具应具有面向DevSecOps的代码安全检测特性,实现对软件代码的持续集成、持续检测,实现军品软件安全的自动化管理,在少量或者没有人工参与的情况下,尽可能快速、有效的保证军用软件的安全性和代码质量。

你可能感兴趣的:(测试工具)