主页 > 最新imtoken官方下载 > 以太坊漏洞分析——二、拒绝服务漏洞

以太坊漏洞分析——二、拒绝服务漏洞

最新imtoken官方下载 2023-06-28 07:55:09

简介:秦人无暇自哀,后人哀;

——《阿房功赋》

眼看现在区块链和币圈的节奏越来越快,我们似乎已经无暇回首当初那些辉煌和挫折,只能低着头继续追赶向上。 回首2016年的战场,仿佛一切都已定格,鲜有人记得这里发生过什么。

我们挖掘了当时的拒绝服务攻击,并将原理分析和漏洞修复技巧分享给大家,时刻牢记前车之鉴。

活动回顾

2016年2月6日至8日以太王座之王(以下简称KotET)“动荡时代”期间,多款游戏中退位王的补偿金和未接受的款项无法退回用户玩家的钱包。

讽刺的是,同年6月,就连庞氏骗局GovernMental的合约也遭遇了DoS攻击。 当时使用 250 万次 gas 交易获得 1100 个以太坊[2],超过了合约可以加载的 gas limit。 暂停交易活动。

区块链中以太坊的英文简称_sitejinse.com 区块链以太坊_以太坊区块链游戏

无论是故意扰乱交易的正常流程,还是阻断交易通道,长期以来一直在使用一种在互联网时代盛行的攻击方式——DoS,也就是我们所说的拒绝服务攻击。 这种攻击方式可以扰乱、暂停、冻结合约执行的正常交易操作,更严重的是,可以使合约本身的逻辑无法运行。

什么是操作系统

区块链中以太坊的英文简称_以太坊区块链游戏_sitejinse.com 区块链以太坊

DoS是DenialOfService,拒绝服务的缩写。 从字面上理解,就是用户要求的服务请求,系统无法处理。

区块链中以太坊的英文简称_sitejinse.com 区块链以太坊_以太坊区块链游戏

打个比方来形容DoS,火车站为大家提供乘车服务。 如果你想要一个 DoS 火车站,有很多方法可以做到。 可以占道不上车,可以堵售票处不付钱,可以阻止售票员或司机不付钱。 放任自流,甚至采取破坏铁轨等更极端的手段,影响车站服务的正常运行。

以往针对互联网的DoS攻击手段很多,但基本上分为三类:利用软件实现缺陷、利用协议漏洞、利用资源抑制。

此外,还有DDoS,称为分布式DoS。 不同的是,攻击者同时使用远程控制的计算机对目标进行攻击。 在上面的比喻中,可以理解为雇佣数百名地痞流氓做同样的事情,影响站内。 操作。

区块链中以太坊的英文简称_sitejinse.com 区块链以太坊_以太坊区块链游戏

智能合约DoS攻击原理分析及相应漏洞修复

无处不在的 DoS 当然也会对基于 Solidity 语言的以太坊合约构成威胁。

针对智能合约的 DoS 攻击是利用协议漏洞的手段。 具体的攻击方式有3种,其目的是使合约在一段时间内或永久无法正常运行。 通过 DoS 攻击,合约中的 Ether 永远无法提取,区块变成“冰冻荒地”。

sitejinse.com 区块链以太坊_区块链中以太坊的英文简称_以太坊区块链游戏

区块链中以太坊的英文简称_sitejinse.com 区块链以太坊_以太坊区块链游戏

通过分析原始代码,我们发现KotET事件中锁定王者称号的DoS攻击属于:

1. 通过(意外)恢复启动 DoS

如果智能合约的状态变化依赖于外部函数的执行结果,并且没有针对执行失败的保护措施,则智能合约可能会受到 DOS 攻击。

我们用案例合约还原KotET的竞价机制进行仿真分析:

区块链中以太坊的英文简称_sitejinse.com 区块链以太坊_以太坊区块链游戏

以上案例合约是KotET竞标王座合约的简化版。 如果当前交易携带的以太币大于当前highestBid区块链中以太坊的英文简称,那么highestBid对应的以太币将返回给currentLeader,然后将currentbidder设置为currentLeader,currentLeader改为msg。 价值。 但是当恶意攻击者如下图部署合约并通过合约进行竞价时,就会出现问题:

