GCC编译器安全验证方法研究

GCC编译器安全验证方法研究

论文摘要

编译器作为计算机软件中最为基础的软件之一,与操作系统、数据库系统一起被列为构成计算机系统软件的关键性的基础设施。而编译器作为任何软件的产生器,它的安全性、可靠性和稳定性更是至关重要。特别是在那些对软件的可靠性要求十分高的特殊环境里面,我们必须保证编译器编译出来的代码是对程序源代码的正确、真实的反应,保证编译器在编译过程中逻辑上的正确性以及行为上的透明性。本文首先研究了目前国内外对于软件验证,特别是编译器验证领域的一些工作进展。主要包括形式化的验证方法、模型校验、目标文件结构比较等等方法,分析并讨论了这些方法在理论上的优缺点以及它们在实践应用中的效果。本文对于编译器的安全性的关注点在于:验证编译器是否在编译阶段在输出目标代码中插入恶意的代码或者后门程序。之后本文提出了两种可行的编译器验证方案:编译器代码分析及对比验证以及目标码逻辑结构对比验证。在第一个方案中,我们以GCC编译器为例,试图将GCC编译器源代码中的所有函数分成两类:对于那些会在函数内部改变它的输入数据的函数,影响编译器最终输出结果的,我们将它们归类为第一类;对于那些在函数内部不会改变输入数据的函数,不影响编译器最终输出结果的,我们将它们归类为第二类。对于第二类函数,我们在函数的入口处将所有输入数据保存,然后在函数返回时将所有输入数据与之前保存的数据进行对比,如果对比成功,则证明该函数的确没有改变编译器的最终输出结果;对于第一类函数,我们将人工地检查这些函数的代码并且由一组独立的小组将这些函数根据描述重新实现,然后对比原先这些函数的运行结果以及独立实现的函数运行结果,如果结果一致,则表示该函数安全。第二个方案中,本文采用了一种对比编译器的输出目标文件与源文件的控制流逻辑结构的方案。在这个方案中,我们采用GCC编译器编译一份源代码,然后提取源代码和编译以后目标码的控制流图的结构,使用同构图算法对这两个控制流图进行比较,如果这两份控制流图的逻辑对比一致,那么可以证明该编译器在编译过程中没有插入恶意代码,即证明这目标编译器在行为上安全的。最终,本文提出将这两种方案相互结合的综合的编译器安全验证方法,使得一方面能够大大减轻编译器验证的工作量,另一方面又能够保证验证的完整性。本文所提出的方法和结论可以进一步地推广到其他的编译器和硬件平台的验证工作中去,它们应该有着更广泛的应用前景。

