大数跨境
0
0

【标准解读】 GJB/Z 102A《军用软件安全性设计指南》解读

【标准解读】 GJB/Z 102A《军用软件安全性设计指南》解读 关键科技
2016-01-31
0
导读:解读 GJB/Z 102A《军用软件安全性设计指南》
1、修订背景

软件成为越来越多的系统中的一个至关重要的部分,它控制硬件并提供任务关键的数据,软件应是安全的。故而,自上世纪80年代以来,以美国国防部为代表的软件采办方率先启动了将软件安全性集成到系统安全性工作(SSP)中,提出了软件安全性任务(300系列任务)扩展集,并纳入美军标MIL-STD-882B《系统安全性工作要求》;1997年,在航天工程等推动下我国制定并发布了GJB/Z 102-1997《军用软件可靠性和安全性设计准则》。

自GJB/Z 102-1997发布以来,软件可靠性和安全性工作越来越受到重视,例如,航天载人工程、航空航天多个型号等均以GJB/Z 102-1997为基础,制定并实施了适用于本工程项目的软件可靠性和安全性设计指南,为保证工程项目和型号的可靠性和安全性发挥了重要的作用。

GJB/Z 102-1997广泛应用于武器装备软件的设计过程中,并取得了良好的效果。但由于GJB/Z 102-1997的制定时间较早,限于当时技术水平及军用软件开发单位的能力,有些要求(如有关软件开发方面的要求)变得不能适应当前的形势,有些原来认为不可行的方法和技术(如SFMEA和SFTA等)已经在武器装备软件开发过程中得到了应用;另外,在军用软件开发过程中,人们也积累了许多良好的实践,并从失败和挫折中总结了许多宝贵的经验和教训;十多年来,国外在软件可靠性和安全性设计研究与实践方面陆续取得了一些新的成果,例如,美国航空航天局(NASA)在2004年发布了NASA-STD-8719.13B《软件安全性标准》、美国军方发布了《软件系统安全性手册》等等。在这种情况下,为了使GJB/Z 102-1997更加符合我国军用软件开发的实际,迫切需要对GJB/Z 102-1997进行修订,删除或修改与当前实际情况不符的有关要求和准则,增加国内外的最佳实践和经验教训,以便更好地指导军用软件的开发,提高武器装备的可靠性和安全性。

2、修订思路和原则

GJB/Z 102-1997修订主要是在总结GJB/Z102-1997实施经验基础上,结合国内外软件可靠性和安全性的研究和实践现状,补充国内外相关研究成果和优秀实践,如,NASA-STD-8719.13B《软件安全性标准》、NASA-STD-8719.13-2004《NASA 软件安全性指南》、美国军方发布的《软件系统安全性手册》、 HSE OP-871《在安全性有关应用中的可编程电子系统:通用技术指南》、DO 178B、以及我国航天员安全性设计工作指南等中的一些内容,提出适用于我国军用软件的安全性设计要求和准则,补充、细化和修订原有设计要求和准则(如“4 一般要求”中有关软件开发规范化的要求等)。修订后的标准将主要涉及软件需求分析、软件设计和软件实现三个方面的安全性设计要求、方法和准则,力求与GJB 900A-2012《装备安全性工作通用要求》保持协调。

GJB/Z 102修订时指导原则如下:

a) 先进性:尽量采用当前先进有效的软件可靠性和安全性设计实践,尤其要考虑NASA、欧空局、美军有关软件可靠性和安全性方面的标准、指南和手册。

b) 有效性:规定的要求和准则应有助于提高或者保证软件的安全性。

c) 可操作性:规定的要求经国内或国外工程实践证实具有可操性。

d) 可行性:基于我国军用软件研制单位当前技术水平,规定的要求和准则应能够做到,或者通过努力能够在近几年内做到。

e) 协调性:GJB/Z 102修订主要是根据国内外软件可靠性和安全性的研究和实践现状,结合军用软件的特点进行的,是GJB 900A-2012支撑标准,标准框架和技术内容保持与GJB 900A-2012协调一致。

3 主要内容介绍
GJB/Z 102A的基本内容分为5章和6个资料性附录,见表1。

表1 GJB/Z 102A的结构



