Page 288 - 《软件学报》2021年第6期
P. 288

1862                                     Journal of Software  软件学报 Vol.32, No.6,  June 2021

             对合约进行建模,将银行转账合约与重入攻击合并为一个合约并作为 SOL2M 转换器的输入,转换结果如
         图 16 所示.


























                                   Fig.16    Modeling results of SOL2M converter
                                        图 16  SOL2M 转换器建模结果
             使用 PPTL 公式描述银行转账合约应满足的性质,下面从功能一致性、逻辑正确性以及合约完备性 3 个层
         面进行详细描述.
             (1)  功能一致性.
             对于银行转账合约来说,其 deposit 函数用于实现存钱操作.若用户调用了 deposit 函数,但用户余额没有增
         加,则说明 deposit 函数没有满足实际要求,即合约不满足功能一致性.将该功能精简为性质 5:在任何状态下,若
         用户调用 deposit 函数,则该用户余额在未来某一状态一定增加.从原子命题、命题逻辑、时序逻辑 3 个层面描
         述性质 5 见表 9,最终使用 PPTL 公式描述性质 5 为
                                               alw(m->som n).
                                        Table 9  Description of property 5
                                            表 9   性质 5 相关描述
                             类别                 信息描述                    操作符
                                            用户调用 deposit 函数               m
                           原子命题
                                               用户余额增加                     n
                           命题逻辑    若用户调用 deposit 函数,则该用户余额一定增加           m→n
                                         在将来某一状态下 n 一定成立                 som n
                           时序逻辑
                                         在所有状态下(m->som n)都成立          alw(m→som n)
             (2)  逻辑正确性.
             在银行转账合约中,将以太币发送至地址需要提交外部调用.一旦被攻击者劫持,将会迫使合约执行更多的
         代码(即 fallback 回退函数).攻击者在 fallback 函数中回调受攻击合约的任意函数,即为重入合约.在本例中,攻击
         者可以多次回调 deposit 函数实现无限取钱操作.无重入攻击的合约应当在执行完外部调用时保证没有调用合
         约内所有函数.可能导致恶意情况发生的内部函数有 deposit 函数和 withDraw 函数,因此描述性质 6 为:在所有
         状态下都不存在当 withDraw 函数执行完外部调用时,deposit 函数或 withDraw 函数被再次调用.从原子命题、
         命题逻辑、时序逻辑这 3 个层面描述性质 6 见表 10,最终使用 PPTL 公式描述性质 6 为
   283   284   285   286   287   288   289   290   291   292   293