1. Web3安全基础:区块链安全模型、智能合约生命周期、常见攻击面概览
1.1 区块链安全模型——信任的基石
聊Web3安全,得先从底层说起。区块链的安全模型,说白了就是「去信任化」。
传统互联网里,你得信任银行、信任支付宝、信任某个中心服务器。但在区块链上,信任被数学和密码学取代了。我个人习惯把这种模型叫做「三驾马车」:
- 共识机制:比如PoW、PoS,确保大家账本一致。你想想看,如果没有共识,谁都能往链上写数据,那不乱套了?
- 密码学:哈希函数、椭圆曲线签名。私钥丢了,资产就没了。嗯,这里要注意,私钥就是你的命根子。
- 去中心化执行:智能合约一旦部署,代码即法律。没人能改,除非你提前留了后门——这就是后面要讲的漏洞。
我在项目中遇到过不少团队,觉得「上了链就安全了」。其实大错特错。区块链只保证数据不可篡改,但不保证你的代码没bug。说白了,链是安全的,但你的合约不一定。
核心认知: 区块链安全模型解决的是「信任问题」,而不是「代码正确性问题」。代码漏洞,链本身管不了。
1.2 智能合约生命周期——从出生到消亡
智能合约不是写完了就能直接用的。它有一个完整的生命周期。我习惯把它分成四个阶段:
| 阶段 | 关键动作 | 安全风险 |
|---|---|---|
| 设计阶段 | 需求分析、架构设计 | 逻辑缺陷、权限模型错误 |
| 开发阶段 | 编码、单元测试 | 重入、整数溢出、未检查的外部调用 |
| 部署阶段 | 编译、部署、初始化 | 构造函数漏洞、owner权限泄露 |
| 运行阶段 | 用户交互、升级、销毁 | 预言机攻击、闪电贷攻击、治理攻击 |
我记得有一次审计一个DeFi项目,开发团队在部署阶段忘了调用初始化函数。结果合约上线后,任何人都能调用初始化,把自己设成owner。嗯,这种低级错误其实挺常见的。
还有一个容易被忽略的点——自毁函数。Solidity里有个selfdestruct,调用后合约就没了。我曾经见过一个项目,自毁权限没控制好,被攻击者一把梭哈,所有资金全被转走。
避坑指南: 合约生命周期中,「升级」是最容易出问题的环节。如果你用代理模式,记得检查存储布局是否兼容。我见过因为变量顺序不一致,导致升级后数据全乱的惨案。
1.3 常见攻击面概览——黑客都在盯着什么
做安全审计这么多年,我总结下来,攻击面其实就三大类。你想想看,黑客也是人,他们不会漫无目的地乱打。
1.3.1 智能合约层
这是重灾区。我列几个最常见的:
- 重入攻击:经典中的经典。2016年The DAO事件,300多万ETH被盗,就是因为这个。说白了,就是合约在更新状态之前调用了外部合约,给了攻击者「钻空子」的机会。
- 整数溢出:Solidity 0.8之前,加减乘除不会自动检查溢出。我记得审计过一个代币合约,攻击者利用下溢,把自己账户余额刷成了天文数字。
- 访问控制漏洞:谁都能调用管理员函数。嗯,这种漏洞我几乎每个月都能碰到。
- 未检查的外部调用:调用其他合约时,没检查返回值。如果对方合约故意失败,你的逻辑就乱了。
个人经验: 审计时我第一个看的就是「外部调用」和「状态更新」的顺序。只要先调用后更新,十有八九有问题。
1.3.2 区块链层
这一层攻击者没法直接改链,但可以利用链的特性搞事情:
- 重放攻击:一条链上的交易,拿到另一条链上再发一遍。跨链桥项目尤其要注意。
- MEV攻击:矿工或验证者通过调整交易顺序获利。三明治攻击就是典型。
- 时间戳依赖:用
block.timestamp做随机数?我劝你别这么干。矿工可以微调时间戳。
1.3.3 应用层
前端、钱包、私钥管理,这些看似和链无关,但往往是攻击的突破口:
- 钓鱼攻击:伪造一个一模一样的DApp界面,骗你授权。
- 私钥泄露:把私钥存在云笔记里?嗯,我见过不止一次。
- 闪电贷攻击:借一大笔钱,操纵价格预言机,然后还回去。整个过程在一笔交易内完成。
一句话总结: 攻击面无处不在。从你写代码的第一行,到用户点击「确认交易」的最后一秒,每个环节都可能成为突破口。
1.4 我的安全审计方法论
最后分享一点我自己的习惯。每次拿到一份合约,我会按这个顺序来:
- 先读文档:不看文档直接看代码,容易跑偏。文档里写的和代码实现不一致,本身就是个问题。
- 画数据流图:资金怎么流入、怎么流出、谁有权触发什么操作。画完图,漏洞往往就自己冒出来了。
- 逐行审计:重点关注外部调用、算术运算、权限检查。
- 跑自动化工具:Slither、Mythril这些工具能帮你扫出低级错误。但别全信工具,它只能发现已知模式。
- 写测试用例:模拟攻击场景。我习惯先写「正常流程」,再写「恶意流程」。
一个小技巧: 审计时把自己想象成黑客。如果我是攻击者,我最想拿到什么?是owner权限?还是操纵价格?顺着这个思路走,漏洞往往藏不住。
好了,这一章就到这里。下一章我们会深入讲「重入攻击」的底层原理和实战防护。嗯,那才是真正硬核的内容。