SuperAPI AI 工具集

fuzzing-jvm-expert

编程与开发

查看项目

更新于 10-15 21:53

技能介绍

用途:为集成到 OSS-Fuzz 的 JVM 项目(Java、Kotlin、Scala、Groovy)编写、构建并验证模糊测试目标。JVM 模糊测试基于 Jazzer,它封装 libFuzzer 并对 JVM 字节码插桩以提供覆盖率引导。

主要能力:提供 harness 编写知识,包括接收原始字节的 fuzzerTestOneInput(byte[] data),以及通过 FuzzedDataProvider 将字节流拆分为类型化输入(consumeBytes、consumeRemainingAsBytes、consumeString、consumeAsciiString、consumeInt、consumeLong、consumeBoolean、consumeDouble、pickValue 等)。支持用 fuzzerInitialize 做一次性初始化。可发现意外异常、断言错误、挂起/死循环、反序列化 gadget、路径遍历、SSRF、逻辑错误;Jazzer 还能检测 SQL 注入、路径遍历、命令注入。

使用方式:项目须使用 JVM 基础镜像 FROM gcr.io/oss-fuzz-base/base-builder-jvm,并在 project.yaml 中设置 language: jvm。build.sh 中 Maven 项目用 $MVN package -DskipTests -Dmaven.javadoc.skip=true,收集运行时 JAR,编译 *Fuzzer.java,并生成调用 jazzer_driver 的包装脚本,设置 --agent_path、--instrumentation_includes、--cp、--target_class、--jvm_args。种子语料打包为 $OUT/<fuzzer_name>_seed_corpus.zip,字典放 $OUT/<fuzzer_name>.dict。验证命令:python3 infra/helper.py build_fuzzers <project>、check_build <project>、run_fuzzer <project> <fuzzer_name> -- -max_total_time=30。

适用场景:解析器、反序列化器(JSON、XML、Protobuf、自定义二进制格式)、网络协议处理器、模板引擎,以及任何接受不可信字节或字符串的 API。

限制与注意:harness 应捕获所有已记录的预期异常,避免非确定性(不用 Math.random()、System.currentTimeMillis()、不创建线程),必须设置 --instrumentation_includes 指向目标库包前缀,否则 Jazzer 无法引导模糊测试;需按示例配置 JVM 内存以避免 OOM;OutOfMemoryError、StackOverflowError、无效输入上的 NullPointerException 通常属预期,需判断是否为真实缺陷。构建前先确保项目本身可编译,本地迭代可将 Dockerfile 的 git clone 改为 COPY。具体收费、价格、平台等信息暂未提供。