|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
您现在的位置: ChinaBeta.cn 中文IT资讯 >> 网盟学院 >> 编程类 >> 其它编程程序 >> 网管技术正文
推荐网管技术让我穿过那道"墙"! 畅游网络应…推荐网管技术主动防御!瑞星杀毒2008抢先评…
推荐网管技术速度超快 Discuz! 6.0.0试用手…推荐网管技术奇虎举证:各杀毒软件均报CNNIC…
推荐网管技术Google Earth 4.2加入繁体中文…推荐网管技术专业防护!瑞星防火墙2008测试…
推荐网管技术挂载RAR文件 从认识到爱上WinM…推荐网管技术让你冲浪随心所欲 如何访问被封…
推荐网管技术轻装上阵!江民杀毒软件2008速…推荐网管技术VMware Fusion苹果版全程图解(…
推荐网管技术VMware Fusion苹果版全程图解(…推荐网管技术从菜鸟出发!征服高清详细评测全…
推荐网管技术VS2008和ASP.NET 3.5使用之初体…推荐网管技术[多图]Ubuntu 7.04 初体验
推荐网管技术东风吹战鼓擂 下载软件你选谁?推荐网管技术若隐若现 Windows XP DirectX …
推荐网管技术GPRS上网全攻略推荐网管技术主流杀毒软件Vista兼容性横评
推荐网管技术基于IRF的网络管理和业务管理解…推荐网管技术83个美丽的Wordpress主题
推荐网管技术软交换网络中的关键路由技术详…推荐网管技术不只是换肤?Windows Mobile 6 …
推荐网管技术css教程–十步学会用css建站(全…推荐网管技术巧妙设置路由 预防网络频繁掉线
推荐网管技术打造网络管理七大绝技推荐网管技术CorelDRAW X3 Service Pack 2 …
推荐网管技术重温经典:回归 Live Messenger…推荐网管技术Oracle数据库补丁分类、安装及…
VC++中利用/GS开关防止缓冲区溢出
Www.ChinaBeta.Cn 更新时间:2006-6-26 阅读次数:

【ChinaBeta.Cn 网盟学院】

缓冲区溢出通常表现为一个最为常见的漏洞而存在于今天的各种软件之中,黑客可以用恶意的输入,从而更改程序的执行流程,由此入侵相应的进程、电脑、或整个域。如果进程运行于一个高度受信的账户之下,如管理员或本地系统账户,那么黑客带来的破坏将是极其严重,并有潜在广泛传播的危险。近几年来爆发的一些"知名"病毒,如红色代码、冲击波、震荡波等等,都源于C/C++代码缓冲区溢出的结果。

  从程序的角度来看,缓冲区溢出只是一个再简单不过的编程错误--都是关于复制一个内存区域的内容到另一个内存区域,而目标内存区域容量太小无法容纳。以下的代码作了简单的演示:

char* source = "A reasonably long string";
char dest[10];
::strcpy(dest, source); 


  在本例中,源字符串的长度为25个字符(包括了空结束符),它对目标内存块来说,无疑太大了,而目标内存块声明在堆栈上;当此代码执行时,将会破坏掉原有堆栈,程序会因为一个访问违例而崩溃。如果此源内存块由外部第三方提供,那么就有可能存在一个漏洞,因为它允许传入函数的内存块以一种特定的方式修改堆栈。

  当在C/C++中调用一个函数时,调用函数的返回地址被存放在堆栈中,因此在被调用函数执行完毕时,执行流程能重新返回到原处。如果调用了一个可能包含潜在缓冲区溢出的函数,返回地址可能会被修改,而且执行流程将会跳到缓冲区数据中指定的地方。通过改变函数的返回地址,攻击者可获取进程中任意位置的代码以执行,一般而言,主要可以两种方式被利用:

  ·如果带有漏洞的程序是已知、且容易访问到的,攻击者可查找某函数的地址,这通常会在所有进程实例的一处固定地址处被找到;并修改堆栈,等着此函数被调用。

  ·要执行的指令可作为缓冲区的一部分传递到进程地址空间,攻击者利用此来完成攻击。

  防范缓冲区溢出

  防范缓冲区溢出最简单的方式是限制复制的数据大小,使其不能大于目标缓冲区容量。虽然此方法看上去微不足道,但实际上,经验证明,要在那些大型的C/C++代码中,完全消除了缓冲区溢出的隐患,是件非常艰巨的任务。另外,使用如 .NET或Java这样的受托管技术,也能极大地降低缓冲区溢出的危险,但把大型项目移植到此技术上,实施起来不太可能也不适当。

  基于堆栈的缓冲区溢出可如此简单地被利用的原因在于,编译器生成的指令,会把函数的返回地址存储在堆栈中,但要认识到,编译器在这个问题中,只扮演了一个小小的角色。从Visual C++.NET(7.0)开始,Visual C++开发小组采取了一种方法,可从编译器方面减少此类问题发生的机率,他们在堆栈中保存函数返回地址的数据之下,插入了一个带有已知数值的cookie,由此,如果缓冲区溢出改变了函数的返回地址值,同样也会覆盖这个cookie,而在函数返回时,一般会对这个cookie进行检测,如果检测到cookie已被修改,就会抛出一个安全异常,而如果这个异常未被处理,此进程就会终止。以下的代码演示了一个带有安全异常处理方法的简单程序:

void _cdecl sec_handler( int code, void *)
{
 if ( code == _SECERR_BUFFER_OVERRUN )
 {
  printf("检测到一个缓冲区溢出。\n");
  exit(1);
 }
}

int main()
{
 _set_security_error_handler( sec_handler );
 //主程序代码在此省略。
}

[1] [2] 下一页  

Google

(责任编辑:hahack)

发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
热门文章 相关报道
普通网管技术 [软件应用]凤凰涅槃 驱动精灵2008归来 (01-03)最新网管技术
普通网管技术 [ASP|ASP.NET]为ASP.NET MVC框架添加AJAX支持 (01-02)最新网管技术
普通网管技术 [JSP|JAVA]从Java到Ruby:献给引路人的策略 (01-02)最新网管技术
普通网管技术 [PHP]PHP多文件上传实例 (01-02)最新网管技术
普通网管技术 [其它编程程序]QQ 静态截图完善实现之改造 CRec… (01-02)最新网管技术
普通网管技术 [其它编程程序]C++运算符重载转换运算符 (01-02)最新网管技术
普通网管技术 [其它编程程序]详细解析C++编写的ATM自动取款机… (01-02)最新网管技术
普通网管技术 [其它编程程序]C++中用vectors改进内存的再分配 (01-02)最新网管技术
普通网管技术 [其它编程程序]C++中的虚函数((((virtual funct… (01-02)最新网管技术
普通网管技术 [其它编程程序]C++中用函数模板实现和优化抽象操… (01-02)最新网管技术
  • C++/VC++ 语言编程的疑难问…

  • 最常见的20种VC++编译错误信…

  • VC++中使用内存映射文件处理…

  • 凯撒加密与解密程序实现

  •   网友评论内容:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    I D *
    邮 箱
    主 页
    评 分 1分 2分 3分 4分 5分
    评 论

    关于我们  中国·国家信息产业部{粤ICP备06006652号}{陇ICP备06002562号}
    版权所有:『AK网盟基地』站长:Hahack | QQ:80505955 | E-mail:Hahack@Gmail.com
    Copyright (C) 2005-2007  akhack.org|chinabeta.cn All Rights Reserved