黑客中级技术--缓冲区溢出攻击(转)[@more@]  缓冲区溢出是一种非常普遍、非常危险的漏洞,在各种操作系统、应用软件中广泛存在。利用缓冲区溢出攻击,可以导致程序运行失败、系统当机、重新启动等后果。更为严重的是,可以利用它执行非授权指令,甚至可以取得系统特权,进而进行各种非法操作。缓冲区溢出攻击有多种英文名称:buffer overflow,buffer overrun,smash the stack,trash the stack,scribble the stack, mangle the stack, memory leak,overrun screw;它们指的都是同一种攻击手段。第一个缓冲区溢出攻击--Morris蠕虫,发生在十年前,它曾造成了全世界6000多台网络服务器瘫痪。  本文将分析缓冲区溢出的原理;研究各种类型的缓冲区溢出漏洞和攻击手段;最后,还将着重研究各种防御手段,用来消除这些漏洞所造成的影响。  一、 缓冲区溢出的原理  通过往程序的缓冲区写超出其长度的内容,造成缓冲区的溢出,从而破坏程序的堆栈,使程序转而执行其它指令,以达到攻击的目的。造成缓冲区溢出的原因是程序中没有仔细检查用户输入的参数。例如下面程序:  void function(char *str) {  char buffer[16];  strcpy(buffer,str);  }  上面的strcpy()将直接吧str中的内容copy到buffer中。这样只要str的长度大于16,就会造成buffer的溢出,使程序运行出错。存在象strcpy这样的问题的标准函数还有strcat(),sprintf(),vsprintf(),gets(),scanf()等。  当然,随便往缓冲区中填东西造成它溢出一般只会出现“分段错误”(Segmentation fault),而不能达到攻击的目的。最常见的手段是通过制造缓冲区溢出使程序运行一个用户shell,再通过shell执行其它命令。如果该程序属于root且有suid权限的话,攻击者就获得了一个有root权限的shell,可以对系统进行任意操作了。  缓冲区溢出攻击之所以成为一种常见安全攻击手段其原因在于缓冲区溢出漏洞太普遍了,并且易于实现。而且,缓冲区溢出成为远程攻击的主要手段其原因在于缓冲区溢出漏洞给予了攻击者他所想要的一切:植入并且执行攻击代码。被植入的攻击代码以一定的权限运行有缓冲区溢出漏洞的程序,从而得到被攻击主机的控制权。  在1998年Lincoln实验室用来评估入侵检测的的5种远程攻击中,有2种是缓冲区溢出。而在1998年CERT的13份建议中,有9份是是与缓冲区溢出有关的,在1999年,至少有半数的建议是和缓冲区溢出有关的。在Bugtraq的调查中,有2/3的被调查者认为缓冲区溢出漏洞是一个很严重的安全问题。  缓冲区溢出漏洞和攻击有很多种形式,会在第二节对他们进行描述和分类。相应地防卫手段也随者攻击方法的不同而不同,将在第四节描述,它的内容包括针对每种攻击类型的有效的防卫手段。  二、缓冲区溢出的漏洞和攻击  缓冲区溢出攻击的目的在于扰乱具有某些特权运行的程序的功能,这样可以使得攻击者取得程序的控制权,如果该程序具有足够的权限,那么整个主机就被控制了。一般而言,攻击者攻击root程序,然后执行类似“exec(sh)”的执行代码来获得root权限的shell。为了达到这个目的,攻击者必须达到如下的两个目标:  1. 在程序的地址空间里安排适当的代码。  2. 通过适当的初始化寄存器和内存,让程序跳转到入侵者安排的地址空间执行。  根据这两个目标来对缓冲区溢出攻击进行分类。在二.1节,将描述攻击代码是如何放入被攻击程序的地址空间的。在二.2节,将介绍攻击者如何使一个程序的缓冲区溢出,并且执行转移到攻击代码(这个就是“溢出”的由来)。在二.3节,将综合前两节所讨论的代码安排和控制程序执行流程的技术。  二.1 在程序的地址空间里安排适当的代码的方法  有两种在被攻击程序地址空间里安排攻击代码的方法:  1、植入法:  攻击者向被攻击的程序输入一个字符串,程序会把这个字符串放到缓冲区里。这个字符串包含的资料是可以在这个被攻击的硬件平台上运行的指令序列。在这里,攻击者用被攻击程序的缓冲区来存放攻击代码。缓冲区可以设在任何地方:堆栈(stack,自动变量)、堆(heap,动态分配的内存区)和静态资料区。  2、利用已经存在的代码:  有时,攻击者想要的代码已经在被攻击的程序中了,攻击者所要做的只是对代码传递一些参数。比如,攻击代码要求执行“exec (“/bin/sh”)”,而在libc库中的代码执行“exec (arg)”,其中arg使一个指向一个字符串的指针参数,那么攻击者只要把传入的参数指针改向指向”/bin/sh”。  二.2 控制程序转移到攻击代码的方法  所有的这些方法都是在寻求改变程序的执行流程,使之跳转到攻击代码。最基本的就是溢出一个没有边界检查或者其它弱点的缓冲区,这样就扰乱了程序的正常的执行顺序。通过溢出一个缓冲区,攻击者可以用暴力的方法改写相邻的程序空间而直接跳过了系统的检查。  分类的基准是攻击者所寻求的缓冲区溢出的程序空间类型。原则上是可以任意的空间。实际上,许多的缓冲区溢出是用暴力的方法来寻求改变程序指针的。这类程序的不同之处就是程序空间的突破和内存空间的定位不同。主要有以下三种: 1、活动纪录(Activation Records):  每当一个函数调用发生时,调用者会在堆栈中留下一个活动纪录,它包含了函数结束时返回的地址。攻击者通过溢出堆栈中的自动变量,使返回地址指向攻击代码。通过改变程序的返回地址,当函数调用结束时,程序就跳转到攻击者设定的地址,而不是原先的地址。这类的缓冲区溢出被称为堆栈溢出攻击(Stack Smashing Attack),是目前最常用的缓冲区溢出攻击方式。  2、函数指针(Function Pointers):  函数指针可以用来定位任何地址空间。例如:“void (* foo)()”声明了一个返回值为void的函数指针变量foo。所以攻击者只需在任何空间内的函数指针附近找到一个能够溢出的缓冲区,然后溢出这个缓冲区来改变函数指针。在某一时刻,当程序通过函数指针调用函数时,程序的流程就按攻击者的意图实现了。它的一个攻击范例就是在Linux系统下的superprobe程序。  3、长跳转缓冲区(Longjmp buffers):  在C语言中包含了一个简单的检验/恢复系统,称为setjmp/longjmp。意思是在检验点设定“setjmp(buffer)”,用“longjmp(buffer)”来恢复检验点。然而,如果攻击者能够进入缓冲区的空间,那么“longjmp(buffer)”实际上是跳转到攻击者的代码。象函数指针一样,longjmp缓冲区能够指向任何地方,所以攻击者所要做的就是找到一个可供溢出的缓冲区。一个典型的例子就是Perl 5.003的缓冲区溢出漏洞;攻击者首先进入用来恢复缓冲区溢出的的longjmp缓冲区,然后诱导进入恢复模式,这样就使Perl的解释器跳转到攻击代码上了。  二.3代码植入和流程控制技术的综合分析  最简单和常见的缓冲区溢出攻击类型就是在一个字符串里综合了代码植入和活动纪录技术。攻击者定位一个可供溢出的自动变量,然后向程序传递一个很大的字符串,在引发缓冲区溢出,改变活动纪录的同时植入了代码。这个是由Levy指出的攻击的模板。因为C在习惯上只为用户和参数开辟很小的缓冲区,因此这种漏洞攻击的实例十分常见。  代码植入和缓冲区溢出不一定要在在一次动作内完成。攻击者可以在一个缓冲区内放置代码,这是不能溢出的缓冲区。然后,攻击者通过溢出另外一个缓冲区来转移程序的指针。这种方法一般用来解决可供溢出的缓冲区不够大(不能放下全部的代码)的情况。  如果攻击者试图使用已经常驻的代码而不是从外部植入代码,他们通常必须把代码作为参数调用。举例来说,在libc(几乎所有的C程序都要它来连接)中的部分代码段会执行“exec(something)”,其中somthing就是参数。攻击者然后使用缓冲区溢出改变程序的参数,然后利用另一个缓冲区溢出使程序指针指向libc中的特定的代码段。  三、 缓冲区溢出攻击的实验分析  2000年1月,Cerberus 安全小组发布了微软的IIS 4/5存在的一个缓冲区溢出漏洞。攻击该漏洞,可以使Web服务器崩溃,甚至获取超级权限执行任意的代码。目前,微软的IIS 4/5 是一种主流的Web服务器程序;因而,该缓冲区溢出漏洞对于网站的安全构成了极大的威胁;它的描述如下:  浏览器向IIS提出一个HTTP请求,在域名(或IP地址)后,加上一个文件名,该文件名以“.htr”做后缀。于是IIS认为客户端正在请求一个“.htr”文件,“.htr”扩展文件被映像成ISAPI(Internet Service API)应用程序,IIS会复位向所有针对“.htr”资源的请求到 ISM.DLL程序 ,ISM.DLL 打开这个文件并执行之。  浏览器提交的请求中包含的文件名存储在局部变量缓冲区中,若它很长,超过600个字符时,会导致局部变量缓冲区溢出,覆盖返回地址空间,使IIS崩溃。更进一步,在如图1所示的2K缓冲区中植入一段精心设计的代码,可以使之以系统超级权限运行。  四、缓冲区溢出攻击的防范方法  缓冲区溢出攻击占了远程网络攻击的绝大多数,这种攻击可以使得一个匿名的Internet用户有机会获得一台主机的部分或全部的控制权。如果能有效地消除缓冲区溢出的漏洞,则很大一部分的安全威胁可以得到缓解。  目前有四种基本的方法保护缓冲区免受缓冲区溢出的攻击和影响。在四.1中介绍了通过操作系统使得缓冲区不可执行,从而阻止攻击者植入攻击代码。在四.2中介绍了强制写正确的代码的方法。在四.3中介绍了利用编译器的边界检查来实现缓冲区的保护。这个方法使得缓冲区溢出不可能出现,从而完全消除了缓冲区溢出的威胁,但是相对而言   本文来自:http://www.linuxpk.com/30482.html--&gtlinux电子图书免费下载和技术讨论基地·上一篇:为什么C语言的strcpy函数有漏洞·下一篇:WinXPSP2,请你别再“自作多情”了!

 
     最新更新
