应用安全后端开发工具【免费下载链接】clusterfuzzScalable fuzzing infrastructure.项目地址https://gitcode.com/gh_mirrors/cl/clusterfuzz点击查看免费下载导读本文围绕 ClusterFuzz 机器人工作目录bot/inputs/fuzzer-common-data-bundles/展开系统讲解通用数据包common data bundles这一机制它是在 fuzzer 未提供自有语料corpus时可供其使用的共享输入目录也是 Web Testshtml/js 等布局测试的落盘位置。读完本文你将掌握该目录的定位、环境变量FUZZ_DATA的绑定关系、WEB_TESTS_URL/UPDATE_WEB_TESTS的配置方法、每日自动更新流程以及它在黑盒 fuzzing 与引擎 fuzzing 两条执行路径中的实际作用并看到对应的源码与测试证据。一、目录定位一个占位目录背后的完整机制仓库中的 bot/inputs/fuzzer-common-data-bundles/README.md 全文只有两句话Placeholder for common corpora that is available to a fuzzer (if a corpus is not provided). Examples include web tests. See WEB_TESTS_URL attribute in project.yaml.翻译过来即这是通用语料的占位目录——当 fuzzer 没有被显式提供语料时该目录中的内容可作为默认输入典型例子是 Web Tests布局测试配置方式见project.yaml中的WEB_TESTS_URL属性。这个极简说明指向的却是一套贯穿环境变量、任务调度与 fuzzer 执行的完整机制本文将其拆解如下。1.1 环境变量绑定FUZZ_DATA在 bot 启动阶段set_bot_environment() 会把该目录绑定为环境变量FUZZ_DATAinputs_dir os.path.join(bot_dir, inputs) os.environ[INPUT_DIR] inputs_dir os.environ[DATA_BUNDLES_DIR] os.path.join(inputs_dir, data-bundles) os.environ[FUZZ_INPUTS] os.path.join(inputs_dir, fuzzer-testcases) os.environ[FUZZ_DATA] os.path.join(inputs_dir, fuzzer-common-data-bundles)可见 bot 的inputs/下各子目录各有分工环境变量目录用途INPUT_DIRbot/inputs所有输入数据的总目录DATA_BUNDLES_DIRbot/inputs/data-bundlesfuzzer 私有语料corporaFUZZ_INPUTSbot/inputs/fuzzer-testcasesfuzzer 生成的测试用例任务结束后清空可挂 tmpfsFUZZ_DATAbot/inputs/fuzzer-common-data-bundles通用数据包对未指定私有语料的 fuzzer 开放的共享输入CRASH_STACKTRACES_DIRbot/inputs/crash-stacks崩溃栈IMAGES_DIR/SYMBOLS_DIR等bot/inputs/images等图片、符号等辅助数据对照同目录下另两个 README 可以进一步明确边界bot/inputs/data-bundles/README.md 声明其是 Placeholder for fuzzer corporafuzzer 自有语料而 bot/inputs/fuzzer-testcases/README.md 声明其存放 fuzzer 生成的测试用例、任务结束后即清空。通用数据包目录则是三者中唯一跨 fuzzer 共享、常驻、可被每日自动刷新的输入源。1.2 清理与低磁盘保护clear_common_data_bundles_directory() 负责清空并重建该目录def clear_common_data_bundles_directory(): Clear the common data bundle directory. remove_directory(environment.get_value(FUZZ_DATA), recreateTrue)它被 clear_data_directories() 统一调用与 build、crash-stacks、data-bundles、fuzzers 等目录一起在磁盘空间不足时被清理clear_data_directories_on_low_disk_space见 prepare_environment_for_new_task()。这解释了为何它是占位Placeholder目录——其内容是可再生的随时可被清空重建。二、谁在使用它fuzzer 的默认输入目录2.1 数据包目录的选择逻辑在 get_data_bundle_directory() 及其内部实现_get_data_bundle_directorysetup.py中ClusterFuzz 按以下优先级为 fuzzer 挑选输入目录内建 fuzzerfuzzer.builtin True如 libFuzzer→ 使用DATA_BUNDLES_DIRbot/inputs/data-bundles便于统一清理非内建 fuzzer 且配置了私有数据包 → 使用DATA_BUNDLES_DIR/data_bundle.name非内建 fuzzer 且未配置任何数据包 → 回退到FUZZ_DATA即bot/inputs/fuzzer-common-data-bundles。源码注释明确指出第三种情况Generic data bundle directory. Available to all fuzzers if they dont have their own data bundle.这正是 README 中 available to a fuzzer (if a corpus is not provided) 的准确含义通用数据包是没有私有语料时的兜底输入源。2.2 作为--input_dir传给黑盒 fuzzer在 fuzz 任务执行时generate_blackbox_testcases() 会把该目录作为--input_dir拼入 fuzzer 命令行command_format %s --input_dir%s%s --output_dir%s%s --no_of_files%s%d fuzzer_command str( command_format % (command, argument_separator, self.data_directory, argument_separator, self.testcase_directory, argument_separator, testcase_count))其中self.data_directory即上一节选出的数据包目录fuzz_task.py。也就是说黑盒 fuzzer 通过标准参数协议读取通用语料做种子输入并将变异生成的测试用例写入输出目录。若数据包目录设置失败任务会以FUZZ_DATA_BUNDLE_SETUP_FAILURE错误终止fuzz_task.py。对于引擎类 fuzzer数据包目录还参与了语料同步sync_corpus()将 GCS 语料与本地数据包目录绑定同步fuzz_task.py。三、Web Tests 与WEB_TESTS_URL通用数据包的典型内容3.1 配置入口project.yamlREADME 指向的WEB_TESTS_URL位于 configs/test/project.yaml# Web tests (e.g. html, js tests) to automatically download once a day and provide a default # input to fuzzer as part of --input-dir argument (disabled by default). # WEB_TESTS_URL: gs://bucket/path-to-tests-archive.zip # UPDATE_WEB_TESTS: true两个关键配置项默认均禁用需显式开启WEB_TESTS_URLWeb Tests 压缩包zip在 GCS 上的路径如gs://bucket/path-to-tests-archive.zipUPDATE_WEB_TESTS置为true时启用每日自动下载更新。注释明确说明其用途provide a default input to fuzzer as part of--input-dirargument——即这些 Web Tests 会作为 fuzzer 的--input-dir默认输入与上文generate_blackbox_testcases的命令拼接逻辑完全对应。3.2 每日更新流程update_task 源码实现Web Tests 的下载与解压由update_task.py的 update_tests_if_needed() 完成逻辑要点如下取值tests_url优先取显式传入参数否则读环境变量WEB_TESTS_URL两者皆空则直接返回update_task.py本地开发豁免LOCAL_DEVELOPMENT环境下跳过以加速本地测试update_task.py开关检查UPDATE_WEB_TESTS未开启则跳过update_task.py更新频率控制通过持久缓存键tests_last_update记录上次更新时间TESTS_UPDATE_INTERVAL_DAYS 1表示每天至多更新一次update_task.py、update_task.py下载与解压清空FUZZ_DATA目录后URL 以http开头时走storage.download_signed_url_to_filepath签名 URL否则走storage.copy_file_fromGCS 路径随后用系统unzip或内部archive模块解压到FUZZ_DATAupdate_task.py失败重试整个过程在FAIL_RETRIES限定次数内重试成功后回写持久缓存时间戳update_task.py。该流程由prepare_environment_for_new_task()在每个新任务前触发update_task.py因此通用数据包始终是当天最新的 Web Tests 快照。在 uworkeruntrusted worker模式下WEB_TESTS_URL还会在预处理阶段被转换为签名下载 URL 随任务下发fuzz_task_input.web_tests_url storage.get_signed_download_url(web_tests_url)fuzz_task.py避免向 worker 暴露 GCS 凭据。3.3 测试证据Web Tests 在运行轨迹中的真实形态仓库测试数据从侧面证实了该目录在真实崩溃轨迹中的形态testcase_manager_test.py 中WebKit 布局测试以http://127.0.0.1:8000/fuzzer-common-data-bundles/webkit/layouttests/fast/canvas/fuzz-http-11.html形式被浏览器加载说明通用数据包内 Web Tests 由本地 webserver 以/fuzzer-common-data-bundles/...路径对外服务stack_analyzer_data/assert.txt 中的崩溃源于fuzzer-common-data-bundles/LayoutTests/resources/js-test.jsUncaught TypeError展示了解压后的 LayoutTests 目录结构顶层LayoutTests/、webkit/等子目录memory_tools_asan_afl.txt 显示 AFL 直接以--input_dir.../fuzzer-common-data-bundles/skia_path_fuzzer作为种子目录运行afl-fuzz。四、与私有数据包data bundles的分工为避免混淆这里把fuzzer-common-data-bundles与data-bundles的差异总结如下维度fuzzer-common-data-bundles通用数据包data-bundles私有数据包环境变量FUZZ_DATADATA_BUNDLES_DIR适用对象所有未配置私有语料的 fuzzer兜底输入特定 fuzzer 通过data_bundle_name关联内容来源每日自动下载的 Web Testszip由 DataBundle 实体 指向的 GCS bucket经 corpus 同步同步方向utask 主节点与 worker 均可持有受sync_to_worker字段控制如 libFuzzer 需在 worker 侧更新频率每天一次TESTS_UPDATE_INTERVAL_DAYS 1每次任务前按需同步见 setup.py 的update_data_bundle私有数据包的关键字段在 data_types.py 的 DataBundle 模型 中定义name共享标识、bucket_nameGCS bucket、sync_to_worker是否同步到 worker。集群管理员可用 dump_data_bundles.py 将数据包元数据导出为 CSVname, bucket_name, source, timestamp, sync_to_worker以便审计。五、实操要点小结默认输入兜底未配置私有语料的 fuzzer 会自动把bot/inputs/fuzzer-common-data-bundles作为--input_dir种子输入无需额外配置启用 Web Tests在project.yaml中设置WEB_TESTS_URL: gs://bucket/path-to-tests-archive.zip并置UPDATE_WEB_TESTS: true机器人每天自动刷新一次该目录本地开发环境LOCAL_DEVELOPMENT默认跳过更新依赖关系Web Tests 压缩包解压后的目录结构会被浏览器以/fuzzer-common-data-bundles/...相对路径引用因此打包时应保持顶层目录结构如LayoutTests/、webkit/不变避免测试用例因资源路径失效而无法复现可再生成性该目录内容可随时被清空重建磁盘空间紧张时优先清理属于可丢弃的缓存型输入不应存放任何不可再生的数据延伸阅读语料与输入体系的更完整背景可参考 docs/setting-up-fuzzing/blackbox_fuzzing.md黑盒 fuzzer 语料约定与 docs/reference/glossary.mdcorpus 定义。赞分享应用安全后端开发工具【免费下载链接】clusterfuzzScalable fuzzing infrastructure.项目地址https://gitcode.com/gh_mirrors/cl/clusterfuzz点击查看免费下载相关推荐mediasoup 中的 WebRTC Fuzzer 语料库webrtc-fuzzer-corpora 目录结构、SHA1 去重与 libFuzzer 集成实践mediasoup 中的 WebRTC Fuzzer 语料库webrtc fuzzer corpora 目录结构、SHA1 去重与 libFuzzer 集成实后端音视频Infection Monkey 数据目录Data Directory完全指南默认位置、自定义配置与内部结构解析Infection Monkey 数据目录Data Directory完全指南默认位置、自定义配置与内部结构解析 Infection Monkey 的 I网络安全应用安全GitBucket 数据目录结构全解析默认布局、关键子目录与四种自定义数据目录配置GitBucket 数据目录结构全解析默认布局、关键子目录与四种自定义数据目录配置 GitBucket 是一款基于 Scala 的轻量级 Git 平台所有运后端代码托管开发工具DevOps上一篇Sing-Guard-8b高级应用如何自定义风险策略应对复杂内容安全场景下一篇终极指南Hermes引擎指令集架构深度解析——字节码指令与执行优化的核心技术创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考