在解释免于干扰之前,我们先来看看软件安全架构和软件架构的两个支柱:静态(Static)架构和动态(Dynamic)架构。动态架构将有助于分析免于干扰的时间方面。之后,软件架构设计将会开发到具体的软件单元的层次。
软件架构设计应该描述:
a). 软件架构要素的静态设计方面;
- 软件结构的分级层次;
- 数据类型和它们的特征参数;
- 软件组件的外部接口;
- 嵌入式软件的外部接口;
- 全局变量;
- 限制条件(包含架构的范围和外部的依赖关系);
b). 软件架构要素的动态设计方面;
- 功能性和行为;
- 逻辑时序和数据处理
- 控制流和并发进程;
- 通过接口和全局变量的数据流;
- 时间的限制;
免于干扰 (FFI - Freedom From Interface)
如果在要素A中有一个故障1,并且这个故障被传递到了要素B;我们就称之为级联失效(Cascading Failure -CF)。假如要素A是QM,并且没有按照ISO 26262标准开发,因此,可能会遇到很多系统性故障。假设要素B是ASIL-x,x可能是 A, B, C 或者 D。
要素A和要素B之间有三种方式的相互干扰:
(本篇我们只谈空间相互干扰(Spatial Interference))
1- 空间干扰 Spatial Interference;
2- 时间干扰 Temporal Interference;
3- 通讯干扰 Communication Interference;
空间(spatial)意思是空间(space)或者存储器干扰。比如:故障1是传递到要素B的机油温度,并导致了故障2,因为它损坏了电机功能的转速。发生此问题是因为要素A输出值的根本原因可能未在“输入和输出数据的范围检查”。另外一个例子
关于内存,对于在每个软件分区中执行的软件要素,可以考虑下面列出的故障的影响:
- 内容颠覆(corruption of content); 比如被重写 overwritten
- 不一致的数据(inconsistent data)(比如,由于在数据获取期间更新);数据的产生者和使用者之间没有同步;
- 堆栈上溢或者下溢(stack overflow or underflow);当访问堆栈末尾的内存时,将报告溢出,当访问堆栈开始之前的内存时,报告下溢;(上溢是当一个超长的数据进入到缓冲区时,超出部分被写入上级缓冲区,上级缓冲区存放的可能是数据、上一条指令的指针,或者是其他程序的输出内容,这些内容都被覆盖或者破坏掉。下溢是当一个超长的数据进入到缓冲区时,超出部分被写入下级缓冲区,下级缓冲区存放的是下一条指令的指针,或者是其他程序的输出内容。)
在上面的例子中,我们不知道堆栈溢出的后果,这是无法预测的。
- 对分配给另一个软件要素的内存的读取或者写入访问(read or write access to memory allocated to another software element)
我们必须确保QM的部分不能对ASIL-x的部分有干扰,可以用如下的安全机制来实现:
1- 内存保护 Memory Protection;
2- 奇偶校验 Parity Bits;
3- 故障纠错码 Error-Correction-Code -ECC;
4- 循环冗余校验 Cyclic-Redundancy-Check -CRC;
5- 冗余存储 Redundant Storage;存储变量及其补码
6- 限制内存访问;restricted access to memory
7- 可以使用内存访问软件的静态分析和静态分配;
有专门的商业静态分析工具可以演示FFI。
已完成
数据加载中