《系统级汽车架构安全分析方法(2)》介绍了用于汽车网络概率模型检查的方法——SAAN,并利用定义的汽车架构知识,减少了建立的马尔可夫模型大小。从该方法的结果来看,似乎没有什么难度,但建模中的状态空间满溢等方面却使方案的实施困难重重。本文将描述如何实现模型综合(从汽车网络架构中合成CTMC连续时间马尔科夫链),重新迭代了概率模型检查的基本内容,并重点检查了不同组件的性能影响。
01模型合成
为了更好地理解模型合成中会遇到的问题,在此举一例说明。
这个例子描述了一个最小的系统,该系统包括一个通过接口连接到一个总线上的单一ECU(如下图1.1)。请注意,我们将接口
图1.1 包含ECU和总线的车辆网络以及ECU的输入和输出接口的最小工作示例。注:每条路径的数据流都是单向的,安全状态的相关性以虚线给出。
本例显示了通过输出接口从ECU到总线的数据流,以及通过输入接口从总线到ECU的数据流。此外,还描述了安全依赖性和状态,以及漏洞的数量。
在上图1.1中的例子中,除了总线外,每个组件都有两种不同的状态,即安全(0)或可被利用(1)。每个设备可能有多个漏洞,但为了简洁起见,本例中省略了这种情况。总线代表了一个组件,这个组件始终处于可被利用的状态(1)。这表示与互联网的蜂窝连接本身不具备任何信息安全性。在我们的例子中,永久可利用的总线构成了进入ECU的攻击路径。
数据流中前面组件的利用次数直接决定了输出接口
上述的架构,描述的是单个组件及其依赖关系。然而,模型检查所需的CTMC是所有组件和互连的状态的组合,全时描述完整的系统。当从这些描述中合成CTMC时,由于单个组件的行为严重依赖于其连接的组件,问题也就随之出现。
一般方法。下文描述了在排除第3.4.1节中定义的汽车系统行为的情况下,CTMC的综合方法。图1.2比较了这两种方法。当用这种一般方法生成系统的CTMC时,通过所有可能状态的笛卡尔积组合,模型出现8种(
图1.2 SAAN与一般概率模型检查器的关系。SAAN实现了一种新颖的自动模型合成和属性规范。这些方法使用有关输入参数的领域知识,因此更加高效,允许模型合成和检查的速度比现有方法快三个数量级
(a)瞬时变换
(b)非瞬时变换
图1.3 通过图1.2中的体系结构生成了具有瞬时变换的通用Markov模型(a)和不具有瞬时过渡的优化Markov模型。状态表示为:
瞬时变换。请注意图1.3(a)中的变换。一些组件的状态被定义为紧随着其他组件的状态(比较图1.2中的状态依赖性)变换,但在模型中作为单独的中间状态存在。为了连接这些中间状态,把这些状态之间的变换速度定义为无限速率(
SAAN。虽然一般的模型建立方法是基于系统中所有组件的组合,但对描述系统的最小状态集进行操作更为有效。而本文所建议提出的SAAN方法,不但能够遵循这种高效的方法,还可以利用车辆中各部件的结构、行为和关系的知识,将概率模型缩小到最小尺寸,也就是将可能出现的状态模型数量减少到最少。
首先,以规则的形式分析和定义组件与其邻居之间相关的行为。然后,定义模型的状态。基于所有组件状态的笛卡尔乘积,并利用规则集,进行模型还原,以达到最终的状态集。然后,添加状态之间的变换,从而得到最终的CTMC模型。下文将解释这些步骤。
规则。规则定义了组件的行为,如图1.1所示。公式(3.16)~(3.19)是表示系统中所有子状态的规则。本文中对组件行为的定义,是基于对行为的分析(在上篇文章中已介绍过行为的分析)来定义的,该定义表示了一个组件的新的子状态,这个新的子状态是取决于它的前子状态以及它的邻居节点状态的。为了减小模型的体积,我们计划使用瞬时变换,而不考虑通过被利用率(
根据组件的状态,新状态
虽然方程式(3.19)表示了总线的一般行为,请注意,在我们的最小例子中,总线是始终保持可被利用的,因为总线形成了攻击路径:
从上面的规则可以看出,输入接口是唯一一个不会瞬时依赖其他接口的组件,因此,漏洞的可利用率
初始状态。每个组件都包含一个初始状态。对于大多数组件来说,这个状态属于安全状态(0)。然而,有些组件,如蜂窝连接,我们认为可能是可被利用状态(1)为初始状态,甚至包含不断被利用的状态,如图1.1中的总线。系统的初始状态,正是由所有的组件初始状态集合来构成的。
状态减少。为了提高模型检查方法的效率,我们应用上面定义的规则将模型种类减少到最少的状态数。在表示系统无瞬时变换行为的最小状态集时,可以通过计算减少所有瞬时变换的状态集来实现。公式(3.20)通过创建所有组件状态的笛卡尔乘积来表示所有可能状态的集合。
基于单一状态
就该示例而言,在系统的组件中可轻松定义此函数:
根据所有的规则集,可计算出组件的最终变化状态(见方程式(3.16)至(3.19))。在这里,新的状态是根据当前的状态来计算的。需要注意的是,要保证
变换。一旦模型还原完成,并且找到了所有状态的最小集合,就需要通过变换将这些状态连接起来。添加这些变换的过程非常琐碎。只要不存在或少存在一个变换,就有可能会多一个从状态
示例。将上述映射函数应用到我们图1.1的例子中,从