尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

从7天到几小时:SmartBugs 批量安全审计的并行分析与资源调优手册

从7天到几小时:SmartBugs 批量安全审计的并行分析与资源调优手册 从7天到几小时SmartBugs 批量安全审计的并行分析与资源调优手册【免费下载链接】ruffleA Flash Player emulator written in Rust项目地址: https://gitcode.com/GitHub_Trending/ru/ruffle1万个合约逐个跑每个 1 分钟也要 7 天——数万份合约做人工审计基本不现实并行是唯一出路。SmartBugs 是一个批量安全审计框架它把 Mythril、Slither、Oyente 等 25 款分析工具统一到一条命令行下做并行分析让数万合约的一次性审计在几小时内收尾。这篇文章教你三件事进程数怎么开、内存上限怎么设、跑断了怎么续。从 0 到第一次出结果先把 10 份合约跑通别一上来就怼 47000 份合约。官方 samples 目录里只有 10 份合约就是给安装后的环境验证用的三步搞定安装 Docker确认 Python 在 3.10 及以上详细步骤见 doc/installation.md克隆仓库git clone https://gitcode.com/GitHub_Trending/ru/ruffle进入仓库目录运行install/setup-venv.sh初始化虚拟环境。跑完先去看results目录SmartBugs 会把每个任务的结果按工具、运行 ID、文件名分类存放目录模板可以在 sb/settings.py 里自定义。顺手记下两个数——单任务耗时、内存峰值回头放大--processes和--mem-limit时全靠它们反推先试跑、再放大才是正确顺序。10 份合约跑得轻松文件量放大三个数量级后瓶颈立刻显现。第一个问题太慢。⚡ 问题一 · 太慢把 1 万个合约塞进并行队列1 个合约 × 1 个工具就是一个 Task先说清楚为什么顺序执行是死路单款工具的 Docker 镜像动辄数百 MB一次分析短则几十秒、长则十几分钟耗时随合约数量线性膨胀。SmartBugs 的做法是把1 个合约 × 1 个工具打包成一个独立 Tasksb/tasks.py 和 sb/smartbugs.py 负责收集文件、组装任务再通过多进程队列分发执行。并行执行的逻辑在 sb/analysis.py 里——每个分析进程都从同一个共享队列取任务跑完一个再取下一个。类比一下就像后厨多条档口共用同一排取餐口谁空闲谁拿下一单某个合约跑得慢只会拖住一条档口整条线不会堵死负载均衡是天然自带的。进程数怎么开物理内存除以峰值--processes不是越大越好每个进程都会拉起一个 Docker 容器容器各自占内存。经验公式进程数 ≈ 物理内存 ÷ 单工具内存峰值。比如 32GB 内存的机器跑 Mythril峰值约 4GB时开 68 个进程比较稳妥跑 Slither峰值约 1GB则可以开到 16 个以上。最常用的批量审计命令长这样./smartbugs -t all -f contracts/*.sol --processes 8 --mem-limit 4g --timeout 600 --json其余参数逐个说参数作用什么时候用 / 怎么选-t all挑选分析工具all表示全部 25 款一起上需要全量覆盖时使用-fglob 通配符批量匹配合约如contracts/*.sol一次喂进上万份文件--processes并行分析进程数≈ 物理内存 ÷ 单工具内存峰值--mem-limit单个容器的内存上限512m或4g指定防止单任务吃光内存--timeout单任务超时秒600 即 10 分钟超时强制终止--cpu-quota单容器 CPU 配额单位微秒把 CPU 密集型工具与其他服务隔离开--json分析结束后立即解析输出生成结构化结果方便后续处理--continue-on-errors出错的任务跳过、继续执行批量里混着编译失败、缺 pragma、版本不兼容时进程数解决了速度接下来是安全问题一个合约触发分析工具的内存黑洞整台机器跟着遭殃。内存与超时的保险丝合约审计资源调优的四个旋钮--mem-limit给容器装保险丝Docker 容器的内存上限可用--mem-limit 512m或--mem-limit 4g指定。给每个容器设了合理上限后就算某个合约触发了工具的内存黑洞炸掉的也只是那个容器机器不会跟着倒下。--timeout给任务设限时没有超时控制时一个卡住的任务会长期占用一个进程拖慢整个批量审计。设--timeout 600后超时的任务被强制终止进程立即回收去处理下一个合约——像考试限时一道死题不能吃掉整场。--continue-on-errors别让一颗坏合约停掉整批上万合约里总会有编译失败、缺少 pragma 或版本不兼容的情况。加上--continue-on-errorsSmartBugs 会跳过这些异常任务、继续执行剩余任务而不是让整个批次崩溃。--cpu-quota限制出水量当多台机器共享 CPU 资源、或想限制容器对 CPU 的占用时用--cpu-quota指定每个容器可用的 CPU 配额单位为微秒把 CPU 密集型工具和其他服务隔开。机器调好了但几十小时的长跑万一中途断电或误操作呢第三个问题中断。跑几十小时断了怎么办断点续跑和另外两道保险批量审计动辄跑几十小时最怕的就是中途断掉。SmartBugs 配了三重保障断点续跑存档式恢复再次用相同参数运行命令已完成的任务会自动跳过只补跑未完成的部分——配合 sb/analysis.py 里的目录检查逻辑生效像读档一样接着跑。随机调度把队列洗一次牌任务队列在执行前会被随机打乱同样见 sb/analysis.py避免同类任务挤在同一时段造成资源竞争。Docker 抖动自动重试最多 3 次执行过程中遇到 Docker 连接抖动会自动等待几分钟后重试最多 3 次见 sb/docker.py。那么大规模到底有多大先挑数据集。挑数据集规模再把海量日志变成一张报表5 个官方数据集按需取用SmartBugs 官方整理了多个规模的公开数据集详见 doc/datasets.md数据集合约数量适用场景samples10安装后快速验证环境SB Curated143已知漏洞样本回归测试CGT3103带人工核验标注的标准答案SmartBugs Wild47,398链上真实合约大规模审计Skelcodes248,328部署/运行字节码分析配合-f的 glob 通配符整个数据集可以一次性喂进去例如-f wild/*.sol。reparse results2csv日志变报表批量审计的产出是海量原始日志直接看会让人崩溃。两个配套工具解决它reparse跳过重复分析只解析已有结果适合换了新解析器后重新生成结构化输出results2csv把各工具输出汇总成 CSV一行一个合约可直接导入数据库或表格软件。完整流程完整用法见 doc/usage.md 与 README.md./smartbugs -t all -f contracts/*.sol --timeout 600 ./reparse results ./results2csv -p results results.csv能跑和跑得住之间的差距就靠上面这几个参数填平并行决定速度上限决定安全断点续跑决定你能不能睡觉。把这套调优流程掌握在手上万合约的审计窗口就能从几天缩到几小时。【免费下载链接】ruffleA Flash Player emulator written in Rust项目地址: https://gitcode.com/GitHub_Trending/ru/ruffle创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表