LOADING...
LOADING...
LOADING...
当前位置: 玩币族首页 > 新闻观点 > 以太坊是黑暗的森林

以太坊是黑暗的森林

2020-09-02 等风的小胖 来源:区块链网络

以太坊是黑暗的森林

@Dan Robinson & Georgios Konstantopoulos

这是一个恐怖的故事!

挑战

像任何普通人一样,我在Uniswap Discord的#support频道中花费了大量时间。(注:Uniswap是Paradigm的投资组合公司。)

在星期三下午,有人问是否有可能收回意外发到货币对合约的Uniswap流动性代币。

一开始我的想法是代币将永远被锁定。但是那天深夜,我突然意识到,如果代币还在那里,那么任何人都可以回收它们。

当任何人在Uniswap核心合约上调用刻录功能时,合约将测量其自己的流动性代币余额并对其进行刻录,将提取的代币提供给调用方指定的地址。这是Uniswap v2预期行为的核心部分(基本机制在Uniswap v2白皮书的3.2节中进行了描述)。

我找到了合约。流动性代币(LP)仍然存在,价值约12,000美元。

这意味着三件事:

●有一个滴答滴答的钟。即使没有其他人注意到这笔免费资金,任何人都可以随时提取自己的流动性代币,意外地从合约中收到代币。

●我假装成白帽黑客,并尝试为意外发送代币的人找回代币。这就像在池中调用burn函数并将其转移到我自己的地址一样简单。

●除…外。我就知道不会那么简单。

黑暗森林

以太坊区块链是一个高度对抗的环境,这已经不是什么秘密了。如果可以利用智能合约牟利,那么最终就是可以。新黑客攻击的频率表明,一些非常聪明的人花费大量时间来检查合约漏洞。

但是,与mempool(一组未确认的交易)相比,这种令人无法原谅的环境显得苍白。如果这条链本身是战场,那么内存池会更糟:一片黑暗的森林。


《黑暗森林》是我最喜欢的科幻小说。它引入了“黑暗森林”的概念,在这种环境中,侦查意味着高级掠食者必将死亡。在这种环境下,公开标识别人的位置和直接销毁他们基本上是同一个思议。(这个概念也是以太坊测试网上的黑暗森林游戏的灵感。)

在以太坊内存池中,这些顶点掠食者采用了“套利机器人”。套利机器人监视未决交易,并尝试利用它们创造获利机会。智能合约研究人员Phil Daian和他的同事一起写了Flash Boys 2.0论文并创造了“矿工可提取价值”(MEV)一词,对此,没有人比白帽黑客更了解这些机器人了。

菲尔曾经告诉我一个他称之为“广义领先者”的恐怖宇宙。套利机器人通常会在内存池中查找特定类型的交易(例如DEX交易或oracle更新),并尝试根据预定算法提前进行交易。广义的领跑者会通过复制并用自己的地址替换地址来寻找能够从中赚钱的任何交易。他们甚至可以执行交易并复制由执行操作跟踪生成的有利可图的内部交易。

这就是为什么这次救援并不简单的原因。任何人都可以调用此burn函数。如果我提交了一项称为销毁的交易,那就像是闪烁的“免费资金”标志直接指向这个获利的机会。如果这些怪物确实在内存池中,他们将看到、复制、变异和管理我的交易,并在我的交易之前拿走金钱。

请注意,这种环境比以太坊区块链状态本身还要残酷得多。这些免费的钱已经在链上呆了大约八个小时,未被发现,等待被所谓的销毁者席卷。但是任何捡起它的尝试都会在飞行中被立即截断。

营救

为了尝试在不通知机器人的情况下提取资金,我需要对交易进行混淆处理,以便无法检测到对Uniswap对的呼叫。这将涉及编写和部署自定义合约。因为我是DeFi专业的思想领袖,所以我以前从未真正与以太坊签订过合约。

我需要帮助,已经过了午夜。幸运的是,我认识的一些最好的智能合约工程师住在欧洲时区。 我的Paradigm同事Georgios Konstantopoulos同意协助合约部署并提交交易。 我们另一个投资组合公司Yield的首席工程师Alberto CuestaCa?ada自愿执行合约。


