安全审计:Slither静态分析实战
安全审计Slither静态分析实战大家好我是欧阳瑞Rich Own。今天想和大家聊聊智能合约安全审计这个重要话题。作为一个Web3探索者我深知智能合约安全的重要性。今天就来分享一下如何使用Slither进行智能合约的静态分析。什么是SlitherSlither是一个用于Solidity智能合约的静态分析工具。它可以帮助开发者发现合约中的安全漏洞和代码质量问题。为什么需要静态分析原因说明自动化检测自动发现常见漏洞代码质量识别代码异味和最佳实践安全合规符合安全标准和审计要求节省时间比手动审计更高效安装Slither# 使用pip安装 pip install slither-analyzer # 或者从源码安装 git clone https://github.com/crytic/slither.git cd slither pip install .基本使用# 分析单个文件 slither contract.sol # 分析整个项目 slither . # 分析Truffle项目 slither . --truffle # 分析Foundry项目 slither . --foundry # 生成报告 slither contract.sol --json report.json常见漏洞检测重入攻击// 不安全的代码 function withdraw() external { (bool success, ) msg.sender.call{value: balances[msg.sender]}(); require(success); balances[msg.sender] 0; }# Slither检测结果 REENTRANCY: Reentrancy in withdraw() (contract.sol#10-14)整数溢出// 不安全的代码 function add(uint256 a, uint256 b) public pure returns (uint256) { return a b; }# Slither检测结果 ARITHMETIC: Integer overflow in add() (contract.sol#5-7)访问控制// 不安全的代码 function withdrawAll() external { payable(msg.sender).transfer(address(this).balance); }# Slither检测结果 ACCESS_CONTROL: Missing access control in withdrawAll() (contract.sol#5-7)未检查的外部调用// 不安全的代码 function transfer(address to, uint256 amount) external { to.call{value: amount}(); }# Slither检测结果 UNCHECKED_CALL: Unchecked call result in transfer() (contract.sol#5-7)配置文件# slither.config.json { solc_remaps: [ openzeppelin/node_modules/openzeppelin/ ], exclude_dependencies: true, include: [ src/**/*.sol ], exclude: [ test/**/*.sol ] }自定义规则# my_rules.py from slither.detectors.abstract_detector import AbstractDetector, DetectorClassification from slither.core.declarations import Function class CustomDetector(AbstractDetector): ARGUMENT custom-detector HELP Detect custom issues IMPACT DetectorClassification.MEDIUM CONFIDENCE DetectorClassification.HIGH def _detect(self): results [] for contract in self.compilation_unit.contracts: for function in contract.functions: if function.name.startswith(test): info fFound test function: {function.name} results.append(self.generate_result(info)) return results实战案例# 分析Uniswap V2核心合约 git clone https://github.com/Uniswap/v2-core.git cd v2-core slither . --json uniswap_report.json分析结果解读{ results: { detectors: [ { check: Reentrancy, impact: HIGH, confidence: HIGH, description: Reentrancy in swap(), elements: [ { type: function, name: swap, source_mapping: { filename: contracts/UniswapV2Pair.sol, start: 100, end: 150 } } ] } ] } }集成到CI/CD# .github/workflows/slither.yml name: Slither Analysis on: [push, pull_request] jobs: slither: runs-on: ubuntu-latest steps: - uses: actions/checkoutv3 - name: Set up Python uses: actions/setup-pythonv4 with: python-version: 3.9 - name: Install dependencies run: | pip install slither-analyzer npm install - name: Run Slither run: slither . --json slither-report.json - name: Upload report uses: actions/upload-artifactv3 with: name: slither-report path: slither-report.json最佳实践1. 定期运行# 在每次提交前运行 git pre-commit hook2. 结合其他工具# 与Mythril结合 myth analyze contract.sol # 与Echidna结合 echidna-test contract.sol --config config.yaml3. 关注高危漏洞漏洞类型严重程度ReentrancyHIGHInteger OverflowHIGHAccess ControlHIGHUnchecked CallMEDIUMFront-runningMEDIUM总结Slither是一个强大的智能合约静态分析工具可以帮助开发者发现潜在的安全漏洞。定期运行Slither是智能合约开发的最佳实践之一。我的鬃狮蜥Hash对安全审计也有自己的理解——它总是先检查蟋蟀是否安全才会食用这也许就是自然界的安全验证吧如果你对智能合约安全感兴趣欢迎留言交流我是欧阳瑞Web3探索之路我们一起前行技术栈Slither · 静态分析 · 智能合约安全