十月初,AnChain.AI 上举办了最新的区块链调查大赛,比赛持续两周时间,许多玩家期间深入了解到以太坊区块链交易和智能合约数据。除了许多免费提供的工具外,Anchain 还为参与者提供了 CISO 区块链分析平台的免费许可,让区块链分析变得更加容易。
在本次大赛决赛圈中,Coinbase 首席安全分析师 Peter Kacherginsky 重点关注了前期 DeFi 行业内引发热议的 “寿司” Sushiswap 创始人 Nomi 大厨退出骗局及其在 2020 年 9 月归还资金事件。实际上,该事件也是本次大赛最困难的一个挑战,本文会提及一些本次区块链调查大赛时所使用的分析工具、技术、以及经验教训,并且分享调查 Nomi 大厨退出骗局及其在 2020 年 9 月归还资金事件的相关步骤。
下面就让星球君(微信:o-daily)和大家一起来揭开这一事件的真相吧:
2020 年 9 月 5 日,“寿司”Sushiswap 创建者 Nomi 大厨从协议中兑现了大约 1,400 万美元资金,但之后又在 2020 年 9 月 11 日归还了这笔钱。我们使用 Anchain 的 CISO 工具可以查询到涉及相关交易的账户情况(如下图所示)。如果调查上述交易就会发现,Nomi 大厨在 0xf942dba4159cb61f8ad88ca4a83f5204e8f4a6bd 和 0xf73b31c07e3f8ea8f7c59ac58ed1f878708c8a76 两个地址之间转移了 38,000 枚 ETH。
上图展示了 Anchain CISO 追踪 2020 年 9 月 11 日 Nomi 大厨转移 38,000 枚 ETH 的相关交易。
2020 年 9 月 11 日,Nomi大厨在道歉推文中提供了确切的交易哈希(如下图所示),并暗示所有取出的ETH都已经退回到“寿司”Sushiswap 库存账户:
让我找出这个“0xf942db”开头的这个地址:0xf942dba4159cb61f8ad88ca4a83f5204e8f4a6bd。Etherscan 将该地址标记为——SushiSwap:Deployer,其实从早期交易历史来看,这个地址从 2020 年 8 月 26 日开始就部署了Sushiswap:SUSHI TOKEN 合约(如下图所示):
事实上,Nomi 大厨是唯一有能力部署这个合约的人,因此我们可以肯定这个“0xf942db”开头的地址与 Nomi 大厨有直接联系。另一个“0xf73b31”开头的地址(0xf73b31c07e3f8ea8f7c59ac58ed1f878708c8a76)更加有趣,因为这个地址其实在 2020 年 9 月 3 日与“0xf942db”开头地址部署的同一个多重签名钱包:
上图是多重签名合约部署,资料来源:Etherscan
现在是不是觉得很有趣?!是的,Nomi 大厨将 38,000 枚 ETH 从一个已知的以太坊个人账户转移到他们自己最初创建的多重签名钱包里。多重签名合约的优点就在于能够查到钱包所有者信息。所以,我们可以使用 Etherscan 的便捷合约读取功能来查询该钱包的所有者:
我们使用多重签名 getOwners() 输出函数即可,如上图所示,资料来源:Etherscan
从上面截图显示的结果可以看出,其中并没有 Nomi 大厨“0xf942db”开头的地址。不过 Nomi 大厨此前曾进行了一项交易,将钱包所有权从“0xf942db”开头的地址更改为了 0xd57581d9e42e9032e6f60422fa619b4a4574ba79。在记录这方面,我们不得不佩服 Etherscan,该平台又为我们提供了详细的交易事件日志:
上图是多重签名钱包的所有权变更交易,资料来源:Etherscan
那么问题来了,“0xD57581”开头的地址所有者是谁的?如果我们在社交媒体 Twitter 上搜索这个地址,会发现 Nomi 大厨的 Twitter 账户 @Nomichef 曾与加密货币衍生品交易所 FTX Exchange 首席执行官 @SBF_Alameda 在 Twitter 上发生过一次“有趣”的交流:
基于上述交流记录,我们知道 FTX 首席执行官 @SBF_Alameda 同意接管“寿司”Sushiswap 项目,并在其官方 Twitter 账户上发布了自己的以太坊钱包地址作为所有权证明。存款之后,@SBF_Alameda 使用“0xD57581”开头的地址继续向他刚在 Uniswap 上购买的多重签名合约(“0xf73b31”开头的地址)存入 557 万枚 SUSHI 代币:
上图是通过 Anchain CISO 查询到 @SBF_Alameda 将 556 万枚 SUSHI 代币存入到多重签名地址。此后不久,@SBF_Alameda 继续提取了 38,000 枚 ETH 作为补偿,交易记录如下:
由此可以看出,“0xf73b31”开头的地址在整个“寿司” Sushiswap 生态系统中起着非常重要的作用,但并不清楚为什么这些交易都要选择这个地址。为了挖出这个问题的答案,让我们再来看看奖励系统如何在 Sushiswap 上运作。
最早在 Medium 上宣布推出“寿司” Sushiswap 项目的文章现在已经删除,从存档网页中我们发现 Nomi 大厨提到了 Sushiswap 有一个项目可持续/开发基金(如下图 Medium 网页截屏所示):
如果我们查看该项目的源代码,在 MasterChef.sol 中可以发现执行奖励的逻辑,下图是从 GitHub 上存储的开发基金 SUSHI 代币奖励的源代码:
开发基金的地址信息存储在变量“devaddr”(开发者地址)中,并在初始化时在智能合约构造函数中定义,下图是GitHub 上存储的开发基金地址初始化源代码:
根据 Medium 的历史文章显示,MasterChef 合约部署在 0xc2EdaD668740f1aA35E4D8f227fB8E17dcA888Cd 上。下面让我们看一下 Etherscan,通过第一笔交易可以了解合约部署时是如何设置的:
不幸的是,输入数据很难解密,但是我们可以再输入数据地步找到构造函数初始化数据,如下图深色区域所示:
每个构造函数变量的大学均为“uint256”,可以轻松被拆分成单个参数:
上图是构造函数参数。
简单地说,这些参数都与源代码相匹配,因此我们可以获得 devaddr(开发者地址)的参数,结果会发现这个地址已经被明确地设置为 Nomi 大厨的地址,下图是 GitHub 上的 Masterchef.sol 构造函数变量:
基于上述分析,我们发现“0xf942db”开头的地址可以收集到 10% 所有铸造的 SUSHI 代币,而 Nomi 大厨与 2020 年 9 月 5 日把该地址中的 SUSHI 代币兑换成了 ETH。但是,如果查看变量当前的状态,我们将会找到一个完全不同的地址,如下图红框所圈出的:
该地址对应于 Nomi 大厨返还的 38,000 ETH 的那个多重签名钱包,也就是说,“0xf73b31”开头的这个地址实际上就是 Sushiswap 的一个新的金库账户,用于收集 Nomi 大厨在 Twitter 帖子中所提及的 10% 代币奖励,而且只有一个函数可以更新协定中的 devaddr 变量,如下图所示(资料来源 GitHub):
我们可以通过扫描Bloxy.info提供的函数调用活动来快速找到对该函数的调用,下图就是Bloxy的智能合约函数调用查询结果:
从下图中可以看出,dev(address)函数只进行过一次函数调用,就是 Nomi 大厨于 2020 年 9 月 5日执行的,就在他在 Uniswap 上倾销 SUSHI 代币之前的几分钟:
Nomi 大厨调用了 “0xf73b31”开头地址上新的devaddr参数,该参数定义了新的库存账户或开发基金账户。
至此,我们可以把所有事件的时间表梳理清楚,并形成一个更为完整的报告,从最初创建“寿司”Sushiswap 项目一直到 2020 年 9 月 11 日交易及其他相关事件:
SushiSwap调查报告
1、@Nomichef 是一位匿名开发人员,他/她于 2020 年 8 月 26 日创建了 SushiSwap DeFi 合约。
2、该合约包含了一个由 @Nomichef 控制的开发人员帐户,此帐户收集了 10% 所有铸造的 SUSHI 代币。
3、2020 年 9 月 5 日,@ Nomichef 从开发者账户中提取了价值约 1400 万美元的 SUSHI 代币,并在 Uniswap 上将这些代币兑换成了 38011 ETH。
4、@Nomichef 还设置了新的多重签名合约作为新的开发人员帐户,以再次收集 SUSHI 代币奖励。
5、在社区强烈抗议之后,@Nomichef 将 38,000 ETH 转移到先前创建的多重签名合约中,该合约现在由加密衍生品交易所 FTX Exchange 首席执行官 @SBF_Alameda 控制。
6、@SBF_Alameda 依次存入 557 万枚 SUSHI 代币,并撤回 @Nomichef 的 ETH 作为补偿。
7、在进行本次分析时,该多重签名的开发人员帐户是最大的 DeFi “巨鲸”帐户之一,价值约 90 亿美元。
区块链分析
以下区块链分析图是使用 Anchain CISO 生成的,用于记录与本案例有关的以太坊区块链上的交易.
ETH 交易:
SUSHI 交易:
事件时间轴
涉及本时间的相关地址信息
1、x6b3595068778dd592e39a122f4f5a5cf09c90fe2 — Sushi Token 合约
2、0xc2EdaD668740f1aA35E4D8f227fB8E17dcA888Cd — SushiSwap: MasterChef LP 抵押池,同时也持有 Sushiswap 上最大的流动性头寸。
3、0xf942dba4159cb61f8ad88ca4a83f5204e8f4a6bd — @NomiChef 账户 / SushiSwap: Deployer / Devshare 账户(每次分配 SUSHI 代币时会收集 10% 的代币)。
4、0xf73b31c07e3f8ea8f7c59ac58ed1f878708c8a76 — 合约: MultiSigWalletWithDailyLimit / New Devshare 账户。
5、0x80c5e6908368cb9d***3ba968d7ec5a565bfb389 — Zapper.Fi Uniswap
6、0xCE84867c3c02B05Dc570D0135103d3fb9cC19433 — Uniswap V2
7、0xD57581D9e42E9032e6f60422fA619b4A4574Ba79 — @SBF_Alameda — FTX CEO
阶段零:设置
1、2020–08–26 12:28:07 UTC — @Nomichef(0xf942dba4159cb61f8ad88ca4a83f5204e8f4a6bd)部署了 SUSHI 代币合约(0x6B3595068778DD592e39A122f4f5a5cF09C90fE2)。https://etherscan.io/tx/0x5489c98aa634078471646e32a3a846c8d413f055ce10d06bd2260f4e71d1bc63
2、2020–08–26 01:00:51 UTC — @Nomichef(0xf942dba4159cb61f8ad88ca4a83f5204e8f4a6bd)部署了 MasterChef LP 抵押池(0xc2EdaD668740f1aA35E4D8f227fB8E17dcA888Cd),同时构造函数显式设置为 devaddr f942dba4159cb61f8ad88ca4a83f5204e8f4a6bd:
https://etherscan.io/tx/0x3d68b0d8a94838af33070b8f00558e723f073b23772bd1760f1f4032e21e0fb3
3、2020–09–03 01:16:40 UTC — @Nomichef 部署了多重签名钱包 0xf73b31c07e3f8ea8f7c59ac58ed1f878708c8a76。
https://etherscan.io/tx/0x58b4873325c662a043b51f5c479a9cab263f7a4ce80517a0109a753d7ee7700f
阶段一:退出
1、UTC 2020–09–05 09:20:10 UTC — @Nomichef 向 Zapper.Fi Uniswap(0x80c5e6908368cb9d***3ba968d7ec5a565bfb389)合约发起交易:
在此交易中,使用 502.49 万枚 SUSHI 代币在 Uniswap V2(0xCE84867c3c02B05Dc570D0135103d3fb9cC19433)和 Zapper.Fi(0x80C5e6908368CB9d***3BA968D7ec5A565BfB3890.1)平台上开放 SUSHI-WETH 流动性对,交易量为 3886 枚 WETH。
https://etherscan.io/tx/0xc97cac6a9457f73febfd93ca90dd4dfbe128ad1658c3e48d01ad3d92d3efd07e
2、2020–09–05 09:33:19 UTC — @Nomichef 将 devshare 帐户地址从0xf942dba4159cb61f8ad88ca4a83f5204e8f4a6bd 更改为 多重签名钱包0xf73b31c07e3f8ea8f7c59ac58ed1f878708c8a76:
https://etherscan.io/tx/0xe7e811bdc697b6ba7794a3ec795797a6c88181116196256b98695f17d987ea11
3、2020–09–05 11:57:05 UTC —SUSHI-WETH 交易对已清算 38011 枚 ETH,资金被转回给@Nomichef(0xf942dba4159cb61f8ad88ca4a83f5204e8f4a6bd)
https://etherscan.io/tx/0x419a835b33eb03481e56a5f964c1c31017ab196cb7bb4390228cabcf50dfd6f1
阶段二:返还
1、2020–09–06 06:29:00 UTC —@Nomichef 达成协议将资金返还给多签名钱包并将控制权转移到@SBF_Alameda(0xd57581d9e42e9032e6f60422fa619b4a4574ba79):
ok uh 0xD57581D9e42E9032e6f60422fA619b4A4574Ba79 https://t.co/rsoBkYPHGo
— SBF (@SBF_Alameda) September 6, 2020
2、2020–09–06 07:32:34 UTC —多签名钱包所有者从 @Nomichef 替换为@SBF_Alameda(0xd57581d9e42e9032e6f60422fa619b4a4574ba79)。
https://etherscan.io/tx/0xe4fcf8aa90cc42355e2998561759f906ba5bb***f2aeea161ebd167e3acc5609
3、2020–09–11 03:25 UTC—@Nomichef 将 38,000 枚 ETH转移回 SUSHI 多签名钱包(0xf73b31c07e3f8ea8f7c59ac58ed1f878708c8a76)。
https://etherscan.io/tx/0xa5179a870734faadbb7abe2cc2030436a870f9bda1f869b3f986d65cbfbe57b8
4、2020–09–11 03:31:00 PM UTC —@Nomichef 致歉,并公开表示已将 38,000 ETH 转移至“寿司”Sushiswap 库存多重签名帐户。
To everyone. I fucked up. And I am sorry.
— Chef Nomi #SushiSwap (@NomiChef) September 11, 2020
阶段三:报偿
1、2020 年 9 月 15 日上午 01:13:46 UTC — @SBF_Alameda开始从Bittrex(0xfbb1b73c4f0bda4f67dca266ce6ef42f520fbb98)和另一个未知交易所(0x964d9d1a532b5c5daeacbac71d46320deseriesa)累积 39699.94 枚 ETH。
https://etherscan.io/tx/0xcefbd6a9b03522d87915f75ed94c10ed2c87a8456a436ca3f323bf46473bce60
https://etherscan.io/tx/0x6db4e66cba8566721e10015c1aa3db0738e4ac373e817aebf7cf3dba3a1cf377
https://etherscan.io/tx/0x47bfcb08961f1a80dc58e48cc22e34eda0712f3a8cff76eb4be9583a456dcd3d
https://etherscan.io/tx/0xd2c2f5c070eeb3d1ebbe9897f5047ffc74ca9183ef94c826a36b0b0616d65936
2、2020 年 9 月 15 日上午 02:06 UTC — @SBF_Alameda(0xd57581d9e42e9032e6f60422fa619b4a4574ba79)完成了将 ETH 与 Uniswap 上的 SUSHI 代币的兑换。从下面链接中可以查到最后一笔兑换交易:
https://etherscan.io/tx/0xc901dea31fcc59a68fbbd9133f775836f3d59a2f0f6423835d949a215f099666
3、2020 年 9 月 15 日上午 02:15:46 UTC — 557 万枚 SUSHI 代币从@SBF_Alameda(0xd57581d9e42e9032e6f60422fa619b4a4574ba79)控制的地址转移到多重签名钱包(0xf73b31c07e3f8ea8f7c59ac58ed1f878708c8a76)
https://etherscan.io/tx/0x8ff45efc77e5d81714f5a2e0a839c216112c2af6242041ef2d46cdf2fe8678f0
https://etherscan.io/tx/0x968de6f3f80b2af08d1c520d20d9c94019152cbac838aabf6c632da02ee0229f
4、2020 年 9 月 15 日上午 4:42 UTC — 将 38,000 枚 ETH从多签名钱包(0xf73b31c07e3f8ea8f7c59ac58ed1f878708c8a76)转移到@SBF_Alameda(0xd57581d9e42e9032e6f60422fa619b4a4574ba79)。
https://etherscan.io/tx/0x7ef94acf19eaff3517e0675db1d6694b7567e79090cb1192f20ad0ee7892078d
https://etherscan.io/tx/0x7d3ab2ea9a4578f9ff08b90a73ec3d262cc6f3a6fc39bf6bd1e7c20e39c1eeb1
https://etherscan.io/tx/0xcbd16d06238b136390b1d914c3defddf378de59bf15906833d8fc25ccbc2f951
5、2020 年 9 月 15 日上午 5:50 UTC — 3920,000 枚 ETH 通过多笔交易(4000 ETH,4010 ETH,4020 ETH…4080 ETH,2870 ETH)从 @SBF_Alameda 转移到 0x9f9643c8b413b32c3a1270068487f341e5be8bfd。 下面链接是这些交易中的一个示例:
https://etherscan.io/tx/0xd2f19e24961802ff29792e978844691f67e9c37173539cf86d204b68a9e91885
6、2020 年 9 月 15 日上午 06:10:03 UTC — 1,000,000 枚 SUSHI 代币从多重签名财务帐户转移到@SBF_Alameda。
https://etherscan.io/tx/0xe5a08db5e46cff54ac0bc15e5c307bc68daba03c1edd17e7cb4b4044d79ac435