二进制程序的动态符号化污点分析.docx_第1页
二进制程序的动态符号化污点分析.docx_第2页
二进制程序的动态符号化污点分析.docx_第3页
二进制程序的动态符号化污点分析.docx_第4页
二进制程序的动态符号化污点分析.docx_第5页
已阅读5页,还剩74页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

中圈绅誊敢求 犬誊硕士学位论又二进制程序的 动态符号化污点分析作者姓名:朱正欣 学科专业:计算机应用技术导师姓名:曾凡平副教授 完成时间:二。一五年四月二十日万方数据University of Science and Technology of ChinaA dissertation for master,S degreeDynam i c Sym bol i c Tai nt Analysis Of Binary ProgramsAuthorS Name:Zhengxin Zhuspeciality:Computer Application Technology Supervisor:AssocProfFanping Zeng Finished time:Apirl 20th,20 1 5万方数据中国科学技术大学学位论文原创性声明本人声明所呈交的学位论文,是本人在导师指导下进行研究工作所取得的 成果。除已特别加以标注和致谢的地方外,论文中不包含任何他人已经发表或 撰写过的研究成果。与我一同工作的同志对本研究所做的贡献均己在论文中作 了明确的说明。作者签名:垒!重丛签字日期:型l毡堕中国科学技术大学学位论文授权使用声明作为申请学位的条件之一,学位论文著作权拥有者授权中国科学技术大学 拥有学位论文的部分使用权,即:学校有权按有关规定向国家有关部门或机构 送交论文的复印件和电子版,允许论文被查阅和借阅,可以将学位论文编入中 国学位论文全文数据库等有关数据库进行检索,可以采用影印、缩印或扫描 等复制手段保存、汇编学位论文。本人提交的电子文档的内容和纸质论文的内 容相一致。保密的学位论文在解密后也遵守此规定。面公开口保密(年)作者签名:鑫芝鱼丝导师签名签字日期:翌!=!堑签字目期:边!2童一万方数据摘要摘要污点分析作为一种有效的二进制程序漏洞挖掘技术,它首先将来自于可疑 渠道的数据标记为“被污染”:然后逐个分析程序运行时的每条指令,并将那些 被可疑数据影响的数据标记为“被污染”;最后通过分析这些“被污染”数据是 否被非法使用,来检测程序中的漏洞。目前该技术仍存在着以下一些问题:1) 漏报率较高;2)测试效率较低;3)不能通过充分利用程序执行时的信息,来 指导性的生成可以触发漏洞的测试用例。研究如何解决这些问题将具有重要的 意义。本文的主要贡献有:(1)提出了动态符号化污点分析。首先,在程序开始运行时标记污点源, 在程序动态执行过程中,再根据基于指令的污点传播来获得相关污点数据的信 息,同时制定符号化的风险分析规则,通过检测污点信息是否违反风险规则来 发现存在的风险。(2)实现了基于动态符号化污点分析的原型系统pintoolDSTA。该系统建 立在二进制插装平台PIN上,实现了二进制程序漏洞检测的自动化,并且可以 有效地降低传统污点分析的漏报率,并且提高其效率。(3)通过实验验证本系统的准确性及有效性。实验表明,一方面, pint001DSTA系统获得了正确的污点信息、跟踪函数信息以及风险报告。另一 方面,pint001DSTA系统不仅可以正确处理危险函数并报告程序中的风险(污点分析工具libdft则不行),而且能够发现实际存在却未被测试用例触发的漏洞。动态符号化污点分析是对污点分析的一种符号化改进,通过使用符号化的 思想将污点信息及风险规则符号化,来分析污点数据在程序运行过程中是否违 反某些风险规则,进而检测出目标程序在动态执行过程中的不安全行为。实验 结果表明该方法比污点分析技术更有效。关键词:漏洞挖掘污点分析符号执行污点传播插装万方数据摘 要II万方数据ABSTRACTTaint analysis technique is a kind of effective binarycodeoriented vulnerability detection techniqueIt firstly marks data which come from suspicious channels as tminted”Then analyses each instruction while the target program IS running,and marks data which is influenced by tainted data as“tainted”At last,detects program vulnerabilities by analysing whether those“tainted”data is used illegalAt present, the technology still remain some problems:1)The false negative rate 1S very high2) The efficiency is very low3)Cant generate test cases which can trigger tne vulneral)ili劬by using program execution information。Study on how to solve these problems will be of important significanceThe main contents of this paper include:1、Proposes the dynamic symbolic taint analysis techniqueAt first,it marks taint source at the beginning of programS runningThen it collects taint informatlon, according to taint propagating based on instructs,and makes symbolic risk ruIe tofind some potential vulnerabilities by detecting whether the taint information breakssome risk rules2、Implements an exploit detection system named pintoolDSTA,based on dynamic symbolic taint analysis techniqueThe system is built on a bmary ins仃umentation platform named PIN,which can effectively reduce the false negatwerate of traditional taint analyse and improve its efficiency31 Verify the accuracy and validity of the system by some experiments Experimental results show that,on the one hand,pintoolDSTA achieves right taint inflonnation,tracking function information and risk reportOn the other hand, pint001DSTA not only Can handle risk functions and give risk report(Cant libdft), but also can find some vulnerabilities,which are not triggered by test caseDamic symbolic taint analysis is a kind of symbolic improvement on taint analvsis techniqueIn order to detect some unsafe behavior of target program,itanyses whether tainted data violate some risk rules when program ls m】删ng,bYusing s”nbolic idea to symbolize tainted information and risk ruleExperimental resuIts show that,this idea is more effective than taint analysis techniqueKeyWords:vulnerability detection,taint analysis, symbolic execution,taintpropagating,instrumentationIII万方数据AbstractIV万方数据目录目录第1章绪论 111研究背景与意义112相关工作研究现状213论文主要工作514论文组织结构515小结 6第2章研究基础 721漏洞利用技术研究7211漏洞概念及分类7212漏洞利用72121缓冲区溢出漏洞821。22格式化串漏洞 102123SQL注入攻击漏洞112124XSS攻击漏洞1 12125远程代码执行漏洞 1222漏洞挖掘技术研究 12221模糊测试 132211模糊测试的阶段 132212模糊测试的发展及现状14222插装技术l 52221二进制插装 162222二进制动态插装 1 722_3符号执行 1 82231符号执行的过程l 82232动态符号执行 19224污点分析 202241污点分析概述 202242污点分析原理2I2243存在的问题及解决办法2223小结23V万方数据目录第3章动态符号化污点分析研究253。l相关技术 25311缓冲|又:溢出漏洞检测 25312二进制动态插装平台PIN 2732动态符号化污点分析的原理 28321研究目的 28322基本概念与定义 29323基本原理 2933动态符号化污点分析的设计 3133I污点源标记的设计 3 1332基于指令控制的污点传播的设计32333函数跟踪的设计 34334信息收集的设计 35335风险分析的设计 3534小结 37第4章系统实现与结果分析3941Pin插件的编写方法一39411编写主函数 39412编写回调函数 4042系统模块的实现 42421污点源标记的实现 42422污点传播的实现 434221基于指令控制的污点传播的实现434222函数跟踪的实现 464223ebp信息收集的实现 47423风险分析的实现 4843实验结果与分析 49431信息提取分析 49432有效性测试 51433讨论5344小结54VI万方数据目录第5章总结与未来工作5551总结 55511本文的工作 55512本文的不足 5652未来的工作 56参考文献59附录1插图索引 63附录2表格索引 64致谢65在读期间发表的学术论文与取得的其他研究成果 67攻读学位期间参加的科研项目 68VII万方数据目录万方数据第1章绪论第1章绪论11研究背景与意义随着信息技术的发展,计算机软件在国防、医疗及经济等各个领域都发挥 着举足轻重的作用,如果信息安全受到了威胁,那么将会造成严重的损失。在 此情形下,软件安全作为计算机安全的关键因素,成为影响国计民生的关键问 题之一。软件安全是指目标软件在受到恶意攻击的情况下仍能够继续正确地运 行,即确保软件能够在授权范围内被合法使用的思想。一个威胁软件安全的重 要因素就是软件中存在漏洞。回顾去年互联网安全的现状,可以发现2014年是互联网安全多灾多难的一 年。首先是在去年4月被首次曝光的心脏流血漏洞,黑客可以通过它向全球三 分之二的网络服务器发动攻击。那些服务器使用了开源软件OpenSSL,心脏流 血漏洞就存在于该软件中。利用这个漏洞,黑客不仅可以破解加密的信息,而 且可以从内存中提取随机数据。换句话说,黑客可以利用这个漏洞直接窃取目 标用户的密码、私人密钥和其他敏感用户数据。即便在系统管理员安装好补丁 之后,用户仍然不能肯定他们的密码是否失窃了。因此,心脏流血漏洞促成了 历史上最大规模的修改密码行动。接着是美国计算机紧急响应小组在9月公布 的Shellshock漏洞,该漏洞是Unix的“进入子程序”功能中的一个漏洞,也是 存在时间最长的漏洞,它至少存在了25年的时间才被发现。任何安装了这个壳 工具的Linux或Mac服务器都有被攻击的危险。在这个漏洞被公布后,不到几 个小时就有上万台机器遭到恶意软件的DoS攻击。然而灾难并没有结束,美国 计算机紧急响应小组最开始发布的补丁很快被发现自身也有一个漏洞。安全研 究员罗伯特大卫格拉汉姆(Robert David Graham)称,这个漏洞比心脏流血漏 洞还要糟糕。然后是存在于30版本SSL中的POODLE漏洞,该漏洞是被谷 歌的研究员们发现的另一个加密漏洞,不同于心脏流血漏洞的是,这次漏洞位 于安全软件保护的另一端,即和那些服务器相连接的手机端和PC端。该漏洞 允许攻击者劫持用户的会话,窃取在用户电脑与加密在线服务之间传输的所有 数据。以上几个漏洞只是漏洞库中的冰山一角,却已经严重地威胁了计算机的安 全。可见,及时发现并修补软件漏洞,对保护互联网的个人信息安全及国家安 全都起着至关重要的作用。根据不同的研究对象,可将漏洞挖掘技术分为,基 于源代码和基于二进制代码这两类漏洞挖掘技术。一方面,因为大部分软件厂1万方数据第1章绪论商为了商业利益及知识产权的保护,并不会对外开放其产品的源代码。另一方 面,因为源代码在编译过程中,可能会由于编译器的不当操作,导致生成的二 进制代码中存在安全漏洞。因此,基于二进制代码的漏洞挖掘技术是当前信息 安全领域研究的热点。基于二进制代码的漏洞挖掘技术是通过直接在目标程序 动态运行时分析二进制程序的执行行为,来获得程序在编码上的错误以及在逻 辑设计上的缺陷,其中该类错误和缺陷能被不法攻击者利用,进而攻击甚至控 制程序的执行。为了降低漏洞检测的漏报率及误报率、提高测试用例生成的效率,本文提 出了动态符号化污点分析的思想,并且基于该思想实现了一个自动化的二进制 程序的漏洞检测工具pint001DSTA。12相关工作研究现状本文提出的方法主要是基于污点分析技术实现的,所以下面将介绍该技术在 国内外的研究现状。基于污点分析技术比较有名的工具有taintchecktl,LIFTt2,Dytant3,其中 taintcheck是最早提出来的,但是开销很大,耗费的时间大概是程序运行的37 倍,并且不提供控制流分析,只针对数据流跟踪分析:LIFT是为了减小开销而 提出来的,提出了三种优化方式使得运行时间缩短到36倍;而Dytan改进了 对控制流的跟踪分析,但是它的开销很大,是程序运行时间的50倍。之后,James Newsome等【4】提出了基于数据流的污点分析方法,用于检测缓冲区溢出的攻击。 该方法首先将来源于可疑渠道的数据标记为污点数据,再跟踪这些污点数据在 内存中的传播,最后检测污点数据是否被非法使用,从而达到自动检测漏洞的 目的。它不需要目标程序的源代码,也不需要进行重新编译。虽然该方法的误 报率和漏报率都较低,但是对系统性能的损耗较严重。第二年,Lap ChungLam 等5基于污点分析实现了一种编译器,可以由开发人员设定污点标记的方式以 及污点传播和检测规则,并且能够在程序执行过程中监测代码的执行。该方法 不支持基于控制流的污点传播。由于污点分析高漏报率以及低路径覆盖率的缺陷,近几年越来越多的安全 人员开始研究将污点分析与模糊测试和符号执行等技术相结合,并且提出了一系列二进制程序漏洞检测的方法。一方面在国外研究中,TaintScope6是一种结 合混合符号执行与细粒度动态污染跟踪的二进制程序漏洞挖掘的原型系统。该 系统采取了一个能够穿过目标程序检验机制的策略,进而能够检测出目标程序中潜在的漏洞。BitBlaze7是一个较流行的二进制程序分析平台,它主要结合了万方数据第1章绪论二进制程序的信息流分析、污点分析技术以及符号执行技术。它主要由三部分组成:Vine、TEMU以及Rudder。BitBlaze框架如下图1一l所示。图11 BitBlaze框架Vine是它的静态分析工具,主要包括控制流、数据流以及符号执行等。其结构如下图12所示:图12Vine结构TEMU是BitBlaze的动态分析组件,主要用于实现污点分析。其结构如下图13所示:图13 TEMU结构3万方数据第1章绪论Rudder利用Vine和TEMU提供的功能实现二进制程序的混合符号执行。其结构如下图14所示:图14 Rudder结构另一方面在国内的研究中,粱晓兵等8研究了在进行二进制程序的漏洞检 测中,根据分析结果指导测试用例的生成,以高效地触发并发现目标程序中的 潜在漏洞。同时基于污点分析技术和混合符号执行技术等,提出了新的智能模 糊测试方法和针对二进制程序的漏洞检测方法。俞许等9基于动态插装平台Pin设计实现了动态检测缓冲区溢出漏洞的原型系统bptrace。该技术通过分析敏感 指令,来进行二进制程序缓冲区溢出漏洞的检测,并且能够从程序中正常运行 的指令流中检测出缓冲区溢出漏洞。同时能够检测出无法完整检验输入数据长 度的一类漏洞,从而提高了缓冲区溢出漏洞检测的准确性。闫东晓等101针对 传统模糊测试中存在的变异位置选择盲目,无法绕过软件内部的检测,数据变 异策略相对简单,以及代码覆盖率较低等问题,提出了使用污点分析技术来查 找测试用例文件中最有可能使软件崩溃的字节位置,并且以此做为模糊测试变 异位置选择的依据,并在模糊测试框架Peach上设计和实现了完整的模糊测试 方法SmartFileFuzzer。王卓等11】借助符号执行的思想来解决动态污点技术无 法进行位分析以及指导测试用例生成的问题。根据污点分析技术的思想,提出并实现了分析工具DsVD,包括受控的污染标记、污点传播与净化。根据DsVD 中存在的位分析和路径覆盖率低的缺陷,提出了基于符号执行思想的完善方法, 并实现了一个结合符号执行技术和动态污点分析技术的工具DsVDSE。陆开奎 等121实现了一个二进制程序的漏洞检测系统DTASG,该系统是基于污点分析技术和二进制插装技术实现,并且在目标程序动态运行时跟踪其信息流的传播 过程,同时检测分析污点数据是否被非法使用,以发现潜在的安全漏洞。4万方数据第1章绪论13论文主要工作通过大量的调研,发现目前动态污点分析技术的主要缺陷,这些缺陷限制了其在漏洞挖据领域的发展及广泛应用。为此,本文提出了相应的解决方案。 本文的主要工作如下:(1)提出了动态符号化污点分析的方法,该方法将污点分析符号化,根据基于 指令的污点传播来获得相关污点数据的信息,同时制定符号化的风险分析 规则,通过检测污点信息是否违反风险规则来发现存在的风险。实验证明, 该方法可以有效地降低污点分析的漏报率和误报率,并且产生的JxL险报告 可以提高测试用例生成的效率。(2)解决了以下问题,如何在动态污点分析的基础上实现污点数据的符号化 标记,符号化传播以及符号化分析;针对程序中不同的数据类型,如何 研究数据之间的关系,进行不同的处理;如何跟踪收集污点变量的相关 信息,并对不同类型漏洞进行不同分析;如何在程序执行过程中跟踪并 记录程序堆栈信息。(3)基于动态符号化污点分析的方法,在二进制插装平台PIN上实现了一个自 动化漏洞检测工具。为了实现这个系统,需要全面深入研究漏洞检测的各 个技术问题,以及各种细节问题。14论文组织结构本文主要包括五章的内容,下面介绍其组织结构: 第1章:绪论。本章主要介绍了本文的研究背景与意义、污点分析技术的研究现状以及论文的主要工作。 第2章:研究基础。本章主要介绍了漏洞利用技术,包括漏洞的基本概念以及常见的五个漏洞攻击,以及近几年较流行的四种漏洞挖掘技术,包括模糊测试、插装、符号执行和污点分析技术。 第3章:动态符号化污点分析研究。详细介绍本文提出的动态符号化污点分析思想的基本原理以及主要模块设计。它是通过将污点分析技术符号化,来分析 污点数据在传播过程中是否违反某些风险规则,进而检测出程序在动态执行过程 中的不安全行为。首先,动态地将来自污点源的数据标识为污点源数据;然后, 通过分析程序执行时的指令和操作数,按照污点传播策略跟踪和记录污点数据的 传播路径,并标记该污点数据的相关信息;最后,定制不同类型漏洞的风险检测万方数据第1章绪论规则,当污点数据传播到敏感操作点时,根据前一阶段获得的相关信息进行分析, 检测是否会违反风险规则。第4章:系统设计与实现。本章介绍了基于动态符号化污点分析思想的系统 设计与实现,首先介绍了插装平台PIN上pintool插装工具的编写。然后重点介 绍该系统的模块实现,包括污点源标记、基于指令控制的污点传播、函数跟踪、 信息收集和风险分析。最后用实验程序对该系统进行信息提取分析及有效性测 试。第5章:总结与未来工作。本章主要总结了本文的工作和本文的不足之处, 并结合研究中的不足给出了未来进一步的研究方向。本章首先简单介绍了基于二进制程序的漏洞挖掘技术的研究背景与意义。然 后简单介绍了二进制分析平台BitBlaze的架构,以及国内外污点分析技术的发展 现状。最后简单概括了本文中需要做的工作以及本文的组织结构。万方数据第2章研究基础第2章研究基础本章介绍了几种常见的漏洞攻击及漏洞检测技术。21漏洞利用技术研究211漏洞概念及分类 在形形色色的软件逻辑缺陷(bug)中,有一些bug如果被黑客攻击利用的话,可能会给人们造成非常严重的损失。例如,在Web系统中,如果在检查用 户输入的有效性方面存在bug的话,可能会引发跨站脚本攻击和SQL注入攻击。 通常将这类能够引起软件做一些“超出设计范围的事情”的缺陷称为漏洞,它 能够使得系统被攻击者非法访问和破坏,主要包括软硬件的设计缺陷、系统的 安全控制缺陷以及网络协议的实现缺陷。软件漏洞通常不会影响该软件的正常 运行,但是如果这些漏洞被黑客非法利用的话,可能会导致该软件偏离正常的 执行路径而去执行危险的操作。根据操作角度的不同,可将漏洞进行如下分类: (1)文件操作类型,主要为操作的目标文件路径可被控制,这样就可能会导致 输出文件的内容信息或者控制文件的写入内容这两个问题。 (2)内存覆盖,主要是指可以控制内存单元和写入内容,从而控制程序修改内 存数据或者执行非法代码。(3)程序逻辑错误,这种类型的漏洞是广泛存在的,主要包括:条件竞争,通 常是软件设计的问题:算法问题,通常是逻辑设计的问题或者代码实现的问题; 输入验证错误;设计不完善:策略错误;实现中的错误等。 (4)外部命令执行问题,主要包括SQL注入漏洞和通过PATH等控制外部命 令。212漏洞利用 漏洞利用是根据程序中已经被发现的软件漏洞类型,生成可以被攻击者利用的具有攻击作用的代码或者文件,当使用者执行和读取该类代码和文件之后就会触发该软件漏洞,从而攻击目标程序并非法获取和破坏系统信息。下面以几种常见漏洞攻击的原理、效果、及相关例子进行简单分析。7万方数据第2章研究基础2121缓冲区溢出漏洞 缓冲区是程序运行时的一个连续内存块,主要用于存储程序中的数据,在动态分配时可能会产生问题。缓冲区溢出的实质是:如果程序员没有检查复制到缓冲区的输入数据,而当这个数据足够大时,将会溢出缓冲区的范围,从而 改写其它的内存区域,如果向这些内存写入的是精心准备好的数据,就可能使 得程序流程被劫持,致使不希望的代码被执行,落入攻击者的掌控之中,就会 成为漏洞。缓冲区溢出主要分为堆溢出和栈溢出,一般是通过在缓冲区中构造 变异数据并造成其溢出,从而使得目标程序转向恶意构造的代码执行,其中该 恶意代码被称为shellcode。堆是在程序运行时操作系统动态分配的内存,通过堆块和堆表来管理堆, 其中堆表只索引空闲状态的堆块。每个堆块的堆首都包含两个指针,用于连接 与该堆块相邻的两个堆块。堆的分配、释放及合并这三个操作本质上都是对双 向链表指针的操作。堆溢出正是利用这一特点,在程序动态分配一个堆块给某 个变量后,通过构造超过该堆块范围的数据来达到溢出的目的,溢出的部分改 写堆首的前后指针,这样就可以在下一次堆操作时向内存的任意位置写入任意 恶意数据,这种方式称为“DWORD SHOOT”。常见的做法是利用DWORD SHOOT,将函数返回地址、SEH句柄或者函数调用地址改写为sheUcode起始 地址,进而控制程序执行恶意代码shellcode。栈是一个LIFO数据结构,它的边界由栈指针(ESP)寄存器来定义,指向栈 顶。使用栈的主要目的是为了更有效的调用函数。以main函数调用func函数 为例,观察栈的使用过程。系统首先执行main里的指令,碰到函数调用时,系 统中断正常的执行流程,进行函数调用前的处理,然后执行func里的指令。函 数调用前的整个处理过程是:首先把func的参数依次压栈,参数压入栈后,系 统接着把函数的返回地址(或RET,RET里保存的是调用函数时的指令指针EIP) 压入栈,然后调用函数。被调用函数执行结束后,程序将从RET保存的返回地 址继续执行。由于栈的增长方向是从高地址向低地址发展,所以函数中的局部变量是被 分配在栈中相对返回地址较低的内存地址。栈溢出正是利用栈的这一特点实现 的,普遍的做法是攻击者构造超过合法范围的数据,并且将其拷贝给栈中的局 部变量,从而造成栈溢出并且覆盖栈中的返回地址RET,最终控制在函数结束 后执行攻击者构造的恶意代码。如果该恶意代码shellcode被作为数据的一部分 被拷贝到栈中,那么shellcode的代码长度将受局部变量长度的影响,这样会降 低攻击的范围和效果。所以我们一般是将该恶意代码放在内存的任意位置,并 且获得该位置的地址用于覆盖返回地址,或者将shellcode地址保存在寄存器中,万方数据第2章研究基础通过调用寄存器(如call eax指令)来执行恶意代码,这样就可以构造任意长度的shellcode并执行。下图21以栈溢出为例进行说明:l栈 j增 1长 I方向data图21栈溢出当data被拷贝到buffer时,溢出区的数据会覆盖原来的其他栈帧数据,根 据覆盖数据的不同,可能会造成以下五种情况:1)覆盖了局部变量。如果该局 部变量是条件变量,则可能会改变函数原来的执行流程。2)覆盖了EBP。改变 了函数执行结束后需要恢复的栈底指针,这将会使栈失去平衡。3)覆盖了返回 地址。可能会使程序转向恶意代码执行,这正是栈溢出的关键所在。4)覆盖了 参数变量。可能会改变函数的执行结果和流程。5)覆盖了上级函数的栈帧。这 将会影响上级函数的执行。如果在data中保存了一系列指令的二进制代码,只要在栈溢出中修改函数 的返回地址,并将其指向这个二进制代码的真实位置,那么就可以完成基本的 栈溢出攻击,如下图22所示:l栈上;图22栈溢出攻击zkq20151015万方数据第2章研究基础2122格式化串漏洞格式化串漏洞产生于数据输出函数中对输出格式解析的缺陷。当prinff系 列函数的格式化串里包含用户提交的数据时,就有可能出现格式化串漏洞。攻 击者可能提交许多格式符(而不提供对应的变量),这样的话,栈上就没有和格 式符相对应的参数,因此,系统可能会用栈上的其它数据代替这些参数,从而 导致信息泄漏和执行任意代码。例如下面这个程序,它将用命令行的参数调用printf。#includeint main(int argc,char木argv】)if(argc!=2、printf(”Errorsupply a format string pleaseha”);retum 1;)printf(argv1); printf(”m”); return 0:编译:CC fmtCO fmt用如下的形式执行:fmt“xxxx” 将等同于在程序里用如下的形式调用printf:printf(“xxxx”);攻击者可以通过它来获得栈上重要数据,如用户信息、用户密码等。也可以通过n 格式符,把我们控制的数据写入我们选择的地址。如果满足了以下条件,攻击 者就能够利用该漏洞执行恶意代码:1)能够控制参数,并可以把输出的字符的数量写入内存的任意区域。2)宽度格式符允许我们用任意的长度填充输出。因此,我们可以用我们 选择的值改写单个字节。3)攻击者可以通过重复上面的步骤来改写内存地址。但是,不能直接把 终止符00字节写入内存。可以通过在其前面写入2字节数据来解决这 个问题。4)可以猜测函数指针的地址(如利用栈的返回地址,文件导入表等),这 样就可以使系统执行攻击者恶意生成的代码段。zkq20151015万方数据第2章研究基础总而言之,printf系列函数在处理包含用户提交的数据的格式化串时,通 常会发生格式化串错误。如果栈中没有足够的参数与格式符相对应的话,那么 系统就会直接使用栈中的其他数据作为缺少的参数使用,这样就会被攻击者非 法利用。2123 SQL注入攻击漏洞 SQL注入漏洞是Web中特有的一种漏洞,主要是由于PHP等脚本语言对用户的输入数据解析错误而产生的。例如,在用户输入的相应位置添加单引号 等转义字符后,使其能够影响SQL命令的生成,从而改变数据库SQL命令的 执行,这就是常用的SQL注入攻击方式。例如下面这条SQL命令:select木from user where name=$Nand psw= $P。这是一条简单地查询命令,用于查询姓名为输入变量$N以及密码为输入 变量$P的用户信息。当攻击者将$N赋值为admin撑,SP赋值为001(可为任意 值)时,该查询语句变成select母from user where name=admin撑and psw= 001,则admin撑中的单引号正好和该命令中变量的单引号配对,而“”被数 据库系统解释为行注释符,因此该查询命令“捍”后的语句被作为注释处理。这样,攻击者就能够很容易地跳过用户密码验证,并获得管理员信息。可见,如 果没有对输入进行合理的处理,攻击者就能够通过构造巧妙的注入命令,来达 到攻击SQL数据库的目的。2124 XSS攻击漏洞在许多的Web应用中,服务器都是先将客户端请求的数据或输入进行简单 处理后,再以页面文本的方式返回给客户端,而如果服务器的处理过于简单的 话,就容易产生XSS漏洞。如下面的代码所示,服务器端对用户的数据没有进 行任何的处理,就直接将其返回给客户端。如果用户执行了正常的请求:http:testxsscorntestphp?input-this is a test, 服务器端将直接把“this is a test”返回给客户端,客户端浏览器在页面上显示 该文本。但是,如果用户执行了以下的请求:http:testxsscorntestphp?input=alert(XSS!);,在服务器看来, 两次请求中的输入input没有任何本质上的不同,都是字符串,因此与前面请求 的处理结果一样,也将该输入直接返回给客户端。但是,客户端浏览器在分析 本次的数据时,会将其看做是脚本命令,而非简单的文本字符串,因而会将zkq20151015万方数据第2章研究基础alert(XSS!);作为脚本命令来解析和执行,并弹出警告的消息 框,而不是简单地将该数据输出到页面上显示。类似的,如果在论坛、贴吧等 Web应用中,服务器没有对用户的输入进行很好地处理,攻击者可能会向这些 Web应用中插入恶意的html代码,当用户浏览该页面时,就会造成用户浏览器 执行这些恶意代码,从而达到攻击者的特殊目的。XSS漏洞产生的原因是Web服务器将用户的输入直接返回给客户端,不同 于SQL注入漏洞,该攻击一般不会对Web服务器造成严重的影响,而是利用 Web服务器去攻击普通的用户。有两点需要注意,1)XSS攻击的目标是客户端浏览器,因此其影响的范围比攻击服务器的SQL注入漏洞更大。2)虽然独 立的XSS攻击不会产生非常严重的后果,但是配合其他的攻击技术造成的影响 会非常严重。2125远程代码执行漏洞 远程代码执行漏洞,是指用户通过浏览器提交了执行命令后,由于服务器没有对代码中的可执行函数入口进行过滤,从而导致在没有指明绝对路径的情况下执行命令,这样可能会使攻击者通过改变$PATH或运行环境来执行恶意 构造的代码。WEB服务器没有过滤类似exec0,eval0,system()等函数是造成该 漏洞攻击的最主要原因。如以下代码所示:logs$pre”$pre”date(”Y-M-D”)”109”);)?攻击者只需构造XXXphp?Log=num形式的URL,就可以通过浏览器在远程 的服务器上执行任意的恶意系统命令。22漏洞挖掘技术研究目前,主流的基于二进制程序的漏洞挖掘动态分析技术主要有以下四种, 模糊测试、插装、符号执行和污点分析技术。下面将对这四种技术进行简单地 分析和介绍。zkq20151015万方数据第2章研究基础221模糊测试模糊测试是通过利用目标软件执行非预期的测试用例并监测其运行结果来 发现软件故障的程序分析方法。它一般是半自动

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论