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

阅读更多...

《VScape - Assessing and Escaping Virtual Call Protections》 论文笔记

一、简介

这篇论文介绍了一种面向伪对象编程(COOP)的加强攻击手法,称为 COOPlus。对于那些不破坏 C++ ABI 的虚拟调用保护来说,有相当一部分的 虚拟调用保护手段易受 COOPlus 的攻击。

符合以下三个条件的虚拟函数调用容易受到 COOPlus 的攻击:

  • 不破坏虚函数调用的 ABI
  • 不保证 C++ 对象 vtable 指针的完整性(即可以被修改)
  • 允许在虚拟函数调用点上调用不同的函数

COOPlus 本质上是代码重用攻击,它在目标虚拟函数调用点上调用符合类型但不符合上下文的虚拟函数。该调用可通过 C++ 语义感知的 控制流完整性 CFI 检测,但由于调用上下文不同,因此可能会造成进一步的利用。

除了 COOPlus 以外,该论文还提出了一种解决方案 VScape,用来评估针对虚拟调用攻击保护的有效性。

论文 + 幻灯片 - USENIX security 21

阅读更多...

《HEALER - Relation Learning Guided Kernel Fuzzing》 论文笔记

一、简介

Healer 是受 Syzkaller 启发的 kernel fuzz。

与 Syzkaller 类似,Healer 使用 Syzlang 描述所提供的 syscall 信息来生成确认参数结构约束和部分语义约束的系统调用序列,并通过不断执行生成的调用序列来发现内核错误,导致内核崩溃。

与 Syzkaller 不同,Healer 不使用 choise table,而是通过动态移除最小化调用序列中的调用并观察覆盖范围变化来检测不同系统调用之间的内部关系,并利用内部关系来指导调用序列的生成和变异。此外,Healer 还使用了与 Syzkaller 不同的架构设计。

论文地址:HEALER: Relation Learning Guided Kernel Fuzzing

项目地址:github

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

请我喝杯咖啡吧~