其它综合

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

我爱IT资讯库   2021/02/21

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

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

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

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

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

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

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

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

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

隔离与可靠性
OS结构

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

总结




热门内容

VPS上安装ShadowSocks

VPS上安装ShadowSocks

shadowsocks 是一个轻量级隧道代理,用来穿过防火墙。 我的VPS机器安装的是CentOS系统、... ...

ResultSet 调用getString 抛出NullPointException问题的解决

在Java连接数据库时,有时候在ResultSet 调用getString (或其他类似的方法),有时候会抛出Nu... ...

浅谈OSIV与泛型DAO模式

open session in view  简称 OSIV 模式 在Hibernate中能更好的应... ...

数据库设计原理:数据建模的三个阶段

如果你在Google或者百度上搜索数据建模,相信可以搜索出很多关于数据建模的文章,但是你会发现其中绝大部分是理论、... ...

ajaxfileupload.js 文件上传

一,前台代码。 <input id="fileToUpload" type="... ...

ios的标志常量

1 dec 2 fixed 3 hex 4 internal 5 left 6 oct 7 right 8 scien ...

discuz删除垃圾帖子

有时候如果你的论坛被垃圾帖子占满后,会发现使用后台的删除功能还是有些慢, 我们需要先备份自己需要的帖子,然后进行下面的 ...

Hibernate的主配置文件hibernate.cfg.xml

1:hibernate的主配置文件的名字必须是hibernate.cfg.xml:   1.1:主配置文件主要分为三部分 ...

关于html base元素的使用

base元素可以用于设置页面嵌入的css文件或js文件链接的基地址。 例子: <h... ...

类型转换与强制转换

自动转换: 举一个例子:把一个小的东西放到一个大的盒子里,是件非常容易的事,不用做任何改变,在这里理解成自动转换。... ...

利用wxwidgets操纵word

最近在学习怎么用wxwidgets来操纵word,寻找之中发现MedeoSoftware,里面有很多wxwidgets的... ...

Python中的简单类型

整数 & 浮点数 整数有两种,分别是 int 和 long。其中 int 最大值是 2147483647... ...

JS-时间函数

/** * 日期范围工具类 */ var daterangeutil = (function () { /** ...
“大数据”信息平台 覆盖社区5000老年人

“大数据”信息平台 覆盖社区5000老年人

突然头疼脑热,身边没人照顾;电灯坏了、水管漏了,该找谁来帮忙修?菊园新区智慧养老项目搭建了一个为老综合服务平台... ...

在PHP中全局变量的使用详解

即使开发一个新的大型PHP程序,你也不可避免的要使用到全局数据,因为有些数据是需要用到你的代码的不同部分的。一些常见的全... ...

名称空间也可以自定义

名字空间的定义 名字空间除了系统定义的名字空间之外,还可以自己定义,定义名字空间用关键字namespace,使用名字空 ...
从量价变化中洞察主力意图

从量价变化中洞察主力意图

成份B指(399003.SZ) <script language="JavaScript" typ... ...
android 继承view类刷新页面【安卓进化十一】

android 继承view类刷新页面【安卓进化十一】

       最近做项目中发现,继承了view类的子类... ...

C# XmlSerializer 对象的Xml序列化和反序列化

    .Net程序执行时,对象都驻留在内存中;内存中的对象如果需要传递给其他系统使用;或者在... ...

hdu-1286找新朋友(欧拉函数,水题)

题目链接: 找新朋友 time limit: 2000/1000 ms (java/others)memory limi ...

java程序 处理 andrid本地帮助文档打开慢的方式

    下载本地的android自带sdk帮助文档由于有被墙的google地址,可以通... ...

RTTI学习笔记

翻看C++的书,对RTTI的讲解都很困惑,"你知道你的对象是哪个类吗","RTTI常用于调试和数据库程序"对这些讲... ...

使用axis2传输附件

服务端Service文件: import java.io.FileOutputStream; import jav... ...

sql server 的行转列

sql server中行转列在sql2005之后,sqlserver引入了pivot运算符,也即是可以旋转行为列,... ...
【Node.js基础篇】(九)使用readline模块实现Node.js的输入输出

【Node.js基础篇】(九)使用readline模块实现Node.js的输入输出

学C++的时候,有cout和cin,Java也有println和Scanner控件,Node.js也有如同... ...
iOS 应用支持4寸屏

iOS 应用支持4寸屏

iPhone 5出了,一大批应用要兼容新的分辨率,下载了Xcode 4.5,在官方那里找不到有关兼容新分辨... ...

循环执行oracle到mysql的迁移步骤及各种注意事项

改章节笔者在北京逛街的时候突然想到的...今天就有想写几篇关于循环执行的笔记,所以回家到之后就奋笔疾书的写出来发表了 ... ...
2015收获的季节

2015收获的季节

—————————————————————前言————————————————————— ———————... ...

JSP中的pageEncoding和contentType属性

关于JSP页面中的pageEncoding和contentType两种属性的区别: pageEncoding是js... ...

对XX证券报关于物联网操作系统的几个问题的答复

XX证券报提问了几个关于物联网和物联网操作系统的问题,个人表达了一些粗陋的观点,在这里发表出来,与行业朋友交流和探... ...