·注册表备份和恢复·低级格式化的主要作用·如何防范恶意网站·常见文件扩展名和它们的说明·专家:警惕骇客骗局,严守企业信息·PGPforWindows介紹基本设定(2)·解剖安全帐号管理器(SAM)结构·“恶作剧之王”揭秘·绿色警戒·黑客反击战·网络四大攻击方法及安全现状描述·可攻击3种浏览器代码流于互联网·黑客最新的兴趣点,下个目标会是谁?·“僵尸”——垃圾邮件的主要传播源·Lebreat蠕虫惊现3变种·POSTFIX反病毒反垃圾Ų…·在FreeBSD上用PHP实现在线添加FTP用户·简单让你在FreeBSDADSL上…·安全版本:OpenBSD入门技巧解析·Internet连接共享上网完全攻略·关于ADSL上网网速常识·静态缓存和动态缓存的比较·最友好的SQL注入防御方法·令网站提速的7大秘方·网络基础知识大全·路由基本知识·端口映射的几种实现方法·VLAN经典诠释·问题分析与解决——ADSL错误代码·问题分析——关于2条E1的线路绑定

关于我们 | 联系方式 | 广告合作 | 诚聘英才 | 网站地图 | 网址大全 | 友情链接 | 免费注册

Copyright © 2004 - 2007 All Rights Reserved

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10752043/viewspace-969883/,如需转载,请注明出处,否则将追究法律责任。

