模糊测试的简介

article/2025/10/8 1:37:10
  1. 了解模糊测试、污点分析的相关内容
  2. 配置KLEE等生产环境。
  3. 分析模糊测试的优缺点

模糊测试

  1. 核心思想:模糊测试是一种软件漏洞自动挖掘技术,其核心思想是将一段数据输送给目标软件,并监控 / 判断程序行为特征,如崩溃、断言失败等,从而发现软件漏洞。
  2. 具体的工具:

在这里插入图片描述

  1. 研究方面的结合
  • 符号执行
  • 污点推断
  • 人工智能 + 启发式搜索
  • 执行调度优化
  1. 现状
  • 结合符号执行
  • 结合污点分析
  • 启发式搜索
    • 进化算法
    • 模拟退火
    • 蒙特卡洛算法等
  • 人工智能
  • 分布式与并行AFL的实现。
  1. 存在问题
  • 代码覆盖率问题 – 代码覆盖的深度不够,因为难以突破复杂的路径约束的测试用例。
  • 局部区域导向测试 – 难以测试大型的代码。对大型代码智能进行局部测试。
  • 速度慢,并行程度低。

AFL的配置与使用

  1. AFL(American Fuzzy Lop)是由安全研究员Michał Zalewski(@lcamtuf)开发的一款基于覆盖引导(Coverage-guided)的模糊测试工具,它通过记录输入样本的代码覆盖率,从而调整输入样本以提高覆盖率,增加发现漏洞的概率。其工作流程大致如下:

①从源码编译程序时进行插桩,以记录代码覆盖率(Code Coverage);

②选择一些输入文件,作为初始测试集加入输入队列(queue);

③将队列中的文件按一定的策略进行“突变”;

④如果经过变异文件更新了覆盖范围,则将其保留添加到队列中;

⑤上述过程会一直循环进行,期间触发了crash的文件会被记录下来。

在这里插入图片描述

  1. AFL变异的方式

bitflip:按位翻转,1变为0,0变为1

arithmetic:整数加/减算术运算

interest:把一些特殊内容替换到原文件中

dictionary:把自动生成或用户提供的token替换/插入到原文件中

havoc:“大破坏”,是前面几种变异的组合

splice:“连接”,此阶段会将两个文件拼接起来得到一个新的文件

  1. AFL的安装和使用。

使用linux操作系统

  • git下载源码,解压使用make install指令安装
  • 创建test.c文件,写上代码
  • 执行下面的脚本
afl-gcc -g -o test test.c 
mkdir fuzz_in fuzz_out
echo '1+1' > fuzz_in/seed
echo core | sudo tee /proc/sys/kernel/core_pattern
echo performance | sudo tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
afl-fuzz -i fuzz_in -o fuzz_out ./test

之后得到下面的运行流程。

  • 最后执行ctrl + c终止
    在这里插入图片描述

创建test.c文件,直接输出hello world,然后进行测试。得到下面的执行流程。在使用ctrl + c结束之后,可以得到fuzz_out文件夹。然后其中有相应的错误信息。包含下列文件夹。

crashes:导致目标接收致命signal而崩溃的独特测试用例queue:存放所有具有独特执行路径的测试用例。AFL输出文件:

crashes/README.txt:保存了目标执行这些crashes文件的命令行参数。

hangs:导致目标超时的独特测试用例。

fuzzer_stats:afl-fuzz的运行状态。

plot_data:用于afl-plot绘图。

由于没有什么错误信息。所以crashes和hangs文件夹都是空的。plot_data包含下面数据。见下图

在这里插入图片描述


http://chatgpt.dhexx.cn/article/iRmh00XY.shtml

相关文章

Driller、Exploit自动生成引擎 Rex

来自 UCSB 的团队 Shellphish,为参加 DARPA 举办的 CGC 竞赛,设计并实现了 CRS(Cyber Reasoning System)Mechaphish。该系统包含自动化漏洞挖掘模块 Driller、Exploit自动生成引擎 Rex、自动补丁模块 Patcherex 以及 ropchain 生成模块 angrop。本文主要对其中的 Exploit 自…

Driller复现

文章:(2016-NDSS)Driller - Argumenting Fuzzing Through Selective Symbolic Execution 安装 环境:ubuntu 16.04 下载docker镜像:pull shellphish/mechaphish 运行镜像:docker run -it --privileged shellphish/mechaphish:la…

driller/shellphish安装与简单例程

因为在学习过程中有用到driller,但是安装过程中经常碰到奇奇怪怪的问题,尤其是angr 8发布后全面放弃python2,导致兼容性较差,本人将最后安装成功的过程记录下来,仅供参考。注,时间为2018.11.27,…

Driller分析与改进(二)

Author:ZERO-A-ONEDate:2021-03-20 这个部门我们主要介绍Driller的安装与使用,我使用的环境是腾讯云的VPS: CPU:Intel Xeon Platinum 8255C CPU 2.50GHz * 4vCPUsRAM:4GBOS:Ubuntu 18.04 LTS…

