智能合约中的漏洞分类-强化学习总结报告

时间:2024-07-21 20:43:57
【文件属性】:

文件名称:智能合约中的漏洞分类-强化学习总结报告

文件大小:1.98MB

文件格式:PDF

更新时间:2024-07-21 20:43:57

以太坊 智能合约 MPT树 智能合约安全 区块链2.0

第四章 智能合约的安全问题 目前,以太坊中总计约有一亿以太币,按市场价(1以太价值 150美元), 总市值约为 150亿美元。广泛的应用也暴露了以太坊的一些漏洞,并被一些攻击 者利用,出现了 TheDao Bug(损失 6000万美元)、Parity Bug(300万以太币无 法取出)等严重的漏洞。这些漏洞使人们对以太坊的安全性产生了怀疑。由于其 他智能合约平台大多都参考了以太坊的底层架构,这些平台同样会受到这些攻击 的威胁。智能合约的安全机制与漏洞涉及到整个以太坊架构的各个层次。目前, 智能合约的安全已经成为智能合约开发者必须考虑且重视的问题[5]。 4.1 智能合约中的漏洞分类 在本节中,我们先对以太坊智能合约的安全漏洞进行归纳。此外,我们通过 一个代码片段说明每个在 Solidity层级的漏洞。所有这些漏洞可以被利用(实际 上,大多数漏洞)来进行攻击,例如从合约中盗取以太币。 Call to the unknown. Solidity中用于调用函数和转移以太币的某些语法可能 具有调用被调用者/接收者的 fallback函数的副作用[3]。我们在下面说明它们。 -call调用一个函数(另一个合约的或本身的函数),并将以太币转移给被调 用者。 例如,可以按以下方式调用合约 c的函数 ping: c.call.value(amount)(bytes4(sha3("ping(uint256)")),n); 其中,被调用函数由其哈希签名的前 4个字节标识,amount决定必须将多 少 wei传递给合约 c,而 n是 ping函数的实际参数。值得注意的是,如果在地址 c处不存在具有给定签名的函数,则执行合约 c的 fallback函数作为替代。 -send用于将以太币从运行中的合约转移到某个接收者 r,如 r.send(amount) 所示。以太币被转移后,send执行接受者的 fallback函数。与 send相关的其他 漏洞在“exception disorders”和“gasless send”中进行了详细说明。 -delegatecall与 call非常相似,区别在于被调用函数的调用在调用者环境中 运行。 例如,执行 c.delegatecall(bytes4(sha3(“ping(uint256)”)),n), 如果 ping包含变量 this,它将引用调用者的地址而不是合约 c的,并且在以太 币转移到某个接收者 d的情况下-通过 d.send(amount)-从调用者 balance中提 取以太币。


网友评论