
国产化平台自主可控测试工具研究设计.docx
13页国产化平台自主可控测试工具研究设计 沈雷 左芸 解群 李翔摘要:国产计算机系统的自主可控评价可从两方面考虑,一是知识产权自主可控;二是运行安全可靠文章对国产计算机系统的自主可控评估方法开展研究重点关注软件自主可控度的评价,对软件代码克隆检测、软件演化分析及溯源分析等方法进行分析,给出了软件自主可控测试工具的设计方案关键词:国产化;自主可控;软件测试:TP311 :A :1007-9416(2019)02-0154-051 概述随着国家“自主可控”规划的推进,近年来国产软硬件得到快速发展硬件方面,龙芯、申威、飞腾等国产处理器经历多个版本的改进升级,性能稳步提升,与国外主流处理器的差距越来越小软件方面,以中标麒麟操作系统、锐华操作系统、达梦数据库为代表的国产基础软件也在军政各个行业得到广泛应用,自主可控计算机环境已经逐渐形成本文通过分析国产计算机环境的特点,提出一种自主可控测试工具的设计方案,用于对国产计算机系统软硬件自主可控程度进行测试2 自主可控发展背景及现状数年前,我国军事装备的基础设备及其核心技术基本靠进口,无法从根本上保障信息的安全,国民经济和国防安全均存在安全隐患。
因此,软硬件自主可控的国产化改进得到了国家的高度重视,随着“自主可控”规划的推进,国内自主可控计算机环境已经逐渐形成,国产关键软硬件产品已开始得到应用(表1)目前,国产计算機环境的应用面、规模相对较小,应对复杂装备环境时,兼容性、综合性能、可靠性验证不充分,缺乏有效的诊断分析工具、测试评估环境如何确保国产化软硬件环境具有完全自主知识产权,真正做到安全可控,这给测试工作带来新的挑战3 国产计算机自主可控评估方法单一软硬件的自主可控度主要由软硬件的设计实现方案决定,同一型号产品的自主可控评价结果应该是一个固定值出于保密需要,测评人员往往无法获取某产品的详细设计实现方案,所以通常只能由厂商根据对应软硬件的评价模型计算结果,并发布到产品数据库在具体评估项目中只需获取计算机中各软硬件的唯一性特征标识,包括型号+版本+其他唯一性标识(比如CPU的串码,软件序列号等),再通过数据库中查询匹配对应的自主可控结果对整机系统的自主可控评价(图1),可由组成系统的软硬件单品的自主可控度进行加权计算后获得本文第3节对软件自主可控测试技术进行了详细说明,第4节提出了自主可控测试工具的实现方案,第5节对关键技术做了简单介绍。
4 软件自主可控测试技术研究现有的软件代码分析技术主要包括以下几类:4.1 代码克隆检测与代码相似性分析国产化系统软件很多源于Linux开源项目,代码相似性分析对国产软件评估有着十分重要的作用软件克隆研究包括克隆定义与分类、相似性分析、克隆管理以及相关的实例研究与工具开发等对于代码克隆分类,较普遍认可的是Roy等人分为四类的提议[1]: 第一类指除空白和注释外完全相同的代码片段,也称为精确克隆; 第二类指除空白、注释以及变量名及常量值的变化外,语法结构完全相同的代码片段; 第三类指除包含第二类克隆所涉及差异外,还存在少量语句增加、删除、修改的代码片段,也称为近似克隆; 第四类指具有相同的语义,但采用不同语法形式的代码片段前三类克隆从文本相似的角度进行划分,第四类则从功能相似的角度划分软件克隆检测包括两方面研究内容,即候选克隆片段的选取与候选克隆片段的相似性分析候选克隆片段的选取是决定整体克隆检测速度的关键因素之一,一般可基于编程语言的语法结构选取克隆片段候选克隆片段的相似性分析也是决定整体克隆检测速度的关键因素,可使用后缀树(suffix tree)和频繁子序列挖掘(frequent subsequent mining)算法等进行匹配检测,对于有向标记图形态的模型规范化表示,可使用子图同构(subgraph isomorphism)、特征向量(characteristic vector)[2]等技术进行检测。
以色列技术学院的Yaniv David和Eran Yahav提出针对二进制代码的相似性分析技术,并成功应用于二进制代码搜索中该技术将二进制代码抽象成程序流图,并通过流图相似性以判别软件相似性有研究发现,一个程序片段与另一个程序片段可能存在特殊关联,并提出规则制导的克隆同步方法来实现对“异型同义”的克隆代码间的一致性维护4.2 软件演化分析经过数年发展,国产化系统软件在不断改进完善中也演化出针对不同平台的多个版本对演化历史的分析同样是一个值得关注的问题Harald Gall[3]等人提出一个三维直观表示方法来检测一个软件版本的历史信息三维信息分别是:时间、软件系统结构、一种属性值每个结构用版本序列号确定,并且拥有自己的属性值,这些属性值用颜色来表示,每个颜色模块与抽象分解模块连接Tudor Girba[4]等人根据软件在运行过程中的一系列需求提出一个演化分析方法Hismo,其通过可视化的手段对软件历史行为进行建模,以表示软件演化的过程Robbes[5]为软件中操作和信息的变化进行建模,以便从程序环境中快速找到影响系统的操作,这样就能够对软件的运行进行准确地监控,可以使开发者和研究者更好地利用和管理更为复杂的系统。
软件演化的另一个研究热点是演化目前国产化软件中还未出现大规模演化的实例,此处不展开赘述4.3 软件溯源分析4.3.1 基于软件来源追踪的软件溯源分析为提升开发效率,软件构造过程中开发人员常常简单克隆互联网上开源代码,并作针对性修改然而,上述软件来源与软件需求常常不能精确匹配,导致代码与软件需求间存在差异;软件经过反复修改后,其来源也常常变得不可追踪针对软件来源追踪问题,以开源软件库为数据源,通过代码相似性搜索、机器学习等技术实现软件来源追踪框架,基于互联网搜索进行软件溯源和差异分析4.3.2 基于软件依赖关系的软件溯源分析开源软件在为应用提供海量可复用制品和群体开发支持的同时,亦为其引入了额外的依赖复杂性和配置动态性软件系统的可依赖性对可控性影响日益突出同时开放环境下,软件组件的不可控将被放大至整个软件系统的不可控可以从软件基本结构、构造方法着手,研究软件的多重复杂性、环境的不确定性及其对其它软件资源的强依赖性,保障软件可控地被开发、运行与演化4.3.3 基于軟件演化历史的软件溯源分析在开放、动态、难控的互联网环境下,以用户为中心的软件应用需要主动感知和适应环境,并随着开放用户群体的需求变动而持续地演进。
这就需要从软件的演化历史进行研究通过搜集软件演化历史,阐明软件持续演进机理,发现软件及其组件演进规律,实现基于软件演化历史的软件溯源分析5 软件自主可控测试工具5.1 源代码分析工具源代码分析主要基于成熟的代码静态分析技术和运行时追踪技术,对软件关键代码进行静态分析和动态测试,掌握代码的基本质量情况和特征值,并录入进基准数据库组成图如图2所示静态分析主要包含代码复杂度分析,静态拓扑结构特征分析,结构稳定性分析,系统基础结构分析等,同时,将发现的问题录入进缺陷库此外,支持对二进制文件进行反汇编来进行特征值提取,并通过建立索引存入基准数据库,为溯源分析提供基准数据动态测试主要是通过插桩技术,在软件运行时检测软件行为可借助insure++等工具完成动态测试源代码分析的代码质量等度量数据将存入软件度量库,软件代码分析得出的缺陷存入软件缺陷库,为代码缺陷管理提供支撑5.2 软件溯源分析工具主要从软件来源追踪、依赖关系和演化历史三部分进行溯源分析如图3所示来源追踪主要通过代码相似性搜索、机器学习等技术实现软件来源追踪框架,进而设计并实现基于互联网搜索的软件来源发现和差异分析的支撑工具原型,形成FOSS(Free and Open Source Software)基准数据库;在上述研究进展基础上,形成基于互联网搜索及代码相似性分析技术的软件溯源分析。
依赖关系,从软件基本结构、构造方法进行研究混源软件的依赖复杂性和配置动态性,通过搜索商用软件和第三方软件,形成商用软件基准库研究软件的多重复杂性、环境的不确定性及其对其它软件资源的强依赖性,保障软件可控地被开发、运行与演化演化历史将历史项目构件通过代码分析后提取特征值和索引存入历史项目构件库,通过搜集软件演化历史,阐明软件持续演进机理,发现软件及其组件演进规律,实现基于软件演化历史的软件溯源分析5.3 可控性度量工具建立一套软件可控性度量指标和分级准则,从代码知识产权可控(软件来源、软件复用程度、软件依赖关系)、质量可控、技术能力可控(软件工程能力)等方面建立指示器和度量元,并提供度量采集和分析方法用户可通过对各项指标的加权计算值获得软件最终的可控性度量级别如图4所示知识产权可控是软件可控性的关键,需要依靠溯源分析技术,对软件知识产权进行测试利用代码相似度分析技术,解决与开源代码有关的管理、合规和安全等方面的问题5.4 基准数据库及搜索引擎基准数据库由FOSS基准库、商用软件基准库、历史项目构件库、软件缺陷库和软件度量库五个基本库组成如图5所示利用网络爬虫技术,从互联网知名开源社区中搜索下载FOSS开源软件,通过代码相似性搜索、机器学习等技术实现软件来源追踪框架,进而设计并实现基于互联网搜索的软件来源发现和差异分析的支撑工具原型,逐步建立FOSS基准数据库。
在上述研究进展基础上,形成基于互联网搜索及代码相似性分析技术的软件溯源分析商用软件主要是针对COTS产品中提供的基础软件、中间件、第三方库文件等二进制分析,建立商用软件基准库,同时,收集该类产品中可能存在的软件缺陷,为商用软件方案选型和成本估算提供支撑历史项目构件通过代码分析后提取特征值并建立索引存入历史项目构件库,通过搜集软件演化历史,阐明软件持续演进机理,为发现软件及其组件演进规律,实现基于软件演化历史的软件溯源分析提供支撑6 关键技术6.1 代码相似度分析代码相似性进行分析可考虑以下三个方面:(1)基于简单文本匹配算法的代码相似性分析代码克隆检测是常见的代码相似性分析技术,其主要利用字符串匹配算法,计算代码间相似性,评判代码间是否互为克隆项目拟从基本的克隆分析入手,结合互联网搜索引擎,搜索互联网代码并寻找高相似代码2)基于树图相似性的程序相似性分析由于软件在演化过程中常常被修改,导致克隆检测技术无法广泛应用于代码溯源过程中为此,可以将程序抽象为语法树或者程序流图,并基于程序树、图相似性进行程序相似性分析进一步的,研究将二进制代码抽象为程序流图,实现在二进制代码层次上的软件相似性检测。
3)基于程序行为相似性的相似性分析项目拟进一步拓宽相似性内涵,通过研究软件行为相似性发现软件根源特别是,对于基于不同平台、采用不同语言开发的软件,经常也存在高度相似性这里将抽象软件行为,分析软件相似行为及相似行为组合,从而确定软件相似性6.2 基准数据库及搜索引擎可以考虑从以下几个方面建立基准数据仓库:(1)从互联网上搜索FOSS和可下载代码;(2)测评过程中被测系统样本;(3)测评过程中被测软件关键模块的代码评估结果;(4)基于资产库中提取的缺陷和典型问题;(5)COTS產品、第三方构件库等基于该基准数据库,设计数据结构,并建立索引机制,通过多重索引匹配定位技术,设计高性能的大规模数据量的搜索引擎,为实现百万级的代码检测提供支撑依据一定的相关度算法(如超链接算法)进行大量计算,创建倒排序的索引库索引库建好后用户就可以通过提供的搜索界面提交关键词进行搜索,依据特定的排序算法返回搜索结果因此,搜索引擎并不是对互联网进行直接搜索,而是对已抓取网页索引库的搜索,这也是能快速返回搜索结果的原因,索引在其中扮演了最为重。












