常见的合约攻击:
重入攻击reentrancy attack、NFT重入攻击 :
利用一个恶意合约,通过fallback和receive机制在合约执行过程中多次调用合约的函数
解决办法:
1.检查-影响-交互模式:先改变状态,将调用call外部合约作为函数或交易的最后一步
2.互斥锁:利用oppezepplin提供的nonReentrant修饰器
预言机攻击oracle attacks:
攻击者试图操纵或篡改由预言机提供的外部数据,导致自动化程序的智能合约做出错误的决策
解决办法:使用多个数据源、不要使用现货/瞬时价格、流动性差的池子做价格预言机
权限管理漏洞,使用 Openzeppelin 的权限管理库预防
签名重放
坏随机数,使用预言机项目提供的链下随机数
拒绝服务
抢先交易,通过减少交易顺序或时间的重要性
Defi中最常见漏洞:中心化风险指智能合约的所有权是中心化的,合约的owner由一个地址控制,它可以随意修改合约参数。伪去中心化的项目通常对外鼓吹自己是去中心化的,但实际上和中心化项目一样存在单点风险。比如使用多签钱包来管理智能合约,但几个多签人是一致行动人,背后由一个人控制。
Static Analysis : 检查合约代码的结构、语法、逻辑和潜在的漏洞
Fuzz testing:通过自动生成大量随机或半随机的输入数据,以触发不正常的行为、漏洞或异常条件
- stateless fuzz(Foundry) : 新fuzzRun丢弃前一fuzzRun的状态
- statefull fuzz(invariant):新fuzzRun的初始状态继承前一fuzzRun
Formal Verification:专注于数学证明和推理,以验证合约在任何情况下都不会违反规范或引发潜在的漏洞
Symbolic Execution:通过符号变量来模拟合约的执行路径和条件,以找出可能的问题
