SecurityIssuesinPerlScripts[5]

[入库:2005年9月21日] [更新:2007年3月24日]

本文简介:

 通常一个Perl程序是以执行它的用户的权限来运行的。通过产生一个setuid脚本,它的有效用户的ID可以设定成更高的权限,这个权限使这个用户可以访问他实际没有访问权限的资源,比如passwd程序使用setuid来获取对系统password文件的写的权限,这样允许用户来更改自已的密码,因为执行程序是通过CGI界而来执行的,该界面是在使用网络服务器的用户权限下运行的,CGI程序员经常 试图使用setuid技巧来让他们的脚本执行一些恶作剧。这有可能用,但也可能十分危险,对一个事情,如果一个攻击者发现一各方法可以利用脚本的弱点他们不仅是获得访误问系统的权限,但是他们会用有效的UID的特权来获得存在着另外几种类似的种族状况,在一个程序当中,这类缺陷是比较容易监控的,尤其是对有经验的程序员来说,目前相关方面的工作正在积极的探索着。关于这个问题,目前还没有一个既容易又完全有效的解决方法,常常在种族状况存在的可能情况下,用到的最好的方法是使用原子操作方式来进行,这就意味着仅仅使用一种系统来同时检查和生存档案。而不必使用处理器,在二者之间进行切换。当然,这不可能是常有的。
  另外我们所作的一种标准模式是使用SYSOPEN来确定一种只读模式,不必再设定删减标志。
 通过这种方法,即使我们的文件名确实已经形成,当我们打开文件进行写操作的时候 ,我们也不会破坏文件。注意:Fcnt1模快必须包含进来,以便让sysopen()函数起作用,因为这个模块是如下常数,O_RDONLY, O_WRONLY, O_CREAT,等被定义的地方。

缓冲区溢出和perl
 一般来说,perl脚本是不容易发生缓冲区溢出的,因为perl能在需要的时候动态的扩展它的数据结构。Perl跟踪为每个字符串分配的大小。在一个字符串每次被赋值之前,perl保证有足够的空间可以利用,如果需要的话,也可以为那个字符串分配更多的空间。
  然而在一些较老的perl实现方法中有几种熟为人知的缓冲区溢出情形。一个明显的例子是5。003版本会因为缓冲区溢出而崩溃。所有的suidperl版本(一种设计用来工作在为某些内核)都是在早于5。004版本的perl的不同分类的基础上建立起来的。

结论:
  在我们以后的文章中,我们将会化一定的时间来熟悉perl提供给我们的安全特性,尤其是perl的”taint 模式“,并且,我们将会证明,如果我们不小心的话,即使在如此坚固的安全机制下,依然可能会出现的一些问题。在学习perl的这些方面以及一些典型的例子的时候。我们的目标是为了培养我们的一种直觉,这种直觉能帮助我们在看perl脚本的第一眼时就能够意识到其中的安全问题,以避免在我们的程序中犯类似的错误。

本文关键:SecurityIssuesinPerlScripts
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top