下载安卓APP箭头
箭头给我发消息

客服QQ:3315713922

关于对缓冲区溢出攻击的认识

作者:课课家教育     来源: http://www.kokojia.com点击数:4647发布时间: 2019-02-28 09:29:16

标签: 网络安全漏洞攻击缓冲区溢出攻击

软考,您想通过吗?一次通过才是硬道理

      在网络安全上,我们经常会谈到漏洞攻击,而本文所讲的缓冲区溢出攻击就是漏洞攻击的一种,它是通过往程序的缓冲区写超出其长度的内容,造成缓冲区溢出,从雨破坏程序的堆枝,使程序转而执行其他预设指令,以达到攻击目的的攻击方法。

 关于对缓冲区溢出攻击的认识_网络安全_漏洞攻击_缓冲区溢出攻击_课课家

  它是一种非常普遍、非常危险的漏洞,可以使得程序运行失败、系统关机、重新启动等后果,在各种操作系统、应用软件中广泛存在。此为,更是可以利用它执行非授权指令,甚至可以取得系统特权,进而进行各种非法操作。我们所知道的第一个缓冲区溢出攻击是Morris蠕虫,它发生在十多年前,曾造成了全世界6000多台网络服务器瘫痪。

  下面,我们从各个方面来认识一下缓冲区溢出攻击。

  1.缓冲区溢出攻击的原理

  缓冲区是计算机内存中的一个连续块,保存了给定类型的数据。当进行大量动态内存分配而又管理不当时,就会出现问题。动态变量所需要的缓冲区,是在程序运行时才进行分配的。如果程序在动态分配的缓冲区中放入超长的数据,它就会溢出,

  从而破坏程序的堆栈,使程序转而执行其它指令,以达到攻击的目的。造成缓冲区溢出的原因是程序中没有仔细检查用户输入的参数。例如下面程序:

  void function(char *str) {

  char buffer[16]; strcpy(buffer,str);

  }

  上面的strcpy()将直接把str中的内容copy到buffer中。这样只要str的长度大于16,就会造成buffer的溢出,使程序运行出错。

  当然,随便往缓冲区中填东西造成它溢出一般只会出现“分段错误”(Segmentation fault),而不能达到攻击的目的。最常见的手段是通过制造缓冲区溢出使程序运行一个用户shell,再通过shell执行其它命令。如果该程序属于root且有suid权限的话,攻击者就获得了一个有root权限的shell,可以对系统进行任意操作了。

  通过上面的解析,也就是说缓冲区溢出攻击的基本原理是向缓冲区中写入超长的、预设的内容,导致缓冲区溢出,覆盖其他正常的程序或数据,然后让计算机转去运行这行预设的程序,达到执行非法操作、实现攻击的目的。

  2.缓冲区溢出攻击程序的步骤

  一个缓冲区溢出程岸的执行通常自4 个步骤组成:

  ①准备一殷可以调出一个shell的机器码形式的字符串,称之为SHELLCODE。

  ②申请一个缓冲区,并将机器码填入缓冲区的低端。

  ③估算机器码在堆校中的起始位置,并将这个位置写入缓冲区的高端。

  ④将这个缓冲区作为系统一个有着缓冲区溢出错误的程序的一个入口参数,并执行这个有错误的程序。

  例如,利用缓冲区溢出漏洞攻击root程序,通过执行类似"exec (sh)"的执行代码来获得root的shell。

  3.缓冲区溢出的漏洞和攻击

  缓冲区溢出攻击的目的在于扰乱具有某些特权运行的程序的功能,这样可以使得攻击者取得程序的控制权,如果该程序具有足够的权限,那么整个主机就被控制了。它的具体实现过程是这样的:首先攻击者对ROOT程序进行试探性攻击,然后执行类似“exec(sh)”的执行代码来获得具有root权限的shell。黑客要达到目的通常要完成两个任务

  ①在程序的地址空间里安排适当的代码;

  ②通过适当初始化寄存器和存储器,让程序跳转到安排好的地址空间执行。

  根据这两个目标来对缓冲区溢出攻击进行分类,缓冲区溢出攻击分为代码安排和控制程序转移两种方法:

  (1)在程序的地址空间里安排适当的代码的方法:

  ①植入法:

  攻击者向被攻击的程序输入一个字符串,程序会把这个字符串放到缓冲区里。这个字符串包含的资料是可以在这个被攻击的硬件平台上运行的指令序列。在这里,攻击者用被攻击程序的缓冲区来存放攻击代码。缓冲区可以设在任何地方:堆栈(stack,自动变量)、堆(heap,动态分配的内存区)和静态资料区。

  ②利用已经存在的代码:

  有时攻击者想要的代码已经在被攻击的程序中了,攻击者所要做的只是对代码传递一些参数。例如攻击代码要求执行exec (“/bin/sh”),而在libc库中的代码执行exec (arg),其中arg使一个指向一个字符串的指针参数,那么攻击者只要把传入的参数指针改向指向/bin/sh。

  (2)控制程序转移到攻击代码的方法

  所有的这些方法都是在寻求改变程序的执行流程,使之跳转到攻击代码。分类的基准是攻击者所寻求的缓冲区溢出的程序空间类型。原则上是可以任意的空间。实际上,许多的缓冲区溢出是用暴力的方法来寻求改变程序指针的。这类程序的不同之处就是程序空间的突破和内存空间的定位不同。主要有以下三种:

  ①活动纪录

  ②函数指针

  ③长跳转缓冲区

  4. 缓冲区溢出攻击的防范策略

  缓冲区溢出攻击的防范是和整个系统的安全性分不开的。如果整个网络系统的安全设计很差,则遭受缓冲区溢出攻击的机会也大大增加。针对缓冲区溢出,可以采取多种防范策略。

  (1)系统管理上的防范策略

  .关闭不需要的特权程序。

  .及时给程序漏洞打补丁。

  (2) 软件开发过程中的防范策略

  发生缓冲区溢出的主要及各要素是:数组没有边界检查而导致的缓冲区溢出;函数返回地址或函数指针被改变,使程序流程的改变成为可能:植入代码被成功的执行等等。

      以上就是小编学习了缓冲区溢出攻击之后的总结,如果有什么错误还请大家指出,非常期待与大家的交流学习,欢迎大家加入课课家教育大家庭。

赞(20)
踩(0)
分享到:
推荐查看
华为认证网络工程师 HCIE直播课视频教程