http://www.ncstyz.com

TokenPocket钱包安卓下载|区块链漏洞:如何避免编写易受攻击的代码和易受攻击的 ERC20 代币

本文重点介绍新发现的 ERC20 batchOverflow 漏洞、开发过程中所犯的导致易受影响的 ERC20 代币开发的错误,以及为防止再次犯同样错误而应采取的步骤。

ERC20代币漏洞

随后被确定为batchOverflow漏洞的事件发生在2018年4月。漏洞利用了BeautyChain(BEC)和MeshBox(MESH)等ERC代币的易受攻击的ERC20合约,凭空创建了不合理数量的代币。

在发现batchOverflow问题后不久,安全公司PeckShield发现了各种以太币中的许多漏洞。 受影响的代币包括:

推荐阅读 1

比特币最新上涨让 MicroStrategy 受益:数据令人惊讶

50分钟前 2

Poloniex 遭到黑客攻击,据报道价值超过 1.2 亿美元的 BTC、ETH、XRP 和 Shiba Inu 消失了

2小时前
  • 极光道 (AURA)
  • 美丽链 (BEC)
  • UG代币(UGT)
  • 智能数十亿(SMART)
  • 第一币 (FRST)
  • GG代币(GG)
  • 人民币代币 (CNY)
  • CNYTokenPlus (CNYt+)
  • 无用以太坊代币 (UET)
  • 六角形 (HXG)
  • 教育(教育)
  • 智能网格(SMT)
  • MTC
  • 斯卡

这些缺陷是在使用batchOverflow攻击后不久就发现的。 研究人员调查了攻击者留下的可疑交易以找到它们。

可疑交易的主要指标是异常高的传输率,有时会超过代币的总供应量。 一些重要交易所已全面停止接受 ERC20 代币的充值和提现,以阻止投机行为。 这些对话是:

  • OKEx
  • 波洛尼克斯
  • 改变利
  • 火币专业版

ERC20代币的两个主要问题

研究人员在搜索 ERC20 代币中的漏洞时发现了多种攻击,并为每种攻击指定了不同的名称。 但实际上,所有这些代币都只有两个主要问题:

  • 溢出漏洞
  • 不受保护的功能

让我们仔细看看这些问题。

溢出漏洞

利用整数溢出或下溢(ERC20 代币标准中的一个缺陷)是溢出漏洞的基础。 当数学运算的结果超出变量可以表示的范围时,就会出现此问题。

在以太坊智能合约中,当从零减去任何值时,结果是一个非常大的值。 两个巨大值相加的结果将接近于零并且会回绕。

在本例中,第 206 行具有易受影响的代码。 未正确检查该行的添加是否存在溢出。 _value 和 _feeSmart 设置过大的值会导致它们的总和溢出,导致值低于帐户余额并通过条件,从而将大得离谱的值添加到所设置帐户的余额中。

未受保护的功能漏洞

未受保护的功能是 ERC20 代币安全问题的第二类。 仅当开发人员忽略包含限制函数访问的必要修饰符时,才会出现此类 ERC20 漏洞。 这意味着任何用户都可以自由调用某些基本的核心功能。

例如,创建以太坊智能合约时的标准程序是限制单个帐户对特定功能的访问。 通常,该帐户被称为所有者。

AURA 代币正是经历了这一点。 设置所有者的函数不受 OwnerOnly 修改的限制,即使合约内的函数受到限制。 因此,任何人都可以使用 setOwner 函数通过调用合约来选择随机所有者。 幸运的是,此时所有者帐户除了普通用户之外什么也做不了,因此这个问题不会被安全地修复。

如何避免编写易受攻击的代码

如你所见,这些 ERC20 功能漏洞通常是无意的代码错误造成的。 此外,尽管这些错误已被很好地识别并且易于预防,但以太坊网络上仍然存在易受影响的合约。

有什么办法可以避免添加到一堆吗? 在使用 create ERC20 token 时,你能否避免编写易受攻击的代码? 当然可以,而且当然是可行的。 我们提供以下建议来帮助你保证高度的代码安全:

1. 为了防止任何东西被暴露,请清楚地表明函数和状态变量的可见性。

2. 使用 OpenZeppelin 的 SafeMath 等库来阻止上溢和下溢。

3. 整数除以四舍五入时要小心。 由于不断向下舍入,5/2 等于 2,而不是 2.5。

4. 为了减少 Gas 使用量并防止拒绝服务攻击,允许用户提取代币(在奖金、游戏、空投等中)而不是推送代币。

利用最新的 Solidity 构造: * 适当使用 require 和assert,以便自动分析器可以正式验证你的代码。

使用 keccak256 代替 sha3,并使用 selfdestruct 代替自杀。

使用公共测试网 Ropsten 创建测试合约。 建立错误赏金计划并允许社区测试你的合约。

获得对你的合约安全性的官方审核。

通过遵循这些简单的步骤,你可以提高代码的安全性并避免编写易受影响的代码。

结论

最近的batchOverflow 黑客攻击演示了单个编码错误如何可能导致严重的安全问题。 尽管 ERC-20 代币容易发生溢出,但开发人员只需仔细检查其代码并采取额外的预防措施即可避免溢出和下溢。

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。