24小时论文定制热线

热门毕设:土木工程工程造价桥梁工程计算机javaasp机械机械手夹具单片机工厂供电采矿工程
您当前的位置:论文定制 > 毕业设计论文 >
快速导航
毕业论文定制
关于我们
我们是一家专业提供高质量代做毕业设计的网站。2002年成立至今为众多客户提供大量毕业设计、论文定制等服务,赢得众多客户好评,因为专注,所以专业。写作老师大部分由全国211/958等高校的博士及硕士生设计,执笔,目前已为5000余位客户解决了论文写作的难题。 秉承以用户为中心,为用户创造价值的理念,我站拥有无缝对接的售后服务体系,代做毕业设计完成后有专业的老师进行一对一修改与完善,对有答辩需求的同学进行一对一的辅导,为你顺利毕业保驾护航
代做毕业设计
常见问题

Linux内核驱动中漏洞检测方法

添加时间:2019/03/19 来源:北京工业大学 作者:徐永健
本文针对 Linux 设备驱动中的内存错误、整数错误和 API 误用等漏洞类型进行了一系列的研究与分析,同时针对现有的静态分析、动态分析和符号执行工具进行了调研。
以下为本篇论文正文:

摘 要

  研究表明驱动中的漏洞是 Linux 内核安全的一个主要威胁,它包含多种类型的漏洞,如整数错误、内存错误和 API 误用等,可能引发提权、拒绝服务等高危情况。然而,一般的程序分析技术无法直接应用于 Linux 设备驱动的分析和漏洞检测,对检测方法也要求较高。因此,研究 Linux 设备驱动中的漏洞,尤其是内存错误和整数错误等类型的漏洞,具有重要意义。

  本文首先对 Linux 驱动中的主要错误类型进行分析,并对静态分析、动态分析、符号执行等技术进行了研究,提出了基于符号执行技术并融合动态分析和静态分析技术对 Linux 驱动进行漏洞检测的基本思路。论文主要工作如下:

  1. 针对采用静态分析技术进行 Linux 内核漏洞检测误报率高的问题,本文采用了动态分析技术对静态分析结果进行二次验证,并构建了相应的检测系统;进一步提出融合符号化硬件技术,实现了方便地模拟硬件设备进而对驱动进行模拟运行。

  2. 设计并实现了符号化设备驱动环境(SDDE),SDDE 采用模拟内核提供给驱动程序的服务接口的思想,使驱动程序可以在应用层进行符号执行进而可对其进行漏洞检测,这样无需真实硬件的支持,并且具备覆盖率高、执行速度快、易于扩展等特点,并提升了检测系统的执行效率和扩展能力。

  3. 将 SDDE 作用于六个不同的 Linux 设备驱动,检测出了 6 个真实的漏洞,其中 3 个漏洞已向驱动维护者提交补丁并被接收。实验结果证明了符号化驱动环境具备一定的漏洞检测能力,并且拥有资源消耗低、检测速度快和不依赖于硬件设备的特点。

  关键词:Linux;设备驱动;漏洞检测;符号执行

