syzkaller 源码阅读笔记-1

一、简介

syzkaller 是 google 开源的一款无监督覆盖率引导的 kernel fuzzer,支持包括 Linux、Windows 等操作系统的测试。

syzkaller 有很多个部件。其中:

  • syz-extract:用于解析 syzlang 中的常量
  • syz-sysgen:用于解析 syzlang,提取其中描述的 syscall 和参数类型,以及参数依赖关系
  • syz-manager:用于启动与管理 syzkaller
  • syz-fuzzer:实际在 VM 中运行的 fuzzer
  • syz-executor:实际在 VM 中运行的测试程序

架构图如下:

syzkaller 的进程结构

在本文中,我将先介绍 syz-extract 和 syz-sysgen 的源码。

阅读更多...

论文笔记随笔 - 1

简介

这里存放阅读论文/读代码时所记录下的一些零碎笔记。

由于这部分活动在记录笔记时,出于时间与重要性考虑,只会记录下较为重要的一部分,不会完整记录,因此单篇笔记的篇幅不会太长。

原先是想着把这些随笔放到周报里去,但是这会打乱周报的排版,思来想去还是想单独立一篇文章出来。

阅读更多...

《Binary Rewriting without Control Flow Recovery》论文笔记

一、概述

二进制重写技术在很多场景下都有大用,例如修复、加固、插桩、打补丁、调试等等。而大部分二进制重写技术都依赖于从输入二进制中恢复控制流信息,这是因为这些二进制重写技术通常都涉及指令移动等等,这就必须调整其他跳转指令的相对跳转偏移,即修复跳转目标集

但问题在于,从二进制文件中恢复控制流信息是相当困难的

  • 一种方法是依赖于特定的二进制元数据,例如调试符号来恢复重定位信息,但并非所有二进制都会包含这类元数据(strip)
  • 另一种方法是使用静态二进制分析技术来恢复,但通常效果不佳,而且不能应用于大小较大的二进制文件。

因此大部分二进制重写技术都依赖于一组甚至多组假设,例如特定编译器、特定编程语言等等。这样一来这些二进制重写技术都存在着局限性,难以扩展,同时也没办法处理大型程序,比如 chrome。

这篇论文向我们展示了一种基于 x86_64 的二进制重写技术,称为 e9patch。其中,e9 表示的是 jmpq rel32 的 opcode:0xe9。这种二进制重写技术的优点在于控制流无关control flow agnostic),即无需任何控制流信息的知识。其二进制重写方法保留了跳转目标集,无需控制流恢复。因此, 这个工具相当的鲁棒,而且还可以 patch 诸如 chrome 等等大小大于 100MB 的二进制程序。

除了普通的二进制程序以外,e9patch 还可以为 shared objects 或 libraries 打补丁。

阅读更多...

RWCTF2022 Pwn 笔记3 - hso groupie Writeup

简介

这里是复盘 RWCTF2022 中 hso groupie 题时所写下的一些笔记,考点来源于 Project Zero 的 A deep dive into an NSO zero-click iMessage exploit: Remote Code Execution 一文。

整体的做题思路主要由 Riatre 师傅的 exploit 中所推导出,换句话说,这里的笔记主要是对 作者 exploit 的解释说明。

由于这题同样也较为复杂,因此需要单独开一个博文来记录。

联合作者:sakura

阅读更多...

RWCTF2022 Pwn 笔记1

一、简介

这里是复盘 RWCTF2022 关于:

  • QLaas
  • Who Moved My Block
  • SVME

这三道题时所写下的一些笔记。

受限于时间与效率,一部分题目的 exp 将不再贴出,只会记录下解题或利用的详细流程。

阅读更多...

《IMF:Inferred Model-based Fuzzer》论文笔记

一、简介

  • 内核 API 函数之间的调用大多是相互依赖的,即一些 API 的调用需要依赖其他 API 调用所产生的上下文,因此若给定的调用上下文无用,则内核 API 将会始终执行失败,无法进入到更深层次的逻辑中。

  • 这篇论文提出了一种新的内核 fuzz 方式,它利用内核 API 函数之间的依赖(即 API 调用序列的相似性),来推断出依赖模型,进而利用该模型生成出随机并且结构性良好的 API 序列,进行更深层次的 fuzz。

    其中,API 调用的依赖关系包含两种,分别是

    1. 顺序依赖,即 A 函数应该比 B 函数更早被调用。
    2. 数据依赖,函数调用之间存在着数据流传递。
  • Fuzz 的主要目标是 IOKit Lib

  • IMF src - github

需要注意的是,这篇论文是 17 年的论文,实验时所使用的 MacOS 版本为 10.12.3,而本人的机器版本为 MacOS 12.0.1,因此在复现实验是会存在一些困难。

阅读更多...
  • Copyrights © 2020-2022 Kiprey
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~