栈溢出漏洞攻击原理及防护技术.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
栈溢出漏洞攻击原理及防护技术

栈溢出漏洞攻击原理及防护技术 发布时间:2011年06月29日 分享 推荐 打印 收藏 文/H3C攻防研究团队 现阶段的安全漏洞种类很多,包括大家熟悉的SQL注入漏洞、缓存溢出漏洞、XSS跨站脚本漏洞等。而栈溢出漏洞作为缓冲区溢出漏洞的一种特定的表现形式,在现实网络环境中比较普遍。本文将从栈溢出漏洞的原理、攻击形式及防护方法等方面进行介绍 一、?栈溢出漏洞的原理 栈溢出(Stack Overflow)是在网络与分布式系统中被广泛利用的一种漏洞类型。在汇编中,以线程为线索的指令执行对函数的调用及局部变量的存取是依靠栈来实现的,黑客可以使用特定的脚本语言,通过网络远程向对外提供业务的服务器进行攻击,利用对栈中数据的填充越界,实现有效的漏洞攻击。下面的例子对该过程进行了详细的描述: 下面这段C代码的vulnerable_func函数用于完成对input字符串的临时存储及对变量isSafe的判断,同时主程序main中,分别对该函数进行正确及错误的参数输入,两相对比可以看出正常调用的栈处理赋值及不正常时的栈溢出情形。函数关键代码如下所示:int?vulnerable_func(char * input) { int isSafe = 0; char vulnerable_var[16]; strcpy(vulnerable_var, input); if (isSafe == 0) { printf(Check error!\n); return 1; } printf(Check Pass!\n); return 0; } int main(int argc, char* argv[]) { vulnerable_func(Hello World!\n); vulnerable_func(Hello World!AAAAAAAAAAAAAAA); return 0; } 通过特定的技术手段,调用查看两种情况下函数调用的栈处理过程,得到的栈参数赋值如图1所示: ? 地址0013FEFC开始的16个字节为vulnerable_var变量在栈中的存储空间;地址0013FF0C为isSafe变量在栈中的地址;地址0013FF10为main函数EBP在栈中的地址;地址0013FF14为函数返回地址在栈中的存储地址 图1正常栈与溢出栈对比图 进一步分析可知,图1右图中超计划输入的数据覆盖了栈中isSafe变量、EBP和函数返回地址所在内存空间的内容,一般会引发数据混乱或程序崩溃。对于软件开发人员来说,这只是软件开发过程中诸多错误中常见的一种内存越界错误,而对于安全人员来说这可能就意味着一个非常危险的安全漏洞。因为黑客会利用这种漏洞巧妙的构造出攻击输入以跳出原程序的设计逻辑,甚至执行任何攻击者想要执行的代码。 二、?栈溢出漏洞的典型攻击方式 栈溢出漏洞在客户端和服务器上均有可能存在,攻击者主要通过网络以远程方式进行攻击。对于客户端的攻击一般受NAT及防火墙阻隔的影响,需要搭建伪装的服务器通过社会工程学引诱用户访问,在回应用户访问时构造数据进行攻击。传送伪造的数据文件引诱用户打开,以攻击处理软件中的漏洞也很常见,当然在局域网中的直接攻击也广泛存在。对于服务器的攻击则只需直接伪造对服务器访问,在连接或登录后构造报文或数据进行攻击。 黑客在远程利用网络实施栈溢出漏洞攻击时,其攻击报文将通过网络找到特定的服务器主机,并在主机进行函数调用时实施破坏性行为。典型的攻击行为主要有以下三种: 1) 修改相邻数据 仍以前面的演示代码为例,假设此代码为服务器上的安全检查模块的一部分,input为远程用户的登录信息,isSafe为系统中的判断用户关键数据。如果第二次函数调用只修改栈中isSafe变量,就可模拟出一次远程用户的攻击,并绕过对isSafe变量的检查,造成一次非法用户绕过安全检查的成功入侵。由于这种方式受限于系统设计时的诸多因素,实际出现的机会相对较少。 2) 修改函数返回地址 栈溢出更常见的一种利用方式是覆盖漏洞函数的返回地址。若演示代码中input输入足够长时,就会覆盖修改函数vulnerable_fun的返回地址(即图1中地址0012FF14的内容),如果此时输入为精心构造的shellcode(即实现攻击行为的一段机器指令码),准确地修改该返回地址,就可能跳转到shellcode中去执行,攻击者也就可能获取进程对应的权限执行远程植入的指令序列。 3) 修改SEH(Structured Exception Handling) windows异常处理是windows程序出错后自己处理错误并进行补救的一种机制, 包括SEH、VEH(Vector Exception Hander)、UEF(Unhandled Exception Filter)等技术简单来说,可

文档评论(0)

xy88118 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档