如何使用Frelatage对Python代码进行模糊测试

admin 2025年1月13日19:42:08评论5 views字数 2368阅读7分53秒阅读模式

如何使用Frelatage对Python代码进行模糊测试

 关于Frelatage 

Frelatage是一款基于覆盖率的Python模糊测试工具,在该工具的帮助下,广大研究人员可以轻松对Python代码进行模糊测试。

Frelatage的设计与开发受到了很多社区现有模糊测试工具的启发,其中包括AFL/AFL++、Atheris和PythonFuzz等等。其主要目的是整合优化了其他模糊测试工具的优秀特性,以便帮助研究人员以更高效的方式对Python应用程序进行模糊测试和安全研究。

 功能介绍 

Frelatage支持对下列类型的参数进行模糊测试:

字符串

整型

浮点型

列表

元组

字典

函数(以文件作为输入)

 工作机制 

Frelatage主要通过遗传算法来生成覆盖率尽可能高的测试用例,整个过程大致如下图所示:

如何使用Frelatage对Python代码进行模糊测试

 工具要求 

该工具基于Python3开发,因此我们需要在本地设备上安装并配置好Python3环境。

 工具安装 

pip安装(推荐)

pip3 install frelatage

源码构建

bash <(wget -q https://raw.githubusercontent.com/Rog3rSm1th/Frelatage/main/scripts/autoinstall.sh -O -)

 工具使用 

对典型参数进行模糊测试

import frelatageimport my_vulnerable_librarydef 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 frelatageimport my_vulnerable_librarydef 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 frelatagedef myfunction(input1_string, input2_int):    passinput1 = 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>    │       ├── ...│   ├── ...

 工具运行演示 

如何使用Frelatage对Python代码进行模糊测试

许可证协议

本项目的开发与发布遵循MIT开源许可证协议。

项目地址

https://github.com/Rog3rSm1th/Frelatage

参考资料

https://github.com/google/AFL

https://github.com/AFLplusplus/AFLplusplus

https://github.com/google/atheris

https://github.com/fuzzitdev/pythonfuzz

https://www.python.org/

原文始发于微信公众号(FreeBuf):如何使用Frelatage对Python代码进行模糊测试

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年1月13日19:42:08
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   如何使用Frelatage对Python代码进行模糊测试https://cn-sec.com/archives/1095511.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息