0
0
分享到:

上一篇: 为什么C语言的strcpy函数有漏洞(转)
下一篇: 介绍2004年出现的4种新后门技术(转)

请登录后发表评论 登录

全部评论
<%=items[i].createtime%>

<%=items[i].content%>

<%if(items[i].items.items.length) { %>

<%for(var j=0;j

<%=items[i].items.items[j].createtime%> 回复

<%=items[i].items.items[j].username%>   回复   <%=items[i].items.items[j].tousername%>: <%=items[i].items.items[j].content%>

<%}%> <%if(items[i].items.total > 5) { %>

还有<%=items[i].items.total-5%>条评论) data-count=1 data-flag=true>点击查看

<%}%>

<%}%> <%}%>

worldblog
  • 博文量

    6241

  • 访问量
    2395969

最新文章

  • 可怕的 C# (转)
  • Unify the Role-Based Security Models for Enterprise and Application Domains with .NET (转)
  • Building Secure ASP.NET Applications: Authentication, Authorization, and Secure Communication (转)
  • [Sample] Playing with music file (转)
  • 中文web-app_2_3.dtd (转)
  • 使用ASP.NET加密口令 (转)
  • C++ Builder 高手进阶 (五)用BCB编写多线程应用程序 (转)
  • 24点游戏探秘系列6:用概率统计的眼光看24点游戏 (转)
  • Schema-oriented message destination (转)
  • J2EE vs. Microsoft.NET (转)

支持我们 作者招募 用户协议 FAQ Contact Us

北京盛拓优讯信息技术有限公司. 版权所有  京ICP备09055130号-4  北京市公安局海淀分局网监中心备案编号:11010802021510

广播电视节目制作经营许可证(京) 字第1234号 中国互联网协会会员

转载于:http://blog.itpub.net/10752043/viewspace-969883/

