Windows下闭源fuzz的简单记录

Windows下闭源fuzz的简单记录

前言

最近我使用动、静态分析加闭源fuzz在企鹅的产品挖到了多个二进制漏洞,在这简单记录部分所得。

简介

众所周知,闭源fuzz有几个主要难点:

  • 路径反馈-提高fuzz效率
  • 漏洞检测机制-检测堆漏洞
  • 无源码

本文将非常简单的说明怎么试图缓解。

路径反馈

我的做法很简单,直接拿别人的开箱就用得了,比如说:

漏洞检测机制

一般windows程序都开启了GS保护,可以用这个来检测栈溢出漏洞,但是堆内存漏洞就比较难检测,那我们该怎么办呢?在这,我们可以使用完全页堆机制来缓解检测堆内存漏洞,为什么说是缓解?因为开启页堆机制会让fuzz效率大大的下降!

  • 什么是完全页堆机制?

    • 分配的内存都在内存页的边界。
    • 完全页堆可以在每个分配的内存块前后添加“守卫页”(Guard Pages),这些守卫页在被访问时会导致程序异常,从而帮助识别内存访问错误。
    • 当启用完全页堆时,每次内存释放操作后,相应的内存区域会被标记为不可访问或填充特殊的模式,从而在后续非法访问时触发异常或明显的程序错误。
  • 为什么完全页堆机制影响程序运行效率?

    • 因为每次分配的内存都要以这种页面边界布局,尤其对于小片的内存分配,即使分配一个字节,也要分配一个内存页,和一个保留的虚拟内存页。这就需要大量的内存,从而影响了程序效率。
  • 如何开启完全页堆机制?

    对要fuzz的程序以管理员权限执行:gflags.exe /i <target_executable> +hpa即可

无源码

无源码怎么找到要fuzz的函数?答案就是我们pwn题目的入门题的技巧,IDA里使用搜索字符串。这样我们就可以试图通过日志函数快速判断部分函数的功能,甚至,在githubgoogle上找到源码。

posted @ 2024-03-16 14:32  7resp4ss  阅读(58)  评论(0编辑  收藏  举报