2. 安徽财贸职业学院 云桂信息学院,安徽 合肥 230601
2. School of Yungui Info., Anhui Finance and Trade Vocational College, Hefei 230601, China
运行时验证是根据系统的运行轨迹来判定系统性质是否得到满足的一种轻量级验证技术,是保证系统运行时行为正确性的重要方法。因此,在航空航天、高铁、核电、医疗和工控等安全攸关领域的系统验证中有着广泛的应用[1–2]。
由于现代安全攸关系统正变得日趋庞大和复杂,系统拥有大量的随机行为特征[3],因此,随机系统运行时验证受到了广泛研究和关注[4–5]。Filieri等[6]针对自适应软件系统运行环境的改变可能使系统不满足属性规约,提出一种运行时验证方法,该方法使用连续时间马尔可夫链建模系统可靠性,使用概率计算树逻辑规约系统属性,对系统的可靠性进行运行时验证。Forejt等[7]使用马尔可夫决策过程来建模系统,提出了系统模型的增量构造方法和基于强连通组件的策略迭代技术来优化运行时验证的性能。Bak等[8]提出了在不可靠的网络通信下,信息物理融合系统的安全属性不变式运行时验证方法。Mao等[9]使用混成自动机建模自适应巡航控制系统,使用CHARON建模语言规约安全属性,验证了自适应巡航控制系统运行时安全性。采样是减少运行时监控费用有效方法,为了处理采样序列丢失而引起的预测精度低的问题,Stoller等[10]将采样序列作为隐马尔科夫模型(hidden Markov model,HMM)的观测序列,通过HMM前向算法估计由于采样而丢失的观测序列,该方法的系统属性验证算法需要计算属性自动机和系统模型组合状态的联合概率分布,计算效率低,难以满足在线监控的需求。为了提高计算效率,Kalajdzic等[11]采用粒子滤波方法估计属性自动机和系统模型组合状态的联合概率分布,并通过实验验证粒子滤波方法消耗的内存和运行速度优于文献[10]中的方法,但随着系统模型的增大,粒子在状态上分布就越稀疏,为了保证计算精度,需要更多的粒子覆盖系统状态。
综上所述,目前的随机系统运行时验证都假设系统状态是可以直接观测的,实际上大多数复杂系统在运行时其状态是不可观测的[10–11]。针对此问题,采用HMM对机系统建模,使用确定性有限自动机(deterministic finite automaton,DFA)规约系统安全属性,通过HMM和DFA的乘积来构造安全属性验证器,从而将状态不可观测的随机系统运行时验证问题约简到属性验证器上的概率推断问题。同时,提出了验证器的宽度优先构造算法和增量迭代安全性验证算法。
1 运行时验证框架采用在线监控的方式对随机系统安全性进行验证[12]。
状态不可观测的随机系统运行时安全性验证描述为:给定系统状态转换模型TS,系统安全属性
![]() |
图1 随机系统运行时安全性验证框架 Fig. 1 Framework of runtime safety verification for stochastic system |
图1中的虚线框是监控器单元,监控器由事件接收器和属性验证器组成。其中,事件接收器接收系统的观测序列进行预处理后输入到属性验证器进行验证,属性验证器输出当前系统安全属性被满足的概率。系统安全属性的否定使用DFA A表示,用以识别系统执行中违反安全属性的有限前缀。属性验证器是一个含有不安全状态的HMM,由系统模型HMM H和属性自动机A的乘积表示。
事件接收器将从系统获取的观测数据存放缓存中,再进行预处理,最后输入到安全性验证器。触发监控器工作的方式主要有事件触发和时间触发(采样)两种[13]。对于事件触发方式,其预处理较简单,只需按时间戳先后进行排序后输入到属性验证器;对于时间触发方式,其预处理比较复杂,需要按时间戳先后排序、消除重复采样数据、填充丢失序列等操作。由于提出的验证框架主要关注属性验证器的构造和验证算法,触发监控器工作方式使用事件触发。
2 属性验证器使用DFA[14]和HMM[15]构造属性验证器,下面给出两种模型的定义。
定义1 一个DFA是如下形式的五元组
1)
2)
3)
4)
5)
如果在
定义2 一个HMM是一个元组
1)
2)
3)
4)
5)
6)
安全属性验证器定义为一个HMM和DFA的乘积自动机,系统安全属性是基于观测符号描述,即DFA的输入字母表
定义3 安全属性验证器定义为
1)
3)
4)
5)
根据定义可知,属性验证器M是一个含有接受状态集的HMM,算法1给出了M构造算法,首先构造验证器的所有初始状态,然后,从初始状态出发,采用宽度优先算法构造M,其中,
算法1 属性验证器构造算法
输入:
输出:
1.
2. for each
3. for each
4.
5. if (
6.
7.
8.
9. end if
10. end for
11. end for
12. while
13. get a state
14. for each
15. for each
16.
17. if (
18.
19.
20. if
21.
22. if (
23.
24.
25. end if
26. end if
27. end for
28. end for
29.
30.
31. end while
通过分析语句18的最大执行次数确定算法1的最坏时间复杂度。如果所有状态都从初始状态可达,那么,算法需要处理的状态数是
先给出信念状态的定义,再给出增量信念状态更新算法来计算系统安全性概率。
定义4 信念状态(belief state)是指在时刻
${b_t}(s) =Pr (s|{o_1},{o_2},\cdots,{o_t}; M),\forall s \in S',\sum\limits_{s \in S'} {{b_t}(s)} = 1{\text{。}}$ |
由于观测值是从系统的不同状态发出的,因此,无法知道系统目前所处的准确状态,即M所处的状态。但是,根据系统的历史观测,通过HMM的前向算法能够计算系统的信念状态。HMM的前向算法是一种批处理算法[15],需要保存当前观测值之前的整个观测序列才能给出监控结论,随着系统观测序列的增长,前向算法消耗的内存和计算时间也将增长,难以满足实时验证需求。为此,提出一种在线增量迭代安全性验证算法,一旦收到一个新的观测值,立即更新信念状态并给出已观测到的整个有限序列的监控结论,无需保存当前观测值之前的整个观测序列。
增量信念状态更新以在线递推方式计算系统信念状态,在
![]() |
图2 属性验证器信念状态更新过程 Fig. 2 Belief state update of the verifier |
引 理 给定系统的历史观测序列
${b_t}(s) = \left\{ \begin{aligned}&\frac{{\iota {'_{{\rm{init}}}}(s)\mu {'_s}\left( {{o_1}} \right)}}{{{{\textit{z}}_1}}},t = 1;\quad\quad\quad\quad\quad\quad\quad\quad\\&\frac{{\displaystyle\sum\limits_{{s_{t - 1}} \in S'} {{b_{t - 1}}({s_{t - 1}})P'({s_{t - 1}},s)\mu {'_s}\left( {{o_t}} \right)} }}{{{{\textit{z}}_t}}},t >1{\text{)}}\end{aligned} \right.$ | (1) |
式中,
证明:根据信念状态的定义和贝叶斯定理[16]可得
$\begin{aligned}{b_{\rm{1}}}\!\!\left( s \right) = & Pr(s|{o_{\rm{1}}}) = \frac{{Pr(s,{o_{\rm{1}}})}}{{Pr({o_{\rm{1}}})}}=\\& \frac{{Pr(s)Pr({o_{\rm{1}}}|s)}}{{ \displaystyle\sum\limits_{s \in S'} {Pr(s,{o_{\rm{1}}})} }} = \frac{{\iota {'_{{\rm{init}}}}(s)\mu {'_s}\left( {{o_{\rm{1}}}} \right)}}{{ \displaystyle\sum\limits_{s \in S'} {\iota {'_{{\rm{init}}}}(s)\mu {'_s}\left( {{o_{\rm{1}}}} \right)} }}{\text{。}}\end{aligned}$ |
假设在
$\begin{aligned}[b]{b_t}\left( s \right) = & Pr(s|{o_{\rm{1}}},{o_{\rm 2}},\cdots,{o_t}) = \frac{{Pr(s,{o_{\rm{1}}},{o_{\rm 2}},\cdots,{o_t})}}{{Pr({o_{\rm{1}}},{o_{\rm 2}},\cdots,{o_t})}}= \\&Pr(s,{o_t}|{o_{\rm{1}}},{o_{\rm 2}},\cdots,{o_{t{\rm{ - 1}}}})\frac{{Pr({o_{\rm{1}}},{o_{\rm 2}},\cdots,{o_{t{\rm{ - 1}}}})}}{{Pr({o_{\rm{1}}},{o_{\rm 2}},\cdots,{o_t})}}\end{aligned}$ | (2) |
式中,
$\begin{aligned}[b]& Pr(s,{o_t}|{o_{\rm{1}}},{o_{\rm 2}},\cdots,{o_{t{\rm{ - 1}}}}) = \sum\limits_{{s_{t - 1}} \in S'} {Pr(s,{s_{t - 1}},{o_t}|{o_{\rm{1}}},{o_{\rm 2}},\cdots,{o_{t{\rm{ - 1}}}})}= \\&\quad \sum\limits_{{s_{t - 1}} \in S'} {Pr({s_{t - 1}}|{o_{\rm{1}}},{o_{\rm 2}},\cdots,{o_{t{\rm{ - 1}}}})} Pr(s,{o_t}|{s_{t - 1}},{o_{\rm{1}}},{o_{\rm 2}},\cdots,{o_{t{\rm{ - 1}}}})=\\&\quad \sum\limits_{{s_{t - 1}} \in S'} {{b_{t - 1}}\left( {{s_{t - 1}}} \right)} Pr(s|{s_{t - 1}})Pr({o_t}|s)=\\&\quad \sum\limits_{{s_{t - 1}} \in S'} {{b_{t - {\rm{1}}}}\left( {{s_{t - 1}}} \right)P'({s_{t - 1}},s)\mu {'_s}\left( {{o_t}} \right)}\quad\quad\quad\quad\quad\quad\quad\quad\;\end{aligned}$ | (3) |
$\begin{aligned}[b]&\frac{{Pr({o_{\rm{1}}},{o_{\rm 2}},\cdots\!,{o_{t{\rm{ - 1}}}})}}{{Pr({o_{\rm{1}}},{o_{\rm 2}},\cdots\!,{o_t})}}\!\!=\!\!\frac{{Pr({o_{\rm{1}}},{o_{\rm 2}},\cdots\!,{o_{t{\rm{ - 1}}}})}}{{Pr({o_{\rm{1}}},{o_{\rm 2}},\cdots\!,{o_{t{\rm{ - 1}}}})Pr({o_t}{\rm{|}}{o_{\rm{1}}},{o_{\rm 2}},\cdots\!,{o_{t{\rm{ - 1}}}})}}\!\!=\\&\frac{{\rm{1}}}{{Pr({o_t}{\rm{|}}{o_{\rm{1}}},{o_{\rm 2}},\cdots\!,{o_{t{\rm{ - 1}}}})}}{\rm{ = }}\frac{{\rm{1}}}{{ \displaystyle\sum\limits_{s \in S'} { \displaystyle\sum\limits_{{s_{t - 1}} \in S'} {Pr(s,{s_{t - 1}},{o_t}|{o_{\rm{1}}},{o_{\rm 2}},\cdots\!,{o_{t{\rm{ - 1}}}})} } }}\!\!=\\&\quad \frac{{\rm{1}}}{{\displaystyle\sum\limits_{s \in S'} {\displaystyle\sum\limits_{{s_{t - 1}} \in S'} {{b_{t - {\rm{1}}}}\left( {{s_{t - 1}}} \right)P'({s_{t - 1}},s)\mu {'_s}\left( {{o_t}} \right)} } }} = \frac{1}{{{{\textit{z}}_t}}}\qquad \;\;\;\;\;\;\;\;\;\;\;\end{aligned} $ | (4) |
将式(3)和(4)代入式(2),即可得到式(1)。
由于M中的接受状态集
算法2 安全性验证算法
输入:M和当前的观测
输出:
1. if (t ==1) then
2. for each
3.
4.
5. end for
6. for each
7.
8. end for
9. else
10. for each
11. for each
12.
13. end for
14.
15. end for
16. for each
17.
18. end for
19. end if
20. return
从算法2中可以看出语句12的执行次数最多,可以通过分析语句12的最大执行次数确定算法的最坏时间复杂度。由语句10~15可知,语句12的执行次数为
通过随机多线程并发访问共享数据对象的案例[11]验证作者提出的方法是否能够有效地计算系统安全性概率,探测安全属性的违背以及评估算法的时空性能。为了防止数据不一致性或数据污染,通过加锁机制实现线程并发访问共享数据。一个共享数据对象包含锁字段、保护字段和非保护字段。随机线程运行时可观察变量的集合是{LOCK,UNLOCK,PROT,UNPORT},其中,LOCK表示线程获得了目标对象的锁,UNLOCK表示线程释放了目标对象的锁,PROT表示线程访问目标对象的受保护字段,UNPROT表示线程访问目标对象的非保护字段。
4.1 实验设置随机线程的HMM模型如图3所示,该线程以较小的概率违背锁原理,每个状态的可观测变量及相应的概率如表1所示。
表1 系统可观测符号及参数值设置 Tab. 1 System observable symbols and parameter settings |
![]() |
![]() |
图3 随机线程的HMM模型 Fig. 3 HMM of stochastic threads |
待验证的安全属性为“线程获得目标对象的锁后才能访问目标对象的受保护字段”,对应的探测安全属性违背的DFA如图4所示,其中,输入字母表Σ={LOCK,UNLOCK,PROT,UNPORT},
![]() |
图4 安全属性自动机 Fig. 4 Safety property automata |
![]() |
图5 安全属性验证器 Fig. 5 Safety property verifier |
1)按照初始状态分布
2)令
3)根据状态
4)根据状态
5)令
系统安全性概率阈值为0.90,模拟系统运行产生1 000个观测序列,当系统进入不安全状态时进行复位操作,重新从初始状态运行。图6给出了系统安全性概率随着观测序列的变化,从图6中可以看出,由于提出的安全性验证算法采用增量迭代计算,所以能实时反映系统安全性概率的变化情况,并且在运行中探测到3次系统安全属性违背。
![]() |
图6 系统安全性概率随观测序列的变化 Fig. 6 System safety probability changes with the observation sequence |
表2列出了当系统违背安全属性时,获取系统最近的长度为10的观测序列和当前系统安全性概率。从第1行和第3行观测序列可以看出,系统释放目标对象锁之后访问了保护字段,从第2行观测序列可以看出,系统没有获得了目标对象的锁就访问了保护字段,显然这3种情况都违背了安全属性并且本文方法都能够快速准确地探测到。
表2 安全属性违背时系统观测序列和安全性概率 Tab. 2 Observation sequence and safety probability of the system when the property is violated |
![]() |
4.3 方法性能比较
将本文的方法和HMM前向算法[11]和粒子滤波算法[12]在时间和空间性能进行了比较。通过不断增大系统模型的状态数,并且构造不同状态数的无向完全图作为系统模型,图3中的状态转换和状态的可观测符号是等概率分布,待验证属性由图3中的DFA表示。为了保证粒子滤波算法验证结果和本文方法具有相同的精度,不同的状态数对应的粒子数分别为:400、800、1 200、1 600、2 000。表3给出了3种算法的执行时间和内存消耗情况。
表3 3种算法的执行时间和内存消耗 Tab. 3 Execution time and memory consumption of the three algorithms |
![]() |
从表3可知,粒子滤波算法执行时间优于HMM前向算法,但消耗的内存较大,本文方法的执行时间和内存消耗明显优于其他两种算法。当系统状态达到80时,HMM前向算法和粒子滤波算法的执行时间和内存消耗显著增加;当系统状态达到100时,本文方法的执行时间只有粒子滤波算法的14.5%,消耗内存空间仅为HMM前向算法的22.7%。获得上述实验结果的主要原因是:1)通过属性验证器的构造约简了HMM和DFA组合状态数,而粒子滤波算法和前向算法是直接基于系统模型和属性自动机的组合状态进行联合概率分布的计算;2)安全性验证算法是在线增量计算的,每次仅处理一个观测,而粒子滤波算法和前向算法需要处理和保存当前观测之前的序列。
5 结 论由于随机系统的复杂性,在设计阶段的模型检测和测试技术难以确保其正确性,运行时仍会发生违反安全属性的行为。针对随机系统在运行时状态是不可直接观测的,提出了运行时安全性验证方法。首先,构造了运行时验证框架,通过HMM对系统建模,使用DFA规约系统安全属性的否定,两者的乘积自动机作为运行时属性验证器并且给出验证器的构造算法。然后,提出了一种增量迭代的安全性验证算法。实验结果表明提出的方法能正确、快速地探测系统违背安全属性的行为。本文方法没有考虑混成系统特征,下一步的工作将使用HMM混合模型建模随机混成系统并对该类系统进行验证。
[1] |
Huang Zhiqiu,Xu Bingfeng,Kan Shuanglong,et al. Survey on embedded software safety analysis standards,methods and tools for airborne system[J]. Journal of Software, 2014, 25(2): 200-218. [黄志球,徐丙凤,阚双龙,等. 嵌入式机载软件安全性分析标准、方法及工具研究综述[J]. 软件学报, 2014, 25(2): 200-218. DOI:10.13328/j.cnki.jos.004530] |
[2] |
Du Y,Wang J,Li Q. An android malware detection approach using community structures of weighted function call graphs[J]. IEEE Access, 2017(5): 17478-17486. DOI:10.1109/ACCESS.2017.2720160 |
[3] |
Liu Yang,Li Xuandong,Ma Yan,et al. Survey for stochastic model checking[J]. China Journal of Computers, 2015, 38(11): 2145-2162. [刘阳,李宣东,马艳,等. 随机模型检验研究[J]. 计算机学报, 2015, 38(11): 2145-2162. DOI:10.11897/SP.J.1016.2015.02145] |
[4] |
Klein J,Baier C,Chrszon P,et al.Advances in symbolic probabilistic model checking with PRISM[C]//International Conference on Tools and Algorithms for the Construction and Analysis of Systems.Berlin:Springer,2016:349–366.
|
[5] |
Filieri A,Ghezzi C,Tamburrelli G.Run-time efficient probabilistic model checking[C]//International Conference on Software Engineering.Honolulu:IEEE,2011:341–350.
|
[6] |
Filieri A,Tamburrelli G,Ghezzi C. Supporting self-adaptation via quantitative verification and sensitivity analysis at run time[J]. IEEE Transactions on Software Engineering, 2016, 42(1): 75-99. DOI:10.1109/TSE.2015.2421318 |
[7] |
Forejt V,Kwiatkowska M,Parker D,et al.Incremental runtime verification of probabilistic systems[C]//International Conference on Runtime Verification.Berlin:Springer,2013:314–319.
|
[8] |
Bak S,Huang Z,Abad F A T,et al. Safety and progress for distributed cyber-physical systems with unreliable communication[J]. ACM Transactions on Embedded Computing Systems, 2015, 14(4): 1-22. DOI:10.1145/2739046 |
[9] |
Mao J,Chen L.Runtime monitoring for cyber-physical systems:A case study of cooperative adaptive cruise control[C]//Second International Conference on Intelligent System Design and Engineering Application.Sanya:IEEE,2012:509–515.
|
[10] |
Stoller S D,Bartocci E,Seyster J,et al.Runtime verification with state estimation[C]//International Conference on Runtime Verification.Berlin:Springer,2011:193–207.
|
[11] |
Kalajdzic K,Bartocci E,Smolka S A,et al.Runtime verification with particle filtering[C]//International Conference on Runtime Verification.Berlin:Springer,2015:149–166.
|
[12] |
Kassem A,Falcone Y,Lafourcade P. Formal analysis and offline monitoring of electronic exams[J]. Formal Methods in System Design, 2017, 51(1): 1-37. DOI:10.1007/s10703-017-0280-0 |
[13] |
Wu C W W,Kumar D,Bonakdarpour B.Reducing monitoring overhead by integrating event-and time-triggered techniques[C]//International Conference on Runtime Verification.Berlin:Springer,2013:304–321.
|
[14] |
Baier C,Katoen J P.Principles of model checking[M].Cambridge:MIT Press,2008.
|
[15] |
Rabiner L. A tutorial on hidden Markov models and selected applications in speech recognition[J]. Proceedings of the IEEE, 1989, 77(2): 257-286. DOI:10.1109/5.18626 |
[16] |
Xu W,Jing S,Yu W,et al. A comparison between Bayes discriminant analysis and logistic regression for prediction of debris flow in southwest Sichuan,China[J]. Geomorphology, 2013, 201(1): 45-51. DOI:10.1016/j.geomorph.2013.06.003 |