基于数据流完整性的内核保护技术研究
摘要 | 第5-7页 |
ABSTRACT | 第7-8页 |
缩略语对照表 | 第11-15页 |
第一章 绪论 | 第15-21页 |
1.1 研究背景 | 第15-16页 |
1.2 研究现状 | 第16-18页 |
1.2.1 用户级控制流完整性 | 第16-17页 |
1.2.2 内核级控制流完整性 | 第17-18页 |
1.2.3 数据流完整性 | 第18页 |
1.3 论文主要工作 | 第18-20页 |
1.4 论文组织结构 | 第20-21页 |
第二章 内核保护的相关技术 | 第21-29页 |
2.1 相关研究工作 | 第21-23页 |
2.1.1 内核完整性 | 第21页 |
2.1.2 控制流完整性 | 第21-22页 |
2.1.3 数据流完整性 | 第22页 |
2.1.4 动态污点分析 | 第22-23页 |
2.1.5 内存安全 | 第23页 |
2.2 相关背景知识 | 第23-27页 |
2.2.1 Linux | 第23-24页 |
2.2.2 编译器 | 第24页 |
2.2.3 虚拟机 | 第24页 |
2.2.4 中断 | 第24-25页 |
2.2.5 索引钩子 | 第25-27页 |
2.3 本章小结 | 第27-29页 |
第三章 内核保护的方案设计 | 第29-43页 |
3.1 概述 | 第29-30页 |
3.1.1 威胁模型及假设 | 第29页 |
3.1.2 实现目标 | 第29页 |
3.1.3 系统架构 | 第29-30页 |
3.2 针对一般控制数据的保护设计 | 第30-37页 |
3.2.1 构建细粒度CFG | 第30-34页 |
3.2.2 函数指针保存子过程 | 第34页 |
3.2.3 函数指针消费子过程 | 第34-35页 |
3.2.4 标记函数中的间接call指令 | 第35-36页 |
3.2.5 细粒度CFI的保护方案 | 第36-37页 |
3.3 针对中断控制数据的保护设计 | 第37-38页 |
3.3.1 中断的虚拟化 | 第37页 |
3.3.2 中断的保护方案 | 第37-38页 |
3.4 针对非控制数据的保护设计 | 第38-42页 |
3.4.1 整体思路 | 第38-40页 |
3.4.2 静态分析 | 第40页 |
3.4.3 颜色表 | 第40-42页 |
3.5 本章小结 | 第42-43页 |
第四章 内核保护的方案实现 | 第43-51页 |
4.1 针对一般控制数据的保护实现 | 第43-45页 |
4.1.1 构造细粒度的控制流图 | 第43-44页 |
4.1.2 细粒度的CFI实现 | 第44-45页 |
4.2 针对中断控制数据的保护实现 | 第45-46页 |
4.2.1 针对hypervisor的修改 | 第45页 |
4.2.2 针对虚拟机内核的修改 | 第45-46页 |
4.3 针对非控制数据的保护实现 | 第46-48页 |
4.3.1 维护颜色表 | 第46-47页 |
4.3.2 插桩写指令 | 第47-48页 |
4.4 其它的原型注意事项 | 第48-50页 |
4.4.1 对可加载内核模块的支持 | 第48-49页 |
4.4.2 对汇编代码的指向分析和插桩 | 第49页 |
4.4.3 上下文切换 | 第49页 |
4.4.4 对信号处理的分发 | 第49页 |
4.4.5 被打破的函数调用规约 | 第49-50页 |
4.5 本章小结 | 第50-51页 |
第五章 内核保护的系统测试 | 第51-61页 |
5.1 安全评估 | 第51-55页 |
5.1.1 AIR | 第51-52页 |
5.1.2 ROP Gadgets | 第52-53页 |
5.1.3 针对一般控制数据的攻击 | 第53页 |
5.1.4 针对中断控制数据的攻击 | 第53-54页 |
5.1.5 针对非控制数据的攻击 | 第54-55页 |
5.2 性能测试 | 第55-59页 |
5.2.1 Phoronix | 第56页 |
5.2.2 Unix Bench | 第56页 |
5.2.3 LMbench | 第56页 |
5.2.4 SPEC CPU2006 | 第56-58页 |
5.2.5 针对SPEC的插桩 | 第58页 |
5.2.6 针对SPEC的插桩分解 | 第58-59页 |
5.2.7 针对非控制数据的插桩 | 第59页 |
5.3 本章小结 | 第59-61页 |
第六章 总结与展望 | 第61-63页 |
6.1 工作总结 | 第61页 |
6.2 工作展望 | 第61-63页 |
参考文献 | 第63-69页 |
致谢 | 第69-71页 |
作者简介 | 第71-72页 |