哪些漏洞可以用 fuzz 检测到

内存安全漏洞

这是 Fuzzing 最擅长的领域,也是 Fuzzing 历史上发现最多高价值漏洞的类型。这些漏洞通常会导致程序崩溃、数据损坏或信息泄露

  • 缓冲区溢出(Buffer Overflows):当程序向一个固定大小的缓冲区写入的数据超出了其容量时,就会发生溢出。Fuzzer 可以通过生成超长字符串、大文件或超大数组等输入来触发这类漏洞
  • 整数溢出(Integer Overflows):当一个整数运算的结果超出其数据类型的最大值时,会发生溢出。Fuzzer 可以提供接近最大值或负数的输入,试图触发不正确的内存分配或边界检查绕过
  • 空指针解引用(Null Pointer Dereference):当程序试图访问一个空指针指向的内存时,会发生崩溃。Fuzzer 可以提供导致函数返回空指针的输入,例如不完整的协议数据包或畸形的文件头
  • UAF(Use-After-Free):当程序在释放一块内存后,仍然使用指向这块内存的指针时,就会发生 UAF。Fuzzer 可以通过提供复杂的、有状态的输入序列来触发这种时序性漏洞
  • 双重释放(Double Free):当程序两次释放同一块内存时,会引发严重后果。Fuzzer 可以提供导致程序进入异常逻辑的输入,从而触发重复的内存释放操作
  • 格式化字符串漏洞(Format String Bugs):当程序使用 printf 等函数,且格式化字符串可由用户控制时,攻击者可以利用它来读写内存。Fuzzer 可以尝试在输入中插入 %s, %n, %x 等格式符来检测这种漏洞

逻辑漏洞和异常情况

除了内存安全问题,Fuzzing 也可以用来发现更复杂的逻辑漏洞,尽管这通常需要更智能的 Fuzzer 或额外的检测机制

  • 逻辑错误(Logical Bugs):Fuzzer 可以通过提供畸形但不会导致崩溃的输入,来发现程序中不正确的逻辑。例如,一个输入可能导致数据库返回错误的结果,或者一个视频播放器无法正确解析视频帧
  • 拒绝服务(Denial of Service, DoS):当一个输入导致程序进入无限循环或消耗大量资源时,就会引发 DoS 攻击。Fuzzer 可以通过监控程序执行时间或资源消耗来检测这类问题
  • 竞态条件(Race Conditions):在多线程或多进程程序中,Fuzzer 可以通过随机化输入发送时间或使用多个线程来触发竞态条件,从而发现漏洞
  • 权限绕过(Privilege Escalation):Fuzzing 可以用来寻找程序在处理特殊输入时,是否会错误地提升权限
  • 信息泄露(Information Leakage):Fuzzer 可以通过分析程序的输出或返回值,来检测程序是否泄露了不应被公开的敏感信息,比如内存地址或调试信息
Copyright © 版权信息 all right reserved,powered by Gitbook该文件修订时间: 2025-09-25 03:13:09

results matching ""

    No results matching ""