有一篇广为流传的文章《以太坊:黑暗森林》。这篇文章里,介绍了一种「泛用型交易机器人」。这种机器人会监听已经被广播,但还没有上链的交易。一旦发现原交易是有利可图的,就以更高的 gas 发送相同的交易,抢在原交易之前成交。

以太坊世界就像就像一片黑暗森林,遍布着这种机器人,你的一举一动都被暗中观察着。这听起来是一个冰冷且无情的故事,但我们接下来要讲的事情,充满了温暖和侠义。

我们犯了个错误

北京时间 3 月 9 日早上 8 点。

我接到了社区经理的电话,说我们的合约在凌晨 5 点被攻击了。我立刻给技术团队打电话查看具体情况。

随后我们发现,资金池的初始化函数存在漏洞,可以被重复调用。攻击者利用闪电贷将真币借出,随即通过重新对合约初始化将资金池代币对替换为攻击者创建的假币,从而绕过闪电贷资金归还检查。

这不是负责审计的 Peckshield 的问题,而是我们在上线前,为了简化代码逻辑,进行了几处修改,漏掉了一处权限控制。我们犯了个巨大的错误。

好在这一问题只影响了我们 V2 资金池的部分业务,交易模块不受影响。而且只有项目方受影响,普通用户没有损失。

我们立刻开始补救。技术团队在 15 分钟内把所有还存在漏洞的资金都救了回来(大约 8w 美元)。随后产品上封闭建池入口,运营端发公告,通知用户和项目方事情的进展。

与此同时,我们统计了损失,大概 380w 美元价值的 USDT、ETH 和项目代币。之后我们立即开始追查。

来自 samczsun 的好消息

北京时间 3 月 9 日早上 8 点半。

事发后半小时内,我收到了来自白帽 samczsun 的一条的私信,说有一位不愿透露姓名的神秘人士,我们暂且称之为猎豹先生,「意外地获得」了其中一笔价值 189w 美金的被盗资金,并委托 samczsun 告知愿意全额归还给我们。

猎豹先生到底是谁,到底如何获得部分被盗资金,是否知晓剩余被盗资金的去向或线索?

扑朔迷离的事件过程

我们对攻击事件进行分析后发现,共有两个地址执行了攻击,我们分别称之为河马先生 (0x368)羚羊先生 (0x355)

河马先生执行了两次攻击。其中 20w 美金进入了中心化交易所,我们立刻联系交易所冻结了。而另一笔 189w 美金,正好与猎豹先生要还给我们的金额一致。所以我们推测,河马先生应该就是猎豹先生,他很可能是一个白帽黑客。

而羚羊先生,看起来也不是一个坏人,他的攻击是通过」泛用型交易机器人「实现,花费了高达 90,000gWei 的 gasPrice 发送该交易,单笔交易的矿工费高达 8ETH。从链上线索来看,很有可能是羚羊先生的机器人自动抢跑了攻击者河马先生的交易,而羚羊先生可能还不知情!

这对于我们来说又是一个好消息,如果能联系到羚羊先生,那么这笔钱也有可能被追回。

谜团越来越大

北京时间 3 月 9 日晚上 21 点。

在等待了一天后,我们收到了猎豹先生的退款(189w 美元),同时收到了一条消息:猎豹先生不承认自己是河马先生。

这下谜团变得更大了,在这次攻击中至少存在三方势力!而且,我们不知道猎豹先生如何获得了河马先生的资产。当时,我们唯一有机会能建立联系的是这位熟悉黑暗森林法则的猎豹先生。

虽然猎豹先生希望保持匿名,但我们还是通过 samczsun 和一些朋友,传达了我们希望与猎豹先生建立直接联系的意图。在等待了数个小时后,我在 telegram 收到了一条私信。

小小的世界

北京时间 3 月 10 日凌晨 1 点半

我万万没想到,猎豹先生是我认识的老熟人。我在 2018 年就认识他,那时我还在 DDEX 做开发工作。我们会一起讨论合约开发方面的问题。自我离开 DDEX 之后就失去了联系,而他也没有想到我成为了 DODO 的创始合伙人。