与GJB/Z102-1997相比,本次修订主要有如下变化:

  1. 名称改为《军用软件安全性设计指南》;

  2. 增加了软件安全性工作通用要求、外购(协)或重用软件的要求、工具的验证要求;

  3. 增加了中断设计、通讯设计、自检查设计、异常保护设计、指针使用等方面内容;

  4. 对接口设计、简化设计、余量设计、防错设计、多余物处理、编码原则等方面内容进行了修改和完善;

  5. 删除了GJB/Z 102的附录A和附录C,增加了附录B~附录F,GJB/Z102的附录B纳入了GJB/Z102A的附录A。

3.1
范围
GJB/Z102A规定了军用软件安全性设计的实施指南,并明确指出“本指导性技术文件适用于军用软件需求分析、设计和实现时的软件安全性设计,软件可靠性设计也可参考本指导性技术文件。” 软件安全性工作贯穿于软件生存周期全过程,这意味着GJB/Z102A主要适用于软件需求分析、软件设计和软件实现等阶段,适用于软件安全性设计。
在修订GJB/Z102时,课题组经反复讨论,认为GJB/Z102A应定位GJB 900A-2012《装备安全性工作通用要求》下层次标准,重点关注软件安全性要求的实现。根据GJB451-2005《可靠性维修性保障性术语》,安全性是“产品所具有的不导致人员伤亡、系统毁坏、重大财产损失或不危及人员健康和环境的能力”;可靠性是“产品在规定的条件下和规定的时间内,完成规定功能的能力。”软件可靠性主要关注发生故障的概率;而软件安全性不仅关注发生故障的概率,关注软件的可靠性,还关注故障发生造成的后果。可靠性和安全性密切相关,但分属两门不同的工程学科,工作原则和方法也有一定差异,且在国家军用标准体系中,安全性和可靠性各有一套比较完善的标准体系,故在标准修订过程中,明确GJB/Z102A定位为GJB900A-2012《装备安全性工作通用要求》的下层次标准,以便对GJB900A中关于软件安全性要求的实现提供具体指导。

3.2
主要内容


3.2.1
一般要求
1
软件安全性工作通用要求
软件安全性工作是系统安全性工作和软件开发工作的一部分,不能独立于系统研制和软件开发而单独进行。一个软件规格说明的错误、设计缺陷或缺乏明确的初始安全性要求等等都有可能构成或引起系统失效或人员错误判定,原来可以预防的人员死伤、系统损失或环境破坏等情况就可能产生。为了使软件的安全性达到可接受的水平,软件安全性工作必须在系统需求定义和系统方案设计过程的早期就应十分重视。因此在GJB/Z 102A中,对软件安全性工作提出了基本要求:

a)软件安全性工作是其所属系统安全性工作的重要组成部分,由系统提出要求,依据系统要求进行检查和验证,具体要求见GJB 900。

b)软件安全性工作贯穿于软件生存周期全过程,应与软件工程过程活动紧密结合地进行。安全关键软件的开发应按照GJB 2786A-2009的要求进行,同时进行软件安全性策划,开展软件安全性工程活动。软件开发人员应参与软件安全性需求的拟定,并负责实施软件项目策划规定的有关活动,确保所开发的软件产品满足系统的安全性需求。

c)确定计算机软件配置项(CSCI)的安全性等级。在系统分析和设计阶段,系统人员根据系统危险分析结果,确定软件的安全性等级,软件开发人员应参与并提出建议。确定软件安全性等级的方法参见附录A。软件开发人员应依据软件安全性等级确定软件安全性工作的具体范围。

d)对已纳入配置管理的受控软件的更改应进行影响域分析,并关注软件更改对系统安全的影响,特别关注软件的时序关系和存储容量的变更影响。影响域分析包括对现有功能、性能,CSCI外部及内部的影响。其中,CSCI外部影响主要从硬件接口、软件接口及协议、相关软件文档等方面进行分析;CSCI内部影响主要从软件结构及调用关系、输入输出关系、数据结构、性能、内部中断、相关软件文档等方面进行分析。影响域分析结果应经过审核和批准,必要时进行评审。
2
外购(协)或重用软件要求
软件安全性是外购(协)软件、重用软件和新研软件都应关注的事项。如果可以购买到满足项目需要的商业软件产品,或者可以从类似项目中得到可以在新研软件中重用的软件等,通常可以节省经费,并有助于缓解紧张的进度。但是,如果将这些软件应用于安全性关键的功能,或者将这些软件与新开发的安全性关键代码进行集成时,选择或评价这些软件就显得非常重要。
GJB/Z102A规定了安全关键软件采用外购(协)软件或重用软件时应遵循的要求:

