不喜丶不悲
缓冲区溢出 漏洞

缓冲区溢出漏洞的类型有哪些

分享
  • Anna艳娜 2 CISO 高级信息系统项目管理师 PMP 官方采纳
    Anna艳娜2 CISO 高级信息系统项目管理师 PMP
    官方采纳

    根据目的的不同,可以对缓冲区溢出攻击进行分类。

    1. 在程序的地址空间里安排适当代码的攻击方法,植入法是攻击者向被攻击的程序输入一个字符串,程序会把这个字符串放到缓冲区里。这个字符串包含的数据是可以在这个被攻击的硬件平台上运行的指令序列。在这里攻击者用被攻击程序的缓冲区来存放攻击代码。为了实现这个目标,攻击者可能在不必溢出任何缓冲区的情况下,就找到足够的空间来放置攻击代码,也可能存放在缓冲区可以设置的任何地方,如堆栈、动态分配的堆和静态数据区等。利用已经存在代码的方法,是指攻击者希望使用的代码已经存在于被攻击的程序中,攻击者所要做的只是对代码传递一些参数,然后使程序跳转到指定的目标。例如对于UNIX系统,攻击代码要求执行“exec(“/bin/sh”)”,而在libc库中的代码执行“exec(arg)”,其中arg是一个指向一个字符串的指针参数,攻击者只要把传入的参数指针改向指向”/bin/sh”,然后就可以转到libc库中的相应指令序列。

    2. 控制程序转移到攻击代码的方法的思路是寻求改变程序的执行流程,使之跳转到攻击代码。采用的基本手段是溢出一个没有边界检查或者其他弱点的缓冲区,从而扰乱程序的正常执行顺序。通过溢出一个缓冲区,攻击者可以用近乎暴力的方法改写相邻的程序空间,直接跳过系统的检查。按照攻击者所寻求的缓冲区溢出程序的空间类型,可以对这类攻击进行分类。许多的缓冲区溢出是用暴力的方法来寻求改变程序指针的。这类程序的区别在于程序空间的突破和内存空间的定位不同。

  • delay 2 高级测评师 CISM-WSE 官方采纳
    delay2 高级测评师 CISM-WSE
    官方采纳

    缓冲区溢出的攻击大致分为以下这些:

    • 栈溢出:未检查输入缓冲区长度,导致数组越界,覆盖栈中局部变量空间之上的栈桢指针%ebp以及函数返回地址retaddr, 当函数返回执行ret指令时,retaddr从栈中弹出,作为下一条指令的地址赋给%eip寄存器,继而改变原程序的执行流程指向我们的 shellcode.

    • 堆溢出:一种是和传统的栈溢出一样, 当输入超出malloc()预先分配的空间大小,就会覆盖掉这段空间之后的一段存储区域,如果该存储区域有一个重要的变量比如euid,那么我就可以用它 来攻击。另一种是典型的double-free堆腐败,在内存回收操作中,合并相邻空闲块重新插入双向链表时会有一个写4字节内存的操作,如果弱点程序由 于编程错误free()一个不存在的块,我们就可以精心伪造这个块,从而覆盖任何我们想要的值:函数的返回地址、库函数的.plt地址等

    • 格式化字符窜漏洞:如果格式窜由用户定制,攻击者就可以任意伪造格式窜,利用*printf()系列函数的特性就可以窥探堆栈空间的内容,超常输入可以引发传统的缓冲区溢出,或是用”%n”覆盖指针、返回地址等。

    • 整形变量溢出:利用整数的范围、符号等问题触发安全漏洞,大多数整形溢出不能直接利用,但如果该整形变量决定内存分配等操作,我们就有可能间接利用该漏洞。

    • 其他的攻击手法:只能算是手法,不能算是一种单独的类别。利用ELF文件格式的特性如:覆盖.plt(过程连接表)、.dtor(析构函数指针)、.got(全局偏移表)、return-to-libc(返回库函数)等的方式进行攻击。

  • 写回答