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,因此在复现实验是会存在一些困难。

阅读更多...

MacOSX XPC 入门

一、简介

  • XPC 是一种 OS X 进程间通信技术,通过权限分离机制来对应用沙箱机制做了一个补充。其中,权限分离是根据每个部分所需的系统资源访问将应用程序分成多个部分,每个部分可以使用提前声明的权限(沙箱)。这种单个组件称为XPC 服务

    将应用程序分成多个部分,还可以提高程序的可靠性,防止程序的部分代码崩溃导致整个程序的退出。

  • 每个 XPC 服务都位于自己的沙箱,即 XPC 服务有自己的容器一组权限。包含在应用程序中 XPC 服务只能由应用程序自己访问。当应用程序启动时,系统会自动将它找到的每个 XPC 服务注册到应用程序可见的命名空间中。之后应用程序便可以与 XPC 服务通信并执行请求。

  • XPC 服务的特点:权限分离 + 错误隔离

  • XPC 服务有 launchd 所管理,当 XPC 服务被意外终止(或者崩溃)后,该服务将会被 launchd 重启。

阅读更多...

MacOSX Mach IPC 入门

一、简介

Mach,是一个面向通信的操作系统微内核,其基本工作单位为 task(而不是 process)。Mach 内核提供了一种 IPC 机制,而 XNU 的大多数服务也建立在 Mach IPC 和 Mach Task 上。

Mach 有多种抽象的基本概念,其中一部分分别是 taskthreadportmessagememory object

Mach 微内核作为 MacOS XNU 内核的组成部分,接管了相当重要的一部分功能。其中最著名的莫过于 Mach IPC 进程间通信机制。

本人将在这里简单记录一下 Mach IPC 部分机理。

需要注意的是,这是本人第一次接触 Mach IPC,因此其中可能会有一部分陈述或者说明存在问题,还请各位师傅不吝指出。

阅读更多...

《Counterfeit Object-oriented Programming》 论文笔记

一、简介

现阶段,ROP (面向返回的编程技术) 已经成为了一种非常流行的利用手法,同时现在也存在各种方式来保护程序免受 ROP 工具,例如 shadow stack 技术。而这篇 2015 年的论文向我们展示了一种新的利用手法,称为面向伪对象编程(COOP),即只通过程序中现有虚函数链以及 callsite 来进行恶意攻击。该攻击方式是图灵完备的,即可以执行任何操作,包括条件分支等。

同时,COOP 技术也可以绕过那些 不精确考虑C++面向对象语义 的防御手段。它并不针对与某一类语言(例如 C++),因此自然无法防护 COOP 技术。

该攻击手法基于 C++ 虚函数的一些特性:

  • C++ 编译器通过 vtable 虚函数表来实现对 vcall 虚函数 的访问

    其中 vtable 是指向类的所有可能继承继承的虚函数的指针数组。

    根据逆向结果来看, vtable 通常位于 .rodata 段上。

  • 对于包含虚函数的类来说,其对象内存开始处(即偏移量为0)包含一个指向 vtable 的指针。

阅读更多...

《CollAFL - Path Sensitive Fuzzing》论文笔记

一、简介

现有 fuzz 大多以代码覆盖率为引导指标。以AFL为例,它使用映射至 hashmap 中的基于 edge 的覆盖率信息来引导测试。这种覆盖率信息不太准确,因为只统计至 edge 层面,同时还会产生覆盖 hash 冲突,丢失覆盖率信息,给模糊测试带来一些不良限制。

这篇论文提出了一个新的方式,来达到以下三个目的:

  • 提供更准确的覆盖信息
  • 缓解路径冲突
  • 保持较低检测开销

同时,该论文还利用覆盖率信息,提出了三种新的模糊测试策略,加快了发现新路径和漏洞的速度。

下图是一个完整 fuzz 的工作流程,其中黄色标注部分为论文所提出的重点思路

image-20211201164140587

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

请我喝杯咖啡吧~