- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于源代码的缓冲区溢出预防技术
摘要:基于缓冲区溢出的攻击是一种常见的安全攻击手段,也是目前惟一最重要最常见的安全威胁。在所有的软件安全漏洞中,缓冲区溢出漏洞大约占一半。该文从编程的角度分析了缓冲区溢出攻击,并提出在源代码阶段尽量避免缓冲区溢出的方法。
关键词:堆栈;缓冲区;溢出;缓冲区溢出攻击
中图分类号:TP311文献标识码:A文章编号:1009-3044(2008)36-2839-02
Prevention Technology Based on Buffer Overflow of Source Code
ZHANG Chuan-juan
(Fujian Communication Technology College, Fuzhou 350007, China)
Abstract: The attack, based on the buffer overflow, is a common means of security attacks and is the only most common security threats at present. Buffer overflow vulnerabilities account for about half Of all the software vulnerabilities. In this paper, from programming point of view, the buffer overflow attacks are analyzed and the methods of avoiding buffer overflow at the stage of source code are introduced.
Key words: stack; buffer; overflow; buffer overflow attacks
1 引言
1988年的Morris蠕虫,是第一次利用缓冲区溢出缺陷的攻击,导致6000多台机器被感染,损失在$100 000至$10 000 000之间。之后,缓冲区溢出缺陷的攻击愈来愈多,成为最常见也是最危险的网络攻击。
缓冲区溢出是由于程序或编译器没有对缓冲区进行边界检查导致的。发展C语言的初衷是为了编写操作系统,后来被广泛使用,其运行高效、精确控制资源等优点成为系统程序员最喜欢选择的编程语言,很多商业软件都是使用C语言编写的。但C语言缺少安全机制,对数组和指针不做边界检查,由此带来很多缓冲区溢出隐患。最直接的预防方法是编程时严格按照规则对边界进行检查,但实际效果不尽如人意,即使是经过严格培训的程序员也会产生错误。为了防止缓冲区溢出,专家学者研究了很多的检测和预防技术。本文将缓冲区溢出的原理进行分析,并对其检测和预防技术进行一次介绍。
2 缓冲区溢出的原理
缓冲区溢出的原因是由于字符串处理函数(gets,strcpy等)没有对数组的越界加以监视和限制,结果覆盖了老的堆栈数据。
在计算机内的程序是按以下形式存储的,见图1。
01
图1 程序在内存中的存储
缓冲区溢出的造成的影响有两个方面:1)覆盖缓冲区相邻内存中的数据,破坏程序数据的完整性;2)覆盖了前一个栈基指针(ebp)、堆栈中的函数返回地址或函数参数,从而改变程序的流程。
许多C 程序都有缓冲区溢出的漏洞,一方面因为很多程序员在写程序时都只考虑到程序的执行效率而忽视错误检查与出错处理。同时,标准C 库函数本身就存在严重漏洞,如常用的strcat()、strcpy()、sprintf()、vsprintf()、bcopy()、gets()、scanf()等。
3 攻击种类与实施过程
C语言中能改变内存地址内容的语句主要有两类:1)*A=B; /*指针型语句*/;2)A[i]=B; /*数组型语句*/;
其中,A,B均为变量,*A为指针,A[]为数组,i 为数组下标。
在第一 类语句(指针型语句)中,由于A 所指向的内存地址取得B 的值,因而攻击者能利用该声明来改变函数的返回地址。由此可构成第一种攻击方法,又可称为指针型攻击方法。
在第二类语句(数组型语句)中,数组A[]中的第i个元素A[i]取得B 的值。这类攻击方式必须满足下列条件:
1)一个循环声明,用于将用户输入数据复制到一个缓冲区数组,而且不能检查数据量,同时数组必须紧靠变量B;
2)一个循环声明,用于将用户输入数据复制到数组A,而且不能检查A 的上界,每次循环后i的值加1,同时数组A必须紧靠一个返回地址。
在此条件下可构造出两种攻击方式。
您可能关注的文档
最近下载
- 电子测量技术(第5版)全套PPT课件.pptx
- QGDW 1152.2-2014- 电力系统污区分级与外绝缘选择标准 第2部分:直流系统.pdf VIP
- 中小学学三年发展规划(2025-2028).docx VIP
- J-T-G- 5120-2021 公路桥涵养护规范(正式版).docx VIP
- 建筑工程图集 20CJ95-1:装配式保温楼地面建筑构造——FD干式地暖系统.pdf VIP
- 3 电子银行_纵横商务汉语 中级阅读2.pptx VIP
- 阿那亚品牌手册.pdf VIP
- 二氧化碳气瓶瓶阀爆破片爆破浅析 .docx VIP
- 隧道二衬施工缝缺陷处理方案.docx VIP
- 2025年秋学期冀教版小学数学二年级上册教学进度表.docx VIP
文档评论(0)