构建一个安全的软件系统时,可能遇到的风险及解决方案(未完)

来源:互联网 发布:awm和m200性能数据 编辑:程序博客网 时间:2024/05/20 03:37

随着汽车工业的发展,汽车早以不是那个由一堆零件组成的大机器,而是由机械和电子器件构成的整体系统。并且,这个系统还在随着用户的需求与自身发展的需要随时进化中。由于汽车是一个需要高度安全的系统,并且,这个系统和外界还有着直接或间接的联系(如,各种各样的外设与网络连接),这都造成了新的安全挑战。因此,问题在于如何设计和验证一个由那些不大可能经过安全认证的组件构成的系统是可靠的,及经过严格的工程化设计的。

车载系统风险的分级主要从以下几个方面来考虑:
1. 问题发生的可能性;
2. 问题发生后可能造成的危害;
3. 问题发生后,驾驶者能够控制车辆的可能性。

对系统安全的破坏除了由组件自身造成之外,也可以发生的组件之间,尤其在这些组件共享单核CPU及内存子系统时。
下表整理了一些常见的问题源:

问题 描述 资源占用 非法的使用文件描述符,Mutex,Flash空间,或其它的系统资源,这样一个进程可以耗尽其它进程的可用资源 时间占用 一个进程进行CPU密集计算,或由于错误进入了一个死循环,导致其它进程无法使用CPU 非法内存访问 一个进程读写一段非法的内存空间 数据损坏 进程由于共享或传输了一段错误的数据,导致另一个进程出现错误 无用消息 高速传递无用消息或错误数据,如DoS攻击 死锁 进程相互等待对方完成,导致系统无法继续运行

如何建立一个可靠的系统?
所有的技术都有局限与缺点。幸运的是,设计仅仅是防线中的一条。规格化设计与静态分析也可以用于项目开发的合适阶段。就如同ISO 26262中指出的那样,采用相互隔离的组件技术可以使系统达到特定的安全标准。

故障,错误和失败
自相矛盾的是,安全系统的基本设计原则是认识与接受其系统存在故障的可能性。现代软件系统由于其复杂性,使得证明其无故障是不可能的;也就是说,测试到所有的路径与状态。汽车系统也是如此。
而采用隔离技术设计的系统,可以避免故障的传递。
因此,一个可靠系统不仅仅要使用符合安全规格的组件,而且还要隔离有安全要求的组件,避免故障传递到其它组件,引起整个系统的失败。当前使用的技术有虚拟化与微内核系统。

虚拟化
开发者可以选择俩种虚拟化技术:类型1,不同的客户OS运行于虚拟层之上;类型2,客户OS运行在另一个OS之中。
类型1的虚拟化中,俩个不同的OS可以运行在虚拟层之上,每一个都有一个独立的环境。一个OS可以运行安全相关的组件,而另一个可以做其它任何事情,如多媒体或3D导航之类的。每个OS运行时,都含像是只有当前唯一一个OS正在运行中。

评估虚拟化时需要考虑的一些事情

可见性
性能
复杂度
粒度
长期成本

隔离与可靠性
OS结构

对干扰的防护
阻止资源占用
阻止时间占用
阻止非法内存访问
阻止数据破坏
阻止无用消息
阻止死锁

总结

0 0