主页 > 如何下载imtoken钱包 > 以太坊DeFi生态目前最大的安全隐患,授权调用可以支配你的所有资产

以太坊DeFi生态目前最大的安全隐患,授权调用可以支配你的所有资产

如何下载imtoken钱包 2023-03-24 05:51:07

以太坊DeFi生态目前最大的安全隐患,授权调用可以支配你的所有资产

以太坊生态的授权模型授权调用。 只要你授权,合约就可以控制你所有的资产,不需要你的许可。这威胁到几乎每一个参与 DeFi 的用户

一个要求你无限授权的合约,它的目的显然是为了方便你的资产的操纵,而合约本身的功能当然会和你的资产的操纵有关,无论是交易,借贷,理财,等等,你必须操纵资产。

如果一个智能合约有办法在你授权后把你的一千元转账到合约地址,自然你也可以用同样的方法转10000、100000、100万,转账到合约地址或其他相关地址后地址,合约所有者实际上有能力带走这些资产。

DeFi很火,Compound很火,整个行业似乎都在参与这个生态。 创新、革命和中心化的终结似乎即将到来。

预言机、智能合约钱包、去中心化借贷、去中心化交易、去中心化等等……

不少区块链行业的从业者开始看好DeFi的黄金大厦已经基本建成。

然而,在 DeFi 晴朗的天空中,仍然飘荡着几片令人不安的乌云。

2020年4月18日,Uniswap披露智能合约漏洞,被利用窃取数十万美金资产;

2020 年 4 月 19 日,Lendf.me 因同样的漏洞被程序员(非黑客)盗取数千万美元;

这两起事件在业界引起轩然大波,尤其是Lendf.me被盗事件引发了更广泛的讨论:

“谁来承担责任?”

“好像去中心化之后,出了问题找谁联系就不好说了?”

“难道DeFi成立后,币的损失就要由用户来承担吗?”

幸运的是,因为偷走 Lendf.me 的人只是一个普通的程序员,而不是专业的黑客——他不知道如何更好地隐藏自己的行踪。 由于泄露IP,被进一步定位,程序员只能主动退还资产,以免受到法律制裁。

在这件事上,Lendf.me项目方和用户可以说是无比幸运。 他们避免了巨额资产损失和冗长法律程序的风险。 从行业的角度来看,复苏一定是件好事。 但好东西就是好东西。 笼罩在 DeFi 生态上空的乌云并未散去。 DeFi 的未来安全吗?

关于智能合约的安全性,历史上发生过多次事故。 其实,这片乌云一直都在。 这也是行业一直需要面对的风险和挑战。

但是今天我们要和大家聊的是另一片乌云。 从安全的角度来看,另一个乌云没有那么复杂,但它的影响范围更广——几乎影响到每一个参与 DeFi 的用户。

其影响程度显然是严重的,却一直被用户和业内从业者所忽视。 这片乌云就像达摩克利斯之剑,悬在DeFi的头顶。 不管你不理它,它一直都在那里,静静地注视着你,伺机吞噬你。

作为比特派安全实验室成立后的第一篇文章,我们将为大家系统的解读这片乌云,同时也会附上一个完整的智能合约案例,向大家展示这片乌云可能对普通用户造成的资产安全风险。

相信通过这篇文章,用户一定能清楚地认识到,当你参与到以太坊的DeFi生态中,你不经意操作的很多风险可能并没有那么简单,而且风险可以大到没有上位者的地步。限制。

在开始讨论之前,我想问你一个问题:

假设你有 100 万个以太币版本的 USDT,现在你决定转 10000 个到中心化交易所。 如果出现问题(比如交易所被黑或交易所所有者跑路等),您的风险限额是多少?

答案很简单,风险只是你存入的10,000 USDT。 剩下的 990,000 在你的钱包里。 黑客和交易所所有者都无法拿走这笔钱。 他们只能偷那10,000。

好了,现在把同样的场景放到 DeFi 中:

仍然假设你有 100 万美元的 USDT,现在你决定将 10,000 美元的 USDT 存入一个去中心化的 DeFi 合约。 如果出现问题(也就是 DeFi 智能合约/项目方被黑或者 DeFi 老大跑路),你的风险上限是多少?

还是10000? 错误的! 你现在的风险限额很可能变成100万个USDT,即使剩下的990,000个USDT还静静地躺在你的钱包里,你甚至可以小心翼翼地将这些USDT保存在一个从不上网的网络中,绝对是一样的安全硬件冷钱包,你的百万资产极有可能瞬间化为乌有,轰!

为什么会这样? 原因在于以太坊生态最基本的授权模型。

当您访问智能合约时,智能合约可能会向您申请授权,目的是“更方便地操作您的资产”。 这个授权调用是什么样的?

现在我们从链上找一个授权交易看一下:

这笔交易非常简单。 事实上,地址 [0x3693] 授权 [Uniswap V2: Router 2] 合约无限制地使用其所有 USDT。

这样做有什么好处?

