缓冲区溢出漏洞攻击初探

缓冲区溢出漏洞攻击初探

ID:21790282

大小:26.00 KB

页数:5页

时间:2018-10-24

缓冲区溢出漏洞攻击初探_第1页
缓冲区溢出漏洞攻击初探_第2页
缓冲区溢出漏洞攻击初探_第3页
缓冲区溢出漏洞攻击初探_第4页
缓冲区溢出漏洞攻击初探_第5页
资源描述:

《缓冲区溢出漏洞攻击初探》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、缓冲区溢出漏洞攻击初探  摘要  本文详细描述和分析了缓冲区溢出攻击的原理,然后就如何对缓冲区溢出攻击漏洞构造攻击程序进行了详细的分析。  【关键词】缓冲区溢出栈溢出攻击Shellcode  在Internet高度普及的今天,缓冲区溢出漏洞作为最常见的软件安全漏洞,是黑客攻击中经常利用的一个漏洞。通过利用溢出漏洞,攻击者可以使被攻击的主机改变原代码的执行流程,转而执行攻击者构造的恶意代码。前些年,缓冲区溢出攻击一度占到了网络攻击总量的百分之五十以上,只是近年来软件厂商逐渐加强了操作系统和应用软件的安全建设,采用了一些DEP、ASLR等对抗措施,才使得缓冲区溢出漏洞呈现逐年减少的趋

2、势,但在企业内网中,缓冲区溢出漏洞仍然普遍存在。因此,依然有必要对缓冲区溢出漏洞进行一些研究,从而开展有效的防范措施。  1缓冲区溢出漏洞定义及原理  1996年,AlephOne在Phrack杂志发表的“SmashingtheStackforFunandProfit”是缓冲区溢出的经典之作,第一次详细地介绍了缓冲区溢出产生的原理和利用方法。缓冲区溢出漏洞攻击是指攻击者通过在缓冲区写入超过预定长度的数据造成所谓的溢出,破坏了堆栈的原有数据结构,使程序的返回地址发生变化,使它指向溢出程序中恶意代码,这样就达到了攻击者的目的。  常见的缓冲区溢出漏洞包括栈溢出和堆溢出漏洞,本文主要结

3、合实验简要分析栈溢出的攻击原理。要充分理解缓冲区溢出漏洞的基本原理,就要从理解系统的内存结构开始。系统的内存结构主要包含有text、data、bss、heap和stack等区段。其中,代码text区,是由程序的代码段,为只读数据,任何对其写入的操作都会导致段错误(segmentationviolation);而bss和data都是可写的,它们保存全局变量,data段包含已初始化的静态变量,而bss包含未初始化的数据;heap是堆区,stack是栈区。  栈结构及溢出原理:  堆栈是操作系统中非常重要的一种结构,系统或用户进程通过堆栈用来完成各种函数调用。对于系统中的每个进程来说,

4、都有其各自独立的堆栈空间,堆栈空间随着进程的创建而被创建,随着进程的结束而被销毁。与系统中其他内存空间的增长有所不同,堆栈的增长方向是由内存高地址向低地址进行的,正是由于堆栈的这个特点导致了一系列的安全问题。  当一个函数调用另一个函数的时候,其栈帧结构如图2所示。在正常情况下,被调函数执行完毕,将被调函数的返回地址传给EIP寄存器,CPU从EIP寄存器取指令地址,返回主函数继续执行。如果黑客特意构造数据,使被调函数的局部变量越界,这样就有可能破坏栈中的相邻变量的值,甚至破坏栈帧中所保存的EIP、EBP值等重要数据。成功的缓冲区溢出攻击会用精心设计的数据覆盖返回地址,使被调函数执

5、行完后将修改后的返回地址传入EIP,从而使CPU执行攻击代码(shellcode)。  2缓冲区溢出漏洞攻击的构造  通过前面的分析,我们大致了解了构造缓冲区溢出漏洞需要考虑以下3个方面的问题。一是找出缓冲区溢出要覆盖或修改的返回地址EIP。如栈溢出中的返回地址在栈中的存储位置。二是将返回地址的值修改为何值?为了完成程序执行流程控制权的转移,攻击者将影响程序执行流程的EIP值进行修改,使其能够跳转至攻击者预期的代码进行执行。如何定位注入指令在目标程序中的位置,以及在存在限制条件如何完成程序控制权的移交,是一项重要的挑战。三是要构造合适的指令代码,即Shellcode。在程序控制权

6、交至攻击者注入的指令代码后,那么这段代码具体完成什么功能是由攻击者开发的。这段代码有时被称为攻击者的payload,由于这个payload通常为攻击者提供了一个远程shell访问,因此也被称为Shellcode。由于受目标主机的缓冲区大小限制,Shellcode长度一般越小越好。Shellcode构造步骤一般如下:  (1)先用C语言程序编写实现Shellcode的功能的代码。  (2)将上面编写的代码通过编译器进行编译,然后修改为带有Shellcode特点的汇编代码(精通汇编语言的人可直接使用汇编语言编写程序)。  (3)根据汇编程序得到机器码形式的Shellcode。  3缓

7、冲区溢出漏洞实验  在了解了缓冲区溢出攻击的原理之后,下面给出一个远程栈溢出的例子。图1所示的程序是一个存在缓冲去溢出漏洞的服务器端程序。该程序主要功能是实现字符串接收与回显,通过windowssocket机制创建一个服务器端socket,并在3764端口上进行监听;在接受客户端连接之后,把客户端输入的字符串统计接收的字节数,并进行回显。该程序的被调函数overflow在将接收字符串复制至本地局部变量s1缓冲区时,因没有进行边界保护,存在着栈溢出漏洞风险。  下面我们构造一个针对

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。