a)决定重用某软件来完成安全关键功能之前,应确定其适用性,并充分分析其安全性影响。在软件开发过程中,应对重用软件产品进行安全性分析和评价工作,并对其进行验证,确保其不存在不可接受的安全性风险。

b)外购(协)软件应按照GJB 5000A-2008中供方协议管理过程域的要求进行管理,并进行安全性分析和评价。

3
工具的验证要求

在软件生存周期过程中,通常要使用很多工具,诸如编辑程序、编译程序、调试程序和集成开发环境之类的工具,以及项目管理和配置管理等方面的工具。 为避免工具对安全关键软件的影响,GJB/Z 102A对安全关键软件开发过程中使用的影响可执行代码的软件工具提出了基本要求:

a)验证或证明软件工具的安全性与待开发的安全关键软件的安全性等级相适应;

b)依据软件工具使用说明,验证开发过程中所使用软件工具功能和性能的正确性、一致性和完整性。

3.2.2 详细要求


根据GJB 900A,软件安全性工作通常包括:
a) 外购与重用软件的分析与测试;
b) 软件安全性需求与分析;
c) 软件设计安全性分析;
d) 软件代码安全性分析;
e) 软件安全性测试分析;
f) 运行阶段的软件安全性工作。
GJB/Z 102A在详细要求部分重点针对GJB 900A软件安全性需求与分析、软件设计安全性分析、软件代码安全性分析部分的工作要点的实现指供了指南。
1
软件需求分析时的安全性设计
软件安全性需求是为了保护该软件所属系统的安全而对软件提出的需求,GJB/Z 102A将软件安全性需求的来源分为如下两类:
a) 专用的安全性需求:是所属系统特定的软件安全性需求,主要由系统向下传递的,或者是系统初步危险分析结果中危险原因与软件相关的安全性需求,其中也可能有少数是软件开发过程中新识别再由系统采纳下达的;

b) 通用的安全性需求:是某一应用领域或多个类似的项目常常有一些共同的安全需求。

系统特定的软件安全性需求的开发与分析应依据系统安全性需求、环境需求、标准、项目专用规范、工具或者设施需求、接口需求、系统危险报告和系统危险分析报告,查找安全关键功能,确定安全性需求,并应根据危险发生的可能性和严重性等对需求的安全关键性进行排序。在软件需求规格说明中,应明确标识出软件安全关键功能。对于比较复杂的软件需要采用专门分析方法找出安全关键功能,常用的有基于软件功能的故障树分析(FTA)方法和软件失效模式、影响及危害分析(FMECA)方法。

在软件需求分析时,针对安全关键功能,GJB/Z 102A提出了如下方面安全保证措施要求,其中安全保证措施包括采用冗余、降级处理、故障处理与恢复、降级运行等。
a) 安全运行模式、运行状态与安全条件;
b) 容错和容失效;
c) 危险命令处理;
d) 接口;
e) 数据;
f) 定时、吞吐量和规模等。
2
软件设计时的安全性设计
安全关键系统的软件设计的主要目标之一是使系统安全风险最小。在可能的情况下,通过设计消除已标识的危险或降低相关的风险。GJB/Z 102A给出的降低风险的途径包括:降低软件和接口的复杂性;为用户安全而不是为用户友好而设计(但要关注操作者使用模式);针对开发和集成过程期间可测试性的设计;给予高风险方面(危险控制等)更多的设计“资源”(时间等)。
GJB/Z 102A给出的安全性设计的基本考虑包括:
a) 功能分配;
b) 程序接口;
c) 故障检测、恢复和安全保护;
d) 继承的或重用的软件和现货软件(COTS);
e) 性能和余量;
f) 可追踪性;

g) 可测试性。