完成这个授权操作后,Uniswap 就可以轻松操作你的资产申请usdt转账授权怎么弄,后续调用次数少,访问次数少。 有些合约甚至可以帮你兑换以太坊矿工费,即没有ETH作为矿工费,你仍然可以调用这个合约。

这种授权方式的好处其实就是方便(主要是针对项目方),方便到你甚至不需要打开钱包帮你转币。

“什么?不打开钱包就可以转币吗?谁能转币?”

这就是问题所在,只要你授权,合约就可以在没有你许可的情况下使用你所有的资产。 请记住,这与您的私钥的保存方式无关。 即使你把你的私钥放在硬件冷钱包里,然后冷冻在冰箱里,合约仍然可以擦掉你的币。

那么现在可能有人会说,虽然合约可以转我的币,但是如果智能合约代码是开源的,经过第三方审核的,没有代码可以转我的币,那我不是吗安全的?

事实上,合约授权相关的安全性与是否开源、是否经过第三方审计关系不大。 现在 DeFi 生态中的大多数(基本上所有)复杂的智能合约都可以升级它们的代码。 也就是说,今天的code可能确实不能转你的币,但是明天Owner作恶更新code,你的币就被刷光了。

(这里要特别说明一下,升级合约代码后合约地址会发生变化,所以如果Owner要转你的币,需要重新授权,但是考虑到各个DeFi项目和各个钱包软件中的授权操作)都是一键完成,所以无论合约方修改了多少版本的代码,用户实际上都不会关注。因此,普通用户仍然面临同样的风险。)

看完示例授权交易,我们再来看一个合约的示例代码:

本例中,我们模拟一个智能合约漏洞,假设合约开发者不小心将ExchangeDemo合约的transfer方法的访问控制权限设置为public。 这样的话,只要你授权合约,即使你没有对合约进行任何转账操作,别人也可以直接转账你钱包里的所有Token,就这么简单。

当然,真实情况下的合约漏洞可能非常复杂,具体表现形式也是多种多样的,但是我们这里要说明的是,如果合约不小心写了一个漏洞,可以被第三方利用授权人的资产,那么被销毁的不仅仅是合约本身,所有授权合约的人的资产都将被盗。

可能有人会说,那我们不写一个可以转移授权资产的漏洞吧? 道理没错,但在现实中这几乎是不可能的。 以太坊历史上的无数漏洞已经证明了这一点,但大部分漏洞只能影响合约中的资产或只影响合约的执行方式,而与授权相关的漏洞则会危及所有被授权人。 您所有资产的安全,现在您了解自己承担的风险有多大吗?

我们继续看下一个示例代码:

本例中,合约开发者升级了 ExchangeDemo 合约。 升级前的claim方式只能提取合约上token的余额,开发者修改为转移用户授权的token。 即更新后,用户进行授权操作后,开发者可以很方便的调用claim方法将用户钱包中的币转出,就这么简单。

上面例子中完整的测试用例和代码可以在网站上看到,有兴趣的同学可以试试。

通过ExchangeDemo V1和V2的智能合约样本我们可以看到,由于滥用授权,即使用户没有或只向合约转移少量资产,如果合约存在授权转移相关的漏洞,用户钱包中的所有授权资产都将面临风险。 即使没有漏洞,合约开发者也有权在更新代码后带走授权用户钱包中的所有资产。

这里我们可以进一步讨论,一个要求你无限授权的合约,它的目的显然是为了方便你的资产的操纵,而合约本身的功能当然也与你的资产的操纵有关,无论是交易、借贷、理财等等,都要操纵资产。

因此,合约本身至少会有相关的接口来进行转币操作。 当然这个转币操作是功能性的,比如存入50000 USDT到合约地址做抵押用途,或者存入USDT到合约地址做兑换用途。 输入1000 USDT,嗯,现在的问题是,由于合约本身有这样的接口,合约Owner(这里需要看合约代码来写)有可能在未经你允许的情况下继续使用同一个调用让你去往合约中存入更多的资产,也就是说,即使代码没有升级或者没有相关的漏洞,这种可能性仍然存在,尤其是可以为你支付以太坊矿工费的合约,这意味着即使是呼叫启动审核也可能是合同所有者的责任。

也就是说,如果一个智能合约有办法在你授权后把你的一千元转账到合约地址,自然你也可以用同样的方式转一万,十万,一百万,转账到合约地址或其他相关地址后,合约所有者实际上有能力拿走这些资产。

这里要说明一下,0x等合约在这一点上做了一些防范。 他们在调用接口时会验证用户的签名,也就是说,他们至少可以保证调用操作是由用户发起的。 但这实际上取决于合约代码的编写方式。 合约代码可以验证用户或合约所有者的签名。 当然,什么也验证不了。 合约方法也可以由用户调用或者由合约Owner调用,不同的写法会赋予不同的角色对你钱包中币的控制权。 听起来很可怕吗?

估计又有人要说了,如果智能合约的拥有者不作恶,就不会有这个问题了?

这里我们想稍微解释一下:

