LIEN:这次我们杀出了以太坊 DeFi 黑暗森林,完美拯救 960 万美元

知名白帽SamSun与TinaZhen、星火矿池等人彻夜合作,帮助DeFi稳定币协议Lien免受漏洞攻击,保护了960万美元的资金。

2020年9月15日,一个行动小组彻夜合作,从一个脆弱的智能合约中救出960万美元。下文讲述了他们的故事。

SamSunakasamczsun自述

下面我总结一下审阅部分智能合约发生的故事。

当然我没想到会有什么有趣的事儿。过去的几周中我看了无数收益耕种克隆项目一模一样的宣传模式:把你的代币放到我们手中,你就可能会成为下一个加密百万富翁。多数克隆项目只是对经过良好审计的代码进行分叉,加上些许的调整,而这有时会带来灾难性的结果。

但是在所有的喧嚣中,有些代码我以前从未见过。本文中的主角、这份智能合约持有超过25,000个以太币Ether,当时价值超过960万美元,对于那些拼命从逻辑上发现错误的人来说,这将是一次收获满满的狩猎。

我迅速看了一下将ETH转出的代码,发现了两个匹配项。其中之一将ETH转移到了硬编码的代币地址,因此可以忽略。第二个是将ETH转移给发送方的焚毁功能。在跟踪了此功能的用法之后,我发现任何人可以免费为自己铸造代币,然后将其焚毁,换取该智能合约中的所有以太币都是不费吹灰之力的。我的心跳加速了。突然,问题变得严重了。

我那份智能合约是LienFinance协议。不幸的是,他们的团队是匿名的!唯一的即时讯息支持平台是Telegram,而我不确定该Telegram频道的管理员是开发者还仅仅是某些早期支持者。我可万万不想将这一漏洞意外透漏给错误的人。

在他们的网站又多浏览了一段时间,我发现他们曾与ConsenSysDiligence和CertiK合作,接受其代码审计。这看起来像是很不错的途径,ConsenSysDiligence和CertiK在审计期间肯定和开发者进行过互动。我迅速在Telegram上私聊了ConsenSysDiligence的安全工程师JohnMardlin。

发起聊天等回复是太煎熬的事儿。不幸的是,时间一分分过去,maurelian没回应。他好像已经睡了。绝望之下,我向ETHSecurityTelegram频道发了条消息,询问ConsenSys有没有哪位没有睡,请速联系。

几分钟后,我收到了一位过去有过几次合作的人的回复——AlexWade,ConsenSysDiligence的另一位安全工程师。

AlexWade自述

我的脑袋刚刚沾上枕头,听到我室友敲门。「Sam在ETHSecTelegram频道问有谁认识ConsenSysDiligence的任何人。」

Sam与Alex对话中说今晚可能会是个漫漫长夜,事实确实如此

一听说是Sam,我就知道这不会是什么好事。我找到了几个月前建立的与Lien沟通的频道以及一个电邮地址。他们团队可是个匿名团队,有这些总比什么都没有强。

我当时依然半睡半醒。Sam不想在聊天中具体详谈,要求Zoom对话。我一面后悔干嘛要起床,一面评估事态的严重性:

五分钟后,我清楚了解我得喝咖啡提提神开始干活了。

Sam和我一起审阅了代码。Sam当时已经准备好一个样品测试,能在其机器上确认这一问题。我们的对话寻找转移到讨论可行性方案:

我们自己动手拯救这笔钱。联络上Lien团队,让他们公开身份,敦促用户撤资。两者都不是很让人满意的选择。第一个举动极为危险,如果您读过DanRobinson与Paradigm研究合伙人GeorgiosKonstantopoulos所讨论的以太坊DeFi黑暗森林一文,我们的交易被抢跑截胡的概率极高。第二种选择几乎同样危险,因为公开声明会引发外界对该问题的关注,给攻击者带来一个机会窗口。我们需要的是第三种方案。

回想起以太坊DeFi黑暗森林一文中的部分内容,Sam联络了Amberdata工程副总裁ScottBigelow:「如果你切实陷入了这种困境,我建议你去找Amberdata工程副总裁ScottBigelow,他是一直研究这一课题的安全研究人员,有一套能更好实现瞒天过海目的的原型实施策略。」

ScottBigelow自述

我参加了以太坊DeFi黑暗森林一文中的资金拯救行动,最终败给黑暗森林狙杀者之后,我非常渴望能重赛一场。我花了一些时间监控抢跑截胡行动,设计了一个简单的系统,似乎能够过一般的抢跑者,至少我个人投入测试的200美元是成功拯救了出来。当Sam深夜联络我,诚恳得说「介意占用你大约一个小时左右时间吗」,我摩拳擦掌准备尝试了!我已经设想了那个画面:我如何做几个技术调整,需要几个小时,然后成功拯救用户数千美元的资产,戴着那种成就感,好好地睡上一晚。

