总体问题
是什么阻止了 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 安全状况?