区块链挖矿_区块链开发_比特币行情_快报网

网站地图资讯

区块链挖矿_区块链开发_比特币行情_快报网

当前位置: 快报网 > 观点 >

经常让人忽视的漏洞——以太坊gas的三大安全隐患

时间:2021-07-14 18:46人气:来源: www.fi3df4m.com

作为第一种漏洞的workaround,笔者近期看到不少关于所谓的“元买卖”的讨论。元买卖非常像买卖,但可以通过第三方进行转发。第三方中继器是实质发送买卖的竞价推广账户,因此它支付gas。

智能合约审计职员一看到for循环就会感到紧张。尽可能防止用它们,除非它们遭到恒定迭代次数的限制。

经常让人忽视的漏洞——以太坊gas的三大安全隐患 经常让人忽视的漏洞——以太坊gas的三大安全隐患

假如调用失败,另一个诱惑的解决方法是回滚买卖,但这意味着当调用因正当缘由失败时,没办法补偿中继器。

买卖的发送者指定了将消耗gas的上限,称为gas限制。此限制一般通过模拟买卖来自动确定。假如交易平台如此做,他们比较容易被欺骗,从而消耗很多gas。

经常让人忽视的漏洞——以太坊gas的三大安全隐患 经常让人忽视的漏洞——以太坊gas的三大安全隐患

因为ETH的计算资源是有限的,因此单个区块中可以用多少gas也是有限的。这被叫做区块gas限制。矿工试图将买卖打包进一个区块,以尽量接近该gas限制,由于gas成本是支付给矿工的。

关于买卖的一个基本事实是,它们是由买卖发送者——签署买卖的帐户支付买卖成本的。

经常让人忽视的漏洞——以太坊gas的三大安全隐患 经常让人忽视的漏洞——以太坊gas的三大安全隐患

最好的解决方法是直接解决根本问题,即中继器被允许指定买卖的gas限制。要将其锁定,请务必在签名消息中包含gas限制,并检查加盟合约中是不是遵守了该限制。这是Status的中继加盟所使用的办法。

假如deposit数组足够长,则没办法再调用withdrawAll,由于如此的买卖不合适区块。攻击者可以通过重复调用deposit直到达到正确的数组长度来轻松致使此状况的发生。这将锁定合约中所有现有些以太币。

随机数用于预防重放攻击,但请注意,nonce仅在调用成功时递增。一个恶意的中继器可以通过操纵gas限制来使调用反复失败。每次中继器调用实行时,无论用了多少gas,它们都会得到报酬。

减少风险

区块填充攻击的本钱非常高,因此为了减轻这一风险,在设计合约时,尽可能减小固按期限的财务影响。比如,拍卖一般有同意出价的截止日期,因此区块填充攻击可能会阻止大家出价。确保在如此的系统中拍卖的产品没足够的价值,以至于区块填充攻击在经济上具备可行性。

转发买卖的人是支付gas的人

发送到区块链的每笔买卖都需要通过很多的计算工作来处置。Gas是衡量和支付处置工作的方法。用户倾向于将gas视为一种让人困惑的烦恼,开发职员总是从优化本钱的方面看待gas。作为一名出色合约审计员,笔者常常将gas视为潜在的攻击载体。在这篇文章中,笔者将研究gas致使的三种方法。

满足第一个条件并不难。假如我在一个中心化交易平台拥有一个竞价推广账户,我可以指示交易平台将资金转移到我选择的竞价推广账户。典型的推行步骤就包括交易平台从其中一个竞价推广账户发送买卖。因为是交易平台发送买卖,他们需要支付gas。

这可能成为一种拒绝服务攻击载体——攻击者导致智能合约没办法运行的一种方法。以下是易受攻击的智能合约示例:

上面的代码无意义地消耗了很多gas,非常明显这部分gas可以用于更有效的用。或许攻击者的合约可以用这部分gas进行一些有价值的计算。正如Level K近期察看到的那样,多余gas的一个非常不错的作用就是用它来发行GasTokens,可以退回,也可以供应。

减少风险

为了保护自己免受此类攻击,请确保一直为你的买卖设置适当的gas限制。

将买卖填充进区块的人可以发起拒绝服务攻击

1.攻击者可以叫你发送一个买卖,并且
2.它们可能致使该买卖消耗很多gas。

Christian Lundqvist的“容易多重签名钱包”主要通过允许用户将买卖发件人指定为其签名消息的一部分来缓解此问题。这意味着恶意中继器没办法在刚开始就参与买卖。

概要

在这种策略中,中继器具备不一般的攻击载体。作为买卖发送者,他们可以决定他们提供多少gas。假如提供太少的gas,它们可能致使调用失败。假如他们有特殊的动机如此做,这将会是一个问题,如下面的合约:

对于智能合约开发职员来讲,满足第二个条件比较容易。智能合约可以运行任意代码以响应传入的买卖。以下智能合约在收到以太币转账时会消耗不少gas:

经常让人忽视的漏洞——以太坊gas的三大安全隐患 经常让人忽视的漏洞——以太坊gas的三大安全隐患

发送买卖的人是支付gas的人

一种解决方法是不管调用的成功或失败都增加nonce,但会致使拒绝服务攻击载体的产生。每次用户广播他们的元买卖时,恶意中继器都可以获得该元买卖并致使它像以前一样失败。目前nonce已经增加,用户需要签署新的元买卖,然后重复该过程。

在写作本文时,ETH主互联网的区块gas限制约为8,000,000。消耗更多gas的买卖根本没办法挖掘。

通过完全用买卖填充你的买卖区块,也可以对整个区块链发起拒绝服务攻击。只须这部分买卖指定了足够的gas,理性的矿工就会将攻击者的买卖打包进区块。

减少风险

假如出现以下状况,可能致使攻击载体的产生:

这是通过签名和加盟合约完成的。用户签署他们的元买卖并将其广播给全世界。任何看到元买卖的人都可以将其转发给加盟合约。只须消息包含有效签名,加盟协定就会实行指定的调用。一般用户需要给中继器支付成本以支付中继器所需花费的成本。

假如不对gas问题进行适合的关注,可能会致使紧急的智能合约漏洞。在审查代码时,这部分漏洞一般是不明显的,但它们确实会导致非常大的麻烦。

标签:


热门标签