用不了两个星期,就会在大多数的LINUX版本中的主要应用程序中发现安全漏洞,从而允许本地用户立即成为root,不管这些软件有多高的质量,确保安全问题是一项艰巨的任务,它必须禁止恶意用户从系统资源中非法获得利益。提供程序源代码是一件好事,受到程序员的欢迎,但同时程序中的瑕疵也为每个人所见,进一步说,这些缺陷将被随机的发现,而发现漏洞的人并不都是怀着善意的。
从系统管理员的角度出发,每日的工作包括阅读有关安全问题的列表,及时升级相关软件包,对于程序员来说,努力地在开发中避免安全隐患比事后修复要好得多。本文将试图定义典型的危险习惯,并提供减少风险的解决方案,由于网络安全问题主要是由于编译错误(危险的cgi-bin脚本)或是系统的bug允许DOS拒绝服务类型攻击来阻止机器从其客户端进行监听,我们将不予讨论网络安全问题,这些问题是和系统管理员或内核开发者有关,但对于程序开发员来说一旦开发计算外部数据(takes into acount external data),他必须保护自己的代码。pine,acroread, netscape access等等的版本在某些情况下允许提高级别进入或产生消息漏洞,事实上,安全的程序是和每个人相关的。
我们将展示用来破坏UNIX系统的方法,当然我们可以仅仅提及或只叙述概次,但我们更乐于完整地解释从而使人们认识到其危险性,这样一来,当调试或开发程序时,你可以避免或更正这些错误,对于每一个被讨论的漏洞,我们将采取同样的步骤。首先,详细讲述要工作的方法,然后讲述如何避免其它每个实例中所采用的安全漏洞是在于广泛应用的软件中。
第一篇讲述理解安全漏洞所需要的基础,包括权限的设置(notion of privileges)和set-uid或set-gid,然后我们将分析基于system() function上的漏洞,因为他们比较好理解。
我们将经常用到小型的C程序来说明,但是,在这些文章中所提到的过程也适用于其它程序语言:perl java shell scripts......一些安全漏洞依赖于语言,但对于system()来说是不正确的权限。在UNIX系统中,用户不是平等的,应用程序也一样,进入文件系统的节点——相应的机器外围设备——依赖于本身严格的控制。一些用户可以进行敏感的操作来维护系统处于最佳状态,被称为UID(用户识别)的数字用来鉴别,为了使事情简单化,一个用户名匹配一个这样的数字,这样的设置在/etc/passwd文件中完成。uid为0默认为root,能够进入系统的每一个角落。他能创建、修改删除每个系统节点,也可以管理机器的物理配置,mount分区,启动网络接口,改变它们的配置和IP地址,或使用系统调用类似nlock()来作用于物理内存,或sched_setscheduler()改变命令机制。在以后的文章中我们将学习Posix.1e特性,它能在应用程序中限制root的权限,但现在让我们假设超级用户在机器上可以做任何事情。
◆◆
评论读取中....
请登录后再发表评论!
◆◆
修改失败,请稍后尝试