# About Security & Auditing

By [Untitled](https://paragraph.com/@0x782fa23a5c780ec6d72de7a9615dd95eba973339) · 2023-09-25

---

常见的合约攻击：

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

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

解决办法：

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

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

预言机攻击oracle attacks：

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

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

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

**签名重放**

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

**拒绝服务**

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

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

##### Manual Review

##### 审计工具：[Slither](https://github.com/smartcontractkit/full-blockchain-solidity-course-js#slither)

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

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

​ - stateless fuzz（Foundry） : 新fuzzRun丢弃前一fuzzRun的状态

​ - statefull fuzz（invariant）：新fuzzRun的初始状态继承前一fuzzRun

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

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

---

*Originally published on [Untitled](https://paragraph.com/@0x782fa23a5c780ec6d72de7a9615dd95eba973339/about-security-auditing)*
