WTF Solidity 合约安全: S03. 中心化风险

我最近在重新学solidity,巩固一下细节,也写一个“WTF Solidity极简入门”,供小白们使用(编程大佬可以另找教程),每周更新1-3讲。

推特:@0xAA_Science

社区:Discord微信群官网 wtf.academy

所有代码和教程开源在github: github.com/AmazingAng/WTFSolidity


这一讲,我们将介绍智能合约中的中心化和伪去中心化所带来的风险。Ronin桥和Harmony桥因该漏洞被黑客攻击,分别被盗取了 6.24 亿美元和 1 亿美元。

中心化风险

我们经常以Web3的去中心化为骄傲,认为在Web3.0世界里,所有权和控制权都是去中心化。但实际上,中心化是Web3项目最常见的风险之一。知名区块链审计公司Certik在2021年DeFi安全报告中指出:

中心化风险是 DeFi 中最常见的漏洞,2021年中有 44 次 DeFi 黑客攻击与它相关,造成用户资金损失超过 13 亿美元。这强调了权力下放的重要性,许多项目仍需努力实现这一目标。

中心化风险指智能合约的所有权是中心化的,例如合约的owner由一个地址控制,它可以随意修改合约参数,甚至提取用户资金。中心化的项目存在单点风险,可以被恶意开发者(内鬼)或黑客利用,只需要获取具有控制权限地址的私钥之后,就可以通过rug-pull,无限铸币,或其他类型方法盗取资金。

链游项目Vulcan Forged在2021年12月因私钥泄露被盗 1.4 亿美元,DeFi项目EasyFi在2021年4月因私钥泄露被盗 5900 万美元,DeFi项目bZx在钓鱼攻击中私钥泄露被盗 5500 万美元。

伪去中心化风险

伪去中心化的项目通常对外鼓吹自己是去中心化的,但实际上和中心化项目一样存在单点风险。比如使用多签钱包来管理智能合约,几个多签人是一致行动人,背后由一个人控制。这类项目由于包装的很去中心化,容易得到投资者信任,所以当黑客事件发生时,被盗金额也往往更大。

近两年爆火的链游项目 Axie 的 Ronin 链跨链桥项目在2022年3月被盗 6.24 亿美元,是历史上被盗金额最大的事件。Ronin 跨链桥由 9 个验证者维护,必须有 5 个人达成共识才能批准存款和提款交易。这看起来像多签一样,非常去中心化。但实际上其中 4 个验证者由 Axie 的开发公司 Sky Mavis 控制,而另 1 个由 Axie DAO 控制的验证者也批准了 Sky Mavis 验证节点代表他们签署交易。因此,在攻击者获取了 Sky Mavis 的私钥后(具体方法未披露),就可以控制 5 个验证节点,授权盗走了 173,600 ETH 和 2550 万USDC。

Harmony公链的跨链桥在2022年6月被盗 1 亿美元。Harmony桥由5 个多签人控制,很离谱的是只需其中 2 个人签名就可以批准一笔交易。在黑客设法盗取两个多签人的私钥后,将用户质押的资产盗空。

漏洞合约例子

有中心化风险的合约多种多样,这里只举一个最常见的例子:owner地址可以任意铸造代币的ERC20合约。当项目内鬼或黑客取得owner的私钥后,可以无限铸币,造成投资人大量损失。

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;

import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import "@openzeppelin/contracts/access/Ownable.sol";

contract Centralization is ERC20, Ownable {
    constructor() ERC20("Centralization", "Cent") {
        address exposedAccount = 0xe16C1623c1AA7D919cd2241d8b36d9E79C1Be2A2;
        transferOwnership(exposedAccount);
    }

    function mint(address to, uint256 amount) external onlyOwner{
        _mint(to, amount);
    }
}

如何减少中心化/伪去中心化风险?

  1. 使用多签钱包管理国库和控制合约参数。为了兼顾效率和去中心化,可以选择 4/7 或 6/9 多签。如果你不了解多签钱包,可以阅读WTF Solidity第50讲:多签钱包

  2. 多签的持有人要多样化,分散在创始团队、投资人、社区领袖之间,并且不要相互授权签名。

  3. 使用时间锁控制合约,在黑客或项目内鬼修改合约参数/盗取资产时,项目方和社区有一些时间来应对,将损失最小化。如果你不了解时间锁合约,可以阅读WTF Solidity第45讲:时间锁

总结

中心化/伪去中心化是区块链项目最大的风险,近两年造成用户资金损失超过 20 亿美元。中心化风险通过分析合约代码就可以发现,而伪去中心化风险藏的更深,需要对项目进行细致的尽职调查才能发现。

Subscribe to 0xAA
Receive the latest updates directly to your inbox.
Mint this entry as an NFT to add it to your collection.
Verification
This entry has been permanently stored onchain and signed by its creator.