unix安全编程: 最小化特权

豆豆网   技术应用频道   2007年04月13日  【字号: 收藏本文

本文详细介绍unix安全编程: 最小化特权

  安全的程序必须最小化特权,以降低 bug 转化为安全缺陷的可能性。本文讨论了如何通过最小化有特权的模块、授与的特权以及特权的有效时间来最小化特权。文章不仅讨论了一些传统的类 UNIX 特权机制,还讨论了较新的机制,如 FreeBSD 的 jail(),Linux 安全模块(Linux Security Modules,LSM)框架,以及 Security-Enhanced Linux(SELinux)。

  2003 年 3 月 3 日,Internet Security Systems 对 Sendmail 中的一个严重的漏洞提出了警告。所有的电子邮件都通过邮件传输代理(mail transfer agent,MTA)来传输,Sendmail 则是最流行的 MTA,所以这个警告影响了世界范围内的很多组织。问题在于,按通常的配置,精心设置了“from”、 “to”或者“cc”域的电子邮件消息可以让发送者完全(root)控制任何一台运行着 Sendmail 的机器。更严重的是,一般的防火墙将 不能保护其内部的机器免受这种攻击。

  造成这一漏洞的直接原因是,Sendmail 的一个安全检测是有缺陷的,可以发生缓冲区溢出。不过,一个重要的作用因素是,Sendmail 经常被安装为一个单一的“setuid root”程序,对运行它的系统有完全的控制权限。这样,Sendmail 中的任何缺陷都可以让攻击者直接控制整个系统。

  这个设计是必须的吗?不是;Wietse Venema 的 Postfix 是一个常见的可以与之匹敌的 MTA。类似于 Sendmail,Postfix 会去做很多安全检测,不过,为了 最小化特权,Postfix 设计为一组模块。结果,Postfix 通常被认为是比 Sendmail 更安全的程序。本文讨论了如何最小化特权,您可以将同样的思想应用到您的程序中。

  最小化特权的基础

  实际应用的程序会有缺陷。不是我们希望那样,但是确实是有。复杂的需求、日程的压力和环境的变化使得不太可能得到实用的无缺陷的程序。甚至那些通过复杂而且精确的技术正式地证明是正确的程序,也会有缺陷。为什么?其中一个原因是,验证必须做很多假设,而且通常这些假设并不是完全正确。无论如何,出于种种原因,大部分程序没有得到严格的检验。而且,即使今天没有任何缺陷(不太可能),日后维护的改变或者环境的改变都可能会引入缺陷。所以,要处理实际的问题,我们不得不以某种方式来开发安全的程序, 尽管 我们的程序中有缺陷。

作者:David A. Wheeler    责编:豆豆技术应用

正在加载评论...