论文目录

  • 摘要
  • Abstract
  • 第1章 绪论
  • 1.1 研究背景
  • 1.1.1 可信软件与软件验证
  • 1.1.2 静态分析与形式化方法
  • 1.1.3 动态分析与软件测试
  • 1.2 研究内容
  • 1.3 研究目标
  • 1.4 本文结构组织
  • 1.5 本章小结
  • 第2章 编译器验证研究综述
  • 2.1 编译器安全验证
  • 2.2 编译优化验证
  • 2.3 编译结果运行时保证
  • 2.4 本章小结
  • 第3章 编译器代码分析及保障对比验证
  • 3.1 引言
  • 3.2 总体方案描述
  • 3.2.1 基本思路
  • 3.2.2 实施步骤
  • 3.2.3 参与人员角色与约束
  • 3.2.4 其他注意事项
  • 3.3 实施实例
  • 3.3.1 循环代码外提优化的安全性验证
  • 3.4 工作量估计
  • 3.5 本章小结
  • 第4章 控制流逻辑结构对比验证
  • 4.1 引言
  • 4.2 控制流图
  • 4.2.1 控制流图结构
  • 4.2.2 同构图问题
  • 4.3 C语言源代码控制流图生产
  • 4.3.1 Lex& Yacc
  • 4.3.2 条件判断语句
  • 4.3.3 循环语句
  • 4.3.4 函数调用
  • 4.4 目标码控制流图生产
  • 4.5 控制流图简化与图同构
  • 4.5.1 控制流图简化
  • 4.5.2 控制流图同构
  • 4.6 实验评估测试
  • 4.6.1 控制流图实验用例
  • 4.6.2 恶意代码嵌入
  • 4.6.3 恶意代码嵌入实验
  • 4.6.4 真实程序测试用例
  • 4.7 本章小结
  • 第5章 总结与展望
  • 5.1 本文完成的主要研究工作
  • 5.2 本文的主要贡献以及创新点
  • 5.3 进一步的研究工作
  • 附录
  • C语言词法规则
  • C语言语法规则
  • 参考文献
  • 致谢
  • 相关论文文献

    • [1].方舟编译器初探[J]. 科技与创新 2019(23)
    • [2].一种适用于可信编译器的源语言转换与检查框架[J]. 中国科技论文 2017(14)
    • [3].华为方舟编译器开源官网正式上线:源代码已开放下载[J]. 电脑知识与技术(经验技巧) 2019(10)
    • [4].快速掌握编译器设计方法[J]. 软件 2018(05)
    • [5].一种新的大容量SRAM编译器设计[J]. 微电子学 2015(04)
    • [6].可信编译器构造的翻译确认方法简述[J]. 计算机科学 2014(S1)
    • [7].计算智能技术在分布式多编译器中的应用分析[J]. 节水灌溉 2011(05)
    • [8].优化编译器的设计[J]. 群文天地 2011(14)
    • [9].关于C编译器对——运算编译的研究[J]. 电脑知识与技术 2010(18)
    • [10].基于编译器优化的嵌入式软件缺陷分析方法[J]. 航天控制 2016(05)
    • [11].一种农业设备嵌入式数据库预编译器设计与实现[J]. 农业网络信息 2012(03)
    • [12].编译器无关性编码在微控制器中的优势[J]. 单片机与嵌入式系统应用 2010(02)
    • [13].可信编译器关键技术研究[J]. 计算机工程与科学 2010(08)
    • [14].可视编译器的设计与实现[J]. 计算机与现代化 2010(10)
    • [15].类高级语言编译器的设计与实现[J]. 内蒙古科技与经济 2009(16)
    • [16].超强通用编译器优化工具 准确率是传统方法的5倍[J]. 计算机与网络 2020(02)
    • [17].一种静态的编译器重复缺陷报告识别方法[J]. 中国科学:信息科学 2019(10)
    • [18].魂芯DSP上复数类型的支持和优化[J]. 计算机系统应用 2017(09)
    • [19].软件/开发工具[J]. 今日电子 2014(02)
    • [20].出具证明编译器中代码优化与程序规范转换[J]. 小型微型计算机系统 2011(07)
    • [21].NI LabVIEW2010优化编译器,加速代码执行[J]. 电子测量技术 2010(08)
    • [22].运行速度大突破 华为《方舟编译器》详解[J]. 计算机与网络 2019(09)
    • [23].典型编译器自动向量化效果评估与分析[J]. 计算机科学 2013(04)
    • [24].一种支持软件演化过程描述语言的编译器的设计分析[J]. 绵阳师范学院学报 2013(02)
    • [25].基于C语言编译器的词法分析浅析[J]. 电脑知识与技术 2013(24)
    • [26].C-编译器的扫描程序与分析程序设计[J]. 信息与电脑(理论版) 2012(14)
    • [27].FANUC宏编译器的应用[J]. 精密制造与自动化 2008(04)
    • [28].高速SRAM编译器时序算法[J]. 电子与封装 2016(07)
    • [29].出具证明编译器中线性整数命题证明的自动生成[J]. 小型微型计算机系统 2011(06)
    • [30].即时编译器辅助的垃圾收集中的插桩算法研究[J]. 小型微型计算机系统 2010(04)

    标签:;  ;  ;  ;  ;  ;  

    GCC编译器安全验证方法研究
    下载Doc文档

    猜你喜欢