- 1、本文档共9页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
一种防止堆缓冲区溢出的新方法,如何防止缓冲区溢出,防止缓冲区溢出,缓冲区溢出,缓冲区溢出攻击,缓冲区溢出漏洞,缓冲区溢出攻击原理,缓冲区溢出原理,q版缓冲区溢出教程,被缓冲区溢出保护阻挡
第22卷第2期 中国科学院研究生院学报 V01.22No.2
2005年3月 JournaloftheGraduateSchooloftheChinese ofSciences March20Q5
Academy
文章编号:1002.1175(2005)02.0218.08
一种防止堆缓冲区溢出的新方法*
邱晓鹏+ 张玉清 冯登国
(信息安全国家重点实验室(中国科学院研究生院),北京100049;中国科学院研究生院国家计算机网络入侵防范中心,北京100049)
(2004年6月4日收稿;2004年7月2013收修改稿)
Qiu newmethodt0 GraduateSchool Chinese
XP,ZhangYQ,Fe嘴DG.A preventheapoverflows.Journa/D,theo,the
o,&ie_tce$,2005,22(2):218—225
Academy
■●
摘 要 缓冲区溢出是当今计算机安全所面临的重大威胁.首先分析了堆缓冲区溢出的原理,
然后提出了一种新的内存管理机制,这种机制可以根据缓冲区的大小,自我进行内存管理,从
而有效地防止堆缓冲区溢出的发生.
关键词 缓冲区溢出,堆,内存管理,安全编程
中图分类号TP393.08
1 引言
当前,缓冲区溢出漏洞是互联网和计算机系统中最普遍也是威胁最大的安全漏洞.根据统计,2003
地址空间位置中的不同,可以分为两类:一类为基于栈的缓冲区溢出;一类为基于堆的缓冲区溢出.
栈溢出的问题已经广为人知,也出现了很多的解决方法.比如越来越多的操作系统商家增加了不可
执行堆栈的补丁;一些个人也提供了自己的补丁,像Solar
kernel
patch;也有一些人开发了一些编译器来防止堆栈溢出,像Crispin
等∞1.这些方法都在一定程度上可以减少由栈溢出导致的安全问题,但是却不能防止作用于Heap段或
者BSS段的堆溢出.在大多数的操作系统中,Heap和BSS段都是可写、可执行的.这就使得堆溢出成为
攻击的另一个热点H-.
本文着重研究了防止堆缓冲区溢出的方法,并以Linux操作系统为例,在分析了堆缓冲区溢出的原
理之后,提出了一种能够自我管理的缓冲区控制方式,有效解决了堆缓冲区溢出的问题.
2堆缓冲区溢出原理
2.1进程地址空间的布局
任何一个程序通常都包括代码段和数据段,这些代码和数据本身都是静态的.程序要想运行,首先
要由操作系统负责为其创建进程,并且在进程的虚拟地址空间中为其代码段和数据段建立映射.但是只
有代码段和数据段是不够的,进程在运行过程中还要有其动态环境,其中最重要的就是堆栈b].在Hnux
操作系统中,进程地址空间布局如图1所示.
*北京市科技计划项目(H020120090530)资助
十E—mail:qiuxp@nipe.org.ca
万方数据
第2期 邱晓鹏,等:一种防止堆缓冲区溢出的新方法 219
栈段(Stack)通常用来存储函数参数、返回地址等,由内存高端地址向低端地址
增长.堆(Heap)段,是由应用程序动态分配的内存区,在Linux系统中,通常为用H竹闻峒
Stack
malloc(),calloc()和realloc()函数开辟的内存单元.BSS段包含未被初始化的数据,
l
在程序运行的时候才被分配.在被写入数据前,它始终保持全零.在大部分的系统 ●●●
文档评论(0)