【TTool学习笔记】4:SysML-Sec建模方法(验证和生成)

在学习这节之前要给TTool装配好ProVerif,具体是在TTool/bin/config_*.xml,这里*linux或者macos或者windows,在里面配置下面的标签。

<ProVerifCodeDirectory data="../proverif/" />
<ProVerifVerifierPath data="../../proverif/proverif.exe" />
<ProVerifVerifierHost data="localhost" />

分别是ProVerif生成的形式化规约文件存放的目录、可执行文件路径、所在主机。第一个其实默认就是在TTool安装目录下的所以不用改,第三个两个都装在本机上也不用改,就改第二个就行了。

1 实现信息安全的对抗策略

对抗策略就是解决威胁(如攻击树上的某个攻击)用的,这里是讲那些破坏信息安全性质的威胁,如何来实现避免这些威胁的对抗策略。

1.1 信息安全性质验证

在上节的4中的架构和映射视图下,工具里点Syntax analysis检查无误,然后点Security verification (TTool)打开信息安全性质验证窗口,然后点Start进行验证(这个UI做的不好,如果屏幕不够大看不到底下的Result,而且没法拖拽上来,这里截的是手册里的图):
【TTool学习笔记】4:SysML-Sec建模方法(验证和生成)_第1张图片

结果中两条Reachable states表明T1T2的状态机里这两个状态(一个是往通道里写的操作,一个是从通道里读的操作)是可达的,这说明这个通道是能正常工作的,因为这个通信过程能正常发生。

一条Non confidential Data表明这个保密性质不满足,说明通道不是保密的。在这条上右键,选择Show trace可以看到给出的反例路径,即攻击者直接获取了T1发的消息:
【TTool学习笔记】4:SysML-Sec建模方法(验证和生成)_第2张图片

因为这个机密性不满足,在功能模型里可以看到表示去验证机密性的锁头标红了。
【TTool学习笔记】4:SysML-Sec建模方法(验证和生成)_第3张图片

1.2 对抗策略:安全的总线

这是使用安全的架构得到的SecureArchitectureWithNonSecureFV,即安全的架构在不安全的功能视图上,它将连接两个CPU的总线设置为private,这样会在上面出现了一个绿色的盾牌标识。
【TTool学习笔记】4:SysML-Sec建模方法(验证和生成)_第4张图片

1.1中的方法重新验证,可以发现保密性是满足的。即验证结果中会把性质放在Confidential Data里面。

1.2 对抗策略:安全的功能

这是使用安全的功能得到的NonSecureArchitectureWithSecureFV,即不安全的架构在安全的功能视图上,这里相比最开始的模型,只是修改了功能视图中的状态机。
【TTool学习笔记】4:SysML-Sec建模方法(验证和生成)_第5张图片

T1的从通道发送消息前加入了一个加密块,在T2的从通道接收消息后加入了一个解密块。在加密块上双击就能打开如下面所示的编辑窗口,其中更可以选择保证信息安全的模式,有Symmetric EncryptionAsymmetric EncryptionMACHashNonceAdvanced。然后可以指定加密和解密所带来的计算复杂性,这个东西就会影响整个系统的性能。然后可以选择加密密钥和使用的内置算法,算法包括AESTriple-DESRSAECCSHA-256WhirlpoolPoly-1305HMAC
【TTool学习笔记】4:SysML-Sec建模方法(验证和生成)_第6张图片

在收发消息的信号上就可以选择定义好的安全模式,比如下图就是选择了刚刚的Cipherdata。这里要注意TTool的UI有个非常垃圾的地方,就是一个东西值设置好了,再打开编辑窗体之后下拉框里显示的不是当前值,就比如下图中的Attacker,打开窗体永远默认值是显示Yes,但是实际上当前值是No,否则状态机的这个地方就会显示一个Attack字样。所以TTool的编辑窗体UI里总是在下拉框下面放了个文本框,这个东西非常让人迷惑,竟然是用来表示当前值的意思。
【TTool学习笔记】4:SysML-Sec建模方法(验证和生成)_第7张图片

再用1.1中的方法进行验证,这个模型的机密性也是满足的。

但是因为这种方式是用加密来实现的保密性,所以加解密的代价会影响整个系统的性能。不考虑具体的硬件实现带来的影响(比如缓存未命中、任务切换、启动时间)TTool可以用DIPLODOCUS模拟器对系统进行模拟,然后就能看到一个CPU和总线使用的甘特图,这里手册没有展开说明。

2 自动安全(Security)生成