当Sam分享给我这个智能合约后,这些计划瞬间七零八碎:大约25,000个ETH,价值960万美元。我虽然非常想进行这种重赛,但我那几行破代码可不是给960万美元这种级别资产设计的。

过去几个月,我一直试图与矿工们拉上关系,就为了这一目的:进行这类白帽拯救交易。如果有一个时间点需要矿工们帮忙,在其挖矿中写入一笔交易,以免被抢跑者偷走这笔钱,那就是现在。幸运的是,Tina?Zhen和我过去几个月联手寻求建立这种协作关系。当时这一拯救行动的成功希望渺茫,但值得一试:让Tina参与这一拯救行动,与一个矿池合作挖出一笔私下交易。

TinaZhen自述

我刚刚因为加州代号「山猫」的森林大火从家撤离,当时正在喝着不知名的沙滩饮料,听着暗淡的太平洋送来的海浪声,Sam的Telegram私信使我回到了一个更黑暗的现实:「资金有风险,可能被截胡」。过去的几周中,我一直与Sam和Scott合作开展有关「矿工可提取价值」MEV的研究项目,并且在他们发送请求之前就已经猜到了:一个直接的渠道,可以保护白帽交易在以太坊内存池mempool这一「黑暗森林」中免遭「抢跑者」掠夺。

由于这是一个冒险的举动,需要将我们的策略暴露给矿工,因此我们决定首先尝试从匿名的Lien团队获得开绿灯批准。当Alex试图通过ConsenSys内部频道进行联系时,我们也尝试联系CertiK。

我意识到,Certik在美国的审计人员得过四个小时才会起床,但时间已经刻不容缓。我对CertiK了解不多,只是知道他们曾审计过几个亚洲项目,于是试图联络CertiK中国团队。我在「DeFitheWorld」和「YellowHats」两个微信群里分别留了一条语音留言。我的私聊里30分钟内接到四条信息,确认了我微信好友中的这个ID是真正的CertiK首席技术官倪兆中ZhaozhongNi。我被拉进由五位CertiK团队成员组成的一个微信群中,而当时我依然不能透露相关项目或漏洞。为了将暴露风险和潜在责任降至最低,我们只能邀请一位Certik成员加入我们的白帽行动。经过官方邮件最终确认后,CertiK的工程负责人GeorgiosDelkos加入我们的对话。

在Georgios的帮助下,Alex得以迅速联络到Lien团队,并验证确认其身份。我们让他们最快速度了解到目前的严峻形势,争取其同意,直接与一家矿池合作拯救这笔脆弱的资金。在考虑之后,Lien团队赞同直接拯救资金或发布预警声明过于危险,同意我们推进这一方案。

现在我们需要找一家基础设施充分到位、愿意尽快与我们合作的矿池。我们应该找哪家矿池?这家矿池的哪位联络人能迅速做出技术决策,帮助我们争分夺秒执行这一行动?

我们想到了星火矿池SparkPool,我知道了他们一直在打造名为TaichiNetwork的公众基础设施,能轻松给予我们所要的支持。我决定私聊星火矿池联合创始人少平ShaopingZhang,他之前曾帮我调查过mempool安全事件。

半个小时后,少平回复了:「你是说我给交易开白名单?抱歉,我们不能。」好吧,lostintranslation,中文里「白帽」whitehat和「白名单」whitelist看起来有点像。

「现在有1000万美元危在旦夕。我和Samczsun在线,」我再次试图在不透露任何具体细节的情况下沟通这一局面。

「你俩在拯救世界?需要矿池帮忙吗?」有点意外也让我松了一口气,少平调侃着表示愿意提供帮助。在经过官方邮件确认后,少平进入我们马拉松般的Zoom电话会,并由大批星火矿池开发人员给予技术支持。

少平自述

吃过午饭,我正准备小睡一会儿,然后收到了Tina的一条微信:「星火矿池帮忙进行过白帽交易吗?」我一开始看错了,当时看成了给交易开白名单。以前没有人联系我们进行白帽交易,我们也不熟悉「白帽交易」具体什么情况。Tina更详细解释了以后,我意识到他们需要一笔私下交易服务,比如,白帽黑客想发送交易来拯救一个DeFi智能合约,但要防止被别人抢跑截胡,他们需要矿池在不广播交易的情况下将交易写入区块。

