面向二进制的控制流攻击预防技术研究
摘要 | 第5-6页 |
ABSTRACT | 第6-7页 |
符号对照表 | 第10-11页 |
缩略语对照表 | 第11-15页 |
第一章 绪论 | 第15-21页 |
1.1 研究背景 | 第15-16页 |
1.2 国内外研究现状 | 第16-18页 |
1.3 本文的研究内容和创新点 | 第18-19页 |
1.4 论文的组织结构 | 第19-21页 |
第二章 控制流攻击和二进制分析相关术语 | 第21-33页 |
2.1 二进制基础知识 | 第21-22页 |
2.2 程序内存布局 | 第22-25页 |
2.2.1 内存布局 | 第22-23页 |
2.2.2 程序栈和栈框架元素 | 第23-24页 |
2.2.3 缓冲区溢出漏洞 | 第24-25页 |
2.3 控制流攻攻击 | 第25-29页 |
2.3.1 控制流攻击的基本原理 | 第25-26页 |
2.3.2 数据执行保护 | 第26-27页 |
2.3.3 Return-to-libc攻击 | 第27页 |
2.3.4 ROP攻击 | 第27-28页 |
2.3.5 组合攻击 | 第28-29页 |
2.4 控制流完整性 | 第29-32页 |
2.4.1 实施控制流完整性的基本原理 | 第29-30页 |
2.4.2 间接跳转 | 第30-31页 |
2.4.3 间接函数调用 | 第31-32页 |
2.4.4 函数返回 | 第32页 |
2.5 本章小结 | 第32-33页 |
第三章 后向控制流完整性设计与实现 | 第33-43页 |
3.1 后向CFI的设计 | 第33-35页 |
3.1.1 代码插桩模块 | 第34页 |
3.1.2 运行时监控模块 | 第34-35页 |
3.2 影子调用栈实现 | 第35-39页 |
3.3 实验与结果分析 | 第39-42页 |
3.3.1 影子调用栈功能测试 | 第39-40页 |
3.3.2 影子调用栈性能测试 | 第40-41页 |
3.3.3 潜在风险分析 | 第41-42页 |
3.4 本章小结 | 第42-43页 |
第四章 前向控制流完整性设计与实现 | 第43-69页 |
4.1 前向CFI的设计 | 第43-45页 |
4.1.1 静态分析 | 第44-45页 |
4.2 虚函数分析 | 第45-49页 |
4.2.1 虚函数调用点识别 | 第46-47页 |
4.2.2 虚函数识别 | 第47-49页 |
4.3 函数原型和调用点签名分析 | 第49-56页 |
4.3.1 函数原型分析 | 第50-52页 |
4.3.2 可变长参数函数 | 第52-54页 |
4.3.3 调用点签名分析 | 第54-56页 |
4.4 运行时执行 | 第56-63页 |
4.4.1 映射关系的建立 | 第56-58页 |
4.4.2 ID和ID表的设计 | 第58-59页 |
4.4.3 加载时代码插桩 | 第59页 |
4.4.4 运行时监控 | 第59-63页 |
4.5 实验和结果分析 | 第63-68页 |
4.5.1 功能测试 | 第63-64页 |
4.5.2 精度测试 | 第64-67页 |
4.5.3 性能测试 | 第67-68页 |
4.6 本章小结 | 第68-69页 |
第五章 总结与展望 | 第69-71页 |
5.1 本文总结 | 第69页 |
5.2 未来工作展望 | 第69-71页 |
参考文献 | 第71-75页 |
致谢 | 第75-77页 |
作者简介 | 第77-78页 |