欢迎来到三一文库! | 帮助中心 三一文库31doc.com 一个上传文档投稿赚钱的网站
三一文库
全部分类
  • 研究报告>
  • 工作总结>
  • 合同范本>
  • 心得体会>
  • 工作报告>
  • 党团相关>
  • 幼儿/小学教育>
  • 高等教育>
  • 经济/贸易/财会>
  • 建筑/环境>
  • 金融/证券>
  • 医学/心理学>
  • ImageVerifierCode 换一换
    首页 三一文库 > 资源分类 > DOC文档下载
     

    毕业论文-软件漏洞分析与利用的研究.doc

    • 资源ID:3941422       资源大小:2.85MB        全文页数:68页
    • 资源格式: DOC        下载积分:8
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录   微博登录  
    二维码
    微信扫一扫登录
    下载资源需要8
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    毕业论文-软件漏洞分析与利用的研究.doc

    软件漏洞分析与利用的研究摘 要现如今,网络市场上的软件琳琅满目,程序员用自己的程序开发出自己的软件,在软件市场上开拓出自己的一片天空,开发了满足不同用户、不同需求的各种软件,实现了各种不同的功能,方便了人们的生活,解决了生活中遇到的难题,让软件的自动化代替人工的繁琐,不仅省时,而且省力,为人类的生产、生活的发展奠定了坚实的基础。软件的设计是程序员的心血,但是人类的思维是有限的,时代的发展是无限的,新事物的发展更是无限的,软件就会暴露出不同的漏洞。黑客们每天精心地进行漏洞的挖掘与分析,再对漏洞进行处理以及漏洞利用,就能够远程的攻击目标主机,甚至于拿到目标主机的管理员权限,随意篡改目标主机的数据,造成目标主机的数据丢失或操作的错误。从而给目标主机的操作人员造成巨大的数据丢失以及经济损失。本设计采用Metasploit软件结合Ruby语言进行主要的攻击工具开发,使用IDA pro advanced进行软件漏洞反编译,同时运用OllDbg进行动态调试分析。论文主要分为两大部分:一个是软件的漏洞分析部分,另一个是软件漏洞利用部分。漏洞分析部分主要实现:对缓冲区溢出的栈溢出原理进行分析,针对通用的软件漏洞,进行通用合理化的漏洞分析;软件漏洞利用部分主要利用两个攻击实例,第一个是针对ms12_020漏洞利用,成功入侵主机,对主机进行破坏性的蓝屏攻击。第二个是针对ms08_067漏洞利用,在自由网络中,成功攻击带有此漏洞的目标主机,查看主机的IP,查看主机的文件目录,修改文件名称,在目标主机上添加用户,并进一步提升至管理员权限,开启后门服务,登陆远程目标主机桌面等。真正成功实现了漏洞的利用过程,模拟黑客攻击的全过程。关键词:漏洞分析 漏洞利用 提升权限 文件读取 远程登陆桌面The Research of both Software Vulnerability Analysis and ExploitsABSTRACT Nowadays, there are all sorts of softwares on the network market.Programmers use its own procedures to develop his own software,to develop their own piece of the sky in the software market,to meet the different users, different needs of various software development, to achieve a variety of different functions, convenience to people's life,to solve the problems encountered during life, make automated software to replace manual tape, not only save time, but also saving strength, laid a solid foundation for the development of both the human's production and the human's life.The software design is the programmer effort.But the human mind is limited, the development of the times is infinite, the development of new things are infinite,The software will expose different vulnerability.Carefully mining and analyzing the loopholes by the hackers , loopholes can be processed and exploited, hackers can attack the target host without administrator permissions, even get the administration of the target host,tamper the target host data, resulting in the target host data loss or error.This may result in huge data loss and economic loss to the target host operator.This procedure using Metasploit software combined with Ruby language to development the attack module , use the IDA Pro advanced software to decompile software vulnerabilities, while use of OllDbg software to dynamic debugging analysis. The design is divided into two parts: one is a part of analysis software vulnerabilities, the other is the part exploit the software vulnerabilities.Part of the vulnerability analysis: stack overflow the buffer overflow is analyzed, based on general analysis software vulnerabilities, general rational loopholes; software vulnerability exploits mainly use two attack instances, the first is for the ms12_020 exploit, successful invasion of host, destructive attacks on the host screen. The second is for the ms08_067 exploit: in the free network, a successful attack with the vulnerability of the target host, the host IP, view the host file directory, change the file name, add a user in the target host, and further increase to administrator privileges, open the back door service, landing on the target host, remote desktop. The successful implementation of the process of real vulnerability, whole process simulation of hacker attack.Key Words: Vulnerability Analysis Exploit Elevated PermissionsFile Read Remote Desktop目 录第一章 绪论11.1 软件漏洞的概述11.2 软件漏洞的挖掘技术11.3 软件漏洞的分析原理21.4 漏洞的利用方法21.5 本课题研究的目的与意义21.6 本文的组织和结构3第二章 渗透测试与安全漏洞42.1 渗透测试概述42.1.1 渗透测试的起源42.1.2 渗透测试的概念与分类42.1.3 渗透测试的方法体系标准52.1.4 PTES渗透测试过程环节62.2 安全漏洞概述72.2.1 安全漏洞生命周期72.2.2 安全漏洞披露方式82.2.3 安全漏洞公共资源库82.3 本章小结9第三章 软件漏洞栈溢出原理分析103.1 二进制文件概述103.1.1 PE文件格式103.1.2 虚拟内存113.1.3 PE文件与虚拟内存之间的映射123.2 系统栈的工作原理143.2.1 进程的内存143.2.2 栈和系统栈153.2.3 函数的调用过程163.2.4 寄存器与函数栈帧193.2.5 函数调用约定与相关指令203.2.6 利用OD查看PE文件装载进入内存的效果233.2.6 invoke 指令分解243.3 shellcode的开发243.4 缓冲区溢出实例解析303.5 本章小结32第四章 利用Metasploit软件和Ruby语言实现漏洞利用334.1 Metasploit软件介绍334.1.1 Metasploit体系框架334.1.2 Metasploit体系内容344.2 Ruby语言介绍354.2.1 Ruby语言发展史354.2.2 Ruby语言的特点354.3 Metasploit与Ruby攻击语言结合进行漏洞利用354.4 本章小结36第五章 ms12_020漏洞利用实例375.1 漏洞利用环境的软硬件介绍375.2 ms12_020漏洞分析实例375.2.1 ms12_020 漏洞概述375.2.2 ms12_020 漏洞源代码结构解析385.3 ms12_020漏洞实例过程405.4 本章小结43第六章 ms08_067漏洞利用实例446.1 漏洞利用环境的软硬件介绍446.2 ms08_067漏洞分析实例446.2.1 ms08_067漏洞概述446.2.2 ms08_067漏洞源代码结构解析456.3 ms08_067漏洞实例过程486.4 本章小结56第七章 总结与展望577.1 本文总结577.2 不足与展望58参考文献59致 谢60天津理工大学2014届本科毕业论文第一章 绪论1.1 软件漏洞的概述当前时代,软件开发工业的迅猛发展,软件的生产规模的不断扩大,其内部编辑的逻辑结构也将越来越具体化。虽然这样,不论从理论的角度上看,还是从功能的角度上看,人类逻辑思维的缺陷都会随着新事物的产生而暴露出来,从而,没有人能够设计出完美无缺的软件。因此,软件的漏洞就暴露出来了。在市面上各种的软件的逻辑缺陷中,有一部分只能获取很小权限的功能,而有一部分能够引起非常严重的后果。例如,网站页面后台设置中,存在用户输入数据限制方面的缺陷,那么可能会出现XSS攻击和SOL注入攻击,服务器在解析数据包的时候,当解析出非同一般的数据格式,而处理不当时,就会被黑客远程控制,读取隐私数据1。一般的,我们将软件漏洞分成大概的两个类别:1. 功能上的逻辑缺陷漏洞:破坏软件常规的执行操作,例如,执行过程的跳转、图像查看的错误等2。2. 安全上的逻辑缺陷漏洞:正常状态下不会影响软件的正常功能,但是被黑客攻击之后,将会造成溢出之后的恶意代码的执行。普遍的软件漏洞一句话木马入侵网站漏洞、缓冲区溢出漏洞、SQL注入漏洞、网站中的跨站脚本漏洞、和暴库漏洞等1。1.2 软件漏洞的挖掘技术安全问题的漏洞不会对软件的正常执行操作有异常的侵入,因此,测试工程师的在进行功能性测试时,普通的测试,是不容易被发现的,站在正在进行正常办公的使用者的角度上看,也很难会发现,因此也不会体验到被入侵的感觉。对于很多高危漏洞,漏洞的价值很高,例如,数据库数据泄露、计算机被非法控制等,所以对于那些技术超高,有充足精力和时间的黑客们,就在不停地寻找软件中的未知漏洞,他们精通二进制汇编语言和操作系统底层调用的原理,他们往往能够根据出人意料的思考方式,捕捉到程序员思维的缺陷3。不是整体做攻击测试的人都是“黑客”。大规模软件开发公司也会特别招一些专门测试安全的人来测试攻击自己产品软件中的漏洞问题,即攻击测试,专门做这些测试工作的团队人员被称作“老虎队”。从测试技术的问题上看,漏洞挖掘被当做是特殊的高级的测试技术。在学术领域,更加通用的方式是静态分析法,来侦查源代码中容易出现的功能性漏洞;而在工程领域,不管是测试者还是破坏者,通常使用的手段是Fuzz测试技术,本质上,是一种特殊的“灰”盒测试1。1.3 软件漏洞的分析原理在fuzz功能性测试的过程中,侦查出软件中一种十分特殊的破坏操作时,可以透过厂商发出实用的漏洞基本的过程描述,黑客们利用一定的漏洞分析能力,来对漏洞进行逆向分析,通常情况,需要对程序进行逆向分析行成二进制级别的程序。在漏洞分析的过程中,需要尽力追踪到POC部分的代码,即可实现达到漏洞爆发的先决条件。这时,可以利用工具来详细的观察漏洞分析过程,或者借助特殊工具更快捷地查找到漏洞的爆发之处的出发点1。当POC没有被发现的时候,必须依靠深入地理解与研究厂商对漏洞的“简单的叙述”。使用“补丁比较器”是一个相对有用的方法。开始时,需要进行可执行文件在特定的被修改之前和之后的位置数值比较,然后使用特殊的破解的“比较工具”重点进行软件的逆向分析的过程。因此,软件的分析原理问题需要很高能力的调试功能技术和逆向分析技术,还有不同的环境下所需要使用的漏洞利用的方式与方法,过程中更依赖的是调试的作用,不断积累经验,并没有统一的测试方法。1.4 漏洞的利用方法缓冲区溢出漏洞的利用技术始源于1980年左右。而这种技术普遍通用的时期,是在Smashing The Stack For Fun And Profit的公布发表之后1。漏洞利用是针对漏洞分析进行的下一步操作,比较隐蔽的漏洞利用方法是内核的漏洞利用,其中也有两种不同的方法:1. 篡改内核内存数据:这种方法并不推荐,因为很多重要的内核内存数据都是不可直接被改写的,如果内存所在页属性是只读文件,CR0寄存器的WP位设置为1,是不能直接写入内存的寄存器中,所以如果需要改变内存中的值,需要采用第二种方法,在Ring 0 Shellcode中,首先将CR0 寄存器的WP位置为0,即禁用内存保护,篡改完后,再恢复WP位即可1。2. 执行Ring0 Shellcode:其中执行者主体是Ring0程序,不能是Ring3程序,其权限不够资格,我们知道内核中,Ring0包含许多API函数,其地址大多保存在一些表中,并且这些表同样由内核导出1。想要达到的效果是修改这些表中,将Shellcode 存放地址改为内核API函数地址,接下来,继续调用本进程,不仅如此,一定要选择那些相对较“不常用”的函数作为内核API函数,最好是那些不常被访问的函数。别的进程无法访问到我们的Shellcode ,因为它保存在自己进程的Ring3内存地址中,一旦别的进程也需要调用这个API函数时,最后致使内存访问错误甚至内核崩溃,对于系统,是相当危险的1。1.5 本课题研究的目的与意义目前软件的安全性是与任何一个操作者的敏感数据、信息的安全息息相关的。网络中的各种漏洞被黑客利用后危害是相当大的,甚至于以一台主机去感染成千上万台主机的方式进行漏洞利用。所以软件漏洞的分析与利用是相当有必要的。研究本课题,主要是针对目前能够执行远程控制的漏洞进行深入的分析与理解,将漏洞利用的过程和原理进行重现,并详细解析攻击模块的过程原理以及实例过程。通过案例实况重现,对软件漏洞中缓冲区溢出和动态调试基本方法进行深一步的理解。漏洞的利用主要能够利用工具实现在目标主机上添加用户,并进一步提升至管理员权限,能够对目标主机的文件进行查看,能够修改指定目录下的文件名称,开启后门服务,登陆远程目标主机桌面等。1.6 本文的组织和结构第一章:总体对软件漏洞进行简单的介绍,对软件漏洞挖掘技术、软件漏洞分析技术、以及软件漏洞利用技术进行初步简单的介绍,并针对研究的课题出发点和目的进行总结和归纳。第二章:对渗透测试与安全漏洞做了详细的介绍,从渗透测试的起源、概念、分类、执行标准和具体流程进行了详细的阐述,对安全漏洞的周期,披露方式和公共资源库进行了简要的阐述。第三章:对软件漏洞中栈溢出原理进行详细分析,其中包括漏洞分析中二进制文件的介绍,PE文件的组成结构,PE文件和虚拟内存之间的对应关系,以及系统栈的工作原理,内存的调用方式,栈与系统栈的关系,函数调用的具体过程,寄存器与函数栈帧的关系,函数调用约定与相关指令等,最后一节用实际的缓冲区溢出的小的实例进行栈溢出原理的漏洞演示,能够更深刻的领会前述原理的过程。第四章:对Metasploit和Ruby语言进行简要概述,并对其相互结合利用,成功攻击目标主机的原理进行了分析了解。第五章:对ms12_020漏洞进行了详细的漏洞分析以及漏洞利用过程的展示。第六章:对ms08_067漏洞进行了详细的漏洞分析以及漏洞利用过程的展示。第七章:对全文的总结概括,对实际论文中总结的一些原理性的知识点的篇章总结。除此之外,又提出一些缺点和不足。第二章 渗透测试与安全漏洞2.1 渗透测试概述2.1.1 渗透测试的起源在美国的军事演习中,假想敌与美国军队分别作为“红队”和“蓝队”,首先融入了美国国家安全局与美国军队,进行信息安全基础设施与信息网络的实际攻防测试,由一群接受国家安全培训的“红队”与接受测试防御的“蓝队”进行互相攻击,以实际对战的手段来检验安全响应计划与安全防护体系的有效性,而后,国家专门培养一批职业化的“红队”,来维护国家信息的安全2。2.1.2 渗透测试的概念与分类 1.渗透测试概念:渗透测试是模拟恶意攻击者实战的渗透技术,攻击目标主机系统,获得访问控制权限,以测试和评价的方法,对潜在的安全风险进行评估的过程4。 2.渗透测试分类:渗透测试的分类,如表2.1所示:表2.1 渗透测试的分类黑盒测试定义:完全仿真一个毫无攻击目标网络结构测试的攻击者而做的测试5。过程:渗透测试团队将从一个远程网络位置来评估目标网络基础设施,并没 有任何目标网络内部的拓扑结构,他们完全模拟真实网络环境的外部攻击者,采用流行的攻击技术及工具,有组织,有步骤的进行渗透与入侵,揭示目标网络中一些已知或未知的安全漏洞,并对这些漏洞能否利用并获得控制权限或造成而无资产损失进行评估2。特点:黑盒测试是比较费力的,同时需要渗透测试者具备较好的技术能力。从安全领域的攻击者的角度去看,黑盒测试普遍更瘦追捧,是由于它能更加真实的再现攻击实战的全部过程与步骤4。白盒测试定义:攻击者完整的知晓被攻击一方的全部网络拓扑结构的测试6。过程:进行白盒测试的团队可以了解关于目标环境的所有内部与底层知识,以最小的代价发现和验证系统中最严重的安全漏洞。特点:比“黑盒”消除更多的被入侵的主机的安全漏洞,而后,能够更多的创造出更有力的价值。再加上,测试过程中不需要定位主机,也不需要侦查网络结构,但却能够一次性的定位攻击测试的方式,从而能够避免浪费时间与精力的资源,直接查出安全漏洞,从而防止黑客的利用与攻击。灰盒测试概念:以上两种测试的组合,可以对目标系统进行更深入和安全的审查2。过程:即白盒与黑盒的组合。特点:将两种测试方式的优势相结合,“灰盒测试”能够所掌握的有限的情报和资料,决定实际攻击与测试的实践方式,从而确定安全评估的最佳方式。同时,测试者同时必须要从外网实际逐渐渗透,成功进入目标主机,不过熟悉目标系统主机的网络底层拓扑结构,能够更好地提出攻击途径和方法2。2.1.3 渗透测试的方法体系标准现在,世界领域相对公开,开源的“渗透测试方法”的体系准则,如表2.2所示:表2.2 开源渗透测试方法体系标安全测试方法学开源手册(OSSTTM)由“安全与公开方法学”研究所制定的标准,提供人类心理学、物理安全、无线通信媒介、电讯通信和数据网络这些测试广泛的应用实例,并给出渗透测试的评估指标的标准2。NIST SP 80042网络安全测试指南美国国家标准与技术研究院(NIST)在SP 80042 网络安全测试指南中,讨论了测试流程与方法,虽然不及OSSTMM全面,但是更可能被管理部门所接受2。OWESP 十大Web应用安全威胁项目针对目前最普遍的Web应用层,为安全测试人员和开发者提供了如何辨识与避免这些安全威胁的指南,OWESP十大Web应用安全威胁项目(OWESP Top Ten)只关注最高风险的Web领域,而不是一个普遍性的渗透测试方法指南2。Web安全威胁分类标准与OWESP Top Ten类似,Web应用安全分类标准(WASCTC)全面地给出了目前Web应用领域中的漏洞、攻击与防范措施视图2。PTES渗透测试执行标准2010年最先发起的渗透测试过程规范标准项目,核心理念是通过建立起进行渗透测试的基本准则准线,来定义一次真正的渗透测试过程,并得到安全界的广泛认同2。2.1.4 PTES渗透测试过程环节很多知名的安全领域的企业,一起组织发起了PTES渗透测试的执行方式的准则,目的是制定渗透测试的普遍描述的基本准则规范。具体阶段,如表2.3所示:表2.3 PTES渗透测试过程环节前期交互阶段过程:渗透测试团队人员通过与客户的相互沟通与合作,找准渗透测试的测试范围,条件领域,限制约束和约定条约2。内容:主要规定的工作内容是:沟通用户需求,确定渗透方案、划定攻击范围边界、确定攻击目标等工作2。情报搜集阶段过程:划定锁定的空间之后,将经历细节收录时期,团队人员能够运用不同的信息与测试方式,试图获得更多关于目标组织中的主机信息、网络信息以及使用的情况。内容:攻击者使用情报搜集的方法,包括:公开来源信息查询、Google Hacking、社会工程学、网络踩点、扫描探测、被动监听、服务查点2。威胁建模阶段过程:在搜集到充分的情报信息之后,渗透测试团队针对信息,进行威胁建模与攻击规划、这是非常重要的部分,却又是最容易被忽视的环节2。内容:经由渗透测试者专注的情报搜集的模拟攻击方式的过程,能够将可行的攻击方式从海量的数据中提取出来,最终定下攻击方式。漏洞分析阶段过程:经过最终定下的攻击方式,应用于下一步要考虑怎样获取目标主机的访问控制权限。内容:攻击者需要收集可发生渗透测试的攻击代码,主要是将漏洞经过检测后的扫描结果以及可以利用的资料,通过分析可以发生漏洞的部分代码,查到可以进行攻击的入手点,并在测试中得到证明。渗透攻击阶段过程:攻击实践过程中最重要的步骤。渗透测试者需要利用他们所找出的目标主机的漏洞,来真正入侵到其中,而获得访问控制权限。内容:渗透攻击可以利用网络平台获得渗透代码,但要根据特定的主机的不同特点,去实施下一步的攻击,这样就可以实现成功的渗透攻击了2。后渗透攻击阶段过程:最可以展示出攻击者们之间的众人合作精神和技能水平的重要步骤,攻击者们需要根据目标组织的资产保护方式、安全防护设置、生产方式的组织的特征,自主设计出攻击目标,识别关键基础设施,努力找寻目标中最有作用和需要进行防护的信息和资产,以至于实现对目标系统的影响的实施过程2。注意:攻击的方式和手段能够选择的余地很大,最终能够成功渗透执行,重点是是由于攻击者的组织中他们自身的知识广泛程度和技术能力的高低,以及自身能否坚持的特性2。报告阶段过程:执行过程的结果是向用户上交过程报告,获取用户的认同并成功拿到剩余款项。这份报告凝聚了之前所有阶段中渗透测试团队所获取的关键情报信息、探测是挖掘出的系统安全漏洞、成功渗透攻击的过程,以及造成业务影响后果的攻击途径,同时还要站在防御者的角度上,帮助他们分析安全防御体系的薄弱环节、存在的问题,以及修补与升级技术方案2。2.2 安全漏洞概述2.2.1 安全漏洞生命周期在渗透测试的执行过程中,重点步骤是通过扫描等方式,侦查出测试主机中的实际的漏洞问题,再进行攻击测试,从而攻破目标主机的防护,渗透到目标主机的过程。其中安全漏洞是必须要存在的,也是所有渗透测试的根据10。通过渗透安全漏洞从而破坏目标主机的效果的过程,破坏的程序叫做渗透程序,安全漏洞的生命周期10,如图2.1所示:图2.1 安全漏洞生命周期2.2.2 安全漏洞披露方式安全公开披露的分类,如表2.4所示:表 2.4 PTES渗透测试过程环节完全公开披露漏洞被发现后,测试者向使用者公布全部的漏洞出现的实际问题,以及触发条件,软件开发厂商很难做到在黑客对漏洞进行开发利用之前,发布安全补丁,像这样不负责任的披露,以至于他们的软件使用着,由于漏洞披露而被攻击与利用9。负责任的公开披露在发现漏洞以后,先对软件厂商沟通与交流,给他们一段时间,去进行漏洞补丁测试与开发,之后,软件厂商发布“安全补丁”,如果软件厂商拖延补丁发布的日期,那么就完全公开漏洞分析与利用的技术细节2。进入地下经济链安全研究出的漏洞有着巨大大的经济价值,那么,有些黑客不认同去免费地为软件开发厂商查找漏洞,这样,软件漏洞交易市场应运而生4。小范围利用直至被动披露软件的披露方式是多种的,渗透测试者发现的“安全漏洞”也会有很多并没有完全通知软件开发厂商,而是被他们在“小范围”的群体里去利用,不过,影响范围会不断扩大,最后被“恶意代码”所利用,危害大多数的使用者4。2.2.3 安全漏洞公共资源库国内外的安全漏洞信息库主要包括内容,如表2.5所示:表 2.5 国内外的安全漏洞信息库 CNNVD中国国家漏洞库。CNVD中国国家信息安全漏洞共享平台,由国家计算机网络应急技术处理协调中心维护2。乌云安全漏洞报告平台民间组织。SCAP中文社区由诸葛建伟等人发起的民间组织。CVE“通用漏洞披露”,由美国国土安全部资助的MITRE公司进行维护工作,已成为安全漏洞命名索引业界的实施标准,“CVE漏洞库”为每个确认的公开披露的漏洞建立CVE编号,以及一段简单的漏洞信息描述2。NVD“国家漏洞数据库”,是美国政府官方根据NIST的SCAP标准协议所描述的安全漏洞信息库,具体由美国国土安全部下属的NCSD国家安全部门US-CERT组进行维护2。2.3 本章小结本章主要从渗透测试和安全漏洞两个方面进行描述,第一方面是渗透测试,渗透测试中主要简述了起源、概念与分类、体系与标准以及PTES渗透测试标准的介绍,大体上对渗透测试进行了简要的介绍,为后面使用Metasploit渗透测试工具进行漏洞利用做了前序的基础讲解。第二方面,主要是安全漏洞。从安全漏洞的生命周期、披漏方式、以及公共资源库三个方面进行了简要的概述,将现在目前主流的一些安全漏洞的组织进行总结,以便于读者能够查阅相关信息与资料。第三章 软件漏洞栈溢出原理分析3.1 二进制文件概述3.1.1 PE文件格式PE文件是Win32平台下可执行文件遵守的数据格式,一般的可执行文件(“*.exe”文件和“*.dll”文件)都是典型的PE文件8。一个可执行的文件不仅包含了二进制机器代码,还会自带许多其他信息,如字体、菜单、字符串、位图、图标等1。PE文件格式规定了这些信息在可执行文件中是如何组织,在程序被执行时,操作系统会按照PE文件格式的约定去相应的地方准确的定位各种类型的资源,并分别装入内存的不同区域,如果没有这种通用的文件格式进行约定内存的装入会变得异常困难1。PE文件的重要节组成部分,如表3.1所示:表3.1 PE文件节的重要组成部分.text由编译器产生,存放着二进制的机器代码,也是主要反汇编和调试对象1。.data初始化数据块。.idata可执行文件所使用的动态链接库,与外来函数与文件信息1。.rsrc存放程序的资源。程序员对PE文件的理解,即PE文件是由很多的不同的数据部分组成的,也就是一些按照不同的组织进行分配的集合,PE文件结构,如图3.1所示: 图3.1 32位的PE结构划分 程序员对PE文件的理解,即PE文件是由很多的不同的数据部分组成的,也就是一些按照不同的组织进行分配的集合,程序员眼中的PE结构,如图3.2所示:图3.2 程序员眼中的PE结构3.1.2 虚拟内存系统的内存存放方式由两个方面组成:虚拟内存以及物理内存。其中,物理内存更加复杂,系统需要进入到Windows内核级别要达到的ring0才能查看。一般,在普通的用户使用软件的模式环境下,我们用工具看到的地址其实都是虚拟内存地址1。如果我们实际内存条只有512MB,而想要让系统的全部进程都相信每一个进程占有独立4GB的内存空间。其过程如图3.3所示:图3.3 windows虚拟内存与物理内存示意图3.1.3 PE文件与虚拟内存之间的映射虚拟内存地址和PE文件地址之间的映射关系中要用到的重要概念。如表3.2所示:表3.2 映射关系的重要概念文件偏移地址(File Offset)数据在PE文件的地址,当数据存在文件磁盘上时,其相对于文件开头偏移部分的位置1。装载基址(Image Base)PE文件装入内存中的基地址,不单独说明时,0x00400000是EXE文件的初始地址,00x10000000是DLL文件的初始地址1。虚拟内存地址(Virtual Address)PE 文件的指令被装入内存后的地址1。相对虚拟地址(Relative VirtualAddress)内存地址相对于映射基址的偏移量1。 相对虚拟地址、映射基址、相对虚拟内存地址这三者之间有这样的关系:在普遍状态下,0x00400000位置是其装载之后的0字节的位置地址,即装载基址1。如图3.4所示:图3.4 PE文件与虚拟内存的映射关系相对于文件初始地址0字节的偏移是文件偏移,而相对于装载基址0x00400000处的偏移则是RVA(相对虚拟地址),操作系统在进行装载时,各种数据结构需要保持与PE结构“大致相同”,所以,RVA和文件偏移地址很大程度上有相似性1。“大致的相同”是由于有一些细微的区别,由于内存数据的存放单位与文件数据的存放单位的不一致的差别1。1. 标准存放方式的基本单位是0x200,基础是PE文件中的磁盘数据,不足0x200数据时,由0x00继续填充,其总数量超过0x200时,会占用接下来的0x200块,所以,数据节全都是0x200的倍数1。2. 内存中装入代码,存放方式是以内存数据作为标准来存放的,组织基本单位是0x1000。同样,剩余的部分会被填充,一个节中存不下的部分,就会被分配给出接下来的位置1。由此,虚拟内存对应至文件偏移之间两者的转换关系的公式: 文件偏移地址 = 虚拟内存地址(VA)装载地址(Image Base)节偏移1 = RVA节偏移RVA和文件偏移地址两者的映射关系,如表3.3所示:表3.3 文件偏移位置和RVA之间的映射关系节(section)文件偏移量相对虚拟偏移量RVA.text0x04000x00001000.rdata0x62000x00007000.data0x74000x00000900.rsrc0x78000x0002D000利用表中的数据,如果在调试时遇到虚拟内存中0x00404144处的一条指令,那么这条指令在文件中的偏移量,利用上述公式带入: 文件偏离量 = 0x004041440x0400000(0x10000x400)=0x35443.2 系统栈的工作原理3.2.1 进程的内存1.进程内存的四个部分进程内存的四个功能部分,如表3.4所示:表3.4 进程内存的功能组成部分代码区CPU取指并执行的位置,被装入的“二进制代码”区1。数据区用于存储全局变量等。堆区动态的回收和分配的部分,系统自由地分配出适当的内存空间,避免浪费,在程序执行完成之后,回收空间1。栈区动态地存放不同函数相互之间调用关系。2.进程的内存调用方式十六进制的双字节的代码段会在PE文件被装载时,被填充进PE文件的(.text)代码区,CPU会执行这一部分的指令并调入数据,在此之后,打包送进ALU中进行重新的运算;若取出的指令要求是动态开辟的,那么系统会开辟一部分适当的堆区空间去装载新的代码;当函数被调用的过程中,内存的栈区会动态地保存函数的调用关系,方便CPU能够在执行完被调用的代码后,能够正常的进行下一部分的函数调用1。这个过程,如图3.5所示: 图3.5 进程的内存使用示意图3.2.2 栈和系统栈栈是一种先进后出的数据表,是一种特殊的数据存储方式,其中常见的操作:压栈(PUSH)和弹栈(POP);用于标示栈的属性也有两种:栈顶(TOP)、栈底(BASE)1。详细解释,如表3.5所示:表3.5 栈的基本操作与标示PUSH为栈增加一个数据。POP从栈中取出一个元素,必须要从最上面取出。TOP动态变化地标示栈顶位置,PUSH增1,POP减1。BASE不会改变,一直要标示栈底位置,防止栈空之后,继续弹栈的操作13。3.2.3 函数的调用过程 1.函数对应的机器指令在代码区中分布过程,如图3.6所示: 图3.6 函数代码在代码区的分布示意图2.CPU在执行取指调用的过程处理器在调用fun_A函数时,会main函数对应的机器指令的区域,跳转到fun_A代码中对应代码部分,从那段代码中取指执行;当fun_A代码取指之后,执行call fun_B指令,并跳转至fun_B代码,返回时,先跳转到fun_A地址,逐步跳转到main函数的后续代码部分,接着取指1。CPU的取指轨迹,如图3.7所示:图3.7 CPU的取指轨迹示意图 3.系统栈在执行函数调用时的过程在函数调用中,系统栈的操作过程:第一步:在main函数调用fun_A的时候,一开始在自身的栈中,push返回地址,然后fun_A函数再创建新栈并push系统栈。第二步:在fun_A调

    注意事项

    本文(毕业论文-软件漏洞分析与利用的研究.doc)为本站会员(西安人)主动上传,三一文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    经营许可证编号:宁ICP备18001539号-1

    三一文库
    收起
    展开