您可以使用许多标准来选择安全的操作系统。这包括从明确支持的功能到系统本身的总体目标的所有内容。尽管这个答案很长,但实际上只涉及一小部分考虑因素。
如果这是 tl;dr 并且您想要一个带有建议的快速摘要,请跳到最后一部分。否则,以下内容将使您基本了解不同操作系统的安全性有何不同。它绝不是详尽无遗的,但应该适合这样一个广泛的问题。
用户空间强化
强化的用户空间在威胁模型中很重要,在这种模型中,您的对手能够将攻击者控制的数据发送到您的系统,并在那里被潜在的不安全代码解析。这可以表现为从媒体文件到您在 Web 浏览器上查看的 HTML 和 CSS 的任何内容。您需要评估您是否会接触到此类数据,以及在什么情况下会接触到此类数据。您的对手是否能够让您访问恶意网站?他们可以让您查看恶意视频文件或图像文件吗?他们可以与您计算机上的任何远程服务进行通信吗?等等。
加固的操作系统利用内置的安全功能来降低成功的可能性或攻击的整体影响。为您提供预编译软件(二进制发行版,在 *nix 术语中)的操作系统必须在编译时应用此强化。加固通常涉及检测可执行代码以减少攻击者拥有的有关内存布局的信息量,或使常见漏洞利用复杂化。
ASLR(地址空间布局随机化)是几乎所有现代操作系统中普遍存在的安全功能。一般来说,它的作用是随机化内存布局,迫使攻击者在利用任何需要内存布局知识的漏洞之前额外利用信息泄漏。不同种类的 ASLR 随机化内存的不同方面。ASLR 越完整,安全性越高。ASLR 由操作系统内核提供,适用于所有加载的可执行文件。ASLR 首次出现在PaX中,它是 grsecurity 强化补丁的一个组件。
PIE (Position-Independent Executable)是一种编译时特性,它允许应用程序在不知道其绝对地址的情况下执行函数。如果不支持 PIE,则 ASLR 的功能将受到更大的限制,实际上只允许随机化碱基。当支持 PIE 时,甚至可以将单个库放置在随机偏移处。由于 PIE 会略微降低性能,因此某些操作系统仅以这种方式编译敏感应用程序。Debian 就是一个例子,它对 PIE 的支持非常有限。另一方面,Fedora 使用 PIE 编译所有内容以最大限度地提高安全性。
SSP(堆栈粉碎保护器)是另一个编译时功能,它在函数返回之前添加检查堆栈溢出。它可以通过多种方式实现,但最常见的一种是堆栈金丝雀。这是每个线程的随机值和唯一值。当函数返回时检查该值,如果已修改,则程序中止。除非攻击者可以利用信息泄漏来获取金丝雀的实际值,否则任何溢出都会盲目地覆盖它并触发 SSP 保护。
NX(不执行),在 Windows 上也称为 DEP(数据执行保护),是一种硬件安全功能,必须在编译时启用才能支持任何给定的应用程序。当 NX 处于活动状态时,无法执行标记为不可执行的可读内存。没有 NX,可读性意味着可执行性。大多数操作系统在全局范围内使用 NX,以防止幼稚的缓冲区溢出。绕过 NX 通常需要更高级的利用技术,例如ROP(一种无序执行现有代码的技术)。
还有其他常见的强化技术,例如RELRO、BIND_NOW、FORTIFY_SOURCE,以及不太常见的技术,例如UBSAN、CFI和SafeStack。流行的checksec实用程序能够检查任何可执行文件或进程中是否存在多个强化功能。它几乎可以在任何 Linux 系统上运行。这些都不是完美的,但它们可以显着提高攻击者的门槛。不同的操作系统,甚至同一操作系统中的不同发行版,可能会应用不同级别的强化。
内核硬化
当攻击者在您的系统上运行恶意进程时,内核强化往往是最重要的。如果您合法地允许他们运行不受信任的进程(例如在虚拟机或容器中),或者他们利用低权限的应用程序并希望将自己提升到更高的权限,则可能会出现这种情况,比如根。攻击者通常更难进入可以攻击内核的位置,但如果可以,影响是显着的(完全丧失完整性)。
内核是任何操作系统中最低级别、最高特权的任务。用户空间进程通过系统调用与内核通信,以请求各种资源(如内存)或操作(如 I/O)。内核负责决定调用用户空间进程是否有足够的权限。不幸的是,内核的接口非常复杂,这个接口中的任何错误都会使正在运行的操作系统的完整性完全失效。因此内核需要保护自己。这称为内核强化。
在 Linux 系统上,使用 grsecurity 补丁集可以大大提高内核安全性。不幸的是,在撰写本文时,补丁集是商业的。但是,如果您确实购买了它们,那么您可以获得比公共安全技术领先数十年的改进,如果历史值得信赖(例如,ASLR 和 NX 来自为 PaX 所做的研究,这是 grsecurity 的核心组件之一,它专注于关于抵抗内存损坏攻击)。
操作系统类别之间的差异
不同的操作系统可能有不同的内核安全优先级。例如,Debian 设计用于几乎所有硬件和所有软件,甚至是过时的软件。因此,它启用了具有被利用历史的潜在不安全的遗留功能。另一方面,OpenBSD 会迅速删除他们认为风险太大而无法安全维护的任何功能。
几个常见类别的安全操作系统的总结:
- Linux有一个内核,通常由不同的发行版配置不同的内核。精简的、最小的 Linux 内核可能非常安全,而功能丰富且臃肿的内核可能会运行许多可利用的驱动程序。内核是开源的,因此不同的发行版甚至都有自己的内核补丁集。Linux 内核没有很多自我保护功能,但它们正在慢慢向上游添加,这些功能通常基于(阅读:复制粘贴自)最新的公开可用的 grsecurity 源。
自定义内核有可能是最安全的。它可以通过硬化进行编译,并且可以剥离额外的功能。可以删除未使用的驱动程序,从而减少攻击面。可以启用被错误标记为调试功能的安全功能(例如凭据完整性检查)。自定义内核是最难维护的,因为它需要了解内核配置和安全性。即使是与安全相关的配置选项的基本概述也会占据整个答案。
Fedora 团队似乎比大多数人都更重视安全性。它们在推出时启用新的安全功能,并禁用旧的遗留功能。SELinux 默认启用,利用内核甚至限制 root 用户的能力。
Ubuntu 曾经相当不安全,但最近一直在提高安全性。他们的内核支持一些遗留功能,但也禁用其他可能与安全策略冲突的功能。Ubuntu 基于 Debian,但使用自己的内核。用户空间有相当多的强化,PIE 和其他技术应用于许多实用程序。
不幸的是,Debian 优先考虑兼容性而不是安全性。他们的内核以与遗留软件兼容的名义支持大量具有潜在风险的遗留功能(uselib、vsyscalls等)。它具有适用于多种硬件的各种驱动程序,其中一些可以被利用。内核的编译时强化实际上是不存在的,并且仅限于用户空间的敏感程序。然而,Debian 安全团队在安全反向移植方面相当快。
- BSD是从最初的 Berkeley Software Distribution 派生的一类操作系统。与 Linux 发行版不同,BSD 发行版不使用相同的内核。它们唯一的相似之处是它们的祖先,BSD 4.4。BSD 中的安全性差异很大:
OpenBSD 是一个以安全性和稳定性着称的 BSD 操作系统。许多可能不安全的功能都被删除了,并且定期添加了许多新的安全技术(尽管它们并不都是高质量的)。默认情况下,它的设计是安全的,几乎所有的用户空间沙盒本身并编译有广泛的保护。内核本身并不完美,对其进行模糊测试会揭示一些可怕的结果。该系统没有最好的性能,部分原因是他们专注于安全性。这在多处理器系统上尤其明显,其中大部分内核被巨型锁强制进入单个线程以降低竞争条件的风险。
FreeBSD 更类似于 Linux,因为它经常脱离最初的 Unix 哲学。它支持大量的硬件,并且有很好的软件支持。内核不像 OpenBSD 那样干净,它的用户空间也不理想(例如,它使用限制 ASLR 的jemalloc内存分配器),但它总体上是一个相当可靠的系统。有一个名为 HardenedBSD 的 FreeBSD修改版本,它专注于用户空间强化,尽管它的内核确实有一些改进,尤其是在 ASLR 方面。我上次检查它仍然是相当实验性的,但在其他方面非常可靠。
NetBSD 和 DragonflyBSD 不是很好。内核,尤其是 NetBSD 的网络堆栈,充满了错误。DragonflyBSD 在安全性方面非常落后,他们最近才在内核中添加了 NX 支持(一种防止执行不可执行代码的硬件功能) ,这是 Linux 在2004 年获得的!这些是利基系统,您不太可能需要使用它们。
- 视窗,尤其是 10,实际上非常安全。该内核可能是现有的静态分析最多的单片内核,它支持大量的安全特性和自我保护技术。旧版本的 Windows 在安全性方面远远落后(如果我记得的话,您甚至可以在 Vista 上将地址映射为 NULL),以至于它的名声很差。现在,内核实际上已经很坚固了。内核的复杂性确实会导致其他错误,但在利用方面,它可能比功能丰富的 Linux 内核(如 Debian)更安全。Windows 最大的问题是您无法编译出不需要的功能或审核源代码。此外,斯诺登泄密事件表明,微软为情报界提供了早期访问 0days 的机会在它们被修补之前。
安全功能(访问控制等)
如果一个安全内核不能用于执行用户空间的安全策略,那么它就没有任何意义。如果父母不知道如何让孩子遵守规则,他们就不能被操纵,这有什么好处?大多数内核提供了特权用户可以设置的各种接口,以限制较小的用户。其中一些功能是默认启用的,是系统安全性的核心部分(例如标准 Unix 访问控制,又名 DAC),还有一些是可选的,可以配置为提供细粒度的保护和沙盒。
当存在攻击者利用正在运行的应用程序(例如 Web 浏览器或媒体查看器)的风险时,此类安全功能非常有用。如果单独的二进制强化不足以防止利用,内核提供的安全限制可以限制可以造成的损害。例如,仅限于访问其自己的配置目录、公共目录和下载目录的浏览器将无法读取您的密码文件。
一小部分常见的内核提供的安全特性:
DAC(自由访问控制)是标准的Unix 权限,在所有 Unix 和类 Unix 系统上都受支持。任何单个文件都可以被赋予属性来限制读取、写入和执行。有单独的属性适用于fred拥有文件的用户(比方说)(在这种情况下,他们可以随意覆盖它,因此是“自由裁量的”),文件所属的组(比方说localusers),以及所有其他杂项系统上的用户。例如,可以使文件对其用户可读和可写,只能由组读取,并且对于系统上的任何其他进程完全不可读和不可写。此示例权限为fred:localusers 640,其中 640 是八进制的权限。
MAC(强制访问控制)存在于许多以安全为中心的操作系统中。与 DAC 不同,即使是策略的所有者也无法覆盖它。MAC 系统通常会限制允许给定主体(例如进程、程序或用户)访问的资源(例如文件或网络接口) 。常见的例子是SELinux,一个难以配置的高度可扩展框架,在 Fedora 和 CentOS 上默认提供,AppArmor是一个更易于使用的系统,专注于限制文件访问,默认在 Debian 和 Ubuntu 以及 OpenSUSE 上提供.
沙箱和监狱可用于限制不受信任的进程,减少其拥有的功能并防止其损坏系统的其余部分。实现、设计和目的差异很大。它本身就是一个足够复杂的主题,我只能链接到我写过的不同答案,涵盖沙盒和类似技术。
默认服务
默认安装的应用程序和默认运行的服务对于安全性非常重要。一个精简的系统几乎没有不必要的功能将比一个臃肿的系统更安全,应用程序适用于所有可能的格式。更多正在运行的服务意味着更多的攻击面。一些操作系统,如 Windows,希望运行尽可能多的服务,而 OpenBSD 在默认情况下几乎没有运行任何服务。因为他们有如此简单的默认安装和如此少的运行服务,他们可以自豪地吹嘘:
默认安装中只有两个远程孔,很长一段时间!
有无数在线指南可用于在各种操作系统上禁用不需要的服务。由于基础应用程序在默认情况下决定了操作系统具有多少攻击面,因此具有巨大基础的系统可以向潜在的攻击者展示自己是唾手可得的果实。例如,Ubuntu因其功能丰富的用户空间而在 Pwn2Own 竞赛的第一天就落选了。具有更有限系统的 ChromeOS 系统本来可以承受的!
建议
您没有要求建议,但以防万一:
ChromeOS是谷歌开发的基于 Linux 的系统。它专注于网页浏览,因此您应该将大部分时间花在浏览器上。它可能是开箱即用的最安全的 Linux 系统,也是最容易使用的系统之一。它使用内置的 TPM 来提供可测量的启动,防止系统在被篡改(无论是恶意攻击还是恶意软件)时上线。隐私方面,这显然不是很好。
QubesOS是一个基于Xen的系统,内部使用 Fedora。它专注于默认隔离并尝试易于使用。它主要由 Joanna Rutkowska 开发。Xen 使用IOMMU 隔离来防止恶意或受损的硬件外围设备(例如网卡)危害系统。它可以利用已安装的 TPM 来提供使用它称为AEM的测量引导。Qubes 做出了一些奇怪的安全决定,例如使用 Xen(它的安全记录很差),并为所有 AppVM 提供 root 访问权限,完全依赖 Xen 来确保安全。它大量使用虚拟化会使它变得迟缓,并且它不能在没有硬件加速虚拟化的系统上工作。
如果您想专注于匿名性,可以使用Whonix 或 Tails 。他们都通过 Tor 匿名网络强制所有连接,但他们的目标略有不同。Whonix 旨在使用物理隔离,在另一个操作系统(“网关”)上运行 Tor 进程,这样,即使主工作站受到威胁,Tor 进程也不会受到损害。默认情况下,Whonix 建议使用虚拟化来实现这一点,但不应采用此建议。相反,网关和工作站应该安装在物理上独立的机器上. Tails 类似,但使用软件防火墙进行隔离。它还专注于反取证,将所有内容保存在内存中,并在系统重新启动时丢失。为了做到这一点,Tails 是一张现场 DVD。
Fedora是一个专注于安全性和易用性的 Linux 发行版。当前的 Fedora 版本默认使用 Wayland 来改善图形隔离。Fedora 还使用相当完善的可执行文件和保持最新且安全的内核。它还使用带有预配置策略的开箱即用 SELinux。对于通用 Linux 发行版,Fedora 是最安全的发行版之一,同时仍然对用户友好。
OpenBSD是一个源自 Unix 的操作系统,专注于简单性、安全性和稳定性。它有一个出色的文档系统,提供了可能是所有操作系统中最全面和最有用的参考资料。手册页实际上被认为是系统的官方文档。如果您对基本系统和通过其二进制包管理器可用的其他应用程序感到满意,OpenBSD 是一个非常好的选择。总的来说,OpenBSD 感觉非常……舒服。这就是操作系统应有的样子,即使它有其缺点(软件和硬件兼容性较低,在 SMP 系统上不能很好地扩展)。
Windows是世界上最流行的桌面操作系统。如前所述,最新版本提高了安全性。如果您不关心隐私并且想要一个能够很好地抵抗利用的系统,Windows 可能会很有用。