Driller分析与改进(一)

Author:ZERO-A-ONEDate:2021-03-19 一、引子 ​ 关注我的读者们应该对模糊测和符号执行两种技术已经十分熟悉了,那我觉得读者们一定会自然而然的联想到,是不是会存在一种可能性,将模糊测试和符号执行相结合起来&…

Android UVCCamera问题——Cause: null pointer dereference

记录遇到的问题。 采用的开源库链接:https://github.com/saki4510t/UVCCamera 使用该库预览的时候,如果拔掉uvc设备,会造成异常闪退。 signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x0 Cause: null pointer dereferencer0 000…

null pointer exception解决方法

null pointer exception简称空指针异常 例如在一个 public class Student { private int stuId; private String stuName; private int age; Address addr; } 1.Address addrnew Address();可以直接定义 然后在main函数里可以直接 (Student stunew Stud…

null pointer

init 忘记加return true; 额,记录下,以后不再犯此错。

【Leetcode记录】runtime error: member access within null pointer of type ‘ListNode‘ (solution.cpp) SUMMA

环形链表快慢指针: runtime error: member access within null pointer of type ‘ListNode’ (solution.cpp) SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior prog_joined.cpp:20:19 大白话讲就是编译器不知道你正在使用的是不是空指针中的元素&#…

runtime error: reference binding to null pointer of type ‘int‘ (stl_vector.h)

报错原因:没有指定数组大小 vector在还没有分配任何空间时还不能像数组一样用下标形式去访问vector的(v[0]也不行)!!!否则编译通过但报运行错误runtime error! vector是动态数组,像…

runtime error: member access within null pointer of type ‘TreeNode‘ (solution.cpp)

在做Leetcode题的时候,我做到了一个关于对称二叉树题目,题目如下: 经过编译得出的结果如下: 第14行代码发生了报错 经过我的查找资料和修改发现,在某行访问的指针为空的时候,通常情况下表明程序未对NULL情况…

LeetCode报错:runtime error: member access within null pointer of type ‘struct ListNode‘

错误题目:876. 链表的中间结点 错误原因:试图使用空指针 解决方法:找出等价判断条件进行替换,排除对空指针的引用。 /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };…

Leetcode 206 runtime error: member access within null pointer of type

错误如下:当测试案列是[ ]的时候解决办法:将错误处改为if (head NULL || head->next NULL) 原因:由于或和与具有短路效应,左边为真,则直接不判断,当输入为空的时候,null->next不存在&am…

QT警告 zero as null pointer constant原因分析

最近写QT5.9中写代码时遇到了一个警告: 虽然不会影响程序正常编译,但是作为一个有潜在强迫症倾向的人,,必须把它消灭,百度一下,结果就出来了 虽然百度结果明明白白,但是,作为一个工…

力扣报错runtime error: load of null pointer of type ‘int‘解决思路

记录本算法小白刷力扣的这道题遇到的报错 349. 两个数组的交集https://leetcode.cn/problems/intersection-of-two-arrays/ 出现报错的代码 /*** Note: The returned array must be malloced, assume caller calls free().*/ int* intersection(int* nums1, int nums1Size,…

warning C6011: dereferencing NULL pointer <name>

去官网查下这个警告就知道解决办法了 https://docs.microsoft.com/en-us/cpp/code-quality/c6011?viewmsvc-170&viewFallbackFromvs-2019 “To resolve the issue, validate the pointer before use.”:使用前验证下就ok了 if(pointerNULL).......

Unable to handle kernel NULL pointer dereference at virtual address 00000000【转】

本文转载自:https://blog.csdn.net/hpu11/article/details/72628052 这说明是非法指针的使用,才导致系统出错。 [ 1023.510000] Unable to handle kernel NULL pointer dereference at virtual address 00000000[ 1023.520000] pgd c0004000[ 1023.5200…

ncnn报null pointer dereference异常

错误描述 基于c使用ncnn封装了深度学习模型,并将c项目打包成为了一个so库给Android调用,在打包成为so库之前,在Windows系统以及Ubuntu系统利用电脑的camera测试过都能正常运行没有任何异常,打包成so库之后给Android的开发人员调用…

win10用黑屏命令查看正在使用的或使用过的wifi密码

win10用黑屏命令查看正在使用的或使用过的wifi密码 打开黑屏终端: 方法一:win菜单键 R打开运行窗口,输入:cmd ,就可以进入黑屏终端了。方法二:回到桌面,点击win菜单图标旁的搜索,输…

物理机安装linux黑屏,安装ubuntu时黑屏的解决办法(3种)

我电脑显卡是Nvidia显卡~ 重启之后屏幕显示“输入不支持”,这是因为ubuntu对显卡的支持有关,需要手动添加显卡选项:nomodeset,使其支持Nvidia系列显卡 方法一 进入安装时,光标移动到"install ubuntu"&#x…