
应用安全后端开发工具【免费下载链接】clusterfuzzScalable fuzzing infrastructure.项目地址https://gitcode.com/gh_mirrors/cl/clusterfuzz点击查看免费下载ClusterFuzz 是 Google 开源的可扩展模糊测试fuzzing基础设施用于在软件中自动发现安全与稳定性问题并已作为 OSS-Fuzz 的模糊测试后端运行在数万台虚拟机之上。本文以仓库根目录 README.md 为主线结合src/clusterfuzz下的源码实现、cron 调度配置与测试用例系统讲解其核心功能、崩溃去重算法、自动化 Bug 生命周期、多引擎接入方式与部署形态帮助你理解并复用这套业界规模的分布式模糊测试体系。ClusterFuzz 是什么ClusterFuzz 是一个可扩展的模糊测试基础设施Scalable Fuzzing Infrastructure。它的定位不是某个单一的 fuzzer而是把「模糊测试」这件事工程化、平台化、自动化从大规模调度 fuzzer 运行、收集崩溃到去重、最小化、回归定位、自动提交 Bug、跟踪修复闭环全部流水线化。从 README.md 可知Google 使用 ClusterFuzz 模糊测试其所有产品并作为 OSS-Fuzz 的模糊测试后端它具备高度可扩展性可以运行在任意规模的集群上例如 OSS-Fuzz 实例运行在 100,000 台虚拟机上截至 2023 年 2 月ClusterFuzz 已在 Google如 Chrome中发现约27,000个 Bug同时帮助 OSS-Fuzz 集成的850个项目发现并修复了8,900多个安全漏洞和28,000多个 Bug。注上述战绩数据均来自 README 原文属项目自述事实引用时请注明时间口径2023 年 2 月。核心功能清单从发现到闭环README 列举了 ClusterFuzz 帮助软件项目无缝集成模糊测试的系列能力这也是理解其价值主张的最佳入口功能说明高度可扩展可运行在任意规模集群上如 OSS-Fuzz 的 100,000 VM 实例崩溃精确去重对海量崩溃做准确去重详见下文去重算法全自动 Bug 处理面向多种 issue tracker如 Monorail、Jira自动提交、分流triage与关闭 Bug多覆盖引导引擎支持 libFuzzer、AFL、AFL、Honggfuzz并支持集成式模糊测试ensemble fuzzing与模糊测试策略fuzzing strategies黑盒模糊测试支持 blackbox fuzzing无需插桩的输入生成型模糊测试用例最小化自动将崩溃复现用例最小化回归定位通过二分bisection找出引入回归的版本区间统计分析提供分析 fuzzer 性能与崩溃率的统计能力Web 界面提供易用的管理界面用于管理和查看崩溃多认证方式支持基于 Firebase 的多种认证提供方这些能力并非 README 中的空头承诺而是仓库中真实存在、可逐行验证的实现。下面逐一深入。系统架构与一次完整 Fuzz 任务的生命周期组件划分从仓库顶层结构看ClusterFuzz 主要由三大部分组成src/clusterfuzz/_internal/bot运行在各台机器bot上的任务执行端负责实际运行 fuzzer、最小化、回归等src/clusterfuzz/_internal/cron周期性的调度与后台任务调度 fuzz、分组、triage、覆盖率等src/appengineWeb 界面与 API 层用于管理、查看崩溃。Fuzz 任务的执行链路一次 fuzz 任务的核心实现位于 src/clusterfuzz/_internal/bot/tasks/utasks/fuzz_task.py。从源码结构可以梳理出关键环节准备构建环境build setup、数据包data bundle、fuzz target 准备运行通过统一的引擎接口调用具体 fuzzerlibFuzzer / AFL / Honggfuzz 等详见下文「引擎抽象」崩溃收集解析 fuzzer 输出抽取崩溃栈unsymbolized_crash_stacktrace交给 stack_analyzer 生成crash_type、crash_state、crash_address等结构化字段见Crash.__init__中stack_analyzer.get_crash_data(...)的调用安全性判定通过 crash_analyzer.py 的is_security_issue判断是否安全漏洞并用ignore_stacktrace过滤误报可复现性验证find_main_crash调用testcase_manager.test_for_reproducibility逐一验证崩溃是否可复现区分「可复现」与「一次性崩溃one-time crasher」上传与归档archive_testcase_in_blobstore将 testcase 连同依赖归档到 GCS/blobstore创建 Testcase 实体以(crash_type, crash_state, security_flag)为 key 分组的CrashGroup决定是否创建新 testcase。崩溃是否值得入库有一套校验逻辑Crash.get_error可被FILTER_FUNCTIONAL_BUGS过滤的非安全问题、误报false crash、无法存储的用例、空 crash state/type 都会被拒绝。崩溃后处理任务链testcase 创建后后续任务由 src/clusterfuzz/_internal/bot/tasks/task_creation.py 按需串联形成一条自动化流水线minimize用例最小化regression / progression回归区间定位与修复确认impact / blame影响面评估与嫌疑提交定位Chromium 项目专用见 blame_task.py其中通过解析 DEPS 文件计算依赖 roll交给 Predator 服务variant跨 job 的变体分析symbolize符号化。任务间还具备「flaky不稳定复现」处理机制mark_unreproducible_if_flaky会先标记potentially_flaky若第二次仍不稳定则将 testcase 标记为one_time_crasher_flag True并设置为不可复现。崩溃去重精确分组的算法内核「精确去重」是 README 强调的核心卖点。其底层实现在 src/clusterfuzz/_internal/crash_analysis/crash_comparer.py 的CrashComparer类中结合了三种技术完全相等快速通道两个 crash state 完全相同直接判定相似最长公共子序列LCSlongest_common_subsequence统计两个 crash state 中按顺序相同的帧数SAME_FRAMES_THRESHOLD 2默认即认为相似Levenshtein 编辑距离逐行计算相似度比率(len1 len2 - distance) / (len1 len2)取平均后与COMPARE_THRESHOLD 0.8默认比较。此外还有两个细节值得注意若 crash state 中含有FuzzerHashfuzzer 哈希串则走精确匹配逻辑相等才判相似源码注释明确说明对Missing-library、Out-of-memory、Timeout等CRASH_TYPES_WITH_UNIQUE_STATE类型定义见 src/clusterfuzz/_internal/datastore/data_types.py只要求 crash type 与 crash state 完全一致不使用相似度算法。分组器Grouper的聚合规则CrashComparer只是「两两比较」的原子操作真正的分组发生在 src/clusterfuzz/_internal/cron/grouper.py 的group_testcases()中按顺序执行四类分组规则相似崩溃状态分组_group_testcases_with_similar_states安全漏洞只看 crash state 相似度非安全漏洞要求 state 与 type 都相似同一底层 Issue 分组_group_testcases_with_same_issues若两个 testcase 关联同一 issue id 则合并变体分析分组_group_testcases_based_on_variants对不同 job type 下的相同变体crash_type、crash_state、security_flag完全一致分组但会跳过 OOM/Timeout 等类型、NULL状态、不可复现用例、以及 top crash超大组收缩_shrink_large_groups_if_needed超过group_max_limit默认 25可通过项目配置deduplication.group_max_limit调整的组会按「可复现性 是否有关联 issue」加权排序删除或关闭超出的 testcase。分组完成后由 group_leader.py 选出每个组的 leader 作为代表。整个分组过程还通过TestcaseGroupingEvent记录每次合并原因SIMILAR_CRASH、SAME_ISSUE、IDENTICAL_VARIANT、GROUP_MERGE等可回溯审计。多引擎接入统一的 Fuzzing 引擎抽象README 提到支持 libFuzzer、AFL、AFL、Honggfuzz 等多个覆盖引导引擎。在仓库中这是通过统一的引擎接口实现的src/clusterfuzz/fuzz/engine.py 定义了Engine基类与register(name, engine_class)/get(name)注册表机制。Engine接口的核心方法方法职责prepare(corpus_dir, target_path, build_dir)生成FuzzOptions准备一次 fuzz 会话fuzz(target_path, options, reproducers_dir, max_time)运行模糊测试会话返回FuzzResult含崩溃列表与统计reproduce(target_path, input_path, arguments, max_time)用给定输入复现崩溃minimize_corpus(...)/minimize_testcase(...)语料库最小化 / 用例最小化cleanse(...)清洗用例用垃圾数据替换非关键字节各引擎实现位于 src/clusterfuzz/_internal/bot/fuzzers 下包括libFuzzer/、afl/、honggfuzz/、centipede/、googlefuzztest/等子目录。以 libFuzzer 为例src/clusterfuzz/_internal/bot/fuzzers/libfuzzer.py 中的LibFuzzerCommon提供了完整操作集fuzz(...)组装-max_total_time、-print_final_stats1、-artifact_prefix等参数并执行若启用 fork 模式-fork会额外预留LIBFUZZER_FORK_MODE_CLEAN_EXIT_TIME 100.0秒的退出窗口merge(...)语料库合并支持-merge_control_fileminimize_crash(...)/cleanse_crash(...)分别对应-minimize_crash与-cleanse_crash并用-exact_artifact_path指定输出还针对 AndroidAndroidLibFuzzerRunner通过 adb 推送语料、FuchsiaFuchsiaUndercoatLibFuzzerRunner、沙箱MinijailLibFuzzerRunner提供了平台特化实现。崩溃输出中的 testcase 路径通过CRASH_TESTCASE_REGEX r.*Test unit written to\s*(.*(crash|oom|timeout|leak)-.*)从日志中提取见 libfuzzer.py。Fuzzing 策略与集成式模糊测试Ensemble FuzzingREADME 中提到的「fuzzing strategies」与「ensemble fuzzing」是提升模糊测试效果的关键机制其定义位于 src/clusterfuzz/_internal/fuzzing/strategy.pyCORPUS_MUTATION_RADAMSA_STRATEGY Strategy(namecorpus_mutations_radamsa, probability0.15, ...) CORPUS_SUBSET_STRATEGY Strategy(namecorpus_subset, probability0.50, manually_enableTrue) FORK_STRATEGY Strategy(namefork, probability0.50, ...) RANDOM_MAX_LENGTH_STRATEGY Strategy(namerandom_max_len, probability0.15, ...) VALUE_PROFILE_STRATEGY Strategy(namevalue_profile, probability0.33, ...) USE_EXTRA_SANITIZERS_STRATEGY Strategy(nameextra_sanitizers, probability0.10, ...)Strategy是(name, probability, manually_enable)三元组其中manually_enableTrue表示该策略不参与多臂老虎机multi-armed bandit的概率选择流程而是单独考虑例如corpus_subset只有在目标支持时才启用且应被重度使用。libFuzzer 与 AFL 各自维护独立的策略列表LIBFUZZER_STRATEGY_LIST/AFL_STRATEGY_LIST。策略池的生成在 src/clusterfuzz/_internal/bot/fuzzers/strategy_selection.py 中generate_default_strategy_pool按各策略概率独立决定是否加入策略池radamsa 生成器与无生成器互斥generate_weighted_strategy_pool当环境中存在STRATEGY_SELECTION_DISTRIBUTION且选择方法非default时按多臂老虎机实验得出的概率分布做加权随机选择否则回退到默认方法环境变量DISABLED_STRATEGIES逗号分隔可在运行时禁用指定策略。策略的概率分布由 cron 任务 src/clusterfuzz/_internal/cron/fuzz_strategy_selection.py 定期更新其调度配置见 configs/test/k8s/fuzz-strategy-selection.yaml。自动化 Bug 生命周期提交、分流与关闭README 宣称「Fully automatic bug filing, triage and closing for various issue trackers (e.g. Monorail, Jira)」。这一能力在仓库中由 src/clusterfuzz/_internal/issue_management 与 src/clusterfuzz/_internal/cron/triage.py 共同实现。Issue Tracker 抽象issue_management目录下提供了统一的 tracker 抽象monorail/MonorailChromium 等使用的 Google Issue Tracker实现jira/Jira 实现oss_fuzz_github.pyOSS-Fuzz 项目使用的 GitHub Issues 实现基类与策略在 issue_tracker.py、issue_tracker_policy.py。这种抽象使得同一套 triage/filing 逻辑可以对接不同 issue 系统配置方式见 configs/test/issue_trackers/config.yaml。自动提交Issue Filingsrc/clusterfuzz/_internal/issue_management/issue_filer.py 负责将崩溃转化为 issue为栈帧打标签MEMORY_TOOLS_LABELS将 AddressSanitizer、LeakSanitizer、MemorySanitizer、ThreadSanitizer、UndefinedBehaviorSanitizer 及 afl/libfuzzer 等 token 映射为对应 issue 标签通过platform_substitution等规则做平台化文案替换定义NON_CRASH_TYPESData race、Direct-leak、Integer-overflow 等用于决定优先级与处理策略。定时分流Triagesrc/clusterfuzz/_internal/cron/triage.py 的 cron 任务负责对未关联 issue 的 testcase 判定是否需要提交 Bug默认每项目每 24 小时最多 100 个 BugMAX_BUGS_PER_PROJECT_PER_24HRS_DEFAULT对 OOM、Stack-overflow、Timeout 等类型的不可复现崩溃忽略提交通过_add_triage_message记录 triage 结论避免重复操作结合分组结果让同一组的代表 testcase 去关联同一个 issue。配合 grouper.py 的分组整体形成了「崩溃 → 去重分组 → 自动提交 → 关联 issue → 修复后自动关闭」的闭环。统计、覆盖率与 Web 界面统计能力README 提到「Statistics for analyzing fuzzer performance, and crash rates」。相关实现集中在 src/clusterfuzz/_internal/metricsfuzzer_stats.py 与 fuzzer_stats_schema.py解析 fuzzer 输出的统计exec/sec、cov 等并入库crash_stats.py崩溃率统计配合 BigQuery 构建报表定时聚合由 src/clusterfuzz/_internal/cron/aggregate_fuzzer_stats.py 执行BigQuery 数据集配置见 configs/test/bigquery/datasets.yaml。代码覆盖率覆盖率信息由 src/clusterfuzz/_internal/cron/fuzzer_coverage.py 定期从 GCS 拉取latest_report_infoJSON 并写入CoverageInformation实体供 Web 界面展示每个 fuzz target 或项目的覆盖率趋势。Web 管理界面Web 层位于 src/appenginehandlers/提供 REST/页面 handlertestcase 详情、崩溃统计、覆盖率报表、fuzzers/jobs 管理、上传 testcase 等前端由 src/appengine/private 下的 Polymer 组件与模板构成。认证方面支持多种提供方README 明确说明基于 Firebase对应auth相关 handler 与 configs/test/gae/auth.yaml。运行、部署与生态扩展本地运行仓库根目录提供统一的入口脚本 butler.py本地开发/测试可通过python butler.py系列子命令run_server、run_bot、run等拉起 App Engine 模拟器与 bot具体步骤参见 docs/getting-started/local_instance.md 与 docs/getting-started/getting_started.md。生产部署形态Docker 镜像docker/ 目录为各角色base、chromium、oss-fuzz、ci、fuchsia 等提供容器化构建GCE 集群configs/test/gce/clusters.yaml 定义集群Kubernetes 调度configs/test/k8s/ 下的 cron job 配置展示了各调度任务例如schedule-fuzz.yamlrun_cron.py schedule_fuzz为各 job 创建 fuzz 任务schedule-progression-tasks.yamlschedule_progression_tasksschedule-corpus-pruning.yamlschedule_corpus_pruning语料库剪枝fuzz-strategy-selection.yamlfuzz_strategy_selection更新策略概率分布load-bigquery-stats.yaml、sync-admins.yaml 等。这些 cron 任务的实现均在 src/clusterfuzz/_internal/cron 下schedule_fuzz.py、schedule_corpus_pruning.py、schedule_progression_tasks.py、fuzz_strategy_selection.py等并通过 src/python/bot/startup/run_cron.py 统一启动。语料库管理语料库通过 src/clusterfuzz/_internal/fuzzing/corpus_manager.py 与 GCS 同步支持 zip 打包、按 SHA1 重命名去重rename_file_to_sha、Windows 非法文件名清洗legalize_filenames、gsutil rsync容错忽略NotFoundException等可容忍错误。公开备份public时间戳用于跨项目共享。轻量版ClusterFuzzLiteREADME 同时指出如需在 CI/CD 系统上运行更轻量的版本可参考 ClusterFuzzLite。它适合资源受限、需要把模糊测试嵌入持续集成的场景而完整版 ClusterFuzz 面向大规模、长时运行的分布式模糊测试。获取帮助与保持更新提问与反馈可通过 GitHub Issues 提交问题、请求功能或寻求帮助README 明确说明发布公告ClusterFuzz 的重大更新通过clusterfuzz-announce邮件组发布如需跟踪版本演进可订阅该渠道。总结ClusterFuzz 的工程价值在于把「模糊测试」从单个工具升级为自动化闭环平台用统一的引擎抽象接入 libFuzzer/AFL/Honggfuzz 等覆盖引导引擎与黑盒 fuzzer用CrashComparerLCS Levenshtein与 Grouper 实现大规模崩溃去重用 issue tracker 抽象自动完成 Bug 的提交、分流与关闭再辅以最小化、二分回归、统计与覆盖率、Web 界面与 Firebase 认证形成一套可运行于万级虚拟机集群的完整解决方案。对希望自建或理解大规模模糊测试平台的技术团队而言README.md 是入口而src/clusterfuzz/_internal下的源码则是最佳的实现教材。赞分享应用安全后端开发工具【免费下载链接】clusterfuzzScalable fuzzing infrastructure.项目地址https://gitcode.com/gh_mirrors/cl/clusterfuzz点击查看免费下载相关推荐ClusterFuzz完整指南Google开源的可扩展模糊测试基础设施ClusterFuzz完整指南Google开源的可扩展模糊测试基础设施 想要构建 高效、可扩展的模糊测试基础设施 吗ClusterFuzz是Google开源应用安全后端开发工具OSS-Fuzz 与 ClusterFuzz分布式模糊测试基础设施的完整使用指南OSS Fuzz 与 ClusterFuzz分布式模糊测试基础设施的完整使用指南 导读 本文聚焦于 OSS Fuzz 项目背后的分布式模糊测试基础设施 Clu测试应用安全质量保障Harness Pipeline模式完全教程设计顺序依赖的Agent工作流Harness Pipeline模式完全教程设计顺序依赖的Agent工作流 如果你想让多个AI智能体像流水线一样按顺序协作、把复杂任务一步步做完 HarAI 技能人工智能上一篇ncmdump 免费 NCM 转 MP33 步拖拽转换批量处理整库音乐下一篇一条命令把改不动的 STL 网格变成可编辑的 STEP 实体stltostp 转换完整指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考