摘要
随着互联网和计算机技术的不断发展与广泛应用,人们对计算机系统的依赖性愈加凸显,伴随而来的,其自身固有的脆弱性也愈加明显,信息和系统的安全性也需要面对前所未有的挑战。对信息和系统安全问题产生威胁的原因多种多样,其中缓冲区溢出漏洞因分布广泛和易被利用性,已成为一种十分常见而危害性极大的安全威胁,引起了学术界和实际应用领域的高度关注。若能在缓冲区溢出漏洞被利用前检测发现漏洞,则其对信息和系统的安全威胁可以大大降低,本论文即针对缓冲区溢出漏洞的检测技术展开研究,以提出并构建一种更为便捷有效的发现漏洞的方法。
论文首先对缓冲区溢出漏洞的研究背景进行了介绍,随后梳理了缓冲区溢出的一些基本理论,包括缓冲区溢出的原理、漏洞形成的原因及分类等。在此基础上,详细研究了现有的缓冲区溢出漏洞检测方法。现有的检测方法主要包括三类:
静态缓冲区溢出漏洞检测方法、动态缓冲区溢出漏洞检测方法和动静结合缓冲区溢出漏洞检测方法。静态检测方法主要依靠静态检测工具对程序源代码进行扫描分析,得出检测结果,其优点是能在威胁生成之前提前发现漏洞,避免损失;动态检测方法是在程序运行过程中所采用的方法,其优点是检测正确率较高,但只能用于攻击行为发生后减少损失。因此,本文的研究重点侧重于静态检测方法的创新。
鉴于静态检测方法普遍存在较高的误报率和漏报率,且不同静态检测方法所能检测到的漏洞的侧重点不同,因此本文提出并构建了一种缓冲区溢出漏洞综合检测的方法。论文以减少误报和漏报为目标,将多个缓冲区溢出漏洞静态检测工具综合使用,使得这些工具的检测结果可以互相验证和互相补充,从而得到更加准确的结果。根据该综合检测方法,文章设计并实现了一个缓冲区溢出漏洞综合检测系统。该系统首先将多个不同类型的检测工具同时运行,之后将不同工具的检测结果进行综合分析,以得到更加准确的检测结果。针对该方法中较为重要的工具可信度权值计算部分,增加了工具可信度权值训练模块,以寻找最优权值。
系统测试实验结果表明,该方法与单独的静态检测工具相比,能有效降低缓冲区溢出漏洞检测的误报率和漏报率,提高检测结果的准确度。
本研究得到国家自然科学基金的资助。
关键词: 缓冲区溢出漏洞;静态检测;综合检测;误报率;漏报率
ABSTRACT
With the continuous development and extensive application of the Internet and computer technology, people increasingly realize the importance of information and these dependence on computer systems highlight, accompanied by its own inherent vulnerability has become even more evident, the security of information and systems also need to face the unprecedented challenge. The reason for the problems of information and system security threats are varied, including buffer overflow vulnerability because of the widespread and easily use, has become a very common security threats and great danger with its widespread and easily use and causing high attention of academic and practical application areas. If the buffer overflow vulnerability is detected before exploiting , its information and systems security threats can be greatly reduced, so a study in this paper is that a buffer overflow vulnerability detection techniques for to propose and build a more convenient effective method for discovering vulnerabilities.
Firstly, the buffer overflow vulnerability research background is introduced, followed by some sort of buffer overflow basic theory, including the principle of the buffer overflow vulnerability, formation reason, the different sub-categories with the principles and so on. On this basis, a detailed study of the existing buffer overflow detection has been finished. Existing detection methods include three categories:
static buffer overflow vulnerability detection methods, dynamic buffer overflow vulnerability detection methods and combination of static and dynamic buffer overflow vulnerability detection methods. Static detection methods mainly rely on static detection tool to scan and analysis source code to get the final test results, and its advantage is to find vulnerabilities in advance before the threat generated and avoid losses; dynamic testing is the method used by the program is running and its advantage is higher correct detection rates, but can only be used to reduce losses after the attacks occurred. Therefore, this research focuses on innovative static detection methods.
Given that the high prevalence of static detection of false positives and false negatives, and different static detection method can focus on detecting the different vulnerabilities, and therefore this paper constructs a buffer overflow vulnerability comprehensive testing approach. Papers regard reducing false positives and false negatives as the goal, integrated use multiple buffer overflow vulnerabilities of static detection tools, to make the test results of these tools can verify and complement each other with each other to get more accurate results. According to the comprehensive testing methods, the paper designed and implemented a comprehensive buffer overflow vulnerability inspection system. In order to obtain more accurate test results , the system will first detect a plurality of different types of tools run simultaneously and after the detection result of a comprehensive analysis of different tools. In this method, to implement the more important part of weight reliability calculation, credibility weights training module tool has been added to find the optimal weights.
System test results show that compared with the single static detection tool, this method can effectively reduce the rate of false positives and false negative in buffer overflow vulnerability detection and improve the accuracy of test results.
Keywords: buffer overflow vulnerability, static detection, integrated detection, false positives, false negatives
近年来,信息化进程的深入和互联网技术的不断普及应用给社会发展注入了极大的动力,信息资源的共享也得到了进一步的加强。人们在生活中已习惯于使用网络进行资料搜索、网络购物、即时聊天和寻找服务等各种活动,从迅猛发展的移动电商,到用户众多的聊天软件,信息技术极大地的方便了人们的生活,利用网络获取所需已成为一种常态。然而,也正是由于信息化的广泛应用,使得信息安全问题也日益突出。仅 2014 年,国内就有多起重大信息安全事故发生。2014年 1 月 21 日,国内通用顶级域的根服务器出现异常,导致大面积的 DNS 解析故障。
3 月 22 日,国内在线旅游着名服务商携程网被检查出其安全支付日志存在漏洞,可导致大量的用户信息,如用户姓名、身份证号、银行卡类别和银行卡卡号等信息泄露。12 月 2 日,黑客通过智联招聘网站的漏洞获取了包括用户姓名、婚姻状况、出生日期、户籍地址、身份证号、手机号等各种详细信息的 86 万条求职简历数据。12 月 20 至 12 月 21 日,阿里云遭遇了全球互联网史上最大的一次 DDoS 攻击,且攻击持续时间在 14 个小时以上。诸如此类的事件每年都在不断发生。计算机网络的开放性、互联性、共享性以及自身固有的脆弱性、网络组成形式的多样性、终端分布的广泛性都为信息安全埋下了隐患。再加上系统软件中的安全漏洞以及所欠缺的严格管理,使得信息安全面临的威胁越来越多。
在信息安全面临的威胁中,利用漏洞实施攻击已成为一种常见的威胁。Voas 和McGraw 指出,一个经过严格质量认证(QA)的系统仍然含有 bug,每千行代码中大约 5 个[1]。即代码越多,bug也越多,可能出现问题的代码也越多。近年来,随着各种软件的复杂性和规模的不断增长,相应的各种安全漏洞也越来越多,这就给了攻击者更多的攻击漏洞的机会。在这些安全漏洞中,缓冲区溢出漏洞已经是最常见的形式之一,其在各类操作系统和应用软件中都普遍存在。
本文对国家信息安全漏洞库近几年的漏洞数据以半年为单位进行了分类统计,国家信息安全漏洞库将漏洞分为了 26 个类型:缓冲区溢出、SQL 注入、路径遍历、跨站脚本、资源管理错误、权限许可和访问控制、跨站请求伪造、数字错误、授权问题、信任管理、配置错误、设计错误、输入验证、信息泄露、代码注入、加密问题、竞争条件、格式化字符串、操作系统命令注入、后置链接、环境条件错误、边界条件错误、访问验证错误、资料不足、未知及其他。其中横轴表示时间,纵轴表示统计得到的缓冲区溢出漏洞数量,柱状图上的标识代表缓冲区溢出漏洞数在 26 个漏洞类型中的数量排名。对数据进行分析表明,缓冲区溢出漏洞数一直排在 26 个类型中的前四位,其在总漏洞数中占了很大的比例。由此可知,缓冲区溢出漏洞已成为一种广泛存在且危害极大的漏洞类型。
缓冲区溢出是指当计算机向缓冲区内填充数据位数时超过了缓冲区本身的容量,数据会溢出存储空间,溢出的数据则会覆盖在合法数据上[2]。理想的情况是:
程序检查数据长度并不允许输入超过缓冲区长度的字符[3]。可是有些程序会假设数据长度总是与所分配的存储空间相匹配,而不作检查,从而为缓冲区溢出留下了隐患[4]。操作系统所使用的缓冲区又被称为“堆栈”。在各个操作进程之间,指令会被临时储存在“堆栈”当中。“堆栈”也会出现缓冲区溢出[3 ]。若出现的缓冲区溢出被有心者恶意利用,则会形成缓冲区溢出漏洞。缓冲区溢出漏洞的危害主要在于,攻击者可以利用其导致程序运行失败、系统死机或重启。更为严重的是,可以利用它执行非授权指令,甚至可以取得系统的超级特权,进行各种非法操作[5]。缓冲区溢出漏洞最初出现时,其并未引起人们的重视。最早有记录的利用缓冲区漏洞进行恶意利用发生在 1988 年,Morris Worm 利用 fingered 的缓冲区溢出漏洞感染了约 6000 主机(大部分是 Unix 主机),造成了的损失约在$10000000 至$100000000[6]。人们开始对其重视起来,特别是在 2000 年以后,缓冲区溢出漏洞对信息安全产生的威胁越来越大。
2001 年 7 月,CodeRed 蠕虫病毒导致了全球范围内运行微软 IIS Web Server的约 30 万台计算机受到攻击[7]。2003 年,Slammer 蠕虫利用 SQLserver2000 中的溢出漏洞,造成大量重要的电脑系统最终瘫痪。同年 8 月,“冲击波”Worm Blaster病毒利用 Windows 远程过程调用中的漏洞,导致 1600 万的用户被感染[1]。2004 年5 月,“震荡波”Sasser 病毒利用 Windows 平台上的 LSASS 漏洞进行攻击,几乎所有的 Windows 操作系统无一幸免[7]。2005 年 8 月,利用微软 MS05-039 漏洞进行的蠕虫病毒“狙击波”爆发,并在短时间内蔓延到全球。
利用缓冲区溢出漏洞进行攻击的信息安全事件,都对网络造成了巨大的破坏,带来的经济损失更是无法估计。鉴于此,人们对缓冲区溢出漏洞进行了一系列的研究,取得了一定的成果,但道高一尺,魔高一丈,缓冲区溢出漏洞带来的威胁依然无法完全消除。近年间,攻击者更是将缓冲区溢出漏洞利用技术进行了改进,将其与僵尸网络等新兴技术进行结合,使得信息安全形势更加严峻。缓冲区溢出漏洞之所以层出不穷,是由于其具有较强的隐蔽性,难以被发现。
其原因主要在于:首先,一般程序员很难发觉自己编写的程序中存在缓冲区溢出漏洞,从而疏忽监测;其次,攻击的随机性和不可预测性使得防御攻击变得异常艰难,在没有攻击时,存在漏洞的程序并不会有什么变化;第三,ShellCode 与执行时间都很短,在执行中系统不一定报告错误,并可能不影响正常程序的运行;第四,攻击者可以通过缓冲区溢出改变程序执行流程使 ShellCode 能够进行本来不被允许或没有权限的操作,而防火墙认为其是合法的[5],因此,缓冲区溢出漏洞难以被发现。缓冲区溢出漏洞最大的危害在于,其可以在无人为参与的情况下进行自动传播,主动攻击,从而造成无法估量的损失。如果能有效地消除缓冲区溢出的漏洞,则很大一部分的安全威胁将可以得到缓解[8]。
缓冲区溢出漏洞的检测技术研究:
2010 年 1 月至 2014 年 6 月缓冲区溢出漏洞分布情况
预处理模块流程
检测报告格式统一化流程
Flawfinder 的 E-R 图
综合检测模块流程
漏洞的 E-R 图
工具可信度权值训练模块流程
检测结果优化模块流程
目 录
1 绪论
1.1 研究背景及意义
1.2 国内外研究现状
1.2.1 缓冲区溢出漏洞静态检测方法
1.2.2 缓冲区溢出漏洞动态检测方法
1.2.3 缓冲区溢出漏洞动静结合检测方法
1.3 论文研究的主要思路和内容框架
2 缓冲区溢出漏洞相关理论基础
2.1 进程的内存组织形式
2.2 缓冲区溢出原理
2.3 缓冲区溢出类别
2.3.1 栈溢出
2.3.2 堆溢出
2.3.3 格式化字符串溢出
2.4 缓冲区溢出漏洞形成原因
2.5 正报率、误报率和漏报率
2.6 缓冲区溢出漏洞的预防方法
2.7 小结
3 缓冲区溢出漏洞静态检测方法
3.1 基于源代码的静态检测方法
3.1.1 静态分析方法
3.1.2 程序验证方法
3.2 基于源代码的静态检测方法的工具
3.3 静态检测方法的整体流程及侧重点
3.3.1 静态检测方法的检测流程
3.3.2 静态检测方法的侧重点
3.4 小结
4 缓冲区溢出漏洞综合检测系统设计
4.1 综合检测方法的整体流程
4.2 预处理模块设计
4.2.1 检测工具的选取
4.2.2 检测报告格式的统一化
4.3 综合检测数据模块设计
4.3.1 漏洞危险等级的统一量化
4.3.2 工具可信度权值的计算
4.3.3 漏洞综合估分的计算
4.4 工具可信度权值训练模块设计
4.5 检测结果优化模块设计
4.5.1 危险函数及其分类
4.5.2 检测工具误报原因分析
4.5.3 函数安全规范
4.6 小结
5 缓冲区溢出漏洞综合检测系统实现与测试分析
5.1 预处理模块实现
5.1.1 模块说明
5.1.2 模块实现
5.1.3 数据库实现
5.2 综合检测数据模块实现
5.2.1 模块说明
5.2.2 模块实现
5.2.3 数据库实现
5.3 工具可信度权值训练模块实现
5.3.1 模块说明
5.3.2 模块实现
5.3.3 数据库实现
5.4 检测结果优化模块实现
5.4.1 模块说明
5.4.2 模块实现
5.4.3 数据库实现
5.5 系统测试与分析
5.5.1 测试方案及环境
5.5.2 测试结果分析
5.6 小结
6 结论与展望
致 谢
参考文献
附 录
(如您需要查看本篇毕业设计全文,请您联系客服索取)