
WTF Solidity 合约安全: S08. 绕过合约检查
我最近在重新学solidity,巩固一下细节,也写一个“WTF Solidity极简入门”,供小白们使用(编程大佬可以另找教程),每周更新1-3讲。 推特:@0xAA_Science|@WTFAcademy_ 社区:Discord|微信群|官网 wtf.academy 所有代码和教程开源在github: github.com/AmazingAng/WTFSolidity这一讲,我们将介绍绕过合约长度检查,并介绍预防的方法。绕过合约检查很多 freemint 的项目为了限制科学家(程序员)会用到 isContract() 方法,希望将调用者 msg.sender 限制为外部账户(EOA),而非合约。这个函数利用 extcodesize 获取该地址所存储的 bytecode 长度(runtime),若大于0,则判断为合约,否则就是EOA(用户)。 // 利用 extcodesize 检查是否为合约 function isContract(address account) public view returns (bool) { // extcodesize > 0 的地址一定是合约...

WTF Solidity 合约安全: S09. 拒绝服务
我最近在重新学solidity,巩固一下细节,也写一个“WTF Solidity极简入门”,供小白们使用(编程大佬可以另找教程),每周更新1-3讲。 推特:@0xAA_Science|@WTFAcademy_ 社区:Discord|微信群|官网 wtf.academy 所有代码和教程开源在github: github.com/AmazingAng/WTFSolidity这一讲,我们将介绍智能合约的拒绝服务(Denial of Service, DoS)漏洞,并介绍预防的方法。NFT项目 Akutar 曾因为 DoS 漏洞损失 11,539 ETH,当时价值 3400 万美元。DoS在 Web2 中,拒绝服务攻击(DoS)是指通过向服务器发送大量垃圾信息或干扰信息的方式,导致服务器无法向正常用户提供服务的现象。而在 Web3,它指的是利用漏洞使得智能合约无法正常提供服务。 在2022年4月,一个很火的 NFT 项目名为 Akutar,他们使用荷兰拍卖进行公开发行,筹集了 11,539.5 ETH,非常成功。之前持有他们社区Pass的参与者会得到 0.5 ETH的退款,但是他们处理...

WTF Solidity 合约安全 S06. 签名重放
我最近在重新学solidity,巩固一下细节,也写一个“WTF Solidity极简入门”,供小白们使用(编程大佬可以另找教程),每周更新1-3讲。 推特:@0xAA_Science|@WTFAcademy_ 社区:Discord|微信群|官网 wtf.academy 所有代码和教程开源在github: github.com/AmazingAng/WTFSolidity这一讲,我们将介绍智能合约的签名重放(Signature Replay)攻击和预防方法,它曾间接导致了著名做市商 Wintermute 被盗2000万枚 $OP。签名重放上学的时候,老师经常会让家长签字,有时候家长很忙,我就会很“贴心”照着以前的签字抄一遍。某种意义上来说,这就是签名重放。 在区块链中,数字签名可以用于识别数据签名者和验证数据完整性。发送交易时,用户使用私钥签名交易,使得其他人可以验证交易是由相应账户发出的。智能合约也能利用 ECDSA 算法验证用户将在链下创建的签名,然后执行铸造或转账等逻辑。更多关于数字签名的介绍请见WTF Solidity第37讲:数字签名。 数字签名一般有两种常见的重放攻击...
WTF Academy: wtf.academy



WTF Solidity 合约安全: S08. 绕过合约检查
我最近在重新学solidity,巩固一下细节,也写一个“WTF Solidity极简入门”,供小白们使用(编程大佬可以另找教程),每周更新1-3讲。 推特:@0xAA_Science|@WTFAcademy_ 社区:Discord|微信群|官网 wtf.academy 所有代码和教程开源在github: github.com/AmazingAng/WTFSolidity这一讲,我们将介绍绕过合约长度检查,并介绍预防的方法。绕过合约检查很多 freemint 的项目为了限制科学家(程序员)会用到 isContract() 方法,希望将调用者 msg.sender 限制为外部账户(EOA),而非合约。这个函数利用 extcodesize 获取该地址所存储的 bytecode 长度(runtime),若大于0,则判断为合约,否则就是EOA(用户)。 // 利用 extcodesize 检查是否为合约 function isContract(address account) public view returns (bool) { // extcodesize > 0 的地址一定是合约...

