针对NFT资产的攻击会越来越频繁

白帽黑客samczsun:针对NFT资产的攻击会越来越频繁

注:原文作者是拥有“审计上帝”之称的白帽黑客samczsun,同时他也是Paradigm的研究合伙人,其最近出手拯救了BitDAO MISO荷兰拍卖资金池中的3.5亿美元资产,而在这篇文章中,他提醒了关于NFT代币标准的潜在安全风险,他还预测称,随着ERC-721和ERC-1155代币标准变得越来越流行,针对NFT的攻击很可能会越来越频繁。

如果你从事软件工程方面的工作,很可能你听说过至少一条软件工程原则。虽然我不主张严格遵守每一条原则,但有一些确实是值得关注的。

我今天要讲的就是最小惊讶原则,它有一个奇特的名字,但却是一个非常简单的想法。它所说的是,当呈现声称要做某件事的代码时,大多数用户都会假设它是如何完成这件事的。因此,作为开发人员,你的工作是编写符合这些假设的代码,这样你的用户就不会感到意外。

这是一个很好的原则,因为开发人员喜欢对事物进行假设。如果你导出一个名为calculateScore(GameState) 的函数,很多人就会假设该函数只会从游戏状态中读取。如果你还改变了游戏状态,你会使得很多人面临困惑的状态,他们试图弄清楚为什么他们的游戏状态会随机被破坏。即使你把它放在文档中,仍然不能保证人们会看到它,所以最好首先确保你的代码不会令人惊讶。

“6小时的调试工作,可以为你们节省5分钟的文档阅读时间。”

越安全越好,对吗?

早在 2018 年初,当ERC-721 标准被起草出来时,有人就提出了实施转账安全性‌的建议,以确保代币不会被卡在不用于处理代币的接受者合约中。为此,提案作者修改了transfer函数的行为,以检查接收方是否能够支持代币转账。他们还引入了unsafeTransfer函数,如果发送者愿意,该函数将绕过这个检查。

然而,由于担心向后兼容性,这个函数在随后的提交中被重命名了。这使得ERC-20 和 ERC-721 代币的transfer函数表现相同。但是,现在需要将接收方检查转移到其他地方。因此,标准作者就引入了safe类函数:safeTransfer 以及 safeTransferFrom。

这是一个关于正当性问题的解决方案,因为有许多 ERC-20 代币被意外转移到从未期望收到代币的合约的例子(一个特别常见的错误是将代币转移到代币合约中,将其永久锁定)。而在起草 ERC-1155 标准时,提案作者从ERC-721标准汲取了灵感,不仅在转账时,而且在铸造(mint)也纳入了接收方检查,这一点也不足为奇。

在接下来的几年里,这些标准大多处于休眠状态,而 ERC-20代币标准保持了它的流行状态,而最近gas成本的飙升,以及社区对NFT兴趣的增强,自然而然导致开发者越来越多地使用ERC-721和ERC-1155代币标准。有了这些新的兴趣,我们应该庆幸这些标准的设计考虑了安全性,对吗?

越安全越好,真的吗?

Ok,但对于转帐和铸造来说,安全意味着什么呢?不同的当事人对安全有不同的解释。对于开发人员来说,一个安全函数可能意味着它不包含任何bug或引入额外的安全问题。而对于用户来说,这可能意味着它包含额外的护栏,以保护他们不被意外射中自己的脚。

事实证明,在这种情况下,这些函数更多的是后者,而较少会是前者。这是特别令人遗憾的,因为在transfer和safeTransfer函数之间进行选择时,你为什么不选择安全的那个函数呢?名字都体现出来了!

好吧,其中的一个原因可能是我们的老朋友reentrancy(可重入性),或者我一直在努力将其重命名为:不安全的外部调用。回想一下,如果接收方是攻击者控制的,则任何外部调用都可能不安全,因为攻击者可能会导致你的合约转换为未定义状态。根据设计,这些“安全”函数执行对代币接收者的外部调用,通常在铸造或转移期间由发送者控制。换句话说,这实际上是不安全外部调用的教科书示例。

但是,你可能会问自己,如果允许接收方合约拒绝他们无法处理的转账,那最坏的后果是什么?好吧,让我通过两个案例研究来回答这个问题。

例子1: Hashmasks

Hashmasks是一个供应有限的 NFT头像项目,用户每次交易最多可以购买 20 个mask NFT(尽管它们已经售罄数月了)。下面是购买mask的函数:

你可能觉得这个函数看起来非常合理。然而,正如你可能已经预料到的,在 _safeMint 调用中隐藏着一些险恶的东西。让我们来看看。

为了安全性,这个函数对token的接受者执行了一次callback回调,以检查他们是否愿意接受转账。然而,我们是token的接收者,这意味着我们刚刚得到了一次callback回调,在这个点上我们可以做任何我们想做的事情,包括再次调用mintNFT函数。如果我们这样做,我们将在仅铸造了一个mask后重调用该函数,这意味着我们可以请求再铸造另外19个mask。这导致最终铸造出了39个 mask NFT,尽管规则允许铸造的最大数量只有20个。

例子2: ENS域名封装器

最近,来自ENS 的Nick Johnson联系了我,他想让我看看他们正在进行的ENS域名封装器工作。这个域名封装器允许用户用新的ERC-1155 token代币化他们的ENS域名,这提供了对细粒度权限以及更一致的 API 的支持。