区块链中以太坊的英文简称_sitejinse.com 区块链以太坊_以太坊区块链游戏

攻击者首先通过攻击合约向case合约转账成为currentLeader,然后当新的bidr出价时,执行到require(currentLeader.send(highestBid))会导致攻击合约的fallback()函数(这里指function() external payable function) ) 不能接收ether 一直为false,最终攻击合约以较低的ether 中标。

区块链中以太坊的英文简称_sitejinse.com 区块链以太坊_以太坊区块链游戏

Bug修复

如果外部函数调用的结果需要处理进入新的状态,请考虑外部调用可能一直失败,也可以添加基于时间的操作,防止外部函数调用无法满足require判断。

GovernMental事件中交易的gas值原理分析远超地平线,属于通过区块Gas Limit发起DoS。

2. 通过block Gas Limit发起DoS

一次性转账给所有人,很可能会导致以太坊区块 gas limit 的上限。 以太坊规定了每个区块可以花费的gas limit,超过交易就会失败。

即使没有故意攻击,这也可能导致问题。 然而,最糟糕的是 gas 成本是否被攻击者操纵。 在前面的例子中,如果攻击者添加了一部分收款列表,并设置了每个收款地址都可以收到少量的退款。 这样就会花费更多的gas来达到block gas limit的上限,整个转账操作也会以失败告终。 如下简化版案例合约所示:

区块链中以太坊的英文简称_sitejinse.com 区块链以太坊_以太坊区块链游戏

这个示例合约遍历了可以被操作的 investors[] 数组。 攻击者可以创建很多账户,使得investors[]数组变得非常大,使得执行for循环消耗的gas超过区块gas限制,使得distribute函数一直处于out-of-gas(OOG)状态,并且一直无法执行成功,影响合约正常功能的实现。

Bug修复

区块链中以太坊的英文简称_sitejinse.com 区块链以太坊_以太坊区块链游戏

合约不应对可由外部用户人为操作的数据结构执行批量操作。 建议使用检索模式,而不是传输模式。 每个投资者都可以使用withdrawFunds取回他们应得的代币;

如果必须通过遍历可变长度数组进行转账,最好估计完成它们需要多少块和多少笔交易。 然后您还必须能够跟踪您的位置,以便在操作失败时从那里恢复,例如:

区块链中以太坊的英文简称_sitejinse.com 区块链以太坊_以太坊区块链游戏

3.所有者操作DoS

另外,我们接触到之前提到的Owner权限过大和“超中心化”的问题,发现目前很多代币合约都有一个Owner账户,拥有开启/暂停交易的权限。 如果owner没有妥善保管,token合约可能会一直被冻结,造成非主观拒绝服务攻击,比如owner权限中的以下功能:

区块链中以太坊的英文简称_sitejinse.com 区块链以太坊_以太坊区块链游戏

这个owner权限的限制是,在ICO结束后,如果特权用户丢失了私钥或者变得不活跃,Owner就不能调用finalize()区块链中以太坊的英文简称,用户将永远无法发送代币,即整个令牌生态系统。 操作取决于地址。

Bug修复

可以设置多个拥有owner权限的地址,也可以设置暂停交易的时限,超时后可以恢复交易,如:require(msg.sender == owner || now > unlockTime)

以太坊区块链游戏_区块链中以太坊的英文简称_sitejinse.com 区块链以太坊

调用外部函数的代码一定要深思熟虑,一定要在代码中加入异常的判断。

遍历变长数组逐个支付的方法需要全方位的考虑和估计。 合同中不应有外人操纵。

反复强调的去中心化特征也应适用于所有者权力的概念。

从被DoS到交易系统异常,再到项目被冻结遗忘,以上例子也经历了互联网发展初期所遭受的苦难,但只要牢记教训,就可以坚定地维护区块链技术的发展.

引用:

验尸调查

以太坊智能合约攻击调查

张坤仓等.操作系统原理DOS篇(第二版):清华大学出版社,2000年9月

#dos

以太坊智能合约 --- 通过(意外)Throw 安全开发 DoS 的最佳指南

以太坊智能合约---通过区块GasLimit发起DoS的最佳安全开发指南