Linux(In)安全性

2020-05-12 11:55:01

由于不可避免的书呆子气,本文中的Linux指的是标准Linux或GNU/Linux发行版。

人们普遍认为Linux是一个非常安全的操作系统。由于各种不同的原因,这与事实相去甚远。标准桌面中没有强大的沙盒。这意味着所有应用程序都可以访问彼此的数据,并可以窥探您的个人信息。大多数程序都是用内存不安全的语言(如C或C++)编写的,这是大多数已发现的安全漏洞的原因,而诸如控制流完整性等现代利用漏洞缓解措施并未得到广泛使用。内核也非常缺乏安全性。它是一个完整的内核,完全用内存不安全的语言编写,每个月都会发现数百个错误,其中许多是安全漏洞。事实上,在内核中发现了如此多的错误,开发人员无法跟上,这导致许多错误在很长一段时间内没有得到修复。内核在利用缓解方面也落后了几十年,许多内核开发人员根本不关心。在普通桌面上,具有sudo访问权限的受损非root用户帐户几乎等同于完全root危害,因为攻击者有太多方法可以检索sudo密码。通常,标准用户是组sudo的一部分,这使得这是一个巨大的问题,并且使得sudo密码几乎是安全剧场。例如,攻击者可以利用过多的按键记录机会,如X缺少GUI隔离、/proc中的大量信息泄露、使用LD_PRELOAD挂接到每个进程等等。即使我们减轻了记录击键的每一种方式,攻击者也可以设置自己的假sudo程序来窃取用户密码。这就是获取sudo密码所需的全部内容:cat<;<;\EOF>;/tmp/sudo#!/bin/bashif[[";${@}";=";";]];然后/usr/bin/sudoElse读取-s-r-p";[sudo]${user}:";password echo";${password}";&。\n抱歉,请重试。";/usr/bin/sudo${@}fiEOFchmod+x/tmp/sudoexport path=";/tmp:${path}";

现在攻击者只需一个modbe即可完全访问内核。

标准系统强化不足以解决任何这些大规模的架构安全问题。限制几件小事不会解决这个问题。同样,发行版默认部署的一些常见安全功能也不会解决这个问题。仅仅因为您的发行版在没有创建严格策略的情况下启用了MAC框架,并且仍然不受限制地运行大多数进程,并不意味着您可以摆脱这些限制。一个相当安全的Linux发行版所需的强化程度远远超出人们的想象。您将需要完整的系统MAC策略、完全验证的引导(不仅仅是引导链、整个基本系统)、强大的沙箱体系结构、强化的内核、广泛使用的现代利用漏洞缓解措施等等。实际上正在解决这些问题的一个Linux发行版是Whonix。

Flatpak的目标是沙箱应用程序,但它的沙箱操作存在很大缺陷。它完全信任应用程序,并允许它们指定自己的策略。这意味着安全性是可选的,应用程序可以选择不进行足够的沙箱保护。Flatpak的权限也过于宽泛,没有意义。例如,许多应用程序附带了filessystem=home,这是对用户主目录的读写访问权限,允许访问所有个人文件,并允许通过写入~/.bashrc或类似文件进行简单的转义。Flatpak广泛权限的另一个例子是它如何允许对X11套接字的不经过滤的访问,由于X11';缺乏GUI隔离,因此允许轻松转义。通过Xpra之类的嵌套X11服务器添加X11沙箱很容易,但Flatpak开发人员拒绝承认这一点,并继续声称X11是不可能安全的。更多的例子是Flatpak如何给予目录(如/sys或/proc(以信息泄露而闻名的内核接口)的完全访问权限)。