WTF Solidity 合约安全: S09. 拒绝服务
我最近在重新学solidity,巩固一下细节,也写一个“WTF Solidity极简入门”,供小白们使用(编程大佬可以另找教程),每周更新1-3讲。 推特:@0xAA_Science|@WTFAcademy_ 社区:Discord|微信群|官网 wtf.academy 所有代码和教程开源在github: github.com/AmazingAng/WTFSolidity这一讲,我们将介绍智能合约的拒绝服务(Denial of Service, DoS)漏洞,并介绍预防的方法。NFT项目 Akutar 曾因为 DoS 漏洞损失 11,539 ETH,当时价值 3400 万美元。DoS在 Web2 中,拒绝服务攻击(DoS)是指通过向服务器发送大量垃圾信息或干扰信息的方式,导致服务器无法向正常用户提供服务的现象。而在 Web3,它指的是利用漏洞使得智能合约无法正常提供服务。 在2022年4月,一个很火的 NFT 项目名为 Akutar,他们使用荷兰拍卖进行公开发行,筹集了 11,539.5 ETH,非常成功。之前持有他们社区Pass的参与者会得到 0.5 ETH的退款,但是他们处理...

WTF Solidity 合约安全 S06. 签名重放
我最近在重新学solidity,巩固一下细节,也写一个“WTF Solidity极简入门”,供小白们使用(编程大佬可以另找教程),每周更新1-3讲。 推特:@0xAA_Science|@WTFAcademy_ 社区:Discord|微信群|官网 wtf.academy 所有代码和教程开源在github: github.com/AmazingAng/WTFSolidity这一讲,我们将介绍智能合约的签名重放(Signature Replay)攻击和预防方法,它曾间接导致了著名做市商 Wintermute 被盗2000万枚 $OP。签名重放上学的时候,老师经常会让家长签字,有时候家长很忙,我就会很“贴心”照着以前的签字抄一遍。某种意义上来说,这就是签名重放。 在区块链中,数字签名可以用于识别数据签名者和验证数据完整性。发送交易时,用户使用私钥签名交易,使得其他人可以验证交易是由相应账户发出的。智能合约也能利用 ECDSA 算法验证用户将在链下创建的签名,然后执行铸造或转账等逻辑。更多关于数字签名的介绍请见WTF Solidity第37讲:数字签名。 数字签名一般有两种常见的重放攻击...
WTF Academy: wtf.academy
Share Dialog
Share Dialog

Subscribe to 0xAA

Subscribe to 0xAA
>100 subscribers
>100 subscribers
我最近在重新学solidity,巩固一下细节,也写一个“WTF Solidity极简入门”,供小白们使用(编程大佬可以另找教程),每周更新1-3讲。
所有代码和教程开源在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);
}
}
使用多签钱包管理国库和控制合约参数。为了兼顾效率和去中心化,可以选择 4/7 或 6/9 多签。如果你不了解多签钱包,可以阅读WTF Solidity第50讲:多签钱包。
多签的持有人要多样化,分散在创始团队、投资人、社区领袖之间,并且不要相互授权签名。
使用时间锁控制合约,在黑客或项目内鬼修改合约参数/盗取资产时,项目方和社区有一些时间来应对,将损失最小化。如果你不了解时间锁合约,可以阅读WTF Solidity第45讲:时间锁。
中心化/伪去中心化是区块链项目最大的风险,近两年造成用户资金损失超过 20 亿美元。中心化风险通过分析合约代码就可以发现,而伪去中心化风险藏的更深,需要对项目进行细致的尽职调查才能发现。
我最近在重新学solidity,巩固一下细节,也写一个“WTF Solidity极简入门”,供小白们使用(编程大佬可以另找教程),每周更新1-3讲。
所有代码和教程开源在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);
}
}
使用多签钱包管理国库和控制合约参数。为了兼顾效率和去中心化,可以选择 4/7 或 6/9 多签。如果你不了解多签钱包,可以阅读WTF Solidity第50讲:多签钱包。
多签的持有人要多样化,分散在创始团队、投资人、社区领袖之间,并且不要相互授权签名。
使用时间锁控制合约,在黑客或项目内鬼修改合约参数/盗取资产时,项目方和社区有一些时间来应对,将损失最小化。如果你不了解时间锁合约,可以阅读WTF Solidity第45讲:时间锁。
中心化/伪去中心化是区块链项目最大的风险,近两年造成用户资金损失超过 20 亿美元。中心化风险通过分析合约代码就可以发现,而伪去中心化风险藏的更深,需要对项目进行细致的尽职调查才能发现。
No activity yet