猎豹先生告诉我,河马先生是攻击者。他把攻击得来的钱转到了一个合约里,而这个合约写出了漏洞,任何人都可以提币。河马先生在提币时被猎豹先生的机器人抢跑了,从而「意外获得了」这笔资金。

那么剩余的被盗资金呢?正在我们商量如何能联系到羚羊先生时,他主动联系了我。

事情的全部

北京时间 3 月 10 日凌晨 3 点

羚羊先生以匿名的方式向我发了邮件,并表示愿意归还资金(价值约 120w 美元),我终于松了口气,两个最主要的部分都得到了归还。并且,羚羊先生向我们透露了很多他监听到的事件,让我们终于得以看清事件的全貌。

(这里我们没有列出非常具体的 txHash,因为我们的朋友希望保持低调)

真正的攻击者是河马先生。

他执行了两笔攻击,但是都被羚羊先生的机器人抢跑了。

河马先生非常沮丧,花了一点时间写了个合约绕开羚羊先生的交易机器人,这次他成功了。资金落入了河马先生的合约里。

但是河马先生从合约中提币时,又被猎豹先生的交易机器人截胡了!羚羊先生和猎豹先生进行了一场 gas 大战,最终猎豹先生胜出了。至此,河马先生执行了 3 次攻击,但一无所获,全部被黑暗森林里的机器人抢跑了!

随后,河马先生执行了两次成功的攻击,但数额都比较小,总共获得了大约 20w 美元的收益。我们仍在追查这笔钱

最终,在攻击事件发生后的 24 小时内,我们追回了被盗的 380w 美元中的 310w。

DODO 联合创始人雷达熊复盘众筹池被攻击事件

温暖的黑暗森林

黑暗森林里有很多猎手,但他们并没有像大众想象地那样冰冷无情。有一些猎手是温柔的大型食草动物,他们是黑暗森林里的侠客,从黑客手中截获了赃款并归还给了受害者。

时至今日,仍然有很多人认为数字货币世界充满了骗子和黑客,与非法交易、诈骗、维权这些字眼绑定在一起。但事实上,这片森林里有很多不同的角色:DeFi 项目方、普通用户、热心的吃瓜群众、武艺超群的套利机器人、实时保持警惕和中立的白帽、出手不一定稳准狠的业余黑客、娴熟的专业黑客 .....

他们共同形成了一个生态,这个生态有自己的公正和道义,每个参与者都或多或少地扮演了执法官的角色。对于诚实的开发者,这是一个温暖的黑暗森林。

感谢大家

一方有难,八方支援。在被攻击后我们得到了很多朋友的帮助,我很庆幸以太坊社区中有如此多的好人,他们在 DODO 最困难的时候施以援手,我们向以太坊社区的侠客义士致以最崇高的敬意。其中包括:

Peckshield 、慢雾、币安安全团队

samczsun 、Tina

1inchTokenlon、Binance、Huobi、Etherscan

还有很多朋友的鼓励与安慰,即使是竞对,在这危急时刻也与我们站在一起。这让我们感觉冰冷的代码下隐藏着许多温热的东西,对诚实的褒奖、对公平的向往、对信誉的珍视。

番外故事

在羚羊先生归还 vETH 前,他的机器人掉进了一个专门为他精心设计的蜜罐陷阱。

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

这一陷阱以 0.05ETH 为诱饵,骗取了 324 个 vETH,价值大约为 50w 美金。我们不知道谁设计了这个陷阱,可能是不甘心的河马先生,也有可能是某个看热闹的观众。

最终羚羊先生慷慨地和我们共同承担了这一损失。

另外一方面,有些研究者正在构建黑暗森林中的「传送门」,如 MEV 研究机构 Flashbots 的 MEV-geth 基础设施、星火矿池的太极等。这些」传送门「将交易发送者与矿池直连,基于隐私交易设计及对交易排序规则优化,可以避免交易被抢跑。