1、AFLNet简介
- AFLNet 是一种专门用于测试网络协议实现的模糊测试工具。模糊测试是一种软件测试技术,通过向目标程序提供大量随机或半随机数据来发现潜在的漏洞和错误。AFLNet 的设计目标是增强 AFL (American Fuzzy Lop) 的功能,以更有效地测试网络协议。
- AFLNet 的主要特点:
- 基于状态的模糊测试:AFLNet 使用了一种基于状态的模糊测试方法,这意味着它能够识别和利用网络协议的不同状态。例如,一个典型的网络协议可能有连接建立、数据传输和连接关闭等不同的状态,AFLNet 能够在这些状态之间进行智能切换,从而更全面地测试协议实现。
- 输入生成:AFLNet 通过对真实网络数据包进行变异来生成的测试用例,而不仅仅是随机生成数据。这提高了测试的效率和有效性,因为它能够更容易触发潜在的漏洞。
- 网络数据包模糊测试:AFLNet 专注于对网络数据包进行模糊测试。它能够拦截、修改和重新注入数据包,以便发现协议实现中的潜在问题。
- 集成化工具链:AFLNet 集成了多种工具和技术,如静态分析和动态插桩,以增强其模糊测试能力。这些技术可以帮助 AFLNet 更好地理解目标协议的内部结构和行为,从而生成更有效的测试数据。
- 可扩展性和灵活性:AFLNet 的设计允许用户根据需要进行扩展和定制。例如,用户可以添加新的状态机模型或自定义输入生成策略,以适应特定的测试需求。
- 详细参考:阅读笔记——《AFLNET: A Greybox Fuzzer for Network Protocols》-CSDN博客
2、AFLNet安装
- 环境:Ubuntu 22.04.4
- 安装wireshark
-
sudo apt-get update sudo apt-get install wireshark sudo wireshark # 启动wireshark
-
- 安装依赖
-
# Install clang (as required by AFL/AFLNet to enable llvm_mode) sudo apt-get install clang-12 # Install graphviz development sudo apt-get install graphviz-dev libcap-dev
- 【注】clang的版本不能太新。由于之前我已经安装了llvm-14,版本不兼容,再安装一个llvm-12。参考:LLVM——安装多版本LLVM和Clang并切换使用(Ubuntu)-CSDN博客
-
- 安装AFLNet
-
# 从aflnet仓库中拉取源代码 git clone https://github.com/aflnet/aflnet.git aflnet
-
# 进入aflnet目录 cd aflnet # 编译aflnet make clean all
-
# 进入llvm_mode目录 cd llvm_mode # 编译llvm_mode make
-
- 配置环境变量。
-
# 返回到安装目录 cd ../.. # 编辑配置文件 nano ~/.bashrc
- 将下面内容添加到文件末尾。Ctrl+x退出保存。(这里aflnet目录在我的主目录下,如果路径不同,请根据实际路径调整)
-
# AFLNet export AFLNET=$HOME/aflnet export WORKDIR=$HOME export PATH=$PATH:$AFLNET export AFL_PATH=$AFLNET
- 重启配置文件。
-
source ~/.bashrc
-
- 验证是否安装成功。
-
afl-fuzz --help
-
-N netinfo: 服务器信息(例如,tcp://127.0.0.1/8554)-P protocol: 要测试的应用协议(例如,RTSP、FTP、DTLS12、DNS、DICOM、SMTP、SSH、TLS、DAAP-HTTP、SIP)-D usec: (可选)等待服务器完成初始化的时间(以微秒为单位)-e netnsname: (可选)运行服务器的网络命名空间名称-K: (可选)在消费完所有请求消息后发送SIGTERM信号以优雅地终止服务器-E: (可选)启用状态感知模式-R: (可选)启用区域级别变异操作-F: (可选)启用假阴性减少模式-c script: (可选)用于服务器清理的脚本名称或完整路径-q algo: (可选)状态选择算法(例如,1. RANDOM_SELECTION, 2. ROUND_ROBIN, 3. FAVOR)-s algo: (可选)种子选择算法(例如,1. RANDOM_SELECTION, 2. ROUND_ROBIN, 3. FAVOR)
-