为安全设置打好基础

By | 2018年6月12日
目录
[隐藏]

本文引导您进行到下一个阶段,列出当计划 一个安全安装时需要谨记的事情。

安全计划

第一步 —— 在插入发行版本 CD 并启动安装程序之前 —— 是制定一个安全计划:确定系统将要提供什么服务, 要使用什么硬件,需要什么软件,如何组织安装。通过在实际安装前认真地制定这样一个计划,在非常早 的阶段就可以确定并排除很多可能的安全问题。这样做是有益处的,因为它有助于最小化系统入侵或者断电 的风险。而且,它为发生攻击或者发布软件漏洞和补丁时进行快速反应提供了一个坚实的基础。

当考虑安全策略时,重要的是要注意计算机系统的安全性与可用性之间总是会有一个折衷。如果因为复杂的设置和 维护以及可用性的缺乏而无法使用,那么最完善的安全特性也没有意义。另外,极度复杂的、极其耗费处理能力的 加密算法实际上会锁住系统,几乎不留下任何计算能力给真正的任务使用,那么它又有什么用呢?

要制定安全计划,您应该执行下面的步骤,收集所有相关信息:

完成清单评估

获得安全计划的第一个步骤是,评估清单以了解哪些是必须要保证安全的(参见右面的侧栏)。 这样的清单集中关注计算机的物理硬件、网络连接、接口,并定义其职责。所有从清单评估得 到的信息都应记入文档。记录文档的一个合适的方法可以是一个包含有每台计算机所有相关信息的 电子数据表。

定义网络服务和软件

对于每一台计算机,重要的是要定义它使用或者提供哪些网络服务,以及使用或提供服务的软件应用程序。网络 服务(除了其他内容以外,可能包括 DNS、文件传输、打印机和文件共享、Web/Internet、电子邮件和数据库) 应该记录在部署计划之中,这个计划还包括所使用的软件程序包以及此计算机是配置为客户机、服务器还是同时 具备两个角色。稍后,基于软件和服务的列表,您应该安装一个只包含必需软件的绝对最小化的系统,这样可以 使得具有隐藏安全漏洞的可能性最低。

除了定义软件服务以外,您还需要确定用于通信的协议,这也会带来一些安全问题。网络传输是否需要通过基于 SSL 的 HTTP(https)进行加密,还是普通的 HTTP 就足够了?文件传输协议是否强制用户进行认证(比如使用 sftp),或者 对必需的安全层级来说匿名的、不加密的访问是否合适?

通常,客户机工作站被配置为使用多个网络服务。不过,服务器应该专门提供一种单一的服务,因为这样会 简化配置并降低发生配置错误的可能性。应该由有限数目用户使用的服务应该通过防火墙保护起来以防止 不必要的访问。防火墙可以有效地实现管理两个或多个网络之间网络传输的安全策略。

完成风险分析

要在系统的安全性与可用性之间找到适当的折衷,重要的是要针对存储在计算上的数据的类型进行风险分析。 要弄清楚需要采取哪种类型的安全措施来保护资源的机密性、完整性和可用性,第一个步骤就是进行风险分析。

风险分析基于清单评估 —— 它声明了存储的是什么类型的数据 —— 集中关注系统受到安全威胁的可能性以及 相继而来的后果。换句话说,对于清单评估中定义的每一类数据,您都需要对此数据受到非授权访问的可能性 以及这种事件的影响进行评估。这种评估量化为三个级别:高、中、低。所必需的安全级别是事件的概率及其影响的平均水平。

确定用户种类和访问特权

您应该根据其特权和访问权限列出计算机系统的主要用户,或者用户的种类。对于桌面计算机而言,这可能是 相当简单的,因为用户的数目通常较少。不过,基于类似的工作分工或对数据资源和应用程序的类似需要来 定义用户分类是有意义的。

对服务器来说,确定用户种类通常非常复杂。管理员通常可以访问服务和操作系统工具的配置。 除此以外,还有根据需要使用相应服务的不同用户(本地的和远程的用户)。连接到因特网上的公共 服务器基本上是任何人都可以访问的,而内部服务器的用户可能会根据工作角色、部门或者办公室 位置进行分类。所以,如果需要,您应该区分本地和远程用户以及临时和来宾用户。对于已经确认的用户 种类,定义他们需要访问和操作(例如,读、创建、修改或删除数据)哪些数据资源。

详细行动计划

