是什么阻碍了 MAC 类型系统的广泛普遍使用?

信息安全 应用安全 操作系统 病毒 强制访问控制 威胁缓解
2021-08-15 23:50:02

总体问题

是什么阻止了 MAC 系统(例如 SELinux/AppArmor)在企业和桌面计算环境中的应用?

你为什么不认为它还没有普及?

我不将“在操作系统中可用”算作“广泛使用”。Windows 实际上有一个本机 POSIX 仿真层,但很少有 Windows 系统安装并运行它。许多 Linux 发行版都有 AppArmor 和 SELinux 的软件包,但据我所知,只有 Fedora 和随后的 RHEL 都启用了这些软件包,并且默认行为只是限制系统服务 - 例如 Fedora 支持unconfined_t- 没有奖品猜测它做了什么。

此外,许多 Linux 产品的商业供应商表示他们“不支持 SELinux”,而且我在 Stack Overflow 之前的日子里经常看到论坛引用,而且确实有许多博客文章暗示“修复” SELinux 基本上涉及将其关闭。

背景

我将访问控制分为两种类型:

  • 仅用户访问控制系统,例如 DAC 和 RBAC。在这些模型中,每个用户都有一组权限,这些权限由该用户运行的任何软件或应用程序继承。
  • 强制访问控制 (MAC) 系统,其中每个应用程序都有自己的一组权限,这些权限可能会或可能不会与适当的用户级别权限组合。

我问的原因是:如果我想破坏第一个模型下的系统,这几乎是一个两步过程。首先,找到一个允许我执行任意代码的易受攻击的入口点,第二,从该起点找到一个易受攻击的特权进程,以允许我提升我的权限。如果易受攻击的入口点也有特权,那就更好了。

但这提出了一个问题:为什么这些应用程序需要访问用户可以访问的所有内容?以火狐为例。它有一些共享库(或 DLL,如果你在 Windows 上)它需要加载并且它需要能够加载配置文件信息和任何插件,但是为什么它应该能够读取我的整个/usr树,或者枚举所有进程我的用户当前正在运行?例如,它可能需要对 的写访问权/home/ninefingers/Downloads,但它不需要对 的访问权/home/ninefingers/Banking更重要的是,它不需要能够使用损坏的输入启动特权进程的新实例,或者能够通过本地套接字向 setguid 进程发送消息。

现在,在某种程度上,我们有一个半工作的解决方案。在 Linux 上,许多系统守护程序(服务)实际上放弃了特权并作为单独的用户运行,这些用户不能交互式登录(使用 shell - 使用/bin/false/sbin/nologin作为 shell),这可以扩展工作,除了任何文件只能具有所有者、组和其他权限(与 Windows 不同)。

我也意识到 MAC 存在一些技术挑战,包括当前的 X11 安全模型。许多 Linux 发行版确实提供 SELinux 或 AppArmor 配置和受约束的守护进程,但似乎对桌面没有太大推动力。Windows Vista 支持完整性级别,但这些级别不是特别细。

我不太关心域内的特权级别的概念 - 请参阅此问题以了解此类技术和策略的实际用法,但更多的是应用程序,就像用户一样,应该遵守最小特权原则。Invisible Things Lab 博客文章“MS-DOS 安全模型”提出了许多我关心的观点,特别是关于桌面安全性。

我还认为,随每个应用程序提供 MAC 规则将鼓励更好的软件开发 - 几乎就像测试驱动开发一样,如果触发了您没有预料到的规则,您知道您可能有错误(或者您的规则是错误的)。

