# About Security & Auditing **Published by:** [Untitled](https://paragraph.com/@0x782fa23a5c780ec6d72de7a9615dd95eba973339/) **Published on:** 2023-09-25 **URL:** https://paragraph.com/@0x782fa23a5c780ec6d72de7a9615dd95eba973339/about-security-auditing ## Content 常见的合约攻击: 重入攻击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:通过符号变量来模拟合约的执行路径和条件,以找出可能的问题 ## Publication Information - [Untitled](https://paragraph.com/@0x782fa23a5c780ec6d72de7a9615dd95eba973339/): Publication homepage - [All Posts](https://paragraph.com/@0x782fa23a5c780ec6d72de7a9615dd95eba973339/): More posts from this publication - [RSS Feed](https://api.paragraph.com/blogs/rss/@0x782fa23a5c780ec6d72de7a9615dd95eba973339): Subscribe to updates