Abstract

  Studies have shown that driver vulnerabilities is one of the major threats to the security of Linux kernel. It contains many type of vulnerabilities, such as integer errors, memory errors, and API misuse, which might lead to privilege escalation, denial of service and other high-risk situations. However, general program analysis techniques can’t be applied directly to the Linux device driver’s analysis and vulnerability detection, detection method is also demanding. Therefore, study on vulnerabilities in Linux drivers, especially the memory errors, integer errors and other types of vulnerabilities, is important.

  First, the major error types in Linux drivers are analyzed, and second, static analysis, dynamic analysis and symbolic execution techniques are studied. Finally, the Linux driver bug detection idea which based on symbolic execution and combines static analysis and dynamic analysis technology are proposed. The main work is as follows:

  1. Aiming at the problem of high false positive rate in static analysis, we proposed the idea to use dynamic analysis to verify the static analysis results, and implements the corresponding detection system. Moreover, through the integration of symbolic hardware technology, it can conveniently be used to simulate hardware devices and dynamically run Linux drivers.

  2. Designed and implemented symbolic device driver environment (SDDE). SDDE provides symbolic kernel services and symbolic devices, making symbolic execution of Linux driver and runtime driver vulnerability detection possible. SDDE works without real hardware, and it has many advantages such as high coverage, high performance and good scalability.

  3. In applying SDDE to 6 Linux drivers, 6 real bugs were found, 3 of which were confirmed by Linux developers. Experimental results show that SDDE can detect vulnerability, and has the characteristics of low resource consumption, fast detection speed and does not depend on the hardware device.

  Keywords: Linux, Device Driver, Bug Detection, Symbolic Execution

  信息技术的快速发展和广泛应用在给人类的生活带来便利和快捷的同时,也带来了很多不可忽视的负面影响,例如网络技术的兴起给企业和用户带来了许多不可控的安全因素,表现在电子化资产的安全性和个人隐私的保密性等方面。目前信息技术的特点是将用户需求连接到后端服务,然而无论是用户终端还是后端服务中均存在许多不可控的安全风险。从技术角度上看,这些风险一般是软件安全漏洞带来的。软件安全漏洞的存在给用户带来直接的损失和隐藏的风险,例如,美国国家标准技术研究院(NIST)在 2002 年的研究报告中指出,软件缺陷给美国造成了 595 亿美元的经济损失(占当年美国 GDP 的 0.6%);到 2007 年,这一数字已经增长至 1800 亿美元[1]。更为严重的是,软件漏洞所导致的蠕虫、木马(driven-by downloads)、僵尸网络(Botnet)等各种网络攻击事件给互联网甚至给国家信息安全带来严重危害。

  通常,软件可分为操作系统和用户程序两类,操作系统作为硬件资源和用户程序的管理者,其重要性十分突出。近年来,随着 Linux 操作系统得到越来越广泛的应用,其安全性也面临着越来越多的挑战。常见的软件漏洞包括整数溢出、缓冲区溢出、并行错误、格式化字符串漏洞等。其中,内存错误和整数错误被认为是系统安全的重要威胁,因为它可能导致系统崩溃或者权限提升等危险情况[2]。2007 年的一份关于 CVE(Common Vulnerabilities and Exposures)漏洞库[3]的研究表明整数错误在操作系统的软件错误中排名第二(第一名是缓冲区溢出)。最近的一份研究[4]针对 2010 年到 2011 年的 Linux Kernel 在 CVE 中的漏洞进行数据统计,发现在可以造成内核错误和获取权限提升的错误中,整数错误已经占了1/3 以上的数量。

  此外,Linux 驱动程序漏洞在 Linux 内核漏洞中的比例非常之高。曾有研究表明 drivers 目录下的漏洞是其他目录的三到七倍之多[5]。虽然之后经过学术界和工业界不断的努力,Linux 代码的质量得以不断提高,内存相关的错误在逐渐减少,同时驱动程序漏洞的占比也得以降低,但是 Linux 设备驱动程序的漏洞占比依然非常之高。2011 年 Palix 等人的研究表明驱动依然是 Linux 内核错误的主要来源[6],同年,Chen Haogang 等人的研究表明 Linux 中约 2/3 的错误来源于驱动程序,2013 年 Lin Tan 等人针对 Linux 已知漏洞的抽样研究表明 52.9%的漏洞来自于驱动程序[7]。以上研究均表明了驱动程序依然是影响 Linux 系统安全和稳定的重要因素,对驱动安全进行研究仍然是紧要的任务。然而驱动程序不同于一般的应用程序,针对 Linux 驱动程序的代码分析和漏洞检测,其难度更高。一方面,由于设备驱动运行在内核态,而现存的许多代码分析和漏洞检测工具只能用于用户态程序;另一方面,设备驱动程序的运行时检测需要具备真实的硬件设备,由于硬件环境的限制,甚至驱动开发者本人也只是进行了“编译检查”。甚至,有些漏洞只有在硬件自身发生错误的情况下才能触发,所以即使拥有了硬件设备,也很难对驱动程序进行全面的检测。

  综上所述,Linux 内核漏洞的种类和数量较多,其中以内存错误和整数错误较为突出,并且在 Linux 内核漏洞中,驱动程序的漏洞占比最高、危害性较大,同时对检测方法也要求较高。因此,检测 Linux 设备驱动中的漏洞,尤其是内存错误和整数错误等类型的漏洞,具有重要意义。

  从软件安全问题进入到人们的视野至今,漏洞检测相关的研究工作持续进行,各种软件测试方法和工具也不断得到广泛使用,这给软件安全领域带来了很大的进步:平均每行代码所包含的 bug 数量在不断减少,例如 Linux 内核 2.6.28 的每行平均 bug 数量比 2.6.0 降低了 50%左右[7]。针对 Linux 内核,由于其代码量巨大,且属于系统层面,因此无法使用针对小型软件或用户程序的检测方法对其进行漏洞探测和安全分析。虽然一些通用性极好的静态分析工具能够对 Linux 内核进行检测,但其一般会带来非常高的误报率,进而对人工筛选提出过高的要求。

  近年来,在已有的漏洞检测技术基础上,不断拓展思路并加以综合利用已经成为漏洞检测技术的有效研究思路,多种技术相结合的漏洞检测方法逐渐出现并取得一定成功。从已有的漏洞分析和检测的技术来看,现有的技术主要分为静态分析、动态分析和符号执行技术。静态分析是指在不对代码进行动态执行的条件下,通过词法、语法以及控制流等各个方面的分析来对程序代码进行扫描,具有不实际运行程序、执行速度快、误报率较高的特点;动态分析是指在运行时监控程序行为进行检测,具有精度高、难以定位漏洞位置、对测试输入依赖大的特点;符号执行技术则可用于静态分析也可用于动态分析,其优点是具备高覆盖率,另外动态符号执行的误报率也较低,但是符号执行技术中存在的路径爆炸问题一直是限制其发展的难点。

  下面分别针对静态分析、动态分析和符号执行,对相关的技术研究和检测工具进行概述。静态分析是指在不运行程序的情况下,对二进制程序或程序源码进行分析的方法,其一般针对程序的控制流或者数据流进行检验和分析,常见的实现技术有数据流分析、类型推导、符号执行、模型检验、定理证明等[8]。许多静态分析工具使用一种中间语言(IR)来描述程序,例如 CodeSurfer[9]依赖于 IDAPro 的 IR、Jakstab[10]依赖于 Boomerang[11]的前端表示、BitBlaze[12]的静态分析组件 Vine也使用了中间表示。

  静态源代码分析可以分析出所有可能的路径,但是源码中间接跳转的分析,通常需要难度较高的指针分析,并没有十分有效的精确手段。此外,尽管静态源码分析有很高的代码覆盖率和路径覆盖率,但是在处理比较复杂的语言结构时它可能带来非常多的误报[13]。为了减少误报,许多静态分析工具需要开发者添加注释。静态分析也难以检测出语义漏洞,比如程序某处缺少权限检查(missingpermission check)。尽管静态分析有误报率高等缺点,但是使用静态分析的结果作为疑似 bug,然后进行人工筛选或者动态验证依然是发现漏洞的有效手段。

  KINT[14]由麻省理工学院 WANG Xi 等人开发,用于检测 C 语言源码中的整数溢出漏洞。其基于 LLVM[15]的中间表示语言,在使用 LLVM 编译器对目标代码编译的时候进行检测。KINT 可以根据源代码和用户注释生成约束,然后使用约束求解器来判定搜集到的约束条件是否满足整数溢出发生的可能性。由于其对每个编译单元单独检测,最后才汇总检测结果,所以 KINT 可应用于 Linux 驱动甚至整个 Linux 内核的分析。然而 KINT 在编译单元内部搜集的约束并不准确,带来了非常高的误报率,据本文统计,其误报率高于 99.9%。从实际效果来看,将其用于检测 Linux 内核、lighttpd web 服务器、OpenSSH 等开源软件,加上后期的人工分析和筛选,KINT 已经发现了超过 100 个整数错误。

   Linux内核驱动中漏洞检测方法:

