第22卷 第3期沈 阳 化 工 学 院 学 报
JOURNALOFSHENYANGINSTITUTEOFCHEMICALTECHNOLOGY
2008.9
Vol.22 No.3
Sep.2008
文章编号: 1004-4639(2008)03-0265-04
C语言源程序的缓冲区溢出漏洞分析及解决方案
刘 俊, 张 枫
(沈阳化工学院计算机科学与技术学院,辽宁沈阳110142)
摘 要: 着重分析一些存在缓冲区溢出攻击漏洞的C语言函数,介绍具有哪些特点的C函数容易受到缓冲区溢出攻击,并借此更加深入地了解缓冲区溢出攻击机制.探讨了缓冲区溢出攻击程序的结构.最后提出避免缓冲区溢出攻击的方法.该方法从C函数和攻击程序两方面入手,通过避免或正确使用有缓冲区溢出攻击漏洞的C语言函数;了解恶意程序代码的结构识别恶意程序代码,达到避免缓冲区溢出攻击的目的.关键词: 缓冲区; 溢出; 安全攻击
中图分类号: TP393108 文献标识码: A
缓冲区溢出攻击一直以来都是黑客攻击的主要手段,其原因很大程度上取决于C或C++程序中的许多存在缓冲区溢出漏洞的函数.这些漏洞导致缓冲区溢出相对于其他攻击方式容易实现.缓冲区溢出攻击,轻者可导致计算机系统的混乱,重起或死机,更加严重的会使攻击者有机会得到被攻击主机的超级权限,从而控制主机,执行一些破坏行为.如:偷取重要资料,查看内部保密信息,篡改重要文件,删除有用的数据等等.但由于攻击者取得了被攻击主机的超级权限,他可以删除这台主机活动日志中的记录,使得他能够长期控制这台主机而且还不会被机主发现.其后果非常严重.研究过的相关问题未从C函数的细节剖析C语言的缓冲区溢出机制.本文借C语言中一些不安全的库函数的研究,从更细化方面来深入地说明缓冲区溢出机制的原理,并就避免缓冲区溢出攻击提出一些建议和意见.
[1]
存低地址到高地址依次为:代码段,数据段,堆栈段.其中代码段顾名思义存放的是程序)))机器码和一些只读数据;数据段存放的则是程序中的静态数据;堆栈段存放的是程序中的动态数据,包括一些局部变量,函数中传递的参数等[2].缓冲区溢出就是利用程序在内存堆栈段的溢出来实现的.堆栈的增长方向与内存的方向相反.栈底是内存的高端,栈顶则是内存的低端.栈底指针是不会改变的,出入栈时都是从栈顶进行,即栈顶指针在变化,满足栈的后进先出原则.
当一个函数被调用时,栈中的变化如下:首先将参数入栈;其次是指令寄存器中的EIP作为函数返回地址入栈;然后将基址寄存器中的EBP入栈,最后将所调函数中的局部变量入栈,同时将栈顶指针减去局部变量所用的空间作为新的栈顶[2].以下的代码1:主函数main调用函数function并造成数组越界的过程[3].
#include<stdio1h>#include<string1h>voidfunction(char*str){
charbuffer[1]; strcpy(buffer,str);
1 C函数的分析
111 C语言中函数的存储及执行
函数在内存中的存储,大致分为三段.由内
收稿日期: 2007-05-07
作者简介: 刘俊(1971-),男,辽宁沈阳人,副教授,硕士,主要从事计算机网络方面的研究.
搜索“diyifanwen.net”或“第一范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,第一范文网,提供最新经管营销C语言源程序的缓冲区溢出漏洞分析及解决方案全文阅读和word下载服务。
相关推荐: