其他分享
首页 > 其他分享> > 《SoK: Eternal War in Memory》笔记

《SoK: Eternal War in Memory》笔记

作者:互联网

简介

该文针对Memory Corruption系统分析。主要贡献包括:

  1. 针对Memory Corruption攻击构建通用模型,基于模型定义了多种可实施的安全策略。
  2. 对比安全策略设计及漏洞利用各阶段特征,发现部分攻击向量未被现有防御机制保护。
  3. 从性能、兼容性和鲁棒性评估及比较现有防御方案。
  4. 讨论现有防御方案的缺点、未被实际应用的原因,讨论未来新防御方案设计所需满足的要求。

攻击模型(看图说话)

在这里插入图片描述

Memory Safety Corruption(①、②)

Invalid(out-of-bounds、dangling)指针(① )被解引用(读写)(②)导致内存安全破坏(数据破坏、信息泄露),内存安全破坏是各类攻击的根源。

解引用越界指针构成Spatial Error,解引用Dangling指针构成Temporal Error。

依据C/C++标准,越界写数组、解引用Null指针和读取未初始化变量导致未定义的行为。边界检查和内存管理需开发者自行维护。(译注:现有Sanitizer会从边界和内存操作进行检查)

Invalid指针成因(①)

指针越界源于数据指针被修改(③ → \rightarrow →①):

Dangling指针源于:

Invalid指针解引用后果(②)

后果包括内存破坏(代码数据被破坏)和信息泄露。

越界指针解引用(读、写)导致Spatial Error

使用指针从越界/攻击者控制区域读取内容,导致Value Corruption,例如:

使用指针写内容到越界/攻击者控制区域,导致内存覆写,例如:

Dangling指针解引用(读、写)导致Temporal Error

使用dangling指针读(dangling指针所指新旧对象不匹配),导致攻击者非法访问内存,例如:

使用dangling指针写,如越界指针一样破坏新对象中的指针或数据,例如:

Code corruption attack

内存安全破坏(①、②)能直接修改内存代码(③)为攻击者指定代码内容(④),执行此会导致code corruption attack。

代码完整性保护(③)旨在保护代码免于修改。但自修改代码和JIT场景等难以使用代码完整性保护进行完全保护。Instruction Set Randomization(ISR,指令集随机化,使用攻击者未知的密钥异或加密指令,攻击者伪造的代码无法被成功解密并被执行)(④)使攻击者代码无法被正确执行。

Control-flow hijack attack

内存安全破坏(①、②)能修改代码指针(③)指向(恶意的)shellcode/gadgets(④),并让跳转指令目标为被篡改的代码指针(⑤),成功执行shellcode/gadgets(⑥),从而成功劫持控制流。

代码指针完整性保护旨在保护代码指针不被破坏(③)。地址空间随机化技术让攻击者难以将代码指针指向shellcode/gadgets(④)。控制流完整性保护旨在检测间接跳转处的corruption(⑤)。Non-executable Data(不可执行数据,W⊕X,程序内容要么可写,要么可执行)和指令集随机化拒绝shellcode/gadgets被执行(⑥)。

但是Jump Oriented Programming(包括return oriented programming和return-to-libc)能够绕过W⊕X和ISR的保护(⑥),使用程序自身存在的代码构建代码链并展开攻击。

此外若要让攻击更具意义,攻击者通常需要进行系统调用、提权(例如文件访问)等。权限、强制访问控制、沙箱策略(SFI、 XFI、Native Client)能限制攻击者所攻陷程序的能力,但本文所关注的是如何保护程序不被攻陷。

Data-only attack

内存安全破坏(①、②)能篡改安全关键数据变量(包括代码、代码指针)(安全关键是语义定义,实则需要保护所有变量完整性)(③),让数据修改为攻击者指定值(④),当该数据被使用时(⑤),data-only attack成功。

数据完整性(包括代码、代码指针完整性保护)保护旨在保护数据不被篡改(③),数据空间随机化(包括地址空间随机化)对数据引入额外的熵值,使攻击者无法使用指定数据(无法正确验证)(④),数据流完整性保护(包括控制流完整性保护)检测数据流是否被破坏。

Information leak

内存安全破坏(①、②)能输出(③)攻击者指定的内存数据(④)。

信息泄露能被用来绕过ASLR等概率性防御技术。

全面的数据空间随机化旨在防止攻击者成功地将数据泄露(④)。

标签:导致,代码,Eternal,War,越界,内存,攻击者,SoK,指针
来源: https://blog.csdn.net/clh14281055/article/details/118371647