同时还给出了如下方面的设计考虑:
a) 配合硬件或系统设计的考虑事项;
b) 容错和容失效的设计;
c) 通讯设计;
d) 数据安全性设计;
e) 中断设计;
f) 模块设计;
g) 定时、吞吐量和规模的余量设计;
h) 防错设计;
i) 自检查设计;
j) 异常保护设计。
3
软件实现时的安全性设计
在软件实现阶段,安全性需求已经从设计向下传递到代码级。GJB/Z 102A强调,软件编制时应遵循相应的编制规范,编制完成后应进行代码验证工作。在软件编码时,首先应遵循编程标准和编程语言的如下通用要求:
a) 采用标准化的程序设计语言进行编程;
b) 在同一系统中,应尽量减少编程语言的种类;
c) 应选用经过优选的编译程序或汇编程序,应使用正版软件;
d) 禁止使用未初始化的变量;
e) 注意内存的管理与使用,避免造成内存泄漏;

f) 禁止程序正常执行时直接从过程中跳出等等。

软件编码时,还应遵守软件复杂性控制、注释要求与方法、指针使用、多余物的处理等方面的原则和要求。
代码验证目的在于验证软件正确地实现了经过验证的设计且不违反安全性需求。GJB/Z 102A给出采用如下方法进行代码验证时的要求:
a) 代码逻辑分析;
b) 代码数据分析;
c) 代码接口分析;
d) 未使用代码分析;
e) 中断使用分析;
f) 定时、吞吐量和规模分析;
g) 代码审查等方法。

4 软件安全性等级的确定方法

在决定对一个软件是否开展软件安全性工作之前,首先应确定该软件是否存在某种安全性影响,是不是安全性关键软件。根据NASA-STD-8719.13《NASA 软件安全性指南》,如果软件至少满足下述准则之一,则该软件应将被认为是安全性关键的:
a) 驻留在某个(由危险分析确定的)安全性关键系统之中,且至少满足下述条件之一:

1)导致或者造成某个危险;

2)为危险提供控制或者缓解;

3)控制安全性关键功能;

4)处理安全性关键的命令或者数据;

5)检测并报告系统是否进入某个特定的危险状态,或者在系统进入某个特定的危险状态时采取纠正措施;

6)在出现危险时缓解其损害;

7)与其它安全性关键软件一起驻留在同一个系统(处理器)之中。

b) 处理数据或者分析趋势,以直接导出安全性决策。
c) 为安全性关键系统(其中包括硬件或者软件子系统)提供完整或者部分的验证或者确认。
安全性关键软件的确定,通常是在系统被确定为安全性关键系统时,通过对系统中使用的软件进行分析,弄清软件在整个系统中所起到的作用,以此确定软件是否是安全关键的。GJB/Z 102A参照NASA-STD-8719.13给出了软件安全性等级的确定方法,主要包括如下步骤:

1)采用初步危险分析的方法,确定系统潜在危险;

2)分析确定危险的严重性和可能性;

3)确定系统风险指标;

4)确定软件在系统中执行的控制类别;

5)最后确定软件安全性等级。

GJB/Z 102A给出的软件安全性等级的确定方法与GJB 900A给出的方法不尽相同。由于软件的固有可靠性不能准确地进行测量或者预测,并且大多数软件不能穷举地进行测试,故GJB/Z 102A给出的软件安全性等级的确定方法,除考虑GJB900A所考虑的危险的严重性和可能性两个因素外,还充分考虑了软件对系统的控制程度、控制的复杂性和实时性等特性。
随着我国武器装备数字化、智能化水平不断提高,软件在武器装备中的作用越来越关键。由于软件能以人所不能比的速度可靠地完成关键控制任务,几乎在每个重要系统中都由计算机系统来进行控制,软件在运行和控制危险以及在安全关键功能中持续地起着越来越重要的作用,软件安全性也越来越引起各方面的重视。GJB/Z 102A吸取了国内外软件安全性方面最佳实践和成果,可以更好地指导我国武器装备软件的开发,有力促进武器装备安全性和可靠性的提高。




【声明】内容源于网络
0
0
关键科技
提供GJB软件工程过程管理、软件测试、测试环境搭建、信息安全等方面的产品、技术服务、咨询和培训,欢迎各位专家批评指导。
内容 70
粉丝 0
关键科技 提供GJB软件工程过程管理、软件测试、测试环境搭建、信息安全等方面的产品、技术服务、咨询和培训,欢迎各位专家批评指导。
总阅读0
粉丝0
内容70