Page 223 - 《软件学报》2025年第10期
P. 223
4620 软件学报 2025 年第 36 卷第 10 期
以判定合约的实时行为是否符合预期. 通过预设的合约预期行为规则, 可以度量合约的任何实时行为, 只要出现合
约行为偏离了预期, 都可以被本文方法检测到.
3.3.3 合约行为控制
控制机制是主动监控机制发挥作用的入口, 控制过程拦截智能合约系统调用行为, 获取行为相关的主体、客
体、操作、环境等信息, 依据控制策略将信息发送给度量机制进行度量, 并接受判定机制的判定结果, 进行相关的
控制. 本文通过 Hook 监控技术在内核层通过 Linux 安全模块 LSM (Linux security module) [41] 拦截对系统调用接口
的调用, 通过重写钩子函数的方式来对合约运行过程的重点系统调用做主动控制, 将监控点设置到对每一个关键
系统调用中. 该方法可以实时监控所有的系统调用, 保证对于合约实际行为监控的完备性.
首先, 共识节点从合约创建交易中获取智能合约源代码, 从合约调用交易中获取合约输入, 在合约执行过程中
获取系统调用相关的参数、时间、次数等信息. 其次, 将收集好的相关信息发送给合约行为度量模块, 度量模块将
度量结果发送给合约行为判定模块, 控制机制接收合约行为判定模块返回的行为可信判定结果, 并依据判定结果
和区块链系统策略实施控制措施.
3.3.4 合约行为控制
度量机制依据度量策略对控制机制传递的合约执行过程中拦截的系统调用的主体、客体、操作、环境等信
息按照度量策略进行度量, 并将度量结果发送至判定机制. 本文的度量方法主要采用国密算法 SM3, 度量对象主
要包括智能合约行为过程中触发的系统调用以及相关的主体、客体等.
3.3.5 合约行为判定
合约行为判定模块获取合约行为的度量结果, 结合预期行为规则和区块链系统安全策略判定合约行为是否可
信, 行为可信的前提有: 节点具有创建、发布、调用、删除合约的权限, 合约及其执行环境可信.
共识节点收集到合约交易, 从预期行为规则中获取合约策略, 判定节点是否有对合约操作的权限. 若没有则抛
弃交易, 在执行合约之前对合约运行环境以及合约基准值进行可信验证, 在确保合约和执行环境均可信的前提下,
对合约行为进行可信验证: 共识节点对合约行为监控阶段实时返回的行为信息进行综合判定, 验证合约行为是否
符合预期行为规则以及区块链系统安全策略. 若合约行为不符合预期行为规则或不满足区块链系统安全策略, 则
抛弃交易并报警, 如果一致则合约行为可信.
合约行为判定模块具体步骤如下.
(1) 获取合约行为 α 的本次系统调用 a, 遍历预期行为规则, 计算行为单元 a 在预期行为规则控制下的预期执
b = a, 则当前系统调用符
行动作 b = Expected(a,P(a i )), 最终有 b = a(允许执行 a) 或者 b = Λ(不允许执行 a). 如果
合预期行为规则, 执行步骤 (2); 若 b = Λ, 则当前系统调用不可信, 依据控制策略实施控制, 并在检测到其可信性受
到破坏后进行报警.
α 下一个需要实时监控的系统调用, 重复步骤 (1). 若交易执行结束, 则合约行为可信, 若当前系
(2) 确定行为
统调用不可信, 在检测到其可信性受到破坏后进行报警.
设行为 α 的实际行为序列为 α = a 1 ◦a 2 ◦...◦a n 则根据预期行为规则计算 α 对应预期行为 β = Expected(α,
(P(a i ),a i )). 由定义 3 可得: β = a 1 ◦a 2 ◦...◦a n , 其中对于任意的 a 1 有 P(a i ) 成立. 行为 α 是否可信的自动化验证
过程如图 4 所示, 图 4 中的圆圈表示区块链状态, 圆圈之间的箭头表示触发的系统调用, 圆圈之间的连线表示实际
与预期的状态同步验证关系, 当且仅当实际执行的系统调用与预期相同且满足安全策略时, 允许触发下一个系统
调用.
a 1 a 2 a 3 a 4 a 5
α s 0 s 1 s 2 s 3 s 4 s 5
a 1 ,p(a 1 ) a 2 ,p(a 2 ) a 3 ,p(a 3 ) a 4 ,p(a 4 ) a 5 ,p(a 5 )
β
T 0 T 1 T 2 T 3 T 4 T 5
图 4 智能合约行为可信验证

