首页 > 其他分享 >fuzz心得

fuzz心得

时间:2022-10-04 21:15:43浏览次数:48  
标签:文件 configure 编译 -- 覆盖率 fuzz 心得

目标选择

fuzz普通程序

  • 可使用多个程序运行参数,提高代码覆盖率,增加发现错误机会
  • 找到合适的种子文件

fuzz库文件

  • 需要编写harness,调用库文件api,或者现成的API应用程序
  • 插桩时要将库文件和应用程序都考虑进来

fuzz网络程序

  • 将网络数据包保存成本地文件,作为输入提供给fuzz
如tcpdump抓包分析工具,使用了libpcap库提供的接口,将网络数据包转化为.pcap文件,再读入文件分析处理

目标构建

配置(configure)

  • autoreconf命令

    • 用于在configure命令前更新配置文件
    autoreconf -fvi
    
  • --prefix参数

    • 如果不指定 --prefix,则安装程序的可执行文件默认放在 /usr/local/bin ;库文件默认放在 /usr/local/lib ;配置文件默认放在/usr/local/etc ;其它的资源文件放在 /usr/local/share

    • 如果指定 --prefix比如: --prefix="/usr/local/keepalived" ,则此软件的所有文件都放到 /usr/local/keepalived 目录下

  • 指定编译器

CC=$HOME/AFLplusplus/afl-clang-fast CXX=$HOME/AFLplusplus/afl-clang-fast++ ./configure
  • 指定LLVM_CONFIG
export LLVM_CONFIG="llvm-config-11"	在configure命令前运行
  • 使用动态/静态链接
./configure --enable-shared=no	关闭动态链接
  • pkg_config_path环境变量

    • 用于指定编译时的链接库位置,如下所示
    ./configure PKG_CONFIG_PATH=$HOME/libexif/install/lib/pkgconfig
    
    • 此时pkgconfig路径下有libexif.pc文件,内含lib和include路径
  • 调试时关闭优化选项

CFLAGS="-g -O0" CXXFLAGS="-g -O0" ./configure

编译(make)

  • -j4/-j8 使用4/8进程同时执行4/8条编译命令
  • ninja并行编译,可替代make,提升编译速度

编译器选择

  • AFL++的编译器选择顺序

image-20220701113157798

fuzz运行

运行参数

  • -x指定字典
  • -M和-S进行并行fuzz,只有主fuzz能加-D选项确定性变异

界面

  • corpus count:对应afl->queued_items, Total number of queued testcases

崩溃分析

漏洞分析

  • 崩溃现场查看调用栈、寄存器和内存
  • 在崩溃前函数下断点,看是什么操作导致了程序崩溃(断点函数可以选择bt的上层应用程序函数而不是库函数,尽量断到程序崩溃前一刻)

ASAN

  • AFL加上ASAN可以检测出更多错误,如UAF,缓冲区溢出,越界,内存泄露

  • 新版的LLVM和gcc都支持带ASAN编译

  • 启用ASAN:AFL_USE_ASAN=1 -fsanitize=address,configure、make、make install前都要加

  • AFL启用ASAN要解除内存限制,使用-m none

辅助工具

代码覆盖率展示

  • gcov是代码覆盖率测试工具,只能用于gcc编译程序,在源码目录下运行程序会生成gcov文件,打开显示代码覆盖率文本
  • lcov是gcov的图形化前端工具,编译时加入coverage选项,在源码目录下运行程序,可生成代码覆盖率报告html
  • 以lcov为例
1.编译时加入选项
CFLAGS="--coverage" LDFLAGS="--coverage" ./configure --prefix="$HOME/fuzzing_tiff/install/" --disable-shared
2.重置以前的计数器,后面几步都需要在源码目录下运行
lcov --zerocounters --directory ./
3.生成包含零覆盖率的“基线”覆盖率数据文件
lcov --capture --initial --directory ./ --output-file app.info
4.运行待分析程序,可运行多次输入
tiffinfo -D demo.tiff
5.将当前覆盖率状态保存到app2.info文件
lcov --no-checksum --directory ./ --capture --output-file app2.info
6.生成html输出
genhtml --highlight --legend -output-directory ./html-coverage/ ./app2.info
  • 成功后会在html-coverage文件夹中创建代码覆盖率报告,打开html-coverage/index.html,可看到总覆盖率和各文件的行覆盖率和函数覆盖率

afl-whatsup

  • 用于查看每个fuzzer的运行状态和总体运行概况,加上-s选项只显示概况
afl-whatsup -s out_dir

afl-gotcpu

  • 用于查看每个核心的使用状态

问题

gdb插件问题,源代码显示问题

-s和种子文件

参数变异问题

标签:文件,configure,编译,--,覆盖率,fuzz,心得
From: https://www.cnblogs.com/z5onk0/p/16754467.html

相关文章

  • 模糊测试基本概念FuzzTest
    fuzztest1.whatisFUZZTESTing?FuzzTestingisanautomatedsoftwaretestingtechnology,originallydevelopedbyBartonMilleroftheUniversityofWiscons......
  • 第十一章学习心得
    一、梗概多年来,Linux一直使用EXT2(Card等1995)作为默认文件系统。EXT3(EXT3,14)是EXT2的扩展。EXT3中增加的主要内容是一个日志文件,它将文件系统的变更记录在日志中......
  • C++心得
    I/Ocout保留有效数字问题C++中cout默认保留六位有效数字,并且进行四舍五入修改保留数的方法cout.precision(2); //用这个来改变默认保留几位小数cout<<"保留两位有效:......
  • JAVA心得
    JAVA心得JAVA对大小写十分敏感,是强类型语言IDE短语psvm==>publicstaticvoidmain(String[]args){建立方法sout==>System.out.println();输出(有换行)sou......
  • MapXtreme 2005 学习心得 了解新建MapXtreme项目结构(二)
    一:新建示例 首先,打开VS2005,新建网站,选择MapXtreme 6.7.1 Web Application 救命网站目录关键结构如下:1:App_Code文件夹有一个自定义的AppStateManager.cs类,继承自State......
  • 如何组织团队技术分享的一点心得和建议 All In One
    如何组织团队技术分享的一点心得和建议AllInOne团队建设:技术能力,文化力,凝聚力,影响力,团队成长几点建议:提高物质激励的额度,如分享一次500元,年终评选上优秀分享......
  • chap1-2的学习心得
    在这一两周的学习过程中,我认为我们已经渐渐地开始习惯于C语言的学习,并在这其中找到了自己的学习方法,明白了自己应该如何去学习C语言。在这颇为艰难的过程中,我们不仅遭遇了......
  • 开始学习计算机的心得
    就这样,终于开始了大学的计算机学习。从前总以为自己有了一台计算机之后,会彻底疯狂于游戏世界。但是开始了解计算机之后,才发现原来这是一台充满了人类智慧的机器,对人类的历......
  • 计算机学习心得
    先看个小故事。有一天我问我媳妇:你觉得操作系统复杂么?我媳妇想都没想就来了一句:复杂!我又问:为什么觉得操作系统复杂?或者操作系统复杂在哪里?我媳妇眼睛转了两圈之后说:不......
  • 算法第二章心得
    1.请以伪代码描述最大字段和的分治算法将序列a[1:n]分成长度相等的两段a[1:n/2]和a[n/2+1:n],则a[1:n]的最大子段和有三中情形:在[1,n/2]内;在[n/2+1,n]内;在起点位于[1,n/2......