首页> 中文学位 >基于数据流完整性的内核保护技术研究
【6h】

基于数据流完整性的内核保护技术研究

代理获取

目录

第一个书签之前

摘要

ABSTRACT

插图索引

表格索引

缩略语对照表

第一章 绪论

1.1 研究背景

1.2 研究现状

1.2.1 用户级控制流完整性

1.2.2 内核级控制流完整性

1.2.3 数据流完整性

1.3 论文主要工作

1.4 论文组织结构

第二章 内核保护的相关技术

2.1 相关研究工作

2.1.1 内核完整性

2.1.2 控制流完整性

2.1.3 数据流完整性

2.1.5 内存安全

2.2 相关背景知识

2.2.1 Linux

2.2.2 编译器

2.2.3 虚拟机

2.2.4 中断

2.2.5 索引钩子

2.3 本章小结

第三章 内核保护的方案设计

3.1 概述

3.1.1 威胁模型及假设

3.1.2 实现目标

3.1.3 系统架构

3.2 针对一般控制数据的保护设计

3.2.1 构建细粒度CFG

3.2.2 函数指针保存子过程

3.2.3 函数指针消费子过程

3.2.4 标记函数中的间接call指令

3.2.5 细粒度CFI的保护方案

3.3 针对中断控制数据的保护设计

3.3.1 中断的虚拟化

3.3.2 中断的保护方案

3.4 针对非控制数据的保护设计

3.4.1 整体思路

3.4.2 静态分析

3.4.3 颜色表

3.5 本章小结

第四章 内核保护的方案实现

4.1 针对一般控制数据的保护实现

4.1.1 构造细粒度的控制流图

4.1.2 细粒度的CFI实现

4.2 针对中断控制数据的保护实现

4.2.1 针对hypervisor的修改

4.2.2 针对虚拟机内核的修改

4.3 针对非控制数据的保护实现

4.3.1 维护颜色表

4.3.2 插桩写指令

4.4 其它的原型注意事项

4.4.1 对可加载内核模块的支持

4.4.2 对汇编代码的指向分析和插桩

4.4.3 上下文切换

4.4.4 对信号处理的分发

4.4.5 被打破的函数调用规约

4.5 本章小结

第五章 内核保护的系统测试

5.1 安全评估

5.1.1 AIR

5.1.2 ROP Gadgets

5.1.3 针对一般控制数据的攻击

5.1.4 针对中断控制数据的攻击

5.1.5 针对非控制数据的攻击

5.2 性能测试

5.2.1 Phoronix

5.2.2 UnixBench

5.2.3 LMbench

5.2.4 SPEC CPU2006

5.2.5 针对SPEC的插桩

5.2.6 针对SPEC的插桩分解

5.2.7 针对非控制数据的插桩

5.3 本章小结

第六章 总结与展望

6.1 工作总结

6.2 工作展望

参考文献

致谢

作者简介

1. 基本情况

2. 教育背景

3. 攻读硕士学位期间的研究成果

3.1 发表学术论文

展开▼

摘要

大多数的商业操作系统都是由不安全的编程语言开发而来的,面临着各种基于内存安全的攻击。而操作系统内核通常是整个系统的安全基础,必须对其进行保护。保护的对象涵盖整个操作系统的内核代码和所有的内核数据。其中,动态的内核数据由于其无法确定的存放位置和易变性,保护起来难度较大。现有的解决方案大都只提供了对一般控制数据(例如,函数指针和返回地址)的粗粒度保护,没有涵盖特殊的控制数据(例如,中断上下文中的返回地址)和非控制数据(例如,分支数据)。然而,相关研究者已经论证了这些粗粒度的控制数据保护系统能够被最新的攻击绕过。 为此,论文设计并实现了一种基于数据流完整性的内核保护系统。与先前系统相比,该系统能够保护操作系统内核中的控制数据和非控制数据,并且能够通过强制实施细粒度的控制流完整性(Control Flow Integrity,简称为CFI)和数据流完整性(Data Flow Integrity,简称为DFI)来阻止那些基于内存安全的内核攻击。 CFI既是DFI的重要组成部分也是DFI的基础和前提,只有实施了细粒度的CFI才能确保DFI的有效性。首先,为了获取实施CFI所必须的细粒度控制流图,论文提出了一种改进的针对内核中间代码(Intermediate Representation,简称为IR)的上下文和字段敏感的指向分析方法,提高了所获取控制流图的准确性。该方法的主要创新点在于引入了一个新的向量,即结构体位置向量(struct location vector),用于推测每个间接函数调用的目标。引入该向量的主要依据是在内核空间中分布着大量对函数指针的初始化和赋值操作,而在整个生命周期中某个函数指针通常总是位于相同结构体的相同字段。其次,为了解决CFI保护中的目标等价问题,论文采用了索引钩子的方法,通过修改编译器的后端对内核中的间接转移指令进行插桩,并借助二进制改写将其代码段和数据段中的代码指针替换为各自的表索引。最后,为了全面地保护中断控制数据,论文提出了一种基于hypervisor的防御机制,在中断发生时将控制信息备份到hypervisor中并在中断返回时验证该信息。因此,论文对内核强制实施了细粒度的CFI保护。 为了保护内核中的非控制数据从而实现DFI,论文采用了写完整性测试(Write Integrity Testing,简称为WIT)技术。之所以选择WIT,是因为观测到内核中对分支数据的写操作远远少于读操作,因而可以大大减少需要执行的检查次数。为此,论文实现了一个编译时组件和一个运行时组件。首先,在编译阶段,论文通过对IR的指向分析计算出内核中每条指令可以写的数据对象的集合。同时,为了减少空间和时间开销,论文通过对IR的写安全性分析排除掉那些安全的写指令。最后,在运行阶段,论文通过修改编译器后端对内核中每条不安全的写指令进行插桩,以阻止该指令修改那些不被静态分析允许的数据对象。因此,论文对内核强制实施了DFI保护。 论文基于开源的LLVM编译器,实现了一个针对Linux3.14内核的原型保护系统,并对其进行了全面的功能和性能评估。评估结果表明,在引入可接受性能损耗的情况下,该系统能够阻止所有基于控制数据和非控制数据的攻击。

著录项

  • 作者

    童晓梦;

  • 作者单位

    西安电子科技大学;

  • 授予单位 西安电子科技大学;
  • 学科 计算机科学与技术
  • 授予学位 硕士
  • 导师姓名 李金库;
  • 年度 2018
  • 页码
  • 总页数
  • 原文格式 PDF
  • 正文语种 中文
  • 中图分类
  • 关键词

    数据流; 完整性; 内核;

相似文献

  • 中文文献
  • 外文文献
  • 专利
代理获取

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号