ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Solidity 漏洞审计实战:用 vscode-solidity-auditor 审查 SimpleDAO 重入与未初始化合约的完整流程

Solidity 漏洞审计实战:用 vscode-solidity-auditor 审查 SimpleDAO 重入与未初始化合约的完整流程 Solidity 漏洞审计实战用 vscode-solidity-auditor 审查 SimpleDAO 重入与未初始化合约的完整流程【免费下载链接】vscode-solidity-auditorSolidity language support and visual security auditor for Visual Studio Code项目地址: https://gitcode.com/gh_mirrors/vs/vscode-solidity-auditorvscode-solidity-auditor扩展名 Solidity Visual Developer是一款为 Visual Studio Code 打造的 Solidity 语言支持与可视化安全审计工具帮助开发者与审计人员通过安全导向的语法高亮、语义标注、Cockpit 驾驶舱视图和自动化图表快速定位智能合约中的重入攻击、未初始化变量等真实漏洞。本文以项目自带的两个漏洞样本为演练对象带你完整走一遍合约安全审计流程 ️演练场景两个真实漏洞样本项目仓库的 examples/ 目录内置了多个用于练习的合约本文用到以下两个经典漏洞样本文件漏洞类型一句话描述simpleDao.sol重入攻击Reentrancy先转账、后记账余额被反复刷取uninit.sol未初始化逻辑缺陷注册函数在解锁前就修改了链上状态再配一份正确写法作为对照safe.sol 展示了先清零余额、再用transfer转账的安全模式方便你理解修复思路。Solidity Visual Developer 扩展的 Cockpit 驾驶舱图标——审计时它就是你的侧边栏指挥台安装扩展与准备环境最快配置方法打开 VS Code 扩展面板搜索Solidity Visual Developer内部扩展 ID 为solidity-visual-auditor定义见 package.json点击安装。它会自动带上 Solidity 语言支持、Graphviz 交互预览等依赖扩展。克隆本仓库获取演练合约git clone https://gitcode.com/gh_mirrors/vs/vscode-solidity-auditor用 VS Code 打开仓库目录打开 examples/simpleDao.sol你会立刻看到安全配色生效payable修饰符、msg.sender、address.call()等安全敏感代码都被特殊高亮——这是被动的安全感知层不用写任何配置。在Preferences → Color Themes中可选择专用的Solidity Visual Developer Dark / Light主题审计体验更佳。 所有功能均可在Settings → Solidity Visual Developersolidity-va.*中按需开关完整清单见 README.md。审计第一步用视觉高亮建立安全直觉打开 SimpleDAO 合约重入漏洞的核心就藏在这三行里simpleDao.sol 的withdraw函数function withdraw(uint amount) public { if (credit[msg.sender] amount) { msg.sender.call.value(amount)(); // ① 先把钱打出去外部调用 credit[msg.sender] - amount; // ② 后扣减余额 } }顺序错了① 是外部调用攻击者可以在回调中再次进入withdraw而 ② 还没执行余额检查永远通过。在 vscode-solidity-auditor 中这类危险代码会被被动标红标黄address.call()等外部调用语句在代码行侧边栏显示 gutter 图标装饰对应设置项solidity-va.deco.warn.externalCalls源码见 deco.jsmsg.value、msg.sender等攻击者可控变量有专门的高亮颜色状态变量credit用金色框标注一眼看出哪些函数在读写资金账本装饰逻辑见 src/features/。审计心得先读颜色再读代码。凡是外部调用在前、状态修改在后的函数自动进入重点怀疑名单。审计第二步用 Cockpit 视图圈定攻击面点击 VS Code 左侧活动栏的 Cockpit 图标即上文配图进入审计驾驶舱视图注册与交互逻辑见 cockpit.js 与 package.jsonWorkspace: Top Level Contracts列出最可能被部署的入口合约避免把时间花在抽象基类上Context: Public State-Changing Methods光标停在SimpleDAO上后自动列出所有会改状态的 public 方法——donate和withdraw立刻浮出水面Context: External Calls列出合约内所有外部调用点重入、ETH 转移风险点一目了然Context: Function Call Trace跟踪函数调用链评估调用深度与信任边界。对 uninit.sol 里的NameRegistrar合约重复同样操作register函数是唯一的状态修改入口点进 External Calls 与 Public Methods 视图后它的优先级立刻被标记为最高。审计第三步生成调用图与审计报告Surya 集成插件深度集成了 Surya 分析引擎依赖配置见 package.json在文件上方会显示一排 CodeLens 内联操作见 codelens.jsgraph / graphThis生成可交互的调用图支持点击高亮调用流——对withdraw点一下重入回调路径在图上清晰可见生图逻辑见 src/features/writer/report一键生成结构化 Markdown 审计报告包含函数列表、状态变量访问、复杂度等信息开启设置项solidity-va.tools.surya.option.negModifiers后缺失的修饰符会以删除线形式列出帮你发现忘加onlyOwner这类低级但致命的问题inheritance / uml生成继承图与 UML 类图用于威胁建模和交付文档。对NameRegistrar的register函数uninit.sol生成报告后可以清楚看到resolve[_name]和registeredNameRecord两个全局映射先被写入require(unlocked)后于状态修改执行——校验必须在副作用之前unlocked初始为false且合约中没有任何构造函数将其置为true注册功能永久锁死。这正是未初始化类缺陷的完整证据链顺序错误 标志位从未初始化。修复方向是在构造函数中unlocked true或提供unlock()管理函数并把require提到赋值之前。审计第四步用 audit 书签沉淀审计结论审计不只要发现问题还要记录结论。插件通过 Inline Bookmarks 提供行内审计标记功能说明见 README.mdmsg.sender.call.value(amount)(); // audit - 重入风险外部调用先于余额扣减 credit[msg.sender] - amount; // audit-ok - 已按 CEI 模式修复先记账后转账audit - 说明标记需要人工复核或已确认的风险行audit-ok - 说明标记已检查、非问题的行。标记会以彩色书签图标出现在行首多人协作时相当于在代码里开了一场审计讨论会。此外插件还能把外部扫描器如 Slither 类工具的 CDILI JSON 结果直接渲染成编辑器诊断设置项solidity-va.diagnostics.cdili_json.import处理逻辑见 genericDiag.js实现静态扫描 人工审计双线并行。审计交付清单从演练到报告完成一轮审计后你可以交付如下成果全部来自本工具链风险清单withdraw重入高危、register校验顺序 未初始化标志位中危用audit标记逐行留痕调用图 / UML 图Surya graph 与 UML 导出作为报告的架构插图自动报告Suryareport生成的 Markdown 基线附函数签名与状态变量访问摘要修复对照以 safe.sol 的 CEI先改状态、后转账写法为参照给出修复建议。更多命令与配置函数签名导出、Remix 跳转、测试桩生成等可查看 README.md 与 package.json 中的命令定义版本演进记录见 CHANGELOG.md。常见问题FAQQCodeLens 不显示怎么办A修改并保存一次文件即可触发刷新也可检查solidity-va.codelens.enable是否被禁用。QUML 功能没有输出AUML 依赖本地 PlantUML 环境Java需要先按 PlantUML 相关扩展的说明完成环境配置。Q插件会替代静态分析工具吗A不会。它是人工审计的放大器——扫描器负责广撒网视觉高亮、Cockpit 视图与图表负责帮你把网络收回来。 记住审计口诀先圈攻击面Cockpit→ 再顺数据流高亮 调用图→ 最后留痕下结论audit 标记。按这个流程走一次 SimpleDAO 级别的演练大约 30 分钟即可完成。【免费下载链接】vscode-solidity-auditorSolidity language support and visual security auditor for Visual Studio Code项目地址: https://gitcode.com/gh_mirrors/vs/vscode-solidity-auditor创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表