既然安装的总体环境和目标都已经完善地记入文档,您现在可以深入细节了 —— 使用什么软件, 如何安装和配置它,等等。您编写的计划应该详细到能回答出在安装过程中出现的任何问题的程度。

选择 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)或者特洛伊木马等安全缺口,检测 进入网络或者计算机的攻击或入侵。
  • 审计: 审计指的是通过建立数据处于其期望状态的基线来检测敏感数据或配置文件 的改变。当发生意外改变时,对基线的改变会被报告,使得管理员可以快速反应并进行恢复。

使用安全的工具程序版本

当前仍然有很多早期 Internet 应用程序存在,并且在使用中。开发它们时,安全还不是个大问题,因为 那时 Internet 参与者很少。近些年,随着因特网的发展和迅速成长,安全性的缺乏使得那些应用程序不 适于当前的应用。这就是开发它们的代替者的原因,这些代替者可以以安全的方式执行相同的任务 —— 现在的任务还是像在早期时一样重要。在这里,“安全的方式”的基本意思是:

  • 对传输的数据(包括用户凭证和其他用户相关数据)加密,防止第三方可以理解传输的信息。
  • 使用用户名和密码或者数字签名等凭证来识别用户和系统。
常见工具的安全代替者

尽管这些代替者通常被称为“安全的标准的应用程序”,但是它们并不是绝对不会受攻击。这表示, 虽然您经过深入考虑使用了安全的版本而不是不安全的版本,您仍需要建立另外的观念和步骤来保护您 的系统。侧栏 常见工具的安全代替者 中列出了适用于所选 常见任务的应用程序。这个列表不是(也不可能是)完全的,所以,即使是要完成那些没有在侧栏中 列出的任务,您也应该始终考虑使用安全的应用程序。

分区

选择的应用程序以及安装所使用的源代码并不是安全性的惟一因素。要减少那种试图填满可用 磁盘空间的 DoS 攻击带来的影响,请确保您至少为下面这些目录计划专门的分区:

  • /home: 使用户数据与系统无关。当您执行备份和恢复操作、升级或切换操作系统、或者在 系统中迁移用户时,这非常有用。
  • /var: 保存服务器的日志和运行时数据。通过将其安放于一个单独的文件系统,如果您成为某 个 DoS 攻击的目标,则数据不会填满您全部的空闲空间。
  • /tmp: 类似于 /var,这个目录对用户进程来说是可写的,使得它成为 DoS 攻击的一个目标。 比使用单独的文件系统更好的办法是使用 tmpfs,它加速了文件的访问速度,并在重新引导时自动清空 文件系统的内容。
  • /boot: 容纳有 Linux 内核、初始驱动程序以及引导加载器数据。不必为了引导过程而挂载 这个分区,因为引导加载器将内核加载为一系列扇区,以从硬盘读取数据。如果在正常的操作中没有挂载它,那 么您就不会意外地覆盖这些文件。

获取发行版本

可以通过很多不同的途径获得 Linux 发行版本:热缩塑料包包装的 CD/DVD 发行版本、从其他人那里拷贝、 下载,等等。如果系统在安装的时候就已经被破坏,那么它根本是没有价值的,因此您必须确保基于“干净”的 来源进行安装 —— 确认代码没有后门。实际上,这一负担转嫁给了那些编制包含安装文件的 CD/DVD 组的 发行者。虽然您可以信任发行者,不过,根据发行者公布的校验和来校验安装媒体的校验和以确定媒体是正品, 仍不失为一个良好的习惯做法。

不推荐通过网络或者因特网进行安装 —— 尽管技术上可行。一个站点可能(比如,通过欺骗)将自己伪装为一个 可信任的安装源,并提供加入了后门的修改过的软件程序包,使得在安装后入侵者可以不费力地接管系统。当然, 可**以通过内部网络服务器进行安装,例如当来源已知而且合法时。

刚刚安装的操作系统通常不能马上使用,可能没有安装最新安全补丁。此时是最容易受到攻击的 (参见 参考资料 中一篇关于未打补丁的系统预期生存期的文章的链接), 在从安装过程直到完成配置步骤期间,应该从 Internet 上隔离出来,或者至少是在一个安全的网段。 在本系列的下一篇文章中将讨论这些步骤。

安装后,应该通过第二台(有适当保护的)计算机从 Internet 上下载最新的安全补丁和更新。同样,必须 选择可信任的安装来源来下载补丁。可以通过严肃的提供者所给出的校验和或者散列来检验下载的安装文件 的完整性。

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注