安全编程

2009-05-13 04:29:29来源:未知 阅读 ()

新老客户大回馈,云服务器低至5折

软件的容易破解往往是由于编程人的原因,要相对的根除缺陷,要做到最小化特权。
安全的程序必须最小化特权,以降低 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 更安全的程序。本文讨论了如何最小化特权,您可以将同样的思想应用到您的程序中。
最小化特权的基础
实际应用的程序会有缺陷。不是我们希望那样,但是确实是有。复杂的需求、日程的压力和环境的变化使得不太可能得到实用的无缺陷的程序。甚至那些通过复杂而且精确的技术正式地证明是正确的程序,也会有缺陷。为什么?其中一个原因是,验证必须做很多假设,而且通常这些假设并不是完全正确。无论如何,出于种种原因,大部分程序没有得到严格的检验。而且,即使今天没有任何缺陷(不太可能),日后维护的改变或者环境的改变都可能会引入缺陷。所以,要处理实际的问题,我们不得不以某种方式来开发安全的程序, 尽管 我们的程序中有缺陷。
尽管有这些缺陷,对安全编程来说最重要的方法是 最小化特权。特权只是允许去做并不是 每个人 都可以做的事情。在类 UNIX 系统中,拥有“root”用户、其他用户或者一个组的成员的特权是最常见的特权种类。一些系统让您可以授与读或写特定文件的特权。不过,不管怎么样,要最小化特权:
  • 只为程序中需要特权的部分授与特权
  • 只授与部分绝对需要的具体特权
  • 将特权的有效时间或者可以有效的时间限制到绝对最小
    这些其实是目标,不是绝对的。您的基础组织(比如您的操作系统或者虚拟机)可能使得严格完成这些并不容易,或者严格完成这些可能会很复杂,而导致在尝试严格完成时引入更多缺陷。但是,你距离这些目标越近,缺陷导致安全问题的可能性就越低。即使缺陷导致了安全问题,它导致的安全问题的严重性可能会更低。而且,如果您可以确保只有小部分程序拥有特定的特权,您就可以用大量额外的时间来确保 那 一部分能抵御攻击。这个思想并不新; Saltzer 和 Schroeder 的优秀的 1975 论文讨论了安全的原理,明确地将最小化特权作为一个原则。有一些思想是永恒的,比如最小化特权。
    接下来的三节将依次讨论这些目标,包括如何在类 UNIX 系统中实现他们。然后,我们将讨论 FreeBSD 和 Linux 中可用的一些特别的机制,包括对 NSA 的 Security-Enhanced Linux(SELinux)的讨论。

    标签:

    版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
    特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

  • 上一篇:unix系统操作命令大全

    下一篇:vi