software-strategy-book/Ch2-8-Quality&Security.tex

114 lines
32 KiB
TeX
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

% !TEX root = main.tex
软件学科是一门工程技术型学科,质量自从软件诞生之日起就是被关注的重点。软件质量\index{软件质量}和安全保障是通过相关技术和管理手段来检测、度量和评估软件制品符合预期的程度,并排除或容忍软件制品中不符合预期的因素,从而保障软件的实现和行为符合预期。经典的软件质量核心价值观强调“绝对正确”,涵盖了正确性、易用性、高效性、可靠性、鲁棒性、(易)理解性、维护性、复用性、移植性、测试性等一系列属性\cite{ISO9126},强调在客观证明基础之上形成对软件质量的客观认识。
在“软件定义一切”的时代,一方面人机物融合应用场景使得软件的使能空间被进一步大幅度扩展,导致软件系统的规模和复杂性进一步增大,软件开发和演化的成本进一步上升;另一方面动态开放的运行环境使得安全性成为十分重要的质量属性,针对性的保障措施成为迫切需求;进一步,由于软件日益成为实现应用价值的核心载体,各类利益相关者的价值实现被纳入软件质量属性的范围,还需要考虑伦理、授权、法律等相关非技术因素。由于受到可投入成本的限制,人们越来越清楚地认识到在客观证明基础之上形成对软件质量的客观认识是现实达不到的理想目标,因而软件质量的核心价值观转变为强调“相对可信”,即在客观证据(包括部分客观证明)的基础上形成对软件质量的主观判断。
在建立价值观的基础上要进一步建立各类软件质量保障措施,也即围绕各类软件质量关注点提供解决问题的方法和技术。从系统观与生态观的角度看,软件质量的考虑涉及更宽广的范畴。例如,从系统工程的角度看,如何在经济可行条件约束下通过综合集成的方法,用可担负质量的部件实现高质量的系统。又如,如何认识在软件生态系统中质量的依赖与传播规律;考虑到软件生态中各类利益相关者的价值差异和冲突,软件及其服务的质量如何取舍权衡等等。以上内容相关的质量保障措施值得进一步研究,但由于篇幅有限,本章主要关注以下更加迫切、更具挑战性的软件质量与安全保障问题。
随着软件质量的核心价值观从“绝对正确”转变为“相对可信”,度量与评估软件符合预期的程度成为软件质量保障的基础性挑战问题。随着人机物融合程度的加深,实时混成、云端融合、复杂异构、动态聚合、智能适应等非经典需求与应用场景层出不穷,软件系统设计、实现和运行过程中需要采用更具针对性的质量保障措施。大规模复杂系统的安全保障变得更重要但又更困难,迫切需要新的技术突破;确保物联网软件安全上升到了国家安全高度,亟需系统深入的研究工作。特别地,数据驱动的智能软件日益成为一类重要的软件形态,不同于传统软件,这类软件基于概率化的归纳推理来实现智能行为,对各类不确定性的驾驭是其内在的要求,如何有效评估和保障这类智能软件系统与服务的质量也是亟待研究的问题。
\section{重大挑战问题}
软件质量与安全保障面临的重大挑战问题主要集中以下几个方面:一是在人工智能时代,数据驱动的智能软件系统高度复杂的数据依赖、软件行为不确定性、计算结果鲁棒性方面,对软件质量提出了新的挑战;二是针对人机物融合场景下的规模化、定义化的软件系统,如何应对传统静态、封闭、开发阶段的可信度量、评估和增强带来的挑战,以支持软件系统的动态、开放、演化;三是如何针对大规模复杂软件系统和无处不在的物联网软件,有效检测漏洞或恶意软件等安全缺陷,并通过构建准确、高效的缺陷修复技术及漏洞防御机制保障安全。
\subsection{数据驱动的智能软件系统质量保障}
越来越多的软件系统采用人工智能技术,基于大规模数据分析进行计算、推理及决策,即综合利用统计分析算法、数据处理、并行计算等技术,从海量、多态的数据中,挖掘知识、实现数据价值的最大化。与传统软件相比,数据驱动的智能软件系统在高度复杂的数据依赖、软件行为不确定性、计算结果鲁棒性方面,对质量保证研究提出了新的挑战\cite{sculley2015hidden}。随着数据驱动的智能软件系统越来越广泛地应用在工业生产、社会生活、金融经济、行政管理的方方面面,其可靠性、鲁棒性、安全性等问题如不能有效地加以防范,将造成重大损失甚至灾难性后果。
(1) 数据质量\index{数据质量}和模型质量\index{模型质量}成为瓶颈。数据驱动的智能软件系统中,往往以数据为核心,围绕数据的处理、分析、挖掘、学习等各种任务设计算法,被称为“面向数据编程”的模式。因此,与传统软件侧重“逻辑正确”不同,数据和模型的质量是数据驱动的智能软件系统可信性的基础和关键。一方面,数据的质量难以保证,噪音会严重干扰模型的有效性;另一方面,鉴于认知系统和认知过程的复杂性,模型有可能不完整、不精确、模型假设存在偏差,算法应具备一定的鲁棒性,不受模型中噪音的干扰,给出可信的决策结果,在数据分布特征等方面,训练数据集与实际应用或是预期的数据集可能存在不一致性,即数据集偏差、歧视、或是样本迁移问题,直接影响模型的可靠性。数据和模型的错误和失效,将造成智能算法判断和决策错误、软件失效。
(2) 数据依赖严重且依赖关系复杂、多变,软件行为难以预测。数据驱动的智能软件系统数据、模型之间存在着错综复杂的依赖关系,这些依赖关系可能是隐形的、间接的、动态多变的。数据、模型依赖及其与代码之间的相互关联难以分析和维护,错误难以定位和隔离。相比于代码分析,数据、模型和代码之间依赖和追踪关系的研究还非常有限,尚缺乏有效的技术和工具。由于程序逻辑高度依赖于数据,并且算法对数据、模型的变化敏感,所以基于概率分析和动态学习的决策过程,使得软件行为具有很大的不确定性。
(3) 智能系统需具备运行时故障诊断、预测及自愈的能力。智能系统常常需要融合多种硬件设施、软件组件,实时完成大规模数据的采集、综合、分析等处理,实现智能感知和智能决策。系统应用场景多样,功能组合繁多,输入空间难以穷尽,条件组合数量巨大;在实际运行中,软硬件环境等因素复杂多变,各种情况叠加在一起综合作用。离线测试阶段难以覆盖各种可能的场景。另一方面,系统常需要集成大量第三方的数据和软件,如深度学习与机器学习框架。在实际应用中,第三方服务的稳定性、可靠性、安全性以及不同来源的服务之间的兼容性、互操作性等问题,都给系统集成带来了巨大的挑战。因此,运行过程中及时发现和诊断乃至预测系统故障、及时修复故障或通过容错等机制保持系统正常运行,对于保证业务安全和系统高可用性至关重要。
\subsection{人机物融合场景下的软件系统可信增强}
与传统系统不同,人机物融合场景下的软件系统将计算部件与物理环境进行一体化整合,将大量独立的异构设备(及其数据)进行智能化的连接,并针对当前系统、场景等的实时变化根据任务需求对计算逻辑,乃至软件体系结构进行自动调整与配置。这样,计算设备可以更精确的获取外界信息并做出针对性、智能化的实时反映,从而提高计算的性能与质量,给出及时、精确并且安全可靠的服务,实现物理世界与信息系统的整合统一\cite{lee2006cyber}。显然,列车、电网、航天等典型安全攸关系统均具有鲜明的人机物融合特质。如何对相关系统的可信性进行保障对相关系统的正确运行具有重要意义。然而,在人机物融合的场景下,相关异构、组合、动态等特性也给系统行为可信保障带来了新的挑战与需求。
(1) 人机物融合场景下组件间将进行频繁的通信、合作与协同,去完成复杂的任务。因此,相关系统是一个典型的组合系统。长期以来,对大规模组合系统进行分析、测试、验证一直是相关领域难点所在。此外,由于在人机物融合场景下不确定性、概率性行为、实时连续行为越来越常见。如何在建模阶段对随机、不确定、连续行为进行描述,并在分析中对相关行为进行研究,也是对相关复杂不确定系统进行可信增强的一个重要挑战。
(2) 相较于一般静态可预测系统,人机物融合场景下系统行为更加强调于实时捕获、采集环境或者其他协作成员的运行时参数,从而进行自身策略,乃至组件间拓扑结构的智能调整。在开放环境下,相关外界参数取值随时间变化,难以准确离线刻画。因此,从传统的静态测试、分析、验证等角度出发,难以遍历枚举相关开放动态行为中可能出现的所有场景,无法给出完整状态空间描述与安全保障。在此情况下,如何从运行时监控角度应对开放环境带来的连续动态行为是相关领域重要关注问题。
(3) 从系统观来认识人机物融合系统,我们会发现在人机物融合场景下,相关系统的多组件行为呈现出典型的分布式、异构式特征。在组件内部行为难以描述,组件间相互规格和工作方式差异巨大,难以整体把控的情况下,如何从体系结构角度对系统可信增强进行考虑,设计面向容错的新型协同设计方式及异构系统体系结构,为相关软件设计提出了新的挑战。
\subsection{大规模复杂系统安全缺陷检测}
现代软件系统因需求的快速迭代而增量构建、经过频繁重构和演化、规模庞大、复杂度高,都是典型的大规模复杂系统。他们在企业应用、城市交通、航空航天、智能电网、医疗、指挥控制等重要领域已经成为了不可或缺的一部分,但其实现中存在漏洞或恶意代码等安全缺陷,是导致大规模复杂系统安全性问题的主要根源;而要想保障其安全,需要即时检测并排除安全缺陷。但随着软件的规模和复杂性的不断增大,现有软件安全保障技术与工具的有效性和可扩展性受到了严重制约,软件安全缺陷检测和排除尚未改变以人为中心、侧重经验的实践现状,尚未能形成自动化、客观化的解决方案\cite{cousot2018program, zhang2019recent}。综上所述,软件安全保障所面临的新挑战主要包括:
(1) 安全缺陷统一建模。安全缺陷中,漏洞属于实现中存在遗漏,而恶意代码属于多余的实现。经过几十年的发展,已经公开了大量的安全缺陷,软件安全缺陷具有程序设计语言依赖、系统依赖等特征,有时还依赖于特定的硬件平台与体系结构,安全缺陷形态、机理各异。针对特定的安全缺陷,研究相应的检测方法进行精准制约化检测,虽在特定场景下可行,但已不能满足实际的安全需求。面临的挑战主要在于如何统一表达安全缺陷的语法、语义特征、触发规则、行为特征等问题,使得能够通过相关检测算法高效、精准识别安全缺陷;在此基础上,解决安全缺陷检测方法的平台化、引擎化、定制化,以便检测已有的重要安全缺陷,并具备扩展能力,检测新的安全缺陷。
(2) 大规模复杂系统安全缺陷检测方法的效率和资源有效协同。根据已公开的安全缺陷特征通过静态分析、测试和验证等方法检测潜在安全缺陷是目前被普遍采用的技术。但随着软件系统规模越来越大、系统功能日趋复杂公开安全缺陷的数量也急剧上升安全缺陷检测方法的精准性和规模化能力是难点问题。面临的挑战主要包括1需要在处理大规模程序时平衡精度和可扩展性。高精度的检测方法需要更多的资源开销并且受到程序规模的制约而为了适应大规模程序的安全缺陷检测采用保守的策略会导致大量的误报且需要人工进一步确认从而降低了检测方法的可用性 2需要平衡协同计算资源的消耗与检测效率。安全缺陷检测方法可以提升精度但增加复杂度且需要更高的计算资源可以利用大数据处理、硬件加速、并行化等技术优化检测算法依据特定的规则将大规模代码进行切分将检测任务并行化处理、并将其分配到不同的计算资源上完成检测工作。
(3) 安全缺陷检测过程中大规模状态空间的充分探索。在安全缺陷检测过程需要尽快探索到目标程序的状态空间以检测潜在的安全缺陷由于复杂软件系统的程序状态空间十分庞大如何有效地探索程序的状态空间是需要解决的关键问题具体包括以下几个方面1程序分支和循环结构的深度覆盖通过探索程序状态空间过程中历史覆盖、缺陷检测、冗余等信息有效地制导探索过程尽早覆盖关键的程序状态空间2多维信息制导的模糊测试输入生成利用程序结构、安全缺陷特征、执行结果反馈等信息有效地制导模糊测试使其能够产生覆盖多样性目标的输入空间从而快速覆盖程序状态空间到达能够触发安全缺陷的程序行为路径。
(4) 历史漏洞机理和安全专家经验难以复用。在现有安全缺陷检测的分析和测试过程中多个环节存在不确定性仍需要安全专家人工进行决策。这些安全专家经验以及历史漏洞的机理信息对后续漏洞分析、检测、利用和修复工作能够起到很大作用。但遗憾的是这些经验在现阶段难以实现高准确度的复用。然而机器学习、深度学习等人工智能技术现已在文本翻译、图像处理、语音识别等方面得到广泛应用使其具备人的智能而实现自主决策。因此如何在安全缺陷检测和预警的各个环节中引入智能化技术是现阶段所面临的重要挑战具体包括以下两个方面1安全缺陷检测历史信息的智能化将安全缺陷检测历史信息及其统计特征知识化以便在安全缺陷检测过程中进行智能化预测将深度学习技术应用到安全缺陷检测样本代码相似度映射中以便实现同源安全缺陷检测和挖掘的智能化应用到输入域、程序结构的映射中实现模糊测试中输入生成的智能化2安全专家经验的知识化和智能化利用分析安全缺陷检测过程中的专家经验进而抽象其为安全缺陷检测的启发式规则以便在安全缺陷检测过程中根据自动搜索经验知识空间实现安全缺陷检测的智能化。
(5) 面向安全保障的缺陷自动修复与验证。及时修复软件中存在的安全缺陷是保障软件安全的主要手段现阶段主要依靠人工修复软件安全缺陷需要花费大量的时间精力阅读理解程序代码、定位安全缺陷并修复非常耗时耗力。面临的挑战主要在于1如何针对安全缺陷实现自动修复。基于遗传算法、程序搜索、程序合成等手段的软件缺陷的自动修复方法面临在实际系统中应用的可扩展性、可用性等方面的挑战。2如何自动验证修复。目前存在一些修复方法在某些实验途径上可以证实有效性但缺少理论基础无法保障其完备性需要有手段保证安全缺陷修复措施符合预期。
\subsection{物联网软件安全保障}
物联网是移动互联网\index{移动互联网}、云计算\index{云计算}、大数据技术和人工智能等新一代信息技术,在人类社会的具体应用领域中,通过人机物融合实现计算、信息、通讯、控制等任务的一体化的产物。物联网软件是其核心使能组成部分,也是软件产业的一个新兴领域。物联网高速发展的同时,也带来新的问题,特别是物理设备实现移动互联后,导致所有物联网终端设备直接暴露在互联网上、处于不安全状态,使得设备自身安全、其拥有和传输的数据的机密性、完整性和可获得性,都面临安全挑战。任一物联网终端软件一旦遭受攻击,将会导致软件崩溃、设备失效、威胁用户隐私、冲击关键信息基础设施等安全事故,对整个物联网系统造成严重的破坏性\cite{ammar2018internet, brumley2008automatic}。但现阶段,全面保障物联网软件与系统安全,需要检测物联网软件的所有潜在安全薄弱环节,实施有针对性的保障措施。但由于物联网软件的复杂性、异构性、人机物融合等特性,仍然需要重点解决如下重大挑战问题:
(1) 面向复杂异构物联网终端控制软件的安全缺陷检测。物联网系统的使能部件是软件,而这类驱动物联网系统工作的核心软件,如果存在安全缺陷,包括漏洞、恶意软件,容易被攻击利用,在安全关键场景下会带来严重的后果,如何能够及时检测这类安全漏洞是关注的焦点。在复杂物联网系统中,计算、通信和控制设备由于其各自所执行的任务不同,往往由完全不同的软硬件构成,同时不同设备间的相互协作关系也由于系统的庞大而变得十分复杂,有时还可能存在动态变化,这导致对复杂物联网系统中异构的终端设备控制软件进行安全性检测变得异常困难。如何改进现有的静态分析与动态测试技术以适应物联网软件依赖的芯片、硬件外设、操作系统、指令集、外部库、交互接口、外部输入等异构性,是面向复杂异构物联网终端软件进行安全缺陷检测亟需解决的关键问题。
(2) 面向完整物联网软件系统的模糊测试\index{模糊测试}。物联网边界模糊、设备异构,物联网软件实现了控制、计算与通信的集成,使其在处理能力不断强大的同时,内部结构也变得愈加庞杂且与外部世界的交互变得愈加频繁,而现有的模糊测试方法主要针对物联网软件系统自身故障进行安全检测,面临的挑战在于如何针对物联网系统与环境,探索使用基于人工智能技术、深度学习方法,构建智能化模糊测试方法,将物联网状态空间中搜索安全缺陷的问题转化为目标制导模糊测试与优化问题。
(3) 面向动态安全检测的物联网软件仿真\index{软件仿真}与虚拟化技术。现有物联网软件测试需要互联网环境支撑、动态执行设备并依据获取的运行时反馈信息进行分析使得运行时安全检测面临驱动设备运行困难、捕获设备反馈困难、识别安全缺陷困难等问题具体包括1物联网软件仿真技术。由于物联网软件依赖的终端硬件、体系结构、指令集、部署配置的多样性如何在支持相应固件体系结构、指令集的模拟器的基础上构建通用仿真执行支撑环境如何针对基于特定外设基于适配接口构建物理设备运行驱动环境从而实现能对典型设备进行运行驱动的支撑如何利用通用仿真环境和物理环境的支撑捕获运行时的物理设备的状态、仿真环境下覆盖等反馈信息便于安全缺陷检测过程。 2物联网系统环境建模与虚拟化技术物联网软件需要通过外设、互联网接口与外界交互如何基于各类网络协议对多类交互输入接口进行虚拟化和数字化的基础上统一建模对物联网运行依赖的系统软件平台进行虚拟化建模与支撑。
\section{主要研究内容}
软件系统质量和安全保障的重点,仍然是通过相关技术手段和管理手段来检测、度量和评估软件制品符合预期的程度,并排除或容忍软件制品中不符合预期的因素,从而实现保障软件系统的实现和行为符合预期。但由于软件在社会生活中的作用发生根本性变化,我们需要从尚未充分探索解决的经典问题和新的重大挑战问题等角度展望软件质量和安全保障方面的研究内容,整体框架如图\ref{fig8}所示。具体而言,需要研究软件伦理、软件公平性、软件授权、软件立法等非技术因素扩展软件预期外延的方法,以及相应的检测、度量和评估技术;由于软件自身的发展、开源软件的大量使用,软件系统的规模和复杂度大幅度提升,运行软件的平台不断变迁、软件自身的形态不断变化,面向缺陷检测,需要研究分析、测试、验证、监控等检测与度量技术的能力提升和可扩展性途径;对现有的检测、度量、保障和评估技术不能满足实际需求时,需要研究相应的形式化方法\index{形式化方法}、模型驱动方法\index{模型驱动方法}、符号执行技术、人工智能技术、抽象解释技术、虚拟化技术、并行化技术等支撑技术;随着软件的运行环境动态开放、系统的行为存在不确定性,需要研究软件系统动态行为的建模、监控、预测和容错;随着数据驱动的智能软件大量应用于重要领域,需要研究作为软件制品的组成部分的数据和智能模型的质量保障;经过一段时间的安全检测与保障,已在全球构建各类公开的漏洞库/恶意软件库,需要研究已知漏洞、恶意软件的检测、定位、修复,并探索未知漏洞、恶意软件的检测与报告;随着支持软件运行的平台已经从经典的计算机,转向端边云融合的泛在物联网计算设备,软件的形态已经成为驱动物联网设备的固件,需要研究物联网固件的分析、模糊测试、仿真等安全保障方法,以及相应的虚拟化支撑技术;软件自身的构建和维护、软件运行和提供服务过程中,软件质量和安全保障活动产生了大量数据,需要给予软件质量和安全的历史数据,从管理角度对研究在软件开发构建、运行维护过程中约束、规范人的行为,改进软件过程,从预防不符合预期制品的构建角度保障软件的质量和安全。
\begin{figure*}[!t]
\centering
\includegraphics[width=1.0\textwidth]{fig2-8/fig0801}
%\vspace*{-15pt}
\caption{\small 软件质量与安全保障研究内容框架}\label{fig8}
\label{fig_sim}
\end{figure*}
\subsection{软件预期的外延扩展和符合性评估}
由于软件在社会生活中的作用发生根本性变化,作为软件质量与安全保障的依据,软件预期不能局限于传统的用户需求和领域标准,需要分析国际、国家软件质量和安全相关的标准,针对软件体现的人类价值观,研究软件价值要素和反映软件价值要素的软件质量属性,在此基础上研究新型软件质量和安全模型,制定或更新基于软件价值的质量、安全和可信标准;研究软件价值的度量与评估,在此基础上研究质量评估、安全评估、可信评估、标准符合性评估手段;还需要考虑公开缺陷/漏洞库/恶意软件库、软件伦理\index{软件伦理}、软件公平性\index{软件公平性}、软件授权\index{软件授权}、软件立法等社会生活中的非技术因素基于ACM/IEEE软件工程职业伦理规范研究适合我国国情的软件从业人员的职业伦理规范基于在国家法律法规及重要领域软件应用研究特定领域软件立法基于GPL、APL等国际通行的开源软件授权规定研究适合我国软件产业发展状况的授权法则在此基础上需要研究相应的标准、伦理、授权法则、法律等符合性检测、度量和评估技术。
\subsection{开放空间下的缺陷分析与漏洞挖掘技术}
由于软件自身的发展、开源软件的大量使用,软件系统的规模和复杂度大幅度提升,运行软件的平台不断变迁、软件自身的形态不断变化,而且,互联网和移动互联网使得运行在封闭空间的软件系统暴露到开放空间,面向缺陷检测,需要研究分析、测试、验证、仿真、监控、审查等检测技术的能力提升和可扩展性途径。为提升大规模软件缺陷检测的精度,需要考虑研究采用符号执行技术、抽象解释技术等,提升缺陷检测的精度以减少误报或漏报;针对新型软件方法学、新的软件形态,需要基于形式化方法、模型驱动方法,研究相应的缺陷检测、修复和容错方法;需要研究如何利用人工智能技术、虚拟化技术、大数据处理技术、并行化技术等支撑技术,利用数据、硬件等资源,提升和优化软件质量和安全保障技术。
针对基于开源软件和代码托管平台的复杂、开放、规模大和分布式软件生态系统,充分利用软件生态系统中多种形态的数据(如代码、代码提交日志、程序频谱、文档、历史缺陷数据和开发者数据等),多种形态数据的关联和影响、项目间的依赖关系和数据流动,研究跨项目缺陷检测。
\subsection{系统动态行为监控与容错}
针对系统动态行为,以监控属性和监控设计模型为基础,对复杂状态空间进行快速、准确的计算和分析,结合运行时验证、故障诊断与隔离等技术,研究相关系统行为的实时、高效、主动监控方法。另一方面研究行为预测与控制生成技术,基于运行状态对系统后续状态空间进行预测,研究针对潜在故障的容错方法与技术,在可能发生故障前,进行实时控制生成,对系统运行进行干涉,以避免故障的发生,确保系统的行为符合预期。
\subsection{数据治理技术}
与传统关系型数据相比,大数据具有数据量大、实时分析要求高、存在多种异构数据格式、噪音高、关键数据元素持续演变等特点,数据质量是大数据分析正确和决策有效的根本保证,数据质量管理更加具有挑战性和迫切性。因而,需要研究数据治理技术,形成高效的数据管理工具,保证数据在全生命周期内正确、规范、安全、符合系统要求,有助于高质量的知识挖掘和利用。
\subsection{智能模型的质量与安全保障}
针对数据集偏差、歧视及样本迁移等问题,一方面需要提高机器学习算法设计的鲁棒性;另一方面更需要在系统层面上构建一套监测体系来时刻发现数据偏差、歧视和样本迁移问题。在构建这套检测体系时,需要考虑两个维度,一是需要保证检测的高效性和及时性;二是需要保证检测的有效性,要能很好的度量数据分布。分析智能学习算法及其开发框架设计,检测鲁棒性、安全性、稳定性等各方面问题,并评估其在智能应用中的风险。探索有效的智能软件测试和质量评估方法。当前对于智能软件的质量评估主要是机器学习算法精度的度量标准,评估并引导智能软件在人工标注的数据集上得到较好的结果,但是却无法评估智能软件在面对恶意攻击的稳定性。
\subsection{安全缺陷检测、定位、修复和预警}
关注软件漏洞和恶意软件等安全缺陷,认清漏洞作为不安全或遗漏的实现、恶意软件作为多余的实现这一本质,分析全球构建各类公开的安全缺陷库,研究安全缺陷产生的原因、结构和行为特征,需要研究典型安全缺陷的结构和行为特征的检测、定位方法,研究使用深度学习、并行化技术提升漏洞检测能力的方法,并探索基于安全缺陷的结构和行为特征未知安全缺陷预警方法。
分析漏洞成因,基于人工进行漏洞修复经验和知识,研究漏洞代码的自动化定位、漏洞代码上下文智能切片和基于上下文的代码逻辑修正等技术,结合智能化方法,构建智能化漏洞修复技术,保障漏洞修复的准确性和及时性。
基于恶意代码的静态结构和动态行为特征及其演化,通过在静态分析中引入人工智能技术,模拟安全专家“手工”检测和识别恶意代码的流程,构建恶意特征集作为训练集,训练智能化恶意代码检测模型,从而快速、准确地实现对恶意特征的识别和判断、对恶意行为的自动化验证。
\subsection{物联网软件的测试技术}
物联网软件存在的安全缺陷可能存在潜在的风险,其自身结构特性和环境依赖给软件测试带来新的问题。需要研究物联网软件建模、模型驱动测试与验证方法;研究针对物联网软件的静态分析和符号执行技术,支持典型安全缺陷的检测;研究面向物联网的智能模糊测试技术,用物联网软件结构、行为模型有效制导模糊测试,生成能够覆盖物联网软件输入域、结构和行为场景的测试输入,利用机器学习、深度学习等人工智能技术,基于对物联网软件结构与行为、物联网软件安全缺陷、模糊测试历史等知识和经验的学习,构建并训练映射模型,预测输入域与状态空间区域的映射关系,通过使用遗传算法、人为指定漏洞关联重点区域,优化模糊测试制导算法,避免无效、冗余的测试用例生成,在资源有限的情况下充分有效地遍历重要的状态空间尽早发现漏洞。
\subsection{过程改进与预防式软件质量保障}
在DevOps、持续集成Continuous Integration、持续测试Continuous Testing、持续交付Continuous Delivery、智能运维AIOps等软件开发、集成和动态运行维护框架下研究开发、集成、部署、运维流程中持续迭代的故障检测和质量评价等环节质量历史数据的分析方法确定质量问题、追溯问题来源并评估质量风险从管理角度在软件开发构建、运行维护过程中约束、规范人的行为从改进软件过程、预防不符合预期制品的构建角度保障软件的质量和安全。
\section{本章小节}
在“软件成为基础设施、软件定义一切”的背景下,本章基于软件的复杂加剧化、形态服务化、质量价值化、协作生态化的视角,从具有数据驱动、智能化、大规模、高复杂度、人机物融合等特征的角度分析了软件面临的质量和安全保障的重大挑战问题,在此基础上,从尚未充分探索解决的经典问题和新的重大挑战问题等角度展望软件质量和安全保障方面未来仍需研究的方向和内容。
%
%%\section{参考文献}
%\begin{thebibliography}{7}
%\bibitem{1}ISO9126http://www.sqa.net/iso9126.html.
%\bibitem{2}D. Sculley, et al. Hidden Technical Debt in Machine Learning Systems [C].Advances in neural information processing systems. 2015: 2503-2511.
%\bibitem{3}Edward Lee. Cyber-physical systems - are computing foundations adequate? Position paper for NSF workshop on Cyber-Physical Systems: Research Motivation, Techniques and Roadmap.
%\bibitem{4}Cousot P, Giacobazzi R, Ranzato F. Program analysis is harder than verification: A computability perspective. In: Proc. of the CAV.2018. 75-95.
%\bibitem{5}张健,张超,玄跻峰,熊英飞,王千祥,梁彬,李炼,窦文生,陈振邦,陈立前,蔡彦.程序分析研究进展.软件学报,2019, 30(1):80-109.
%\bibitem{6}Ammar M, Russello G, Crispo B. Internet of Things: A survey on the security of IoT frameworks[J]. Journal of Information Security and Applications, 2018, 38: 8-27.
%\bibitem{7}David Brumley, Pongsin Poosankam, Dawn Song, and Jiang Zheng. 2008. Automatic Patch-Based Exploit Generation is possible: Techniques and Implications. In Proceedings of the 29th IEEE Symposium on Security and Privacy (S\&P 2008). IEEE, 143--157.
%\end{thebibliography}
%