SDDE 系统设计
SDDE 系统设计

获取驱动的编译依赖
获取驱动的编译依赖

整数错误检测框架
整数错误检测框架

目 录

  摘 要
  Abstract
  第 1 章 绪论
    1.1 课题背景和意义
    1.2 国内外研究现状
      1.2.1 静态分析
      1.2.2 动态分析
      1.2.3 符号执行
      1.2.4 多种技术的融合
    1.3 论文研究内容
    1.4 论文组织结构
  第 2 章 错误类型分析及相关技术研究
    2.1 驱动常见错误分析
      2.1.1 内存错误
      2.1.2 整数错误
      2.1.3 API 误用
    2.2 C 语言整数溢出检测工具 KINT
    2.3 选择性符号执行平台 S2E
    2.4 符号执行引擎 KLEE
    2.5 本章小结
  第 3 章 符号执行检测 Linux 驱动中内存错误和整数错误
    3.1 概述
    3.2 系统设计与实现
      3.2.1 测试程序的制作
      3.2.2 检测内存分配的安全性
      3.2.3 检测内存使用的安全性
      3.2.4 改进 KINT
      3.2.5 疑似错误点插桩
      3.2.6 检测整数错误
    3.3 实验结果与分析
      3.3.1 测试环境
      3.3.2 测试结果
    3.4 本章小结
  第 4 章 符号化硬件检测 Linux 驱动中内存错误和整数错误
    4.1 概述
    4.2 SymDrive 分析与优化
      4.2.1 符号化设备
      4.2.2 测试框架
      4.2.3 SymGen
      4.2.4 错误检测
      4.2.5 路径优化
    4.3 基于 SymDrive 的整数错误检测
      4.3.1 创建虚拟设备
      4.3.2 设备交互符号化
      4.3.3 符号值注入
      4.3.4 测试流程
    4.4 实验结果与分析
      4.4.1 实验环境
      4.4.2 实验结果
    4.5 本章小结
  第 5 章 符号化设备驱动环境 SDDE
    5.1 概述
      5.1.1 设备驱动环境
      5.1.2 符号化设备驱动环境
    5.2 驱动验证规则
    5.3 SDDE 的设计与实现
      5.3.1 符号化设备驱动环境的构建
      5.3.2 驱动程序的语义合法性检测
      5.3.3 整数错误的检测
      5.3.4 基于符号执行的驱动程序的运行
    5.4 系统的优化
    5.5 实验结果与分析
    5.6 本章小结
  结 论
  参 考 文 献
  攻读硕士学位期间所发表的学术论文
  致 谢

(如您需要查看本篇毕业设计全文,请您联系客服索取)

相关内容
相关标签:Linux毕业设计
好优论文定制中心主要为您提供代做毕业设计及各专业毕业论文写作辅导服务。 网站地图
所有论文、资料均源于网上的共享资源以及一些期刊杂志,所有论文仅免费供网友间相互学习交流之用,请特别注意勿做其他非法用途。
如有侵犯您的版权或其他有损您利益的行为,请联系指出,论文定制中心会立即进行改正或删除有关内容!