一些优秀的以太坊安全工程师帮助我们制定了一个混淆计划。除了将通话隐藏为内部交易之外,我们还将交易分为两部分:激活交易的固定交易,以及激活交易的get交易,可以挽回资金。这将如下实现:

部署一个Getter合约,当它的所有者调用该合约时,仅在激活后才能进行刻录调用,否则将还原。

部署一个Setter合约,当其所有者调用该合约时,该合约将激活Getter合约。

在同一个块中提交Set交易和Get交易。


如果攻击者仅尝试执行Get事务,它将在不调用burn函数的情况下还原。我们希望在攻击者依次执行Set和Get事务、发现对pool.burn的内部调用并领先我们之前,我们的交易已包括在内。


令我们惊讶的是,即使我们手动设定了Gas限制,Get交易也会被Infura拒绝。在几次失败的尝试和重置之后,时间压力逐渐加深,我们变得有点急躁。我们让第二笔交易滑入了下一个区块。

这是一个致命的错误。

我们的Get事务确实包括在内,但是出现UniswapV2:INSUFFICIENT_LIQUIDITY_BURNED错误,这意味着流动性消失了。事实证明,在我们的交易进入内存池后的几秒钟内,有人执行了交易并清算了资金。

怪物吞噬了我们。

这一课

怪物是真实存在的。

我们从理智上知道这些机器人已存在。但是,除非您实际看到它们在起作用,否则您可能会低估它们。

我们希望,通过授权合约以内部呼叫的形式进行救援,将存储中的变量作为传递地址可以保护我们。但是并没有。

如果您发现自己处于这种情况,我们建议您与安全研究人员Scott Bigelow联系,Scott Bigelow一直在研究此主题,并为更好的混淆器提供了原型实现。

不要马虎

即使在时间压力下,我们也应该坚持计划。如果我们在脚本上花费更多时间,调整合约(也许将Getter合约更改为不执行任何操作,而不是在激活之前调用,),或者甚至同步了自己的节点以避免使用Infura,我们或许能够将交易放入同一区块。

不要依靠普通的基础设施

因为所做的事情很奇怪,所以很难通过Infura这样的现有基础架构阻拦它。在我们的案例中,我们试图基于当前的区块链状态提交看起来像是会失败的交易,Infura有合理的保护措施。 使用我们自己的节点可能会避免此问题。

更好的是,如果您碰巧认识了一个矿工(我们不知道),则可以让他们直接将交易包含在一个区块中,从而完全跳过内存池和怪物。


这只是其中一个例子。每天在发生无数次类似的事情。今天,领先者只是机器人。明天将是矿工。

今天,矿工们不采取任何行动就把钱留在了桌子上。将来,他们会为了自己的利益而在内存池中重新排序并提交交易。更糟糕的是,他们可能会重组其他矿工开采的区块,以试图窃取他们未主张的MEV,从而导致链条不稳定。

我们认为这个未来是可以避免的。乐观主义(另一家Paradigm投资组合公司)对如何重定向MEV以造福生态系统抱有雄心勃勃的愿景,这是其第2层扩展解决方案(乐观汇总)的一部分。

(本文为翻译转载,仅代表原作者个人观点。原文地址:https://medium.com/@danrobinson/ethereum-is-a-dark-forest-ecc5f0505dff)

EOS Cannon往期好文精选

1、建设新一代互联网的五大关键

2、探索流动性挖矿的设计空间(下)

3、Yearn.finance安全吗?

4、黑客在ETC网络中发动51%算力攻击,盗取了80.7万ETC(下)

5、非常规损失与Bancor V2(下)

6、中央银行已经变得无关紧要了(下)

7、比较流动性挖矿和PoW

EOS Cannon

社群官网:https://eoscannon.io

官方twitter:https://twitter.com/cannon_eos

—-

编译者/作者:等风的小胖

玩币族申明:玩币族作为开放的资讯翻译/分享平台,所提供的所有资讯仅代表作者个人观点,与玩币族平台立场无关,且不构成任何投资理财建议。文章版权归原作者所有。

LOADING...
LOADING...