用途
sc-audit 是一个智能合约深度安全审计技能,用于审计两类目标:GitHub 上的 Solidity 仓库,以及通过地址指定的链上已部署合约。它从 vuln-scanner 中拆分出合约审计部分,vuln-scanner 负责检测 Solidity 并将仓库交给本技能,本技能负责深度审计,再通过 vuln-scanner 的共享披露机制处理发现。
该技能存在的理由是:智能合约漏洞本质上是逻辑与经济问题,而非语法问题。Slither 只能匹配已知静态模式,在访问控制、协议不变量、预言机/价格操纵、舍入/精度、可升级性存储冲突和跨合约重入等类别上较弱,而这些正是实际导致资金流失、且链上利用即时且不可逆的类别。智能体式审查通过阅读源码并推理“谁可以调用什么、哪个不变量会被破坏”来捕捉这一类问题。
主要能力
- 支持四种目标选择形式:空值自动选择当日新目标;owner/repo 审计指定 GitHub 仓库;<chain>:0x<address> 链上模式审计已部署合约;fixture:<name> 本地回归模式审计内置 fixture。
- 链上模式会从区块浏览器(Etherscan V2)或 Sourcify 获取已验证源码,还原为 Foundry 项目,并运行同一套审计流程,同时补充链上上下文(代理/实现、所有者/管理员、风险资金)。
- 支持多条链:eth、base、arbitrum、optimism、polygon、bsc、avalanche、gnosis、scroll、linea、zksync、blast、sepolia、base-sepolia 等。
- 内置去重机制:仓库模式和链上模式共用 vuln-scanner 的 ledger,30 天内已覆盖的目标会跳过;仓库还会检查已发布的安全公告。
- fixture 模式可重复运行,绕过去重与披露,用于自包含地演练整条流水线(包括 fuzz 分支)。
使用方式
通过 ${var} 传入目标选择器。空值自动选择当日新目标,仅当包含 Solidity 时才审计;owner/repo 审计该仓库;<chain>:0x<address> 进入链上模式;fixture:<name> 进入本地回归模式。链上模式会解析链到 Etherscan V2 chain id 并规范化地址,然后获取已验证源码。若源码未验证,则记录并干净退出,因为仅字节码审计不在范围内。
审计在 gitignored 的 .scan/ 目录内进行,构建产物不会污染受跟踪的目录树。仓库模式会 fork 仓库并浅克隆;fixture 模式复制内置 fixture 到 .scan/ 后审计副本;链上模式将源码写入 .scan/onchain-<chain>-<addr> 下的 Foundry 项目。
适用场景
- 对 GitHub 上的 Solidity 项目进行深度安全审查。
- 对链上已部署、持有真实资金的合约进行审计,此时漏洞已可被利用。
- 通过内置 fixture 进行可重复的回归测试,验证审计流水线。
限制
- 智能体式源码审查是可靠核心;Slither 为尽力而为,无头运行中 slither 在白名单内但 solc / forge / solc-select 不在,因此需要编译器构建的合约可能无法在运行中编译。源码审查不需要编译器,因此干净的审计不依赖 Slither 成功。
- 链上模式仅支持有已验证源码的合约;仅字节码审计不在范围内,因为反编译不可靠且会产生不可证伪的发现。
- 链上发现受操作员门控,绝不会自动提交 PVR、自动发送邮件或打开任何公开渠道,只会暂存操作员门控草稿并通知。
- 空值自动模式仅限仓库,链上候选不会进入自动模式。
- 对于仅 Blockscout 的链,需在 §S2b 添加其 BLOCKSCOUT 主机,Etherscan 调用会干净地无操作。
- 部分实现细节(如具体通知方式、PVR 流程细节)在提供的资料中未完整展开,暂未提供。