Windows栈缓冲区出攻击原理及其防范.docVIP

  • 5
  • 0
  • 约7.09千字
  • 约 15页
  • 2018-07-04 发布于福建
  • 举报
Windows栈缓冲区出攻击原理及其防范

Windows栈缓冲区溢出攻击原理及其防范   摘 要:计算机网络安全漏洞和网络攻击伴随着网络的存在会随时发生,栈缓冲区溢出漏洞攻击是网络攻击中最常见的一种攻击技术。文章剖析了Windows栈工作原理,以及栈溢出漏洞攻击技术方法,针对常见的栈溢出漏洞攻击提出了几种防御措施,能预防大部分针对栈溢出漏洞的攻击。 中国论文网 /1/viewhtm  关键词:网络安全;内存;安全漏洞;堆栈;缓冲区溢出   中图分类号:TP309.1 文献标识码:A   Abstract:Computer network security vulnerabilities and cyber attacks may occur at any time on the Internet,and the stack buffer overflow attack is the most common network attack technology.This paper analyzes the operating principle of the stack in Windows and the techniques of stack overflow attacks.Then,several prevention measures are proposed for common stack buffer overflow attacks,which can prevent most stack overflow attacks.   Keywords:network security;memory;security vulnerabilities;stack,buffer overflow   1 引言(Introduction)   ?冲区是已分配的一段大小确定的用于临时存放数据的内存存储区。当向一个已经分配了确定内存空间的缓冲区内写入超出该缓冲区处理能力的数据时,将发生缓冲区溢出[1]。   近十年,以缓冲区溢出为类型的安全漏洞攻击是最为常见的一种形式,在网络与分布式系统安全中,50%以上的漏洞攻击都是基于缓冲区溢出技术的,尤其在不进行边界检查的C/C++程序中仍然是软件可靠性和安全性的主要威胁之一[2]。   利用缓冲区溢出攻击,可以导致程序运行失败、重新启动、执行恶意代码等后果。缓冲区溢出中最危险的是栈溢出,因为入侵者可以利用堆栈溢出,在函数返回时改变返回程序的地址,让其跳转到任意地址,更为严重的是,它可被利用来执行非授权指令,甚至可以取得系统特权,进而进行各种非法操作[3]。   2 Windows栈缓冲区溢出原理(The principle of   stack buffer overflow in Windows)   2.1 Windows内存程序结构   计算机运行时,必须首先把程序从外存装载到内存,然后由CPU从内存中依次读取执行指令。正在运行的程序叫进程,每个进程都有自己的独立内存空间,它被分成几个段(Segment),分别是代码段(text)、数据段(data,bss)、堆(heap)、栈(stack)等,如图1所示。用户进程的内存空间,也是系统内核分配给该进程的虚拟内存。内存总是被进程占用,但并不表示这个进程占用了这么多的物理内存,Windows将虚拟内存地址映射到各进程的物理内存地址上,进程内存空间随着程序的执行会增大或者缩小[4]。   堆和栈都是一种数据项按序排列的数据结构。   栈是一种先进后出的数据结构,是自动开辟空间,用来分配局部变量、类的引用(指向堆空间段),栈使用的是一级缓存,通常在被调用时处于存储空间中,调用完毕立即释放。   堆是一种经过排序的数据结构,每个结点都有一个值,可以被看成是一棵树,堆的存取是随意的,堆是存放在二级缓存中,生命周期由虚拟机的垃圾回收算法来决定。堆的特点是根结点的值最小(或最大),且根结点的两个子树也是一个堆。由于堆的这个特性,常用来实现优先队列。   bss段(Block Started by Symbol segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域,属于静态内存分配,程序一开始就将其清零了。   对于一个进程的内存空间而言,可以在逻辑上分成三个部分:代码区、静态数据区和动态数据区。动态数据区一般就是堆栈。进程的每个线程都有私有的栈,所以每个线程虽然代码一样,但本地变量的数据都是互不干扰。全局变量和静态变量分配在静态数据区,本地变量分配在动态数据区,即堆栈中。程序通过堆栈的基地址和偏移量来访问本地变量[5]。   32位系统中经典的内存布局是:程序起始1GB地址为内核空间,接下来是向下增长的栈空间和由0上增长的内存映

文档评论(0)

1亿VIP精品文档

相关文档