可能有助于回答整体问题的潜在子问题

  • 您是否曾尝试在企业环境中实施强制访问控制/appsec?是否曾经讨论过和放弃,如果是,为什么?如果考虑的话,我正在寻找的是“是什么阻止了你使用它”。
  • 我对吗?我清楚地认为,正如我所描述的那样,MAC 系统有助于保护入口点免受恶意软件的入侵,但我愿意接受其他解决问题的方法或当前系统运行良好的论点。
  • 对可用性有什么影响(显然有一些影响),可以减轻吗?
  • 桌面集成的障碍能否克服?
  • 还有其他我可能忽略的中间系统吗?
  • 为什么没有通过这种方法或其他替代方法在全行业范围内共同努力改善 appsec 安全状况?
4个回答

不幸的是,我认为您已经用“修复 SELinux 基本上涉及将其关闭”评论回答了您的问题。这是一项艰苦的工作。

在理想世界中,对访问等的特定要求将被详细说明,并且任何应用程序都将被编码以强制执行 MAC 或其他控制范例,但是在现实世界中会出现以下问题:

  • 快速发布新功能的需求
  • 预算有限
  • 对项目负责人或董事会级别的安全要求了解不足
  • 收购安全政策大相径庭的公司

和许多其他人。

安全性,虽然从长远来看通常是节省资金和降低风险,但通常是短期成本,为了满足业务需求(通常是短期的 - 专注于项目或在固定期限内为股东回报),通常是以最低要求或以下运行。

正确实施 MAC 是一项非常密集、高开销的要求,在快速变化的情况下维护它是一项艰巨的工作。

如果组织做得正确,我会喜欢它,因为它会减少或消除一大堆攻击类型,但我不会屏住呼吸,

回复:“但据我所知,只有 Fedora 和随后的 RHEL 都启用了这些功能”

Ubuntu 从 8.04 (2008)开始发布,默认启用 AppArmor,我听说 SUSE 从 10 版开始就有它。您可以通过以下方式了解它在您的系统上所做的事情sudo apparmor_status

我目前相对普通的 Ubuntu 桌面系统之一启用了 12 个配置文件,包括 pdf 查看器(evince)和一些守护程序,如dhclient3(DHCP)、libvirtd(虚拟化守护程序)和cupsd(打印)。受保护的服务器服务的一些示例包括MySQLnamed smbdntpd, 和apache2具有默认情况下禁用的配置文件。SecurityTeam/KnowledgeBase/AppArmorProfiles - Ubuntu Wiki 上查看更多详细信息

google-chrome 浏览器有自己的沙盒,我怀疑它提供了一些类似的好处。

自 2010 年 10 月 2.6.36 以来,AppArmor 一直在主线 Linux 内核中。希望这将使更多应用程序集成对它的支持更具吸引力。

@Rory-Alsop 是正确的。强大、有效、安全的成本非常高。

是什么阻止了 MAC 系统(例如 SELinux/AppArmor)在企业和桌面计算环境中的应用?

我相信答案是成本。与系统的任何其他方面一样,安全性也是有成本的。不管是否有意识,负责购买 IT 的人,无论是家庭用户还是 CIO,都已经决定目前他们不愿意在安全上花费太多。我们可能会认为他们没有仔细考虑过问题,但尽管我希望他们是错的,但他们可能是对的。

编辑:感谢 DW 评论和我模糊的记忆

在设计 Unix Thompson 和 Ritchie 之前,曾在一个名为 Multics 的操作系统上工作。Multics 是一个专注于安全的操作系统,它尝试了广泛的错误处理。Unix 决定放弃大量的错误处理,为自己节省了巨大的精力。正如 Tom Van Vleck 所说, “我 [Van Vleck] 在 Multics 中编写的代码有一半是错误恢复代码。他 [Dennis Ritchie] 说,“我们把所有这些东西都省略了。”

广泛的错误恢复需要大约两倍于处理一些错误的设计和编码,但不是全部。

你为什么不认为它还没有普及?

因为不用MAC就可以处理很多安全问题,而且MAC很贵。MAC 是一种执行策略的机制。要使用 MAC,您必须对系统建模并设计策略以提供所需的控制。而且,您的政策第一次不会是完美的。MAC 在现有系统中造成了很多痛苦,因为现有系统是在假设安全性属于自由裁量类型的情况下构建的。我的意思是在概念层面上,关键协议假定它们可以访问关键系统资源。

