基于形式化方法的软件安全属性验证理论研究
摘要
关键词
软件安全性;形式化方法;需求验证;建模;状态机
正文
一、引言
所谓软件安全性,是指“软件不发生事故的能力”,即系统不会因软件原因而导致灾难性事故发生。随着软件系统的复杂程度和规模越来越庞大,软件出现错误的风险及其造成的危害也日益突出。由于软件错误而导致灾难性后果的报道屡见不鲜。例如,1996年,欧空局阿丽亚娜(Ariane)501火箭升空37秒后爆炸,其原因是主发动机打火顺序开始37秒后制导和姿态信息完全遗失,而信息遗失是由于惯性制导软件出现规约和设计错误。又如NASA的“MarsPolarLander”计划,探测器发射后由于软件错误而导致着陆时撞毁,造成整个计划的失败。因此,软件安全性已成为国防或航天系统最为关键因素之一。
软件在需求设计或实现过程中一般采用自然语言或伪代码作为描述语言,由于自然语言存在着二义性和不一致性等缺陷,而伪代码又过分关注实现细节,使得软件系统的描述和构造过程往往潜藏着大量的错误,而这些错误无法仅依靠测试来解决。
二、形式化方法概述
2.1 形式化方法概念
形式化方法是建立在严格数学基础上的验证方法,其目的用于规范、设计和验证计算机系统。形式化方法作为一种以数理逻辑为基础的方法,已广泛应用于软件工程中,成为提高软件系统可靠性和安全性的重要手段。
2.2 形式化方法的分类
形式化方法可以分为多种类型,根据其侧重点和应用领域的不同,主要可以分为以下几类:
模型检测(Model Checking):模型检测是一种基于形式化方法的自动化验证技术,通过遍历系统的所有可能状态,检查系统是否满足给定的安全属性。模型检测具有无二义性、高效、可靠等特点,在电路设计和通信协议设计中得到了广泛应用,但其在软件系统安全性领域是近些年才被引入的,特别是在软件代码验证领域的研究还不成熟。
定理证明(Theorem Proving):定理证明是通过逻辑推理,从已知的前提和公理出发,证明系统是否满足某个安全属性。定理证明方法需要人工参与,通常适用于小规模、高安全要求的软件系统。
静态分析(Static Analysis):静态分析是在不执行程序的情况下,通过分析程序的源代码或中间表示,检查程序是否满足某些安全属性。静态分析可以自动发现潜在的缺陷,如内存泄漏、缓冲区溢出等。
运行时验证(Runtime Verification):运行时验证是在程序执行过程中,通过监控程序的运行状态,检查程序是否满足某些安全属性。运行时验证可以动态发现程序运行时的错误,并采取相应的措施。
2.3 形式化方法的应用领域
形式化方法在安全关键软件系统中得到了广泛的应用,例如航空航天、核电站、医疗设备等领域。此外,形式化方法还适用于分布式软件系统、并行软件系统、实时软件系统等领域。形式化方法的应用可以显著提高软件系统的可靠性和安全性,降低系统故障和安全风险。
三、形式化方法在软件安全验证中的应用
3.1 形式化方法在需求分析中的应用
在软件开发的早期阶段,需求分析是至关重要的。形式化方法可以用于对需求进行形式化描述和验证,确保需求的一致性和完整性。通过形式化方法,可以建立需求模型,并使用形式化证明技术验证需求是否满足特定的安全属性。这有助于避免需求中的歧义和矛盾,提高软件系统的质量和可靠性。
3.2 形式化方法在设计阶段的应用
在设计阶段,形式化方法可以用于对软件系统的结构、行为和性质进行形式化描述。通过形式化建模,可以建立系统的状态机模型、数据流模型等,并使用形式化验证技术检查系统是否满足特定的安全属性。此外,形式化方法还可以用于对设计进行优化和改进,提高系统的性能和可靠性。
3.3 形式化方法在代码实现和测试中的应用
在代码实现阶段,形式化方法可以用于对源代码进行形式化验证,检查代码是否满足特定的安全属性。这可以通过静态分析、模型检测等技术实现。在测试阶段,形式化方法可以用于生成测试用例,并验证系统是否满足预期的行为。通过形式化验证,可以发现潜在的缺陷和错误,提高软件系统的质量和可靠性。
四、基于形式化方法的软件安全属性验证方法
4.1 形式化方法的理论基础
形式化方法以数学和逻辑作为建模工具,对软件系统的结构、行为和性质进行形式化描述。形式化方法的基础包括数理逻辑、集合论、图论等数学理论。这些理论为形式化方法提供了坚实的数学基础,使其能够准确描述和验证软件系统的行为。
4.2 形式化方法的验证流程
形式化方法的验证流程通常包括以下几个步骤:
建模:使用形式化语言对软件系统进行建模,建立系统的状态机模型、数据流模型等。
形式化描述:使用形式化语言对系统的安全属性进行描述,如使用逻辑公式表示系统的安全属性。
验证:使用形式化验证技术检查系统是否满足给定的安全属性。这可以通过模型检测、定理证明等技术实现。
结果分析:根据验证结果,分析系统是否存在潜在的缺陷和错误,并采取相应的措施进行修复和改进。
五、基于Petri网的软件安全属性验证方法
5.1 Petri网概述
Petri网是一种扩展性强、运用广泛的形式化工具,可用于描述和分析并发系统、离散事件系统等。Petri网通过库所(Place)、变迁(Transition)和标记(Marking)等元素,对系统的状态和行为进行建模。Petri网具有直观、易于理解的特点,适用于描述和分析复杂系统的行为。
5.2 基于Petri网的软件安全属性验证方法
基于Petri网的软件安全属性验证方法,首先需要对软件系统进行Petri网建模。通过对系统的状态和行为进行Petri网描述,可以建立系统的Petri网模型。然后,使用形式化语言对系统的安全属性进行描述,并使用Petri网的验证技术检查系统是否满足给定的安全属性。
5.3 验证步骤
Petri网建模:根据软件系统的需求和设计,建立系统的Petri网模型。
安全属性描述:使用形式化语言对系统的安全属性进行描述,如使用逻辑公式表示系统的安全属性。
Petri网验证:使用Petri网的验证技术检查系统是否满足给定的安全属性。这可以通过可达性分析、死锁检测等技术实现。
结果分析:根据验证结果,分析系统是否存在潜在的缺陷和错误,并采取相应的措施进行修复和改进。
5.4 实验验证
为了验证基于Petri网的软件安全属性验证方法的有效性,我们进行了实验验证。实验选取了一个安全苛求系统的软件构件作为研究对象,使用Petri网对其进行建模,并使用形式化语言对系统的安全属性进行描述。然后,使用Petri网的验证技术检查系统是否满足给定的安全属性。实验结果表明,该方法能够有效地检测出软件系统中的潜在缺陷和错误,提高软件系统的安全性和可靠性。
参考文献
[1]沈啸. 软件质量与安全性评估方法的研究与方案实现[D]. 西安电子科技大学, 2023. DOI:10.27389/d.cnki.gxadu.2023.004066.
[2]袁心怡. 面向开源代码安全的形式化分析方法设计与实现[D]. 西安电子科技大学, 2021. DOI:10.27389/d.cnki.gxadu.2021.003680.
[3]顾扬. 机载软件安全性形式化验证方法研究[D]. 南京航空航天大学, 2017.
[4]吴晓菲. 基于等级和形式化建模的软件安全需求自动获取方法与工具[D]. 天津大学, 2014.
[5]徐丙凤. 构件化嵌入式软件安全性分析方法研究[D]. 南京航空航天大学, 2014.
...