给出安全需求,TTool就能在不满足这个需求的模型上添加相关的操作元素,或者是添加硬件安全模块(HSM),使模型满足安全需求。首先要将要满足安全性的通道标记上Confidentiality或者Authenticity。

2.1 自动添加安全操作

先找到上一节里的最原始的不安全的模型,然后双击通道的端口,把Check Authenticity勾上,不勾选Check Confidentiality,也就是用ProVerif验证时候只验证认证性质,不验证保密性,如果是做添加安全操作,就会尝试添加认证性质。

先Check一下语法,然后点开ProVerif验证窗口,选到Automated Security选项卡,勾选上Add security,然后选上弱的Authenticity性质,如下图。
【TTool学习笔记】4:SysML-Sec建模方法(验证和生成)_第8张图片

在这里还可以修改一下性能参数,即加解密操作带来的复杂度提升是多少。点击Start,就会自动在功能视图的T1T2的状态机里生成安全操作,来保证弱认证性。
【TTool学习笔记】4:SysML-Sec建模方法(验证和生成)_第9张图片

2.2 自动添加硬件安全模块

还是用这个不安全的模型,不过这次给通道勾选的是保密性,在自动安全的窗口选中Add HSM,这个选项和Add security是互斥的,然后注意要把要添加HSM的控件选到右边去,如下图。
【TTool学习笔记】4:SysML-Sec建模方法(验证和生成)_第10张图片

点击Start可以看到为T1T2分别生成了HSM,如下图。
【TTool学习笔记】4:SysML-Sec建模方法(验证和生成)_第11张图片

模块T1和它的硬件安全模块HSM_CPU1如下图,结合上面的模块连线可以知道,一开始就是发个启动信号过去,然后HSM启动,所有要交换的信息都发给HSM,然后HSM加密之后再返回来,这个信息就是加密过的了。
【TTool学习笔记】4:SysML-Sec建模方法(验证和生成)_第12张图片

如果是多个任务映射到一个CPU上,那么只会为中一个CPU生成一个HSM模块,而不会生成多个了。对于这个例子是生成两个,得到架构图如下,底下到两个新BUS的连线是手画的,因为手册里没画出来,但是实际操作TTool里是有这四根线的,反倒是两个CPU模块在TTool里显示不出来。
【TTool学习笔记】4:SysML-Sec建模方法(验证和生成)_第13张图片

TTool在做自动安全生成的时候得到的排版非常混乱,基本上都是在一个位置生成,然后线也都直接连到某个位置,需要用户手动拖拽才能看清结构。

2.3 自动映射密钥

因为设置了多种密码学配置,所以把密钥映射到内存会比较麻烦,TTool可以根据这些配置来自动映射。对于对称加密和MAC(消息认证码),发送方和接收方都需要能访问到密钥。对于非对称加密,发送方要能访问到公钥(用于加密),接收方要能访问到私钥(用于解密)。

在获取密钥的过程中,如果密钥沿着公共的Bus发送,就会被攻击者窃取。在自动映射密钥到内存的算法中,会去宽度优先遍历所有的私有总线(Private Bus)和桥(Bridge),然后找到一个内存把密钥映射进去。

下面这张图是手册里的,但是我在TTool工具里没有复现出来。这个图可以去解释上面的说明,就是因为MainBus是共有的,Bus1和Bus2是私有的(可以看到绿色盾牌),所以两个密钥放在这两个私有Bus所连接的内存里。

3 生成安全的协议

软件(或者协议)设计包含一个Block Diagram和每个任务块的状态机,下图有一个主块System和两个子块(cryptoblock就是带了内置的加解密签名算法和消息拼接拆分操作)T1T2
【TTool学习笔记】4:SysML-Sec建模方法(验证和生成)_第14张图片

在主块上连接了一根传消息的线,双击编辑可以看到里面的输入输出信号的配对关系。
【TTool学习笔记】4:SysML-Sec建模方法(验证和生成)_第15张图片

在写规约语言的框里可以看到sk是对系统内的所有会话共享一次,要验证的保密性是T1secretData

这两个块的状态机如下,就是T1把保密信息secretData装到要发的消息m里,然后用sk加密发出去,然后T2接受到消息后用自己的sk解密得到消息,然后将其中的数据域拿出来即获得了T1的保密信息secretData
【TTool学习笔记】4:SysML-Sec建模方法(验证和生成)_第16张图片

最后验证结果如下,保密性是通过的,所有的状态都是可达的,因此保密通信可以完成。
【TTool学习笔记】4:SysML-Sec建模方法(验证和生成)_第17张图片

你可能感兴趣的:(#,TTool,TTool,SysML-Sec,形式化验证,建模工具,安全协议)