概括地说,为了封装任何ENS域名(更具体地说,除了 2LD.eth 之外所有的ENS域名),你必须首先批准域名封装器以访问你的ENS域名。然后,你调用wrap(bytes,address,uint96,address),它既为你铸造一个ERC-1155 token,也负责管理底层的ENS域名。

下面就是这个wrap函数,它相当简单。首先,我们调用_wrap,它执行一些逻辑并返回哈希域名。然后,我们确保交易发送方确实是ENS域名的所有者,然后再接管该域名。请注意,如果发送方不拥有底层的ENS域名,则整个交易应还原,撤销在_wrap 中所做的任何更改。

下面是_wrap函数本身,这里没有什么特别的。

不幸的是,正是这个 _mint 函数,它可能会给毫无戒心的开发者带来可怕的惊喜。ERC-1155 规范规定,在铸造token时,应咨询接收者是否愿意接受该token。在深入研究库代码(该代码库根据OpenZeppelin的基础稍作了修改)后,我们发现情况确实如此。

但这到底对我们有什么好处呢?好的,我们再一次看到了一个不安全的外部调用,我们可以用它来执行重入攻击。具体地说,请注意,在callback回调期间,我们拥有了代币ENS域名的ERC-1155 token,但域名封装器尚未验证我们拥有基础ENS域名本身。这使我们能够在不实际拥有ENS域名的情况下对其进行操作。例如,我们可以要求域名封装器解开我们的域名,燃烧掉我们刚刚铸造的token并获取底层的ENS域名。

现在我们拥有了底层的ENS域名,我们可以用它做任何我们想做的事情,比如注册新的子域名或者设置解析器。完成后,我们只需退出callback回调。域名封装器将和底层ENS域名的当前所有者(即我们)交互,并完成交易。就像那样,我们已经取得了域名封装器被批准用于的任何ENS域名的临时所有权,并对其进行了任意更改。

结论

令人惊讶的代码可能会以灾难性的方式破坏事物。在本文的两个案例下,开发人员合理地假设safe函数类可以安全地使用,却无意中增加了他们的攻击面。随着ERC-721和ERC-1155代币标准变得越来越流行及广泛,这类攻击情况很可能会越来越频繁。开发人员需要考虑使用safe类函数的风险,并确定外部调用如何与他们编写的代码进行交互。

24小时热点

sswp币有价值吗?SSWP币可以长期持有吗?

在加密货币市场上,SSWP币作为一种新兴数字资产备受关注。许 ...

32668

ZT GLOBAL 交易所

温室气体包括

温室气体是指在温室效应的作用下,能够多少程度上使大气中的温度 ...

4782

以太经典

香港的金融监管机构包括

一、香港金融监管机构 1、香港金融管理局(HKMA): ...

128072

Solanat

f2pool矿池官网

f2pool是一项创新技术,采用节点集群技术,以减少维护和管 ...

277813

币团交易所

十大虚拟币交易平台app汇总!

自从前两年比特币大火之后,带动了整个虚拟币行业,虚拟币也越来 ...

1114128

一岛

FIL-Filecoin 简介详情

Filecoin是IPFS上的一个代币,而Filecoin就 ...

10299

星舟艺术平台

discord怎么加入社区

Discord是一款适用于Windows,Mac,Andro ...

280998

洞壹元典

coinmarketcap官网

CoinMarketCap 是一个在线行情报价的数字货币工具 ...

751449

HitBTC交易所

MARVIN币(Marvin Inu)要挖多久?

段 MARVIN币(Marvin Inu)将在2021年4 ...

15957

瓦特(WBF)交易所

Pi币可换食衣住行了!台湾达成支付共识刷Pi Network!

火必(Houbi)交易所在至今正好3个月以前,正式放开Pi( ...

57432

阿瓦隆矿机

热点专题

虚拟货币传销/诈骗案件的通常做法

当更多人似懂非懂的对虚拟货币有些模糊的概念,还搞不清比特币和 ...

4224758

瓦特(WBF)交易所

gpt4.0中文版免费

GPT-4(生成预可训练技术4.0)是一个由OpenAI开发 ...

3931692

维公链

iBox 链盒科技

据iBox官方消息,9月17日20:00,iBox将正式发布 ...

3410044

iBox

揭秘网络传销行骗七大套路!

不管网络传销打着什么旗号,戴着什么面具,即便有着“72变”, ...

3054794

A网(AOFEX)交易所

Gem和Genie功能大对比

2022年4月25日,OpenSea官方发推宣布收购NFT交 ...

2394344

TopHolder 头号藏家

Genie 就是一个 NFT 市场的交易聚合器

Web3 中的「聚合器」是一个非常重要的组件,例如 1inc ...

2360742

嗨艺购

一文读懂NFT 交易聚合器GEM

购买 NFT 的主要问题之一在于,限制了用户一次只能购买一个 ...

2320416

第九空间

fc2是什么网站?fc2点击在此访问

FC2是日本最大的乃至亚洲最大的域名服务商,也是一家全面的网 ...

1965848

币团交易所

afd爱发电是什么网站 afd登录入口在哪

为什么需要爱发电? 我们认为,长期耕耘一件事或几件事的创作 ...

1737274

SAN币

亚洲最大成人平台“SWAG”网站关停,负责人被捕

2020 年,SWAG 发行了 6.25 亿枚治理代币 SW ...

1717848

NFT和元宇宙