社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

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

FreeBuf • 2 年前 • 359 次点击  

 关于Frelatage 

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

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

 功能介绍 

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

字符串

整型

浮点型

列表

元组

字典

函数(以文件作为输入)

 工作机制 

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

 工具要求 

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

 工具安装 

pip安装(推荐)

pip3 install frelatage

源码构建

bash 

 工具使用 

对典型参数进行模糊测试

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:,err:,err_pos:,err_file:.

报告目录的格式如下:

├── out
│ ├── id:,err:,err_file:,err_pos:
│ ├── input
│ ├── 0
│ ├──
│ ├── ...
│ ├── ...

 工具运行演示 

许可证协议

本项目的开发与发布遵循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/



精彩推荐









Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/135502
 
359 次点击