| | 内容: | | 安全计划 | | 详细行动计划 | | 获取发行版本 | | 参考资料 | | 作者简介 | | 对本文的评价 | |
|
| 相关内容: | | 让 Linux 更安全,第 1 部分:介绍 | | 解决 Linux 中的安全问题 | | 服务器诊所:实用 Linux 安全性 | | Linux 安全编程 | | |
|
| 为安全设置打好基础
Mario Eberlein, IT 架构师, IBM Rene Auberger, 软件 IT 架构师, IBM Wolfram Andreas Richter, IT 架构师, IBM
2004 年 11 月 11 日 惟有谨小慎微者方可幸存,与其他领域一样,在确保 Linux®系统的安全时,这句话也同样适用。幸运的是,有很多安全特性,或者已经编译到内核中,或者已经加入到很多 Linux发行版本中,或者可以以开放源代码应用程序的形式单独获得。第 2 部分涵盖了清单评估、风险分析、确定用户类别和访问特权,以及安全获得 Linux发行版本的更详细行动计划和步骤。 在此系列文章中,您将看到如何以一种安全的方法来计划、设计、安装、配置和维护运行 Linux 的系统。除了安全概念的理论概述、安装问题、潜在的威胁及其作用以外,您还将得到关于如何保护和加固基于 Linux 的系统的实用建议。我们将讨论最小化安装、加固 Linux 安装、授权/认证、本地和网络安全、攻击和如何防御攻击,以及数据安全、病毒和恶意程序。 本系列的 第 1 部分 通过给出关于安全概念和潜在威胁的一般理解让您开始上手。本文引导您进行到下一个阶段,列出当计划一个安全安装时需要谨记的事情。 安全计划 第一步 —— 在插入发行版本 CD 并启动安装程序之前 —— 是制定一个安全计划:确定系统将要提供什么服务,要使用什么硬件,需要什么软件,如何组织安装。通过在实际安装前认真地制定这样一个计划,在非常早的阶段就可以确定并排除很多可能的安全问题。这样做是有益处的,因为它有助于最小化系统入侵或者断电的风险。而且,它为发生攻击或者发布软件漏洞和补丁时进行快速反应提供了一个坚实的基础。 当考虑安全策略时,重要的是要注意计算机系统的安全性与可用性之间总是会有一个折衷。如果因为复杂的设置和维护以及可用性的缺乏而无法使用,那么最完善的安全特性也没有意义。另外,极度复杂的、极其耗费处理能力的加密算法实际上会锁住系统,几乎不留下任何计算能力给真正的任务使用,那么它又有什么用呢? 要制定安全计划,您应该执行下面的步骤,收集所有相关信息: 进行清单评估时要回答的问题
-
使用什么硬件? 指定硬件,它的位置,以及任何可能的特定安全特性(比如加锁的而且防火的房间)。列出网络接口、协议、地址以及相关的名称。 -
应该安装什么软件和操作系统? 指定应用程序及它们的数量,检查每个软件的许可证。 -
存储什么类型的数据,它的危险程度如何? 确定数据的种类。对于每一个确定的种类,根据其机密性和稳私考虑数据的危险程度。 -
谁对系统负责? 为系统指定负责人(例如,一个单独的系统管理员,一个专门的 IT 服务部门,或者一个支持提供商)。 | 完成清单评估 获得安全计划的第一个步骤是,评估清单以了解哪些是必须要保证安全的(参见右面的侧栏)。这样的清单集中关注计算机的物理硬件、网络连接、接口,并定义其职责。所有从清单评估得到的信息都应记入文档。记录文档的一个合适的方法可以是一个包含有每台计算机所有相关信息的电子数据表。 定义网络服务和软件 对于每一台计算机,重要的是要定义它使用或者提供哪些网络服务,以及使用或提供服务的软件应用程序。网络服务(除了其他内容以外,可能包括 DNS、文件传输、打印机和文件共享、Web/Internet、电子邮件和数据库)应该记录在部署计划之中,这个计划还包括所使用的软件程序包以及此计算机是配置为客户机、服务器还是同时具备两个角色。稍后,基于软件和服务的列表,您应该安装一个只包含必需软件的绝对最小化的系统,这样可以使得具有隐藏安全漏洞的可能性最低。 除了定义软件服务以外,您还需要确定用于通信的协议,这也会带来一些安全问题。网络传输是否需要通过基于 SSL 的 HTTP(https)进行加密,还是普通的 HTTP 就足够了?文件传输协议是否强制用户进行认证(比如使用 sftp),或者对必需的安全层级来说匿名的、不加密的访问是否合适? 通常,客户机工作站被配置为使用多个网络服务。不过,服务器应该专门提供一种单一的服务,因为这样会简化配置并降低发生配置错误的可能性。应该由有限数目用户使用的服务应该通过防火墙保护起来以防止不必要的访问。防火墙可以有效地实现管理两个或多个网络之间网络传输的安全策略。 完成风险分析 要在系统的安全性与可用性之间找到适当的折衷,重要的是要针对存储在计算上的数据的类型进行风险分析。要弄清楚需要采取哪种类型的安全措施来保护资源的机密性、完整性和可用性,第一个步骤就是进行风险分析。 风险分析基于清单评估 —— 它声明了存储的是什么类型的数据 —— 集中关注系统受到安全威胁的可能性以及相继而来的后果。换句话说,对于清单评估中定义的每一类数据,您都需要对此数据受到非授权访问的可能性以及这种事件的影响进行评估。这种评估量化为三个级别:高、中、低。所必需的安全级别是事件的概率及其影响的平均水平。 确定用户种类和访问特权 您应该根据其特权和访问权限列出计算机系统的主要用户,或者用户的种类。对于桌面计算机而言,这可能是相当简单的,因为用户的数目通常较少。不过,基于类似的工作分工或对数据资源和应用程序的类似需要来定义用户分类是有意义的。 对服务器来说,确定用户种类通常非常复杂。管理员通常可以访问服务和操作系统工具的配置。除此以外,还有根据需要使用相应服务的不同用户(本地的和远程的用户)。连接到因特网上的公共服务器基本上是任何人都可以访问的,而内部服务器的用户可能会根据工作角色、部门或者办公室位置进行分类。所以,如果需要,您应该区分本地和远程用户以及临时和来宾用户。对于已经确认的用户种类,定义他们需要访问和操作(例如,读、创建、修改或删除数据)哪些数据资源。 详细行动计划 既然安装的总体环境和目标都已经完善地记入文档,您现在可以深入细节了 —— 使用什么软件,如何安装和配置它,等等。您编写的计划应该详细到能回答出在安装过程中出现的任何问题的程度。 检查源代码 Ken Thompson 是 UNIX 的创始人之一,他在 Relections on trusting trust 中讨论了为了设法使源代码不能揭示安全问题而采取的很多步骤。 首先,他为 login 命令打上补丁,使其包含一个后门,这样使他可以使用一个特定的密码登录进入任何 UNIX 系统。 然后,他给 C 编译器打上补丁,使其当编译 login 命令时进行检测。C 编译器将自动把后门插入到 login 程序中,所以,不需要在 login 命令的源代码中保留后门。 然后,他对 C 编译器进行修改,使其在通过源代码编译 C 编译器本身时进行检测,并自动添加 login-detection-and-patching 代码和 C-compiler-detection-and-patching 代码。 结果得到一个源代码中不包含任何后门痕迹的系统。 | 选择 Linux 发行版本和服务器软件程序包 这实际上是两个单独的步骤,不过先做什么要取决于您的情况。在很多情况下,由于组织的政策、企业许可证协议或者可用的技术,要使用的发行版本已经确定。有时,您会先关注可以满足安装用途的软件程序包的选择;然后,根据程序包的先决条件、哪个发行版本包含立即可用的程序包、或者发行版本的价格,来选择发行版本。不过,通常两者是结合在一起的,您必须反复缩小选择范围。不过,您永远不应该仅仅因为您手边有某个安装媒体而选择安装那个发行版本。 对于每一种使用情形(邮件服务器、文件服务器、Web 服务器、字处理等等)都有多种软件程序包可以满足其用途。尤其当用户不直接与软件程序包打交道时(比如由专门团队管理的服务器软件),您选择更为安全的软件程序包时所受的限制就会更少。要对各种 Web 服务器、邮件传输代理、数据库管理系统等,或者甚至是整个发行版本的安全方面进行评价,最好首先搜索 BugTraq 或 Full Disclosure 等邮件列表(参见 参考资料 中关于这些的链接)。 基于软件程序包的历史问题来判断其安全性,这实际上相当于看着后窗玻璃驾驶汽车 —— 您不知道将要遇到的是什么,但是您可以得知您是在直路上还是在弯路上。另一个应该谨记的问题是,相对于很少用到的,经常用的软件程序包受到的检查更多。仅仅因为“Tom's HyperWeb Server v0.0.2”在这些邮件列表上没有任何已知的 bug,并不意味着它就没有 bug。 能在源代码层次上对任何软件程序包进行审计,经常被列举为开放源代码软件的优势之一。不过,可用时间、技术和预算等现实的约束使得这种方法在几乎所有情形下都是不切实际的,所以您不得不依赖于程序员 和/或 程序包维护者和发行者的诚实。 您还应该将打算如何运行一个服务记入文档。需要考虑的一些事情: - 使用 xinetd 让您可以调整哪个服务可以提供给谁,可以强制限制防止拒绝服务(denial-of-service)攻击,可以将服务调用日志记录到一个集中的位置。
- TCP 包装器 提供了一种方法,以将服务限制在特定范围的请求地址内,并将请求记录到日志。
- chroot jails 创建一个环境,这个环境是您实际安装的一个子集。即使服务受到攻击,被影响的也只是这个子集环境。由于它基于目录树的隐藏部分,所以它最适用于那些操作在可以方便地包括到那个树中的小的而且独立的文件集上的服务器。
附加的软件程序包 除了计划的使用情形所需要的软件之外,安装过程很可能还会安装其他软件。您需要的软件(实际的操作系统:Linux 内核、共享库、基本的实用程序等等),您想要的软件(增强安全性的软件,比如配额、防火墙和审计),以及您不想要的软件(不必需的程序包)。 为了方便,发行版本通常向默认安装添加保持系统运行和满足其用途所不必要的软件程序包。在运行期没有用户交互的系统中,图形用户界面、多媒体软件和游戏都属于这种不必要的软件。 任何安装到机器上的软件都必然会占用资源并降低机器的安全性,引入可能被利用的潜在的 bug: - 外部攻击者可以利用不必要的服务在服务器上执行代码,比如通过缓存溢出(参见 参考资料 中关于此漏洞讨论的链接)。
- 管理员也是人,所以容易犯错误。没有安装的软件不可能被错误地配置,这样就封住了另外的潜在安全漏洞。
- 即使软件不是一直在运行,也没有暴露在网络上,也会增加管理员的负担,因为在发现 bug 时管理员要进行安全修订。假定某个服务中的一个瑕疵被发现,而且发生了入侵。攻击者现在可以在用户的安全上下文中在服务器上执行程序。现在,机器上任何可用的程序都可能被攻击者利用,或者是提升他/她的特权,获取安全相关的信息,或者攻击可能深藏在组织的防火墙之后的其他系统。
- 社交工程技巧(social engineering techniques)经常欺骗合法用户(乃至管理员)去运行最终影响安全的程序,这是为什么要尽可能少地安装程序的另一个原因。
关于增强安全性的程序包,您应该考虑安装下面这些: - 配额: 应该使用配额来限制用户(包括 ftpd 或 httpd 等后台进程的用户)可用的资源。这样可以挫败本地拒绝服务(DoS)攻击,那种攻击可能通过“fork bomb”用光所有可用的进程 ID,启动很多极其消耗内存的程序,或者消耗分区的全部空闲空间。大部分当前发行版本都包含配额,在大部分情况下其程序包称为“quota”。通过 PAM 可以实现除了磁盘配额以外的其他限制,它默认也会安装。在本系列的下一篇文章中将描述那些限制的配制。
- 防火墙: 通常,防火墙会根据定义的规则集合制止网络通信。所以,它的基本任务是通过阻塞不必要的传输来避免网络入侵。网络防火墙工作于 TCP/IP 栈层次之上,决定数据包是否可以通过(取决于规则集合)。
- 入侵检测: 入侵检测系统(intrusion detection system,IDS)的主要任务是,通过识别到来的 shellcode、病毒、恶意软件(malware)或者特洛伊木马等安全缺口,检测进入网络或者计算机的攻击或入侵。
- 审计: 审计指的是通过建立数据处于其期望状态的基线来检测敏感数据或配置文件的改变。当发生意外改变时,对基线的改变会被报告,使得管理员可以快速反应并进行恢复。
常见工具的安全代替者 任务/使用情形 | 老的不安全的应用程序 | 推荐的安全代替者 | 远程访问命令行 | | | 图形方式访问远程系统 | | - 基于 ssh 的 X Window
- 基于 ssh 的 VNC
- rdesktop
| 文件传输 | | | 镜像/备份 | | | | 使用安全的工具程序版本 当前仍然有很多早期 Internet 应用程序存在,并且在使用中。开发它们时,安全还不是个大问题,因为那时 Internet 参与者很少。近些年,随着因特网的发展和迅速成长,安全性的缺乏使得那些应用程序不适于当前的应用。这就是开发它们的代替者的原因,这些代替者可以以安全的方式执行相同的任务 —— 现在的任务还是像在早期时一样重要。在这里,“安全的方式”的基本意思是: - 对传输的数据(包括用户凭证和其他用户相关数据)加密,防止第三方可以理解传输的信息。
- 使用用户名和密码或者数字签名等凭证来识别用户和系统。
尽管这些代替者通常被称为“安全的标准的应用程序”,但是它们并不是绝对不会受攻击。这表示,虽然您经过深入考虑使用了安全的版本而不是不安全的版本,您仍需要建立另外的观念和步骤来保护您的系统。侧栏 常见工具的安全代替者 中列出了适用于所选常见任务的应用程序。这个列表不是(也不可能是)完全的,所以,即使是要完成那些没有在侧栏中列出的任务,您也应该始终考虑使用安全的应用程序。 分区 选择的应用程序以及安装所使用的源代码并不是安全性的惟一因素。要减少那种试图填满可用磁盘空间的 DoS 攻击带来的影响,请确保您至少为下面这些目录计划专门的分区: - /home: 使用户数据与系统无关。当您执行备份和恢复操作、升级或切换操作系统、或者在系统中迁移用户时,这非常有用。
- /var: 保存服务器的日志和运行时数据。通过将其安放于一个单独的文件系统,如果您成为某个 DoS 攻击的目标,则数据不会填满您全部的空闲空间。
- /tmp: 类似于 /var,这个目录对用户进程来说是可写的,使得它成为 DoS 攻击的一个目标。比使用单独的文件系统更好的办法是使用 tmpfs,它加速了文件的访问速度,并在重新引导时自动清空文件系统的内容。
- /boot: 容纳有 Linux 内核、初始驱动程序以及引导加载器数据。不必为了引导过程而挂载这个分区,因为引导加载器将内核加载为一系列扇区,以从硬盘读取数据。如果在正常的操作中没有挂载它,那么您就不会意外地覆盖这些文件。
获取发行版本 可以通过很多不同的途径获得 Linux 发行版本:热缩塑料包包装的 CD/DVD 发行版本、从其他人那里拷贝、下载,等等。如果系统在安装的时候就已经被破坏,那么它根本是没有价值的,因此您必须确保基于“干净”的来源进行安装 —— 确认代码没有后门。实际上,这一负担转嫁给了那些编制包含安装文件的 CD/DVD 组的发行者。虽然您可以信任发行者,不过,根据发行者公布的校验和来校验安装媒体的校验和以确定媒体是正品,仍不失为一个良好的习惯做法。 如何校验安装媒体 要校验 MD5 校验和,您可以使用 $ md5sum /path/to/iso/image.iso 或 $ md5sum /dev/cdrom 来分别校验 ISO 映象或者 CD。计算出的校验和必须与发行者公开的相匹配。如果您通过 Web 得到发布的校验和,那么要确保使用 https,并查看连接中使用的凭证,以确保校验和的发布者是真实的。 | 不推荐通过网络或者因特网进行安装 —— 尽管技术上可行。一个站点可能(比如,通过欺骗)将自己伪装为一个可信任的安装源,并提供加入了后门的修改过的软件程序包,使得在安装后入侵者可以不费力地接管系统。当然,可**以通过内部网络服务器进行安装,例如当来源已知而且合法时。 刚刚安装的操作系统通常不能马上使用,可能没有安装最新安全补丁。此时是最容易受到攻击的(参见 参考资料 中一篇关于未打补丁的系统预期生存期的文章的链接),在从安装过程直到完成配置步骤期间,应该从 Internet 上隔离出来,或者至少是在一个安全的网段。在本系列的下一篇文章中将讨论这些步骤。 安装后,应该通过第二台(有适当保护的)计算机从 Internet 上下载最新的安全补丁和更新。同样,必须选择可信任的安装来源来下载补丁。可以通过严肃的提供者所给出的校验和或者散列来检验下载的安装文件的完整性。 参考资料 - 您可以参阅本文在 developerWorks 全球站点上的 英文原文。
- 要获得安全性相关参考资料的详尽列表,请阅读本系列的第一篇 让 Linux 更安全,第 1 部分:介绍 (developerWorks,2004 年 7 月)。
- Develop a computer deployment plan that includes security issues 是一个来自 Security Improvement Modules 的 实践。
- 您应该阅读的另一个 CERT 模块是 Deploying Firewalls。
- BugTraq archive 给出了关于多种安全风险的不断发展的更新。
- Full Disclosure 是只允许会员使用的安全讨论列表。
- Smashing the stack for fun and profit 给出了关于缓存溢出以及如何利用它们的讨论。
- Securing Debian HOWTO 给出了一个完善的配置清单,也可用于其他发行版本。
- LinuxLinks 的 安全发行版本列表 是关于得到加强的 Linux 发行版本的列表。
- 在 SourceForge.net 上的 Linux DiskQuota project page 中可以找到管理配额的工具。
- Quota mini-HOWTO Chapter "installation and configuration" 给出了 quotas 的安装和构建说明。
- 如果您想大致了解攻击有多频繁,以及在 Internet 中没有打补丁的服务器可以期望生存多长时间,请阅读 Honeynet Project 的 Know Your Enemy: Statistics。
- SANS Institute 有一篇短文,展示了收集的 生存时间数据,即某个 IP 地址成为某个蠕虫的目标之前所经历的平均时间。
- Best Practices for UNIX chroot() Operations 讨论了 chroot() 并介绍了如何最大限度地利用它。
- 要获得关于那些提供安全的 Linux 环境的工作的全面概述和资源指南,请阅读 解决 Linux 中的安全问题(developerWorks,2001 年 6 月)。
- 服务器诊所:实用 Linux 安全性( developerWorks,2002 年 10 月)强调指出合理的用户管理是良好安全的开始。
- developerWorks 的 Linux 安全编程 专栏是一个即将推出的系列,旨在帮助您为 Linux 编写安全的程序。
- 在 developerWorks Linux 专区 可以找到更多为 Linux 开发者准备的参考资料。
- 自 developerWorks 的 Speed-start your Linux app 专区下载可以运行于 Linux 之上的 IBM 中间件产品的免费测试版本,包括 WebSphere® Studio Application Developer、WebSphere Application Server、DB2® Universal Database、Tivoli® Aclearcase/" target="_blank" >ccess Manager 和 Tivoli Directory Server,查找 how-to 文章和技术支持。
- 通过参与 developerWorks blogs 加入到 developerWorks 社区。
- 在 Developer Bookstore Linux 专栏中定购 打折出售的 Linux 书籍。
作者简介 MarioEberlein 是一名致力于随需应变商务应用程序的 IT 架构师。他于 1998 年 10 月加入 IBM,当前在 IBM GlobalServices 从事客户项目的工作。Mario 拥有科学学士学位,当前正在攻读 Business Administration 的硕士学位,并且具有 7 年的 Linux 经验。他是位于 EMEA Central Region 的 IBM Linux SecurityWorkgroup 的领导。您可以通过 m_eberlein@de.ibm.com 与 Mario 联系。 | ReneAuberger 是 IBM Software Group 的一名软件 IT 架构师。他主要与来自德国的公共部门(一个对 Linux有浓厚兴趣的客户)的客户一起工作。1996 年 Rene 开始从事 Linux 方面的工作,从那时起就以各种形式为了不同的目的而使用Linux。他是德国、奥地利和瑞典的 Software Group 的 Linux 专业领导,可以通过 rene.auberger@de.ibm.com 与他联系。
| WolframAndreas Richter 是 IBM Software Group 的一名商务集成顾问和 IT 专家。自 1995 年加入 IBM起,Wolfram 已经涉足了很多学科领域,范围从应用程序开发到管理教育。他有八年的 Linux 经验,拥有位于德国斯图加特的University of Cooperative Education 的科学学士学位,以及英国 Henley ManagementCollege 的 Business Administration 硕士学位。在业余时间,Wolfram 喜欢体育运动、骑摩托车和外出。您可以通过
|
|