赞
踩
手册中的例子从TTool远程库导入,File
->Open Froom TTool repository
->SysMLSecTutorial.xml
。
方法论图和AVATAR中的不太一样,但是大致流程还是一样的,左边单独的一块是假设,然后中间是需求和攻击,其中的信息安全需求(Security Requirement) 和攻击(Attacks) 是AVATAR方法论里没有的,因为SysML-Sec会比较关注去设计安全的(safe and secure)嵌入式系统,因此对安全性质和威胁的建模就比较重要。
和这部分相连接的是软件设计(SW Design) 的部分,这个部分就是走完之前的AVATAR的剩下的流程,即获得属性(Properties),然后分析(Analysis)、设计(Design)、原型开发(Prototyping)。
右上角的部分是软硬件划分(SW/HW Partitioning),这部分在AVATAR里也没有,因为AVATAR是关注设计嵌入式软件的方法,不涉及硬件。软硬件划分分为了功能视图、通信模式、架构视图和Mapping,其中又可以分为安全的和非安全的。
安全需求和笔记1里第三部分的需求图一样,都是用SysML来表达的。
上图的上方的安全需求块表达所有功能性的通信路径都需要是保密的。
手册里给出下面这样的例子,即两个BlockT1
和T2
之间通过通道comm
进行通信,注意两边的状态机实际上不是画在这张图上的,只是为了表意方便手册里才把它们P在了一起。
根据前面的安全需求,这个通信通道必须是安全的,所以可以对2
中上方的安全需求块进行精化,得到下面的安全需求块。
从图里可以看出,就是在Block之间定义通信通道时不是直接连起来的,而是先定义了端口Port
,即图中两个青色黑三角,左边的是输出端口,右边的是输入端口,然后在端口之间定义的通道。另外左边的输出端口上可以看到一个锁头,这是在端口的属性设置里勾选了对保密性进行检查:
在这个端口设置中,首先可以设置端口的类型,包括通道(Channel
)、事件(Event
)、请求(Request
)。设置数据流向,即端口是源(Origin
)还是目标(Destination
)。
接下来是形式化验证和模拟执行的参数,包括检查机密性(Check Confidentiality
)、检查认证性(Check Authenticity
)。可以引用刚刚创建的需求(Reference Requirement
),这里是引用了ID为1的需求,其实也就是3
中下方的需求块,即要求这两个Block之间通信保密。可以设置是否是阻塞的(Bocking?
),这里可以选择阻塞(Bocking
)和非阻塞队列(Non-blocking FIFO
),如果选择阻塞,可以设置宽度字节数(Width
)和容量(Capacity
),如果选择非阻塞队列,则不能设置容量。
接下来是为代码生成的设置,可以选择数据流类型(Dataflow type
),包括uint_16
、uint_32
、uint_64
、int_16
、int_32
、int_64
、cpx_32
、cpx_64
。可以选择关联到事件,Prex
和Postex
应该是说这个事件是在这之前执行还是在这之后执行,这个是复选框,如果都勾选了就是前后都要执行一次。
最后是为鲁棒性的设置,可以勾选成有损的(Lossy
)通信,可以选择损失的比例(Loss percentage
)和最大的损失数量(Max nb of loss
),这里我猜是字节数。
这里是建了一张DIPLODOCUS方法里的架构和映射图,两个CPU里分别是前面的T1
和T2
模块,通过共享总线访问同一个内存,里面就是前面建立的通信通道comm
。
因为DIPLODOCUS方法用来做软硬件划分不在研究范围内,这里简单记录下图上出现的元件能定制的内容。
CPU在模拟执行方面可以定制调度策略,这里是轮询调度(Round Robin
),可以定制时间片、核心数、数据大小、流水线大小、任务切换事件、错误分支(Mis-Branching
)预测率、Cache未命中率、空闲时间、空闲前的最大连续时间、 时钟分频等。
CPU在代码生成方面可以定制是否进行加密(Encryption
),加密时可以选择软件加密(Software Encryption
)或者硬件安全模块(Hardware Security Module
)。可以定制CPU的扩展结构,包括CPU
、FEP
、INTL
、MAPP
、ADAIF
。
总线可以定制仲裁策略,这里也是轮询(Round Robin
),可以定制数据大小,流水线大小、时间分片、时钟分频、总线是否私有、引用的攻击。
内存在模拟执行方面可以定制数据大小、监控、时钟分频。
内存在代码生成方面可以定制其扩展结构,包括FEP memory
、MAPPER memory
、ADAIF memory
、INTERLEAVER memory
、MAIN MEMORY memory
。
TTool里的攻击树实际上就是一个参数图(SysML Parametric Diagram),要用Safety里验证可达性的方式来计算攻击树是否受攻击。
下图是一个攻击树模型,攻击结点就是直角框,图中有三个,关系结点是圆角框,图中有一个顺序关系,countermeasure
可以连接到攻击结点上,表示防止这个攻击发生的措施,也仅仅只能设置文本而已。
攻击结点要在编辑时设置一下是否时根攻击,设置成根攻击就会变成橙色的。关系结点中的关系类型比我看到的其它工具的攻击树实现要多很多,包括OR
、XOR
、AND
、SEQUENCE
、BEFORE
、AFTER
。
浅赭石色的攻击结点是打开的,表示攻击可以发生,右键菜单里可以把它禁用,表示用对抗措施抑制了这个攻击发生。
要验证根攻击是否会发生,在根攻击上右键菜单里选择Check for Reachability/Liveness
标记一下,然后工具上Syntax analysis
确保模型本身语法正确,然后点右边的Safety verification (Internal tool)
打开内置的模型检测功能窗口。
选择要检查可达性,然后点Start就会对选中的状态(刚才标记的根攻击)进行可达性检测,在这个图里因为两个孩子都是受攻击的,所以根攻击可以发生,可以看到它旁边出现了一个绿色的R
,就表示这个状态上Reachability这个性质是满足的了,即根节点的攻击可以发生。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。