LINKS

 

 

[回首页]

贝尔研究所推出防止缓存溢出的“万能药”

  美国Lucent Technologies公司的贝尔研究所于4月20日推出一种名为“libsafe”的免费软件,该软件是用来防止名为“缓存溢出”这种常见安全漏洞的“万能药”。该软件可以防止导致产生漏洞的大部分“程序错误”的发生。该软件运行时不依赖于应用程序的种类,运行时检测缓存溢出从而防患于未然。原有的应用软件可以原封不动地使用,无须将应用软件修改为对应libsafe的软件。

  如果缓存溢出被人恶意利用,则服务器几乎肯定会受到入侵,因此缓存溢出是一种相当严重的安全漏洞。由于此安全漏洞经常发生在Web服务器以及电子邮件服务器等,所以一直令系统管理人员头痛不已。这次由于开发出能够解决该问题的万能药,估计能够大大减轻系统管理人员的负担。

  libsafe起初为面向Linux开发的软件,不过由于并未使用Linux所独有的构造,因此很容易移植到Solaris等UNIX以及Windows NT上。另外,libsafe虽然也利用了一些用来运行Linux的美国英特尔公司x86系列微处理器的功能,但由于其它微处理器也具有该功能,所以很容易移植。

替换C语言标准程序库

  libsafe是在被很多应用程序调用的“C语言标准程序库”的基础上加以改良而来的。该软件着眼于导致缓存溢出的调用标准程序库时的程序错误,当现有的标准程序库用libsafe替换后,libsafe便可阻止利用该错误的攻击。

  程序员在编写程序时,经常在调用标准程序库中用来复制数据的strcpy函数(子程序)上出现错误。因此在运行strcpy之前需要由应用方对复制的数据大小是否能够刚好容纳到复制目标的内存区域中进行确认,即需要进行所谓的“Boundary Check”(界限确认)。如果没有进行该确认工作就有可能发生缓存溢出。针对这种情况,libsafe中的strcpy是在函数内部进行Boundary Check。这样,即使应用程序忘记进行Boundary Check作业,也不会因此发生缓存溢出。C语言标准程序库中还有其它的函数将Boundary Check工作交给应用程序去做,而在libsafe中则将这些函数全部替换为具有Boundary Check功能的函数。

  Linux中的标准程序库为DLL(动态链接库)格式,Web网站等服务器应用程序在运行时可以调用。因此,当将程序库用libsafe替换后还可以用来防止现有的应用程序发生缓存溢出。美国的Red Hat公司以及美国的Turbo Linux公司计划在发行Linux时标准配备libsafe。

  使用libsafe后,由于进行Boundary Check,应用软件的运行速度会有所减慢,不过实际测试结果表明,速度的降低小到可以忽视的程度。该研究所在利用具有缓存溢出问题的几种应用程序进行测试后,确认问题确实得到了解决。 (Nikkei Internet Technology)

(,2000-05-10)