About Security & Auditing

常见的合约攻击:

重入攻击reentrancy attack、NFT重入攻击 :

利用一个恶意合约,通过fallback和receive机制在合约执行过程中多次调用合约的函数

解决办法:

1.检查-影响-交互模式:先改变状态,将调用call外部合约作为函数或交易的最后一步

2.互斥锁:利用oppezepplin提供的nonReentrant修饰器

预言机攻击oracle attacks:

攻击者试图操纵或篡改由预言机提供的外部数据,导致自动化程序的智能合约做出错误的决策

解决办法:使用多个数据源、不要使用现货/瞬时价格、流动性差的池子做价格预言机

权限管理漏洞,使用 Openzeppelin 的权限管理库预防

签名重放

坏随机数,使用预言机项目提供的链下随机数

拒绝服务

抢先交易,通过减少交易顺序或时间的重要性

Defi中最常见漏洞:中心化风险指智能合约的所有权是中心化的,合约的owner由一个地址控制,它可以随意修改合约参数。伪去中心化的项目通常对外鼓吹自己是去中心化的,但实际上和中心化项目一样存在单点风险。比如使用多签钱包来管理智能合约,但几个多签人是一致行动人,背后由一个人控制。

Manual Review
审计工具:Slither

Static Analysis : 检查合约代码的结构、语法、逻辑和潜在的漏洞

Fuzz testing:通过自动生成大量随机或半随机的输入数据,以触发不正常的行为、漏洞或异常条件

​ - stateless fuzz(Foundry) : 新fuzzRun丢弃前一fuzzRun的状态

​ - statefull fuzz(invariant):新fuzzRun的初始状态继承前一fuzzRun

Formal Verification:专注于数学证明和推理,以验证合约在任何情况下都不会违反规范或引发潜在的漏洞

  • Symbolic Execution:通过符号变量来模拟合约的执行路径和条件,以找出可能的问题