至于眼球的事情——从历史上看,RHEL 核心的初始化 RC 脚本等等,基本的“SYS V”初始化克隆,并不是以极其稳健的方式编写的,它不像他们做了一个白板状态机设计在那里。而且您无法在大多数主要发行版中只为它发送补丁。如果您的 init 上没有写出的规范和真正的软件设计,您会发现人们害怕更改它。
然而,脆弱性的影响非常小,单个任务的大小也是如此。运行脚本。运行下一个。没有任何临时文件。在内部保持无状态,除非运行计数器使事情朝着所需的“目标”或朝着相反的方向发展。
除了 init 命令或 telinit 外,没有其他接口。在一个适当的 unix 中,一个 init 0 simpy 结束 init,让你陷入困境。Linux(为了方便和方便不阅读手册的人的生活)已经远离了简单的设计,而且似乎从来没有考虑过(抱歉)初始化克隆应该是一种“MIL -SPEC”质量。
现在我们有同样的事情,这些问题再次不是最重要的,但现在它在处理任务中占据了很大一部分,在它与内核的接口方面,因为它可供非 root 用户访问,并且在它在启动任务完成时处理输入。
这些仅仅是差异。问题是,强化或失败的安全/失败的操作状态等方面似乎不被视为核心事物。有一些针对该方向的措施(即如果被恶意流量丢弃,则自动重新生成)但不是很多。
现在让我们假设开发过程和对关注点的响应会发生变化。那将会很酷。(与一些备用初始化一起工作,我认为这不会发生,因为其他初始化都没有以任何方式充满敌意)
然后我们就剩下一个问题:多眼球的事情是有问题的。在正常的init系统中,由于缺少接口,“攻击向量”正在获取一个init脚本,只有root才能做到。然后它被允许做任何它认为必要的事情,并且你在作者的摆布下,即放弃 privs 去。如果他知道如何使用 su,那就是 su,如果他不知道,那就是 sudo,以此类推。但是他攻击你的初始化系统的唯一方法是,如果他在里面放了一些覆盖二进制/脚本的东西。他甚至不会轻易“坚持”在里面它,因为当下一个脚本运行时,他要导出的任何变量都会被压缩。这种语言(sh,理想情况下,仅限 POSIX)已经到了每 10 年就有一个 sec 漏洞的地步,通常根本没有。而且,我想强调一点——攻击的东西太少了,而且在系统启动后他也无法攻击它。
这些差异是存在的。他们可能会引起担心或不担心。但“共享代码库”的论点大多没有实际意义。您摆脱不良 priv-drop 包装器的论点有两个讨论点。第一,那些要么是糟糕的设计(本地 nat 是一件事)要么是必需品(ssh);第二,在 sw 世界中,我们已经了解到,对于任何与安全相关的问题,我们都需要将其列为最糟糕的问题,而不是过度解决它比不解决。这没有发生。
现在很少有人在寻找漏洞利用,但这对于 sec 研究人员来说并不是一个有趣的话题。一旦发生这种情况并遇到数十亿安装的设备未打补丁的基础,我有点担心。我们可能会在科技界受益。对于从我们的系统所做的任何事情中受益的人来说,自动重启服务变得越来越普遍(因为显然对于非 HA 设置来说阅读 daemontools 太难了),但我不想在附近并且需要证明我们是否在我们的 init 中重复了一些像 CodeRed 这样的狗屎。
向我展示如何关闭它,而不是在启动时运行单个(!)shell 脚本。对策变得有点复杂。至于 daemon-reexec 我仍然想知道为什么 azypper ps -s
之后仍然会在内存中看到旧的 systemd 部分。
我已经跳过了与 SMF 的比较——其中一个 systemd 开发人员称为“Solaris”或与 AIX 类似,如二进制日志记录和 SRC。SMF 有一个非常开放、包容、深思熟虑和记录在案的设计过程,我认为这就是最大的不同之处。不知道这将如何被修补。