2020年9月15日,一个行动小组通宵工作,从一份脆弱的智能合约中救出960万美元。以下是他们的故事。
Sam sun又名samczsun
让我总结一下智能合约的一些故事。
当然,我没想到会有什么有趣的事。就像《两颗豌豆的产量种植克隆项目》一样,在过去的几周里,我看到了同样的迹象:你可以成为下一个百万富翁。大多数克隆项目只需对经过良好审核的代码进行一些调整,这有时会导致灾难性的结果。
但在所有的噪音中,有一些代码是我从未见过的。本文的主角,这个智能合约,持有超过25000个以太,当时价值超过960万美元。对于那些在逻辑上努力寻找错误的人来说,这将是一次全面的搜寻。
我快速看了一下去掉ETH的代码,找到了两个匹配项。其中一个将ETH传输到硬编码的代币地址,因此可以忽略它。第二个是将ETH传输到发送方的burn函数。在跟踪了这个特性的使用之后,我发现任何人都可以毫不费力地为自己伪造一个代币,然后为智能合约中的所有以太体烧掉它。我的心跳加快了。突然间,问题变得严重起来。
我的智能合约是留置权融资协议。不幸的是,他们的团队是匿名的!唯一的即时消息支持平台是telegram,我不确定telegram频道的管理员是开发人员还是早期的支持者。我不想不小心把这个漏洞暴露给错误的人。
在他们的网站上呆了一段时间后,我发现他们曾与consensys diligence和certik合作进行代码审计。这似乎是一个很好的方法,而且consensysdiligence和certik在审计期间一定与开发人员进行了交互。我很快就在电报上和consensys diligence的安全工程师JohnMardlin(又名maurelian)私下聊了一会儿。
很难开始聊天或回复。不幸的是,时间一分一秒过去了,莫里安没有回应。他好像睡着了。如果您有hsecur的留言,请与我联系。
几分钟后,我收到了一个过去曾和我共事过几次的人的回复——亚历克斯·韦德,consensys diligence的另一位安全工程师。
亚历克斯韦德
我刚把头枕在枕头上,听到室友敲门。”山姆问过任何在ETHsec电报频道了解康森斯勤勉的人。”
山姆和亚历克斯在一次谈话中说,这可能是一个漫长的夜晚,这是真的
一听说是萨姆,我就知道这不是件好事。我找到了几个月前建立的与连战沟通的渠道和一个电子邮件地址。他们的队伍是匿名的。有这些总比什么都没有好。
我还半睡半醒。Sam不想在聊天中详细谈论这件事,并要求zoom进行对话。我一边后悔为什么起床,一边估量着事态的严重性
五分钟后,我知道我必须拿起咖啡去上班。
山姆和我一起检查密码。萨姆准备了一个样品测试来确认他的机器上的问题。我们的对话转向讨论可行的选择:
我们自己把钱存起来。
联系lien团队,让他们公开自己的身份,并敦促用户撤资。
两者都不是一个非常令人满意的选择。第一步非常危险。如果您已经阅读了Dan Robinson和范式研究合作伙伴Georgios konstantopoulos讨论的关于以太坊DeFi dark forest(中文版)的文章,我们的交易被切断的可能性非常高。第二种选择几乎同样危险,因为公开声明可以引起人们对这个问题的关注,并给攻击者一个机会之窗。我们需要的是第三种选择。
回忆起以太坊中“黑暗森林”一文的部分内容,山姆联系了amberdata engineering的副总裁Scott Bigelow。”如果你真的处于这样的两难境地,我建议你去找安伯达工程公司的副总裁斯科特·毕格罗。他是一直在研究这一课题的安全研究员,有一套原实现策略,可以更好地实现瞒天过海的目的。”
斯科特·毕格罗
在我参加了以太坊DEFI黑暗森林的救援行动,输给了黑暗森林狙击手后,我渴望重新比赛。我花了一些时间监控拦截,并设计了一个简单的系统,似乎欺骗了一般的跑步者。至少我个人投资测试的200美元成功获救。当萨姆半夜联系我,诚恳地说:“你介意占用我一个小时左右的时间吗?”我已经准备好了!我想象过这样的画面:我将如何进行一些技术调整,花上几个小时,然后成功地节省用户数千美元的资产,带着那种成就感,睡个好觉。
当山姆和我分享这个聪明的合同时,计划失败了:大约25000以太坊,价值960万美元。我很希望能有这样的重赛,但我的几行断行代码并不是为960万美元的资产设计的。
在过去的几个月里,我一直在努力与矿工取得联系,而这正是我所要做的:这是一种白帽救援协议。如果说矿工们需要帮助来写一份挖矿协议,这样钱就不会被逃跑的人偷走了,现在就是这样了。幸运的是,在过去的几个月里,我和Tina Zhen一直在一起努力建立这种合作关系。当时,救援成功的希望渺茫,但值得尝试:让蒂娜参与救援,与一个矿场合作,挖矿出一笔私人交易。
来自Tina Zhen
我刚从家里撤离,因为加利福尼亚州代号为“山猫”的森林大火。我喝着一种不知名的海滩饮料,听着从昏暗的太平洋传来的海浪声。山姆的电报私人信件让我回到了一个更黑暗的现实:“资金面临风险,可能会被截获。”在过去的几周里,我一直在与Sam和Scott合作研究miner extractable value(MeV)的研究项目,在他们发出请求之前,我已经猜到了:一个直接的通道来保护white hat事务免受以太坊内存池的“黑森林”(待定、未确认的事务集)。
由于这是一个冒险的举动,需要将我们的策略暴露给矿工们,我们决定首先尝试获得匿名连战团队的批准。当亚历克斯试图通过consensys内部渠道联系时,我们也试图联系certik。
我意识到certik在美国的审计员要花四个小时才能起床,但时间不多了。我对certik了解不多,我只知道他们已经审核了几个亚洲项目,所以我试着联系certik中国团队。我分别在“DeFi the world”和“yellow hats”留言。在我的私人聊天中,我在30分钟内收到了四条信息,确认我的微信朋友的身份是certik的真正首席技术官倪兆忠。我被拉进了一个由5名certik团队成员组成的微信群,当时我仍然无法透露相关项目或漏洞。为了尽量减少暴露风险和潜在责任,我们只能邀请一名certik成员加入我们的白帽计划。在官方邮件最终得到确认后,certik的工程总监Georgios delkos加入了我们的对话。
在乔治奥斯的帮助下,亚历克斯得以迅速与连战小组取得联系,并核实他的身份。我们让他们尽快了解严峻的形势,并得到他们的同意,直接与矿场合作,以拯救这一脆弱的基金。我们同意了连战的说法,认为这是一个先发制人的救人计划,也就是说,我们应该提前发出警告,否则就直接向救援队发出警告。
现在我们需要尽快找到一个有足够基础设施并愿意与我们合作的矿场。我们应该找哪一个?这个矿上的哪个联系人能迅速做出技术决定,帮助我们抓紧时间实施这项行动?
我们想到了spark pool,我了解到他们一直在建设一个名为太极网络的公共基础设施,它可以很容易地为我们提供所需的支持。我决定和星火矿业联合创始人张少平私下聊聊,他曾帮助我调查MemPool的安全事件。
半小时后,邵平回答说:“你是说我会为这笔交易列个白名单?对不起,我们输了。在中文里,“白帽子”和“白名单”看起来有点相似。
“有1000万美元的风险。我正在与samczsun在线交流,“我再次试图传达情况,但没有给出任何具体细节。
“你们两个是在拯救世界?你需要矿场的帮助吗?”一点意外也让我松了一口气,邵平开玩笑说他愿意帮忙。经官方邮件确认后,邵平进入了我们的马拉松式变焦大会,众多火花矿池开发者提供了技术支持。
邵平自传
午饭后,我正准备小睡一会儿,然后收到蒂娜发来的微信:“spark mining pool对白帽交易有帮助吗?”一开始我错了。我把它当作白名单看。以前没有人联系过我们做白帽交易,我们对“白帽交易”的具体情况也不熟悉。在蒂娜更详细地解释之后,我意识到他们需要一个私人交易服务。例如,白帽黑客想要发送一个交易来保存一个DeFi智能合约,但是为了防止被其他人抢劫和拦截,他们需要矿池在不广播交易的情况下将交易写入块中。
我们已经在太极网上建立了一个私人交易功能,这个功能还在开发中,还没有经过测试。我告诉了我们的开发团队白帽黑客的要求,并强调了我们的私人交易能力需要在几个小时内顺利投入生产的紧迫性。我们的开发者说他们会尽全力去做,然后很快投入工作。我们在两个小时内完成了私有交易功能的开发,并花了一些时间来修复这个错误。
我们完成内部测试后太极拳网端点被发送到scottbigelow以完成white hat任务。
斯科特·毕格罗
一个新的火花池挖矿后推出了新的API。Sam和我还完成了脚本编程,以生成四个连续连接的签名事务。依次处理这些交易将不需要25000以太坊,而是将30000枚T+LBT代币(由“错误”生成)转移给lien团队,后者可以将其提交至最终交易并将其转换为以太坊。
通过将无限期的T+LBT代币转让给留置团队而不是ETH,我们用更多的交易作为掩护,混淆了普遍强制(如果重组)的攻击,这样960万美元的收入永远不会进入我的口袋,一刻也不会。
在我们生成了四个签名事务之后,Sam和我花费了大量时间,并使用各种多方事务模拟工具来验证他们的串行操作。这四个交易程序的总数据量不到1.5 KB,是节省960万美元资产的杀手,并确保在spark pool捕获这些交易之前,没有人会知道这些交易。
我用一个无意义的事务测试了spark pool的white hat端点,执行过程是正确的:在MemPool中看不到事务,然后突然出现在一个spark pool块中!就像看着水蒸气直接变成冰一样,恼人的液化过程完全看不见!
我们调整了事务生成脚本,将事务直接提交到spark pool的新端点。是时候行动了。我犹豫了一会儿,但这**是我们能做的**的。我们可能会损失960万美元,但我们不会后悔的:我在IntelliJ中点击“run”我不知道为什么,但我原以为整个过程需要一点时间,就像节点了解情况的严重性,然后在其中花费一些时间一样。但事实并非如此;事务是在毫秒内发送的。
zoom呼叫中的每个人都开始疯狂地刷新ETHerscan,我怀疑ETHerscan团队是否看到了3分钟的流量高峰。由于只有spark池有事务,而且spark pools的散列率只有一部分专用于此,所以我们所能做的就是冷汗等待。每一个矿工都挖出了我们激动不已的每一个街区。在zoom电话会议上,有人会紧张地笑着念出挖矿矿块的矿工的名字。在我们的交易被写入区块之前,会有大约15个区块,但我们觉得我们经历了几个小时,但最终,我们完成了完美的交易:依次挖矿,而不是滚动。
我们欣慰地看着越来越多的区块叠加在我们的区块上,对区块重组的担忧很快消失。连战的团队现在有足够的T+LBT代币来清除整个系统,Sam负责协调救援的**阶段。
孙山姆
现在我们已经成功地将代币转移到了连战团队,没有任何强行截断、企图或其他任何迹象,我们很快在私下聊天中告诉他们这个好消息。他们确认他们已经收到代币,并立即发送事务以检索锁定在智能合约中的大部分ETH。几秒钟后,挂起的事务出现在ETHerscan上。
我利用这个机会在观看进度条的时候反思了一下行动。一开始,它着眼于智能合约,最终演变成一个“拯救大兵瑞安”的行动,吸引了来自世界各地的专家。没有Alex和Georgios,我们就无法联系到lien开发者。如果没有斯科特,我们的救援可能早就陷入困境了。没有蒂娜,我们将无法联系certik或spark pool。没有火花池,我们注定要重演丹几周前写的悲剧。
然而,周二晚些时候,我们看似不可能的团队一起努力实现了同样的目标,最终确保了960万美元的回报。我们在过去七个小时里的努力最终达成了一项有待确认的协议和一个围绕它的进度条。
当进度条**显示绿色勾号时,zoom会议中的紧张气氛终于消失了,大家都松了一口气。
https://ETHerscan.io/tx/0xe99ccb0b21854b65a2fa283638ab9ef01962b61c33310b59b4597bf2b911a43
我们终于设法走出了黑暗的森林。
这篇文章记录了许多人努力工作的成功。特别感谢Alex Wade、Scott Bigelow、Tina Zhen、Georgios delkos和spark pool挽救了危机,以及Alex obadia和Dan Robinson,他们审阅了本文并给出了反馈。
如果您对移动背后的技术细节感兴趣,请单击此处了解更多信息。如果由于各种原因,您没有阅读以太坊的“黑暗森林”,您应该阅读。
文章标题:这次我们在以太坊杀死了德尔福的黑暗森林,节省了960万美元
文章链接:https://www.btchangqing.cn/111209.html
更新时间:2020年12月02日
本站大部分内容均收集于网络,若内容若侵犯到您的权益,请联系我们,我们将第一时间处理。