黑客中级技术--缓冲区溢出攻击(转)相关推荐

  1. 缓冲区溢出攻击的防御技术

    缓冲区溢出攻击的防御技术 目前产品: 主要是从静态的源代码安全审核到动态的程序运行期间的防护. 源码级保护: 编写没有漏洞的安全代码是防范缓冲区溢出攻击的最好方法(非常困难) 运行期间的保护: 研究的 ...

  2. 【网络攻防技术】实验四——缓冲区溢出攻击实验

    文章目录 一.实验题目 二.实验步骤 Task1: Get Familiar with the Shellcod Task2: Level-1 Attack Task 3: Level-2 Attac ...

  3. 深入理解黑客攻击-缓冲区溢出攻击

    缓冲区溢出攻击是利用缓冲区溢出漏洞所进行的攻击行动 如果有人利用栈中分配的缓冲区写溢出,悄悄地将一段恶意代码的首地址 作为返回地址覆盖写到原先的正确的返回地址处.那么程序在执行ret的时候会悄悄地转移 ...

  4. Linux开发_反编译开发_破解简单登录程序外加缓冲区溢出攻击

    缓冲区溢出攻击即破坏指定buff的缓冲区大小,使其溢出到别的空间上去,破坏堆栈. 比如有如下代码: #include <stdio.h> #include <string.h> ...

  5. Linux下缓冲区溢出攻击的原理及对策

    前言 从逻辑上讲进程的堆栈是由多个堆栈帧构成的,其中每个堆栈帧都对应一个函数调用.当函数调用发生时,新的堆栈帧被压入堆栈:当函数返回时,相应的堆栈帧从堆栈中弹出.尽管堆栈帧结构的引入为在高级语言中实现 ...

  6. 网络安全——缓冲区溢出攻击

    1.缓冲区溢出概述 什么是缓冲区?它是指程序运行期间,在内存中分配的一个连续的区域,用于保存包括字符数组在内的各种数据类型.所谓溢出,其实就是所填充的数据超出了原有的缓冲区边界,并非法占据了另一段内存 ...

  7. 划重点!关于缓冲区溢出攻击,这份防范策略一定要收好!

    一.缓冲区溢出攻击的基本概念 缓冲区溢出是一种非常普遍.非常危险的漏洞,在各种操作系统.应用软件中广泛存在.利用缓冲区溢出攻击,可以导致程序运行失败.系统宕机.重新启动等后果.更为严重的是,可以利用它 ...

  8. 为什么会有缓冲区溢出攻击专栏

    已有一段时间没有写博客,今天打开博客收到网友的私信,问我是否从事与安全相关的工作,以及对从事安全工作有什么好的建议.今晚想借这个机会记录下我写此专栏的缘由. 2014年整整一年,我成为部门的安全工程师 ...

  9. Linux下防范缓冲区溢出攻击安全策略(转)

    缓冲区溢出攻击是目前黑客最常用的攻击手段之一,为了应对不断涌现的缓冲区溢出攻击,我们研究了在Linux系统下防范缓冲区溢出的方法,通过研究,总结了在Linux平台下防范缓冲区溢出攻击的安全策略,这些安 ...

最新文章

  1. 边缘计算:安全保护 快速响应
  2. 人生的84000种可能
  3. JAVA---DOS命令学习
  4. 信息学奥赛一本通(1040:输出绝对值)
  5. Kaggle新赛 | HuBMAP: 识别人体肾脏组织图像中的肾小球~总奖金 6 万美金
  6. 20.校准相机——SVD技巧第1部分,SVD技巧第2部分,SVD技巧第3部分_2
  7. 这三种程序员,是时代的溺水者
  8. BZOJ4321:queue2(DP)
  9. 区块链软件公司:区块链技术的应用
  10. 计算机程序编程就业,计算机编程就业
  11. 联想微型计算机c255r拆机,联想R9000P开箱拆机,送给你的618选购参考
  12. [笔记] Mac直接运行Windows迷你迅雷
  13. Safari 浏览器插件(扩展)开发
  14. HDTune硬盘检测工具
  15. 微积分导论--Continuity
  16. js实现汉字转拼音(解决首字母排序问题)
  17. React之ref的高阶用法
  18. JavaWeb核心技术系列教程(23)——JSP标签
  19. 基于自然语言处理的垃圾信息过滤方法
  20. 编一程序,从键盘输入圆的半径,计算并输出圆的正内接六边形的面积和占圆面积百分比

热门文章

  1. (点、6)精配准Iterative Closest Point(ICP)
  2. 人类最强现役运载火箭猎鹰重型首飞成功!跑车飞上天
  3. cad面积计算机,AutoCAD如何测面积 AutoCAD面积计算方法
  4. css过滤镜实现颜色渐变
  5. Linux 部署企业生产环境中最常用的 RAID10 磁盘阵列(虚拟机环境)
  6. 中文字符长度与英文字符长度的计算
  7. Android的frameworks层音量控制原理分析
  8. lua关于for循环不能改变控制变量
  9. JS开发必须知道的常用技巧(持续更新...)
  10. 【白板动画制作软件】万彩手影大师教程 | 添加文本