野指针:小小的程序错误导致严重安全漏洞

日期: 2008-01-27 作者:Michael Cobb翻译:王震 来源:TechTarget中国 英文

在过去,相当普遍的称为野指针(dangling pointers)的程序错误经常被看作是质量控制问题而不是安全因素。例如在2005年,一个在IIS5.1上的野指针问题被报告给微软,但是两年多仍没有发布修复补丁,而这种类型的bug完全有可能破坏系统或者引起一个严重的安全威胁。       野指针出现在当程序员创建、使用,然后释放内存中一个对象但却没有相应改变对象指针的值时——在这种情况下,产生了一个无效指针。结果是指针错误地指向了一个已使用的内存位置。

当这个指针指向的不再一个合法的对象时,就被认为是“……

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

在过去,相当普遍的称为野指针(dangling pointers)的程序错误经常被看作是质量控制问题而不是安全因素。例如在2005年,一个在IIS5.1上的野指针问题被报告给微软,但是两年多仍没有发布修复补丁,而这种类型的bug完全有可能破坏系统或者引起一个严重的安全威胁。
 
      野指针出现在当程序员创建、使用,然后释放内存中一个对象但却没有相应改变对象指针的值时——在这种情况下,产生了一个无效指针。结果是指针错误地指向了一个已使用的内存位置。当这个指针指向的不再一个合法的对象时,就被认为是“野指针”。因为这个被野指针指向的内存,可能包含完全不同的数据。当一个程序错误地通过野指针访问对象时,不可预期的行为就可能会出现。
 
     最近IBM宣称,在线风险管理公司Watchfire的专家们已经找到一个方法来控制野指针并且使它们指向特定的内存位置。通过发送一个特别精心设计的URL给服务器,研究人员乔纳森•埃佛克和Adi Sharabani发现它们可以破坏一个目标机器并且可以在它上面运行他们自己的加壳代码。用这种方法,一个攻击者可以远程控制或入侵任何一台机器,只要这台机器有一个野指针在它的应用程序中,用大致相同的方法攻击者也可以进行缓冲区溢出攻击。
 
      我们可以看到缓冲区溢出攻击是多么有破坏性和有效性。当一个攻击者可以随便修改计算机内存时,毁坏数据结构、信息泄漏、加大权限和执行恶意代码都是可能出现的后果。尽管野指针在许多成熟的程序中可能被发现,黑客们还是集中关注于网络应用程序,因为在这些程序中包含大量的敏感数据。
 
      野指针很难被程序员定位,因为它们经常是在创造很久后才破坏不相关的数据或者造成系统不稳定。这些bug在低级语言譬如C和C++中很普遍。在像Java和C#高级语言中,野指针是不可能发生的。因为(在Java和C#中),当一个对象被销毁时,指针会被自动处理,并且不用的单元也被回收。不使用这种自动处理指针语言的开发者们需要重新评估他们的应用程序开发步骤。所有的指针在使用后都需要被置为空指针。
 
      灵活的指针是很流行的数据类型,因为它可以很好控制内存。一个灵活的指针很典型的要涉及从计算到回收对象。涉及计算的机器计算那个指向相同对象的指针,一旦计算等于0,对象将被删除。

       一些别的防止野指针的方法包括“墓碑方法”和“锁钥算法”。一旦一个对象被废弃,一个相关的墓碑被自动产生来废弃与之相关的指针。在“锁钥算法”设想中,指针访问是通过比较一组有序的关键字中的两个值来决定的。另外有价值的产品比如Valgrind是一组调试设备,Boehm-Demers-Weiser是一种废弃回收的工具,它可以整理代码,同样可以帮助预防野指针。
 
      因为野指针不再被认为是一个良性问题,开发者们需要调整软件开发步骤以避免野指针出现在产品代码中。因为这个问题远离开质量控制阶段变得太严重,保护措施应该被开发周期早期。使用用高级语言开发,进度会相对的顺利些。对那些使用其它语言开发而处于开发和维护中的程序来说,使用上文提到过的最优方法值得推荐。

相关推荐