去中心化首先要实现的是不需要第三方信任。 如果一个去中心化的项目需要你信任合约所有者,那么去中心化的意义何在?

此外,更重要的是,你原本以为合约所有者对你资产的影响仅限于你参与智能合约的部分,比如你转为dex进行交易,转为去中心化借贷进行理财。合约的货币,你以为合约所有者只能影响你存入的那部分资产。 现在你应该明白了,合约拥有者不仅可以影响这部分,还可以影响你钱包里剩余的资产,不管你的钱包是冷是热,它都可以是我的。

那么,即使我们假设合约所有者是一个道德完美的人,随着智能合约变得越来越复杂,漏洞的风险也越来越高。 在之前的认识中,大部分人可能会认为,如果出现漏洞,主要的资产风险还是在合约上。 至多,攻击者会拿走合约中存储的所有币。 但是本文的例子告诉你一个事实,如果合约漏洞恰好与授权转账相关,那么风险就会扩散,所有被授权给合约的地址都会被抹掉申请usdt转账授权怎么弄,只要攻击者扫描所有那些地址一下子就被授权了,然后这些地址上的所有币都被一个一个转移。

更重要的是,这也对智能合约开发者如何安全保管Owner密钥提出了更高的要求。 如果有一天你的 Owner key 丢失了,毁掉的不仅仅是合约中的币。 完成的是所有授权用户钱包中的所有资产。 这谁受得了?

看到这里,你明白为什么这篇文章的标题是《以太坊DeFi生态中最大的安全隐患》了吗?

由于以太坊生态的滥用授权已经到了非常严重的地步,甚至可以说几乎所有的DeFi合约都在要求无限制的无限制授权。 DeFi 项目本身的行为无可厚非,但如果告诉你,你承担的风险是你所有的资产,而不仅仅是用于参与 DeFi 的币,你应该作何感想?

对于以太坊生态滥用授权的问题,区块链行业此前也有过一些声音,但还远远不够。 无论是开发者、从业者、用户等群体,99.9%的人对此一无所知,滥用授权的情况几乎都是,是时候改变这种现状了。

这里我们列举一些滥用授权(无限制)的项目示例:

化合物

Uniswap

凯伯

制作者

0x

平衡器

wxya

以太三角洲

爱德思

imToken 代币

上面列表中的前几个Compound、Uniswap、Kyber是当前DeFi世界中炙手可热的明星项目,但是这些项目无一例外的选择了让用户无限授权获得用户资产的完全控制权,也就是说,任何用户只要使用过以上项目,你钱包里的币随时都可能面临本文提到的风险,这其实是一个遗憾。

我们筛选了部分无限制授权地址,发现大部分地址还是有资产的,其中不少拥有数百万甚至数十亿的资产,而这些地址的拥有者已经在不知情的情况下将资产的控制权交给了别人.

上述合约应调整授权码,改为按需授权。 比如你只需要兑换1,000 USDT,那么就只授权1,000 USDT,任何额外的授权都是不授权的。 使用这些合约的用户也应该改变自己的DeFi合约使用行为,将不参与DeFi的币种放到另一个不会被授权给任何应用程序的地址,以保护自己的资产。

由于以太坊生态的快速发展和演进,我们在比特派专门设计了以太坊安全中心。 切换到以太坊系统后,可以看到我们在以太坊安全中心开发了合约授权检测功能。 除了在比特派查看您的地址是否存在滥用授权外,您还可以查看任何外部地址当前的授权状态。 对于被滥用的授权,还可以进行授权恢复操作。

关于比特派的合约检测功能,我们会写一篇说明文章,指导大家如何使用。 你的地址现在安全吗? 只是检查一下。

说到普遍存在的滥用授权,比特派在这方面是怎么做的呢? 以比特派钱包常用的批量转账功能为例,我们的做法是有限授权,即如果您需要向50个地址转账100 USDT,比特派只会授权100 USDT,不会产生任何额外授权。 再比如比特派代付USDT矿工费的功能,我们根本没有使用合约授权。 将用户的权益放在首位,抵制任何增加用户风险的行为。

考虑到这片乌云下的安全,普通用户参与DeFi应该有哪些注意事项?

1、定期使用比特派等钱包提供的授权扫描功能,查看哪些合约被你授权过(无限授权);

2、使用多个以太坊地址,将充值地址与参与DeFi地址分开,将只用于DeFi活动的币种放入DeFi地址,这样即使乌云密布,充值地址中的币种也是仍然安全;

3.回收部分应用授权,降低风险。 至少你应该知道哪些应用程序可以在未经你许可的情况下直接转移你钱包中的币;

4.呼吁项目方不要滥用授权,按需授权,降低用户安全风险。

去中心化金融确实代表着未来,也是区块链技术非常重要的应用场景。

但让我们走到一起的从来都不是惊天动地的概念、深奥的代码或基于炒作的技术。 它一直是对私有财产神圣不可侵犯的信念。

在我们看到曙光之前,这是唯一让我们继续前进的东西。

比特派安全实验室

2020 年 7 月 30 日