1. 前言
以前请第三方做软件测试,总会提到装备软件安全等级是C级或者B级,但是不明白这个等级是怎么确定的;还有就是委托第三方做软件测试的时候,需要指定测试的内容有哪些,有时候也就直接说等级了,至于具体测试哪些项目,也就由他们去了。今天我就把花半天的时间,把这两个问题理一理,不做军品的,了解一下软件安全性,那也是极好的。
作为支持《GJB 900A-2012 装备安全性工作通用要求》具体工作项目实施的软件安全性下层次支撑标准,目前主要有以下三个标准:
GJB/Z 142-2004军用软件安全性分析指南,指导软件安全性的分析工作;
GJB/Z102A-2012军用软件安全性设计指南,指导软件安全性的设计工作;
GJB8114-2013 C/C++语言编程安全子集,指导软件安全性的编程工作。
这里说的安全性,是指功能安全(Safety),而不是指防止数据被破坏或者非法访问(security)。个人认为和IEC61508里面的安全是一个概念。我会提供所有文章中提到的标准供大家学习使用,文章中提到的观点,也只是我个人的意见,仁者见仁智者见智,大家可以就事论事进行探讨。
2. 软件安全等级确定方法
软件安全等级的确定方法就是参照《GJB/Z 102A-2012 军用软件安全设计指南》附录A,主要步骤包括:
采用初步危险分析PHA的方法,确定系统潜在危险;
分析确定危险的严重性和可能性;
确定系统风险指标;
确定软件在系统中执行的控制类别;
最后确定软件安全性等级。
步骤1,2,3就是确定系统风险指标,相关定义与方法参照的是《GJB 900A-2012 装备安全性工作通用要求》,4.3.5.2 危险严重性,4.3.5.3 危险可能性和4.3.5.4 评价风险三个章节。
表1 危险严重性等级划分
等级
| 程度
| 定义
| I
| 灾难的
| 人员死亡、装备完全损毁或报废、严重的不可逆的环境破坏
| II
| 严重的
| 人员严重伤害(戒严重职业病)、装备严重损坏、较严重但可逆的环搅破坏
| III
| 轻度的
| 人员轻度伤害(含轻度职业病)、装备或环境轻度破坏
| IV
| 轻微的
| 轻于III类的人员伤窑、装备或环境破坏
|
表2 危险可能性等级划分
等级
| 说明
| 产品个体
| 装备总体
| A
| 经常
| 可能经常发生
| 连续发生
| B
| 很可能
| 可能发生若干次
| 经常发生
| C
| 偶然
| 可能偶尔发生
| 发生若干次
| D
| 很少
| 很少发生,但有可能
| 很少发生,但有理由预期可能发生
| E
| 极少
| 极少发生,可认为不会发生
| 极少发生,有理由认为机会不可能发生
|
表3 危险的风险指数参考示例
危险可能性等级
| 危险严重性等级
| I(灾难的)
| II(严重的)
| III(轻度的)
| IV(轻微的)
| A(经常)
| 1
| 3
| 7
| 13
| B(很可能)
| 2
| 5
| 9
| 16
| C(偶然)
| 4
| 6
| 11
| 18
| D(很少)
| 8
| 10
| 14
| 19
| E(极少)
| 12
| 15
| 17
| 20
|
GJB/Z 102-2012 标准中关于系统风险指标与GJB 900A-2012标准中的参考示例(表3)有细微区别,其定义如表A.3所示。应该说,GJB/Z 102-2012参照了GJB 900A-2012的定义,并做了适当的调整。比如把危险可能性限定在1到7之间,就简化缩小了系统风险指标的范围,便于描述。这种情形在CMSIS-RTOS里面也得到了体现,绝大部分的实时操作系统内核,比如UCOS、FreeRTOS都支持64种,甚至上百种任务优先等级,但是CMSIS-RTOS封装后,就只提供7种优先等级。
表A.3 系统风险指标
危险严重等级
| 危险可能性
| 经常
| 很可能
| 偶然
| 很少
| 极少
| 灾难的
| 1
| 1
| 2
| 3
| 4
| 严重的
| 1
| 2
| 3
| 4
| 5
| 轻度的
| 2
| 3
| 4
| 5
| 6
| 轻微的
| 3
| 4
| 5
| 6
| 7
| 注:风险指标中的1表示最高系统风险,7表示最低系统风险
|
步骤4,确定软件在系统中执行的控制类别。软件的控制类别与软件对系统的控制程度、控制的复杂性和实时性等有关。这个指标的量化程度其实也不是特别高,有比较大的主观性。
表A.4 软件的控制类别定义
软件控制类别
| 定义
| I
| 1
| 软件对危险进行部分或全部的自主控制
| 2
| 包含多个子系统,交互作用的并行处理器或多个接口的复杂系统
| 3
| 有一些或全部安全关键功能是时间关键的
| II
| 1
| 控制危险,但是其他安全系统可以进行部分缓解;
监测危险,需要采取安全措施时通知操作员。
| 2
| 包含少量子系统和/或一些接口的中等复杂系统,无并行处理。
| 3
| 有一些危险控制动作可能是时间关键的,具有临界时间要求,但是不会超过中等熟练程度的操作员所需要的时间或自动系统响应的时间。
| III
| 1
| 若软件发生故障,则有一个或若干个缓解系统防止危险发生;或提供冗余的安全关键信息资源。
| 2
| 稍微复杂的系统,仅包含有限数目的接口。
| 3
| 缓解系统能在任何临界时间内进行相应。
| IV
| 1
| 对危险无硬件控制,并不为操作员提供安全关键数据。
| 2
| 仅带2~3个子系统的简单系统,仅包含少量接口。
| 3
| 非时间关键,没有临界时间要求。
| 注:每个软件控制类别都有三种描述,它们之间是或的关系,即只要符合一种,就可以确定。
|
步骤5,确定软件的安全性等级。根据每个软件的控制类别和系统风险指标确定每个软件的安全等级。软件安全等级从高到低为A、B、C、D四个等级。参见表A.5。
表A.5 软件安全性等级矩阵
软件控制类别
| 系统风险指标
| 2
| 3
| 4
| 5
| I
| A
| B
| C
| D
| II
| B
| C
| D
| D
| III
| C
| D
| D
| D
| IV
| D
| D
| D
| D
|
表格A.5里面没有系统风险指标为1的情形,按照软件安全性等级矩阵的特点,是不是可以评估A,A,B,C(系统风险指标为1,软件控制类别为I,II,III和IV)。这是GJB/Z102-2012很不严谨的一个地方。
3. 军用软件测试依据与内容
我们装备主要属于海军,军用软件的测试依据遵循以下几个标准:
a)海军装备软件质量管理办法 2008
b)GJB2725A-2001 测试实验室与校准实验室通用要求
c)GJB/Z141-2004 军用软件测试指南
《海军装备软件质量管理办法(2008)》附录2海军装备软件测试细则针对不同的软件安全性等级,规定了相应的测试类型。
测试级别
| 测试类型
| 软件等级
| 配置项测试
| 文档审查
| A
| B
| C
| D
| 静态分析
| √
| √
| √
| √
| 功能测试
| √
| √
| ○
| ○
| 性能测试
| √
| √
| √
| √
| 接口测试
| √
| √
| √
| √
| 余量测试
| √
| √
| ○
| ○
| 逻辑测试
| √
| √
| √
| ○
| 内存使用缺陷测试
| √
| √
| ○
| ○
| 边界测试
| √
| √
| √
| √
| 人机界面测试
| √
| √
| √
| √
| 强度测试
| √
| √
| ○
| ×
| 安全性测试
| √
| ○
| ○
| ×
| 恢复性测试
| √
| ○
| ×
| ×
| 安装性测试
| √
| √
| √
| √
| 系统测试
| 文档审查
| √
| √
| √
| √
| 功能测试
| √
| √
| √
| √
| 性能测试
| √
| √
| √
| √
| 接口测试
| √
| √
| √
| √
| 余量测试
| √
| √
| ○
| ○
| 边界测试
| √
| √
| ○
| ○
| 人机界面测试
| √
| √
| √
| √
| 强度测试
| √
| ○
| ×
| ×
| 安全性测试
| √
| ○
| ×
| ×
| 恢复性测试
| √
| ○
| ×
| ×
| 安装性测试
| √
| √
| √
| √
| √ 必须进行的测试
○建议进行的测试
×不要求进行的测试
|
4. 小结
这个软件安全性等级A、B、C、D和IEC 61508-2010里面定义的软件安全完整性等级(Safety Integrity Level)SIL1~SIL4之间有没有啥对应关系,有待进一步研读标准。
总而言之,军用软件安全性等级取决于软件控制类别和系统风险指标。
而系统风险指标又取决于危险严重性等级和危险可能性等级,这个指标和DFMEA里面的风险矩阵特别相似,危险严重性等级对应着严重度(Severity),危险可能性等级对应着发生率(Occurrence),不过FMEA参考手册里面,把严重度和发生率分成了10个级别,下图是某个DFMEA的风险矩阵图,横坐标代表严重度,纵坐标代表发生率,本质上和表3、表A.3是一致的。
图1 DFMEA风险矩阵
|