发布于2022年11月4日3年前 如何使用Frelatage对Python代码进行模糊测试 关于FrelatageFrelatage是一款基于覆盖率的Python模糊测试工具,在该工具的帮助下,广大研究人员可以轻松对Python代码进行模糊测试。Frelatage的设计与开发受到了很多社区现有模糊测试工具的启发,其中包括AFL/AFL++、Atheris和PythonFuzz等等。其主要目的是整合优化了其他模糊测试工具的优秀特性,以便帮助研究人员以更高效的方式对Python应用程序进行模糊测试和安全研究。功能介绍Frelatage支持对下列类型的参数进行模糊测试:字符串整型浮点型列表元组字典函数(以文件作为输入)工作机制Frelatage主要通过遗传算法来生成覆盖率尽可能高的测试用例,整个过程大致如下图所示:工具要求该工具基于Python3开发,因此我们需要在本地设备上安装并配置好Python3环境。工具安装pip安装(推荐)pip3 install frelatage源码构建bash <(wget -q https://raw.githubusercontent.com/Rog3rSm1th/Frelatage/main/scripts/autoinstall.sh -O -)工具使用对典型参数进行模糊测试import frelatage import my_vulnerable_library def MyFunctionFuzz(data): my_vulnerable_library.parse(data) input = frelatage.Input(value="initial_value") f = frelatage.Fuzzer(MyFunctionFuzz, [[input]]) f.fuzz()对文件参数进行模糊测试Frelatage支持对文件类型输入参数进行模糊测试,首先我们需要初始化文件值,这一步需要在输入文件夹中创建文件(默认为./in):echo "initial value" > ./in/input.txt然后运行模糊测试工具即可:import frelatage import my_vulnerable_library def MyFunctionFuzz(data): my_vulnerable_library.load_file(data) input = frelatage.Input(file=True, value="input.txt") f = frelatage.Fuzzer(MyFunctionFuzz, [[input]]) f.fuzz()工具配置下面给出的是工具的配置样例:export FRELATAGE_DICTIONARY_ENABLE=1 && export FRELATAGE_TIMEOUT_DELAY=2 && export FRELATAGE_INPUT_FILE_TMP_DIR="/tmp/frelatage" && export FRELATAGE_INPUT_MAX_LEN=4096 && export FRELATAGE_MAX_THREADS=8 && export FRELATAGE_MAX_CYCLES_WITHOUT_NEW_PATHS=5000 && export FRELATAGE_INPUT_DIR="./in" && export FRELATAGE_DICTIONARY_DIR="./dict" && python3 fuzzer.py接下来,我们就可以向模糊测试工具传递参数了:import frelatage def myfunction(input1_string, input2_int): pass input1 = frelatage.Input(value="initial_value") input2 = frelatage.Input(value=2) f = frelatage.Fuzzer( # 需要测试的方法 method=myfunction, # 语料库 corpus=[[input1], [input2]], # 线程数量 threads_count=8, # 需要考虑的例外情况 exceptions_whitelist=(OSError), # 需要排除的例外情况 exceptions_blacklist=(), # 存储错误报告的目录 output_directory="./out", # 启用或禁用静默模式 silent=False, # 启用或禁用无限模糊测试 infinite_fuzz=False ) f.fuzz()报告生成工具在完成模糊测试之后,会将结果存储到输出目录(默认为./out)中,输出文件命名规则为:id:<crash ID>,err:<error type>,err_pos:<error>,err_file:<error file>.报告目录的格式如下:├── out │ ├── id:<crash ID>,err:<error type>,err_file:<error file>,err_pos:<err_pos> │ ├── input │ ├── 0 │ ├── <inputfile1> │ ├── ... │ ├── ...工具运行演示许可证协议本项目的开发与发布遵循MIT开源许可证协议。项目地址Frelatage:【GitHub传送门】参考资料https://github.com/google/AFLhttps://github.com/AFLplusplus/AFLplusplushttps://github.com/google/atherishttps://github.com/fuzzitdev/pythonfuzzhttps://www.python.org/
创建帐户或登录后发表意见