为什么这些应用程序需要访问用户可以访问的所有内容?

他们没有。但是,如果它们的行为与用户一样,则更容易实现许多应用程序。用户主要是一个被理解的系统。使应用程序的行为与用户不同需要大量的思考和设计。在平衡开发人员的大量成本(以及更高的系统或软件零售价)和较低的安全性时,管理人员通常会选择较低的安全性。哦,我们有一个安全问题,有一个补丁可以解决这个问题......

应用程序和用户一样,应该遵循最小权限原则

除了通常他们不是。是的,在某些 IT 系统和某些环境中它们是,但我认为您会发现许多数据库管理员可以访问他们可以不用的功能,并且网络管理员拥有的帐户可以更改的能力远远超过服务器地址和协议选项,以及几乎可以修改任何内容的系统管理员。

尊重 Joanna Rutkowska,现代操作系统不使用与 MS-DOS 相同的安全模型。MS-DOS 安全模型没有多处理、并发用户、网络通信或多处理器。

来自 MS-DOS 安全模型:有人知道为什么 Linux 桌面提供创建不同用户帐户的能力吗?

是的,因为 Linux 试图模仿 Unix 并提供等效的功能。由于 Unix 本质上是一个有许多用户的共享系统,Linux 提供了允许多个用户的功能。我知道已经为服务提供了用户风格的帐户,并且让服务成为用户一直是提高安全性的弱尝试,但这并不是多用户功能的最初原因。

对可用性有什么影响(显然有一些影响),可以减轻吗?

它们很大,有些可以缓解,但我不想成为当更新脚本停止工作时让数据库管理员平静下来的人。以及想知道内部 NTP 服务器为何停止工作的网络工程师……

我想引用 Casey Schaufler(SMACK 创建者)的话:

从 1980 年代中期到世纪之交,强制访问控制 (MAC) 与 Bell & LaPadula 安全模型密切相关,这是美国国防部标记纸质文件政策的数学描述这种形式的 MAC 在首都环城公路和斯堪的纳维亚超级计算机中心享有一定的追随者,但经常被定位为未能满足一般需求。

大约在世纪之交,域类型强制 (DTE) 开始流行。该方案将用户、程序和数据组织到相互保护的域中。该方案已被广泛部署为流行 Linux 发行版的一个组件。维护该方案所需的管理开销以及对提供安全域映射所需的整个系统的详细了解导致该方案在大多数情况下被禁用或以有限的方式使用。

Smack 是一种强制访问控制机制,旨在提供有用的 MAC,同时避免其前身的陷阱。Bell & LaPadula的局限性通过提供一种方案来解决,该方案可以根据系统的要求及其目的来控制访问,而不是由神秘的政府政策强加的那些通过根据已使用的访问模式定义访问控制来避免域类型强制复杂性。

所以基本上selinux根本不是为普通用途而设计的。而且,一般来说,当前的 MAC 系统对于外行来说比普通的 unix 权限更难理解。最重要的是,我认为它们是不完整的,因为没有准备好掌握可以遵循的策略(就像我们遵循 unix DAC 模型一样)。例如,您的主目录通常拥有您的user.group所有权,/tmp拥有这样的权限,以及/bin/这样的文件——所有这些都是已经发明的。但是对于 MAC,您通常应该像某些科学家一样自己制定政策,只是您没有学习那门科学。一些非安全人员应该按照什么标准和方法开发它?

自动生成的限制/usr/bin/date政策,很可笑,为什么要保护它们?谁会破解/usr/bin/date所以另一个重要的原因是我们到底想要保护什么,为什么?POSIX 权限不够的东西?针对什么类型的攻击?这种攻击没有通用模型。没有理解,没有目标,没有意义。