AmirhosseinHonardoust/Smart-Contract-Risk-Analyzer

GitHub: AmirhosseinHonardoust/Smart-Contract-Risk-Analyzer

一个轻量级的Solidity智能合约静态分析引擎,通过启发式规则快速检测危险代码模式并计算风险评分。

Stars: 21 | Forks: 1

# Smart Contract 风险分析器 ### *针对 Solidity 智能合约的静态分析 + 启发式风险评分*

## **概述** **Smart Contract Risk Analyzer** 是一个轻量级、可扩展的 **静态分析工具**,用于审计 Solidity 合约。 它结合 **基于规则的启发式方法**、**模式检测** 和 **表层代码指标** 来生成: * **风险评分 (0–100)** * **风险等级 (低 / 中 / 高)** * 从合约源代码中提取的详细 **特征细分** * 用于溯源的 **加密源哈希** 该项目为构建更高级的分析器、ML 驱动的检测器、基于 AST 的分析或链上验证工具提供了一个极简但强大的基础。 ## **项目背景** 安全是智能合约开发中的首要任务。 即使是简单的错误,如不安全的访问控制、重入窗口或 `delegatecall` 的误用,也可能导致数百万的损失。 大多数开发者: * 无法使用高端审计工具 * 不知道如何构建静态分析器 * 希望有一个可以在本地运行的轻量级工具 本项目通过以下方式解决这些问题: * **简单的基于 CLI 的分析器** * **危险模式检测器** * **清晰的评分系统** * 一组 **易受攻击的合约示例** * 专为 **未来扩展** 设计的结构 ## **功能特性** ### **静态特征提取** 分析器提取以下内容: | 特征 | 含义 | | ---------------- | ---------------------------------------------- | | `n_lines` | 代码总行数(规模/复杂度) | | `n_payable` | `payable` 函数的数量 | | `has_delegatecall` | 用于代理和动态执行的高风险 opcode | | `has_call_value` | 已弃用的底层调用模式 | | `has_tx_origin` | 严重的访问控制漏洞 | ### **启发式风险评分** 基于以下因素计算出的 **100** 分制风险评分: * 高风险 opcode * 误导性模式 * 暴露面 * 代码规模 #### **评分规则(当前版本)** | 模式 | 分数 | | --------------------------------- | ----- | | `delegatecall` | +50 | | `tx.origin` | +40 | | `call.value` | +30 | | 多个 payable 函数 (>3) | +25 | | 少量 payable 函数 (>0) | +5 | | 大型合约 (>100 行) | +5 | | 超大型合约 (>300 行) | +15 | 风险区间: * **0–20** → 低 * **21–60** → 中 * **61–100** → 高 ### **内置合约示例** 项目包含多个真实的安全场景: * 安全合约 * 多 Payable(扩大攻击面) * Delegatecall 漏洞 * 代理模式 * 重入漏洞 * 访问控制 Bug * 预言机操纵 Bug * 更多... 每个合约的完整分析包含在下面。 ## **项目结构** ``` smart-contract-risk-analyzer/ ├── contracts/ │ └── RiskRegistry.sol # (optional, not used) ├── data/ │ └── examples/ # All test Solidity contracts │ ├── safe_contract.sol │ ├── medium_risk.sol │ ├── high_risk_delegatecall.sol │ ├── reentrancy_vuln.sol │ ├── oracle_manipulation.sol │ ├── proxy_contract.sol │ ├── access_control_bug.sol │ └── sample_contract.sol ├── src/ │ ├── analyzer/ │ │ ├── features.py # feature extraction │ │ ├── risk.py # scoring engine │ └── cli.py # CLI entry point ├── scripts/ │ ├── train_model.py # placeholder │ └── analyze_and_register.py # placeholder └── templates/ └── report.html # placeholder ``` ## **快速开始** ### **1. 安装** ``` cd smart-contract-risk-analyzer python -m venv .venv .\.venv\Scripts\activate # Windows pip install -r requirements.txt # (optional; no dependencies required yet) ``` ### **2. 运行分析器** ``` python src\cli.py --file data\examples\sample_contract.sol ``` ### **3. 输出示例** ``` { "source_hash": "1da354a9b...", "features": { "n_lines": 16, "n_payable": 0, "has_delegatecall": 1, "has_call_value": 0, "has_tx_origin": 1 }, "risk_score": 90, "risk_level": "High" } ``` # **内置合约详细分析** 以下是分析器评估每个合约的细分说明。 ## **1. safe_contract.sol, 安全合约** 无危险模式 简单的所有者提现逻辑 有一些 payable 函数但数量很少 **风险:低 (分数 ~5)** ## **2. medium_risk.sol, 多 Payable 函数** 无危险 opcode 5+ 个 payable 函数 → 扩大了攻击面 **风险:中 (分数 ~25)** ## **3. high_risk_delegatecall.sol, 严重安全风险** 包含 **两个极其危险的模式**: * `delegatecall` * 用于授权的 `tx.origin` 这在现实部署中是灾难性的。 **风险:高 (分数 ~90)** ## **4. reentrancy_vuln.sol, 经典重入 Bug** 调用: ``` (bool ok,) = msg.sender.call{value: amount}(""); ``` **先执行后交互**,导致存在重入漏洞。 当前版本 **尚未检测到这一点**,但未来的改进将会支持。 **风险(当前):低-中 (分数 ~5)** **风险(现实世界):高** ## **5. access_control_bug.sol, 任何人都可以更改所有者** ``` function setOwner(address newOwner) public { owner = newOwner; } ``` 没有 `require(msg.sender == owner)` 检查。 当前的启发式方法 **尚未** 检测到这一点。 **风险(当前):低 (分数 ~0)** **风险(实际):高** ## **6. oracle_manipulation.sol, 开放价格预言机** 任何人都可以更新价格。 再次强调:当前的启发式方法 **未** 检测到这一点。 **风险(当前):低** **风险(实际):中-高** ## **7. proxy_contract.sol, 可升级代理** 合法使用了 `delegatecall`,但本质上仍然具有危险性。 **风险:中 (分数 ~55)** # **如何改进分析器** 该分析器有意设计得非常简单。 您可以通过以下方式进行扩展: ### **1. 添加更多模式检测器** * 检测 `call{value:...}` 语法 * 检测未受保护的 setter * 检测关键操作中缺少 `require()` * 检测不安全的 `public` 变量 * 检测未设防的外部调用 ### **2. 使用 AST 解析器** 将正则表达式替换为: * `solidity-parser-antlr` (Node.js) * `slither` JSON AST 输出 * `tree-sitter-solidity` ### **3. 添加 ML 模型 (RandomForest/XGBoost)** 步骤: 1. 计算所有示例合约的特征 2. 手动标记它们 (`低/中/高`) 3. 训练分类器 4. 用预测结果替换启发式规则 ### **4. 生成 HTML/PDF 报告** 使用 Jinja2 + 模板创建: * 合约摘要 * 风险指标 * 函数级细分 * 建议 ## **路线图** | 功能 | 状态 | | --------------------------------- | ------ | | 静态特征提取 | 已完成 | | 启发式评分引擎 | 已完成 | | CLI 接口 | 已完成 | | 内置示例合约 | 已完成 | | 基于 ML 的评分 | 下一步 | | 基于 AST 的分析 | 下一步 | | Web 界面 | 计划中 | | 报告生成 | 计划中 | | 基于规则的漏洞模式 | 计划中 |
标签:Caido项目解析, CISA项目, DeFi安全, DNS 反向解析, heuristic, Python, Solidity, Web3安全, 云安全监控, 代码特征提取, 以太坊, 区块链安全, 合约鉴权, 安全评分, 开发安全, 文档结构分析, 无后门, 智能合约审计, 模式匹配, 网络安全, 自动化资产收集, 逆向工具, 隐私保护, 静态分析