在Systemd中发现了一个新漏洞

systemd

在systemd中发现了一个漏洞,该漏洞已在 (CVE-2019-6454), 什么 允许导致控件初始化过程(PID1)阻塞 通过D-Bus向非特权用户发送特制消息时。

MGI Red Hat开发人员也不排除使用该漏洞以root特权组织代码执行的可能性。,但尚未确定发生这种攻击的最终可能性。

关于systemd

对于那些不了解Systemd的人 我可以告诉你 这是一个Linux初始化系统和服务管理器 其中包括诸如按需守护程序启动,自动挂载和挂载点维护,快照支持以及使用Linux控制组的进程跟踪等功能。

Systemd 提供注册表守护程序以及其他工具和实用程序,以帮助完成常见的系统管理任务。 Lennart Poettering和Kay Sievers撰写了SystemD,灵感来自发布的macOS和Upstart,目的是创建一个现代,动态的系统。

特别是,systemd提供了积极的并行化功能和基于依赖项的服务控制逻辑,从而允许服务并行启动并缩短了启动时间。 这两个方面都存在于Upstart中,但由systemd进行了增强。

Systemd是主要Linux发行版的默认引导系统,但它与SysV启动脚本向后兼容。

SysVinit是在systemd之前的初始化系统,并使用简化的方法启动服务。 Systemd不仅管理系统初始化,而且还提供其他知名工具(例如cron和syslog)的替代方法。

关于新的系统漏洞

通过操纵通过D-Bus发送的消息的大小, 攻击者可以将指针移动到分配给堆栈的内存限制之外,绕过“堆栈保护页”的保护,该保护基于调用异常(页错误)的边缘上的内存页的替换。

成功的攻击在系统18.10的Ubuntu 239和系统7.6的CentOS 219上得到了证明。

解决方法是,可以在GCC中使用“ -fstack-clash-protection”选项使用编译,在Fedora 28和29中默认使用该选项。

应当指出的是,MUSL系统库的作者在2014年指出了主要的体系结构问题,即过度充气的PID1处理程序,并质疑为Bus Link API实现PID1级别控制器的可行性,因为它是攻击的重要载体会对整个系统的可靠性产生不利影响

据一位安全研究员说 揭示了一个漏洞,只有未使用的内存页面才可能更改堆栈指针 (未分配),它不允许在PID1进程的上下文中组织代码执行,但允许攻击者在随后的Linux内核转换为“紧急”状态时启动对PID1的阻止(对于PID控制器1故障,整个系统挂起)。

在systemd中,安装了一个信号处理程序,该信号处理程序试图捕获PID1进程的故障(分段故障)并启动外壳进行恢复。

但是由于在攻击过程中对非重复(未分配)的内存页进行了调用,因此内核无法调用此信号处理程序,而只是用PID 1终止进程,这反过来又无法继续工作并进入处于“紧急”状态,因此需要重新启动系统。

已经有解决问题的方法

像已经描述和报告的任何安全问题一样,只有在解决了该问题并且 针对SUSE / openSUSE,Fedora的漏洞补丁更新已经发布,也适用于Ubuntu,部分适用于Debian (仅限Debian Stretch)。
尽管问题仍未在RHEL中纠正。