我们一直在TaichiNetwork打造私下交易功能,这个功能还在开发中,还没测试过。我把白帽黑客的请求告诉了我们的开发团队,并强调了这种紧迫性:我们的私下交易功能需要在几个小时内顺利进入生产阶段。我们的开发人员说会尽力完成,然后迅速投入工作。我们在两个小时内完成了私下交易功能的开发,又花了点时间修复了bug。

我们完成了内部测试后,把hitehat.taichi.network端点发送给ScottBigelow,来完成白帽任务。

ScottBigelow自述

星火矿池加班加点推出了全新的白帽API,Sam和我也完成了脚本编程,生成四个先后衔接的签名交易。依次处理这些交易本身不会取出25000个ETH,但会把30,000个SBTLBT代币转移给Lien团队,他们可以将其提交给最终交易,将这些代币再转换成ETH。

通过将可以无限铸造的SBTLBT代币转移给Lien团队而不是ETH,我们使用了更多交易作为障眼法,迷惑广义强迫者的攻击,能够让960万美元的收入一直不会进入我的腰包,片刻也不可以。

我们生成四个签名交易后,Sam和我花了大量时间、利用各种多方交易模拟工具验证其连环行动。总数据量不到1.5KB的这四个交易程序,就是拯救960万美元资产的杀器,保障在星火矿池捕获这些交易之前不会被任何人先知先觉。

我用一笔无意义的交易测试了星火矿池的白帽端点,其执行过程毫无偏差:该交易不会在mempool中看到,然后突然出现在星火矿池的一个区块中!就像眼睁睁看着水蒸气直接变成了冰,中间令人讨厌的液化过程完全看不到!

我们调整了交易生成脚本,将交易直接提交给星火矿池的新端点,现在该是行动的时刻了。我犹豫了一会儿,但这绝对是我们能做到的最好的努力。我们可能会损失掉这960万美元,但不会后悔:我在IntelliJ中点击了「运行」。我不确定为什么,但我之前预计整个过程会花点时间,就像节点会了解情况的严重性,然后在其中消耗一些时间。但实际上它没有;交易以毫秒为单位发送。

Zoom通话中的每个人都开始疯狂刷新Etherscan,我怀疑Etherscan团队是否看到了这3分钟的流量高峰。由于只有星火矿池有交易,并且星火矿池的哈希率中只有一部分专用于此目的,我们能做的只能冒着冷汗焦急等待。每一个其他矿工挖出的每个区块都让我们胆颤心惊。Zoom电话会中会有人伴随着紧张的笑声念出挖出区块的矿工名称。我们的交易被写入区块之前大约会产生15个区块,我们却感觉度日如年,像是经历了几个小时,但最终,我们完成了完美无缺的交易:依次挖出,没有回滚。

我们如释重负地看着越来越多的区块叠加在我们的区块之上,对区块重组的担忧迅速消失。Lien团队现在拥有足够的SBTLBT代币来清算整个系统的资金,Sam负责协调救援的最后阶段。

SamSun自述

现在我们已经成功地将代币转移给了Lien团队,并没有发现任何强迫截胡迹象、尝试或其他迹象,我们很快用私聊告诉了他们这一好消息。他们确认已收到代币,并立即发送交易,以取出智能合约中锁定的大部分ETH。几秒钟后,Etherscan上出现了这一待处理的交易。

看着进度条转圈时,我借此机会反思了这一行动。最开始就是看了看智能合约,最终演变成吸引了世界各地专家通力协作的一场「拯救大兵瑞恩」行动。如果没有Alex和Georgios,我们将无法与Lien开发人员取得联系。没有Scott,我们的拯救行动可能早就陷入困境。没有Tina,我们将无法与CertiK或星火矿池取得联系。没有星火矿池,我们注定要重演Dan几周前文章中写的悲剧。

然而在周二深夜,我们这个看似完全没有可能合作的团队为了同一个目标通力合作,经过不懈努力,最终确保960万美元物归原主。我们过去七个小时的努力最终汇成一笔待确认的交易和这个转圈的进度条。

当进度条最终显示为绿色对勾,Zoom电话会的紧张气氛终于烟消云散,大家都长舒了一口气。

https://etherscan.io/tx/0xe99ccb0b21854b65a2fa283638ab9ef01962b61c3310b596b4597bf22b911a43

我们终于成功杀出黑暗森林。

本文记录了很多人努力工作的成功。特别感谢拯救危难的AlexWade、ScottBigelow、TinaZhen、GeorgiosDelkos和星火矿池SparkPool,以及审校本文并给予反馈的AlexObadia和DanRobinson。

如果你对这一行动背后的技术细节很感兴趣,请点击这里了解更多。如果因为种种原因,你还没读过以太坊DeFi「黑暗森林」一文,你确实应该读一下。

来源链接:samczsun.com

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

链链资讯

[0:15ms0-3:799ms