openSUSE:安全特性

跳转到:导航搜索
openSUSE 发行版包含各种安全特性。

编译器和工具链

  • glibc malloc 堆损坏检查,以避免双重释放和类似攻击。这些检查已存在于 glibc 中多年,并且从 SUSE Linux Enterprise Server 9 开始对我们所有的发行版都有效。
  • 自 SUSE Linux 10.0 和 SUSE Linux Enterprise 10 起,gcc 和 glibc 中的“Fortify Source”扩展默认情况下为所有软件包启用(使用 -D_FORTIFY_SOURCE=2)。此外,自 SUSE ALP 起,所有软件包默认情况下都使用 -D_FORTIFY_SOURCE=3 构建。此扩展带来
    • 对各种 C 字符串/内存函数进行编译时缓冲区溢出检查。在编译时已经可以证明的缓冲区溢出时,编译器会发出警告并被我们的构建过程捕获。
    • 对 C 字符串/内存函数进行运行时缓冲区溢出检查,用于大小在编译时已知的目标缓冲区。这里的溢出会触发程序的受控中止。
    • 格式字符串问题的利用会触发程序的受控中止。
    • 对缺少危险库函数返回值检查的特定警告。
  • 自 SUSE Linux 10.1 和 SUSE Linux Enterprise 10 起,在一些关键软件包中使用运行时堆栈溢出检查 -fstack-protector,并且从 openSUSE 10.2 开始对所有软件包默认启用。
  • 将堆栈和堆标记为不可执行,以使 NX 成为可能,这对于几乎所有软件包来说已经存在一段时间了。
  • -z relro 默认情况下自 SUSE Linux 10.1 起启用,这使得针对特定 ELF 部分的攻击不再起作用。
  • 虽然一段时间以来,一些选定的二进制文件被构建为位置无关可执行文件 (PIE),但在 2017 年 5 月,Tumbleweed 切换为默认情况下为所有二进制文件启用 PIE。SUSE Linux Enterprise 15 和 openSUSE Leap 15.0 及更高版本的所有二进制文件都使用 PIE 构建。
  • 堆栈冲突保护(-fstack-clash-protection)在 SUSE Linux Enterprise 15 及更高版本以及 Leap 15.0 及更高版本中启用,并且在 SUSE Linux Enterprise 12 和 openSUSE Leap 42.3 的最新更新中启用。

内核

  • 基于硬件的 NX(No eXecute,也称为 DEP)支持自 SUSE Linux Enterprise Server 9 起在
    • 所有 AMD64/EM64T 处理器上启用。
    • 在 x86 机器上使用“bigsmp”或“pae”内核以及处理器能够支持 NX 位的情况下启用。
  • 我们目前不包含软件 NX,因为它不在主线内核中,并且可能永远不会。
  • 地址空间随机化自 SUSE Linux Enterprise 10 和 SUSE Linux 10.1 起用于堆栈和库映射。
  • 自 openSUSE 11.1 和 SUSE Linux Enterprise 11 起,PIE 二进制文件及其堆的地址空间随机化(randomize_va_space=1)。
  • 自 openSUSE 12.2 起,二进制文件与堆分离的地址空间随机化以及 VDSO 段(COMPAT_VDSO 和 COMPAT_BRK 关闭,randomize_va_space=2)。


  • “ExecShield”和“PAX”包含上述几个特性。这意味着我们已经实现了“ExecShield”和“PAX”的部分功能。

AppArmor

我们包含了强制访问控制系统 AppArmor 以限制潜在的危险应用程序。

SELinux 在内核中启用,但未提供默认策略。


防火墙

自 SUSE Linux 9.3 起,基于 iptables 的 SuSEfirewall2 默认启用,包括非常严格的入站过滤。

nftables 可从 13.2 及更高版本开始安装。

从 openSUSE 15 开始,SuSEFirewall2 已被 firewalld 替换为默认防火墙软件包。


软件选择

我们选择在默认配置中仅运行最少数量的守护进程。只有以下守护进程正在侦听网络

  • SSH 守护进程
  • portmap 守护进程
  • avahi/mDNSResponder
  • cups 打印服务器

尽管所有这些都默认情况下被防火墙阻止。


setuid 二进制文件

Setuid/setgid 二进制文件

  • 保持在最少。我们尝试用更安全的用户 - root 权限传递方法甚至完全消除它们来替换它们。
  • 新的二进制文件需要由 安全团队 进行源代码审计,旧的二进制文件在一段时间后会再次进行审计。

源代码审计

系统服务、setuid 二进制文件、PAM 模块、DBUS 服务和其他安全相关的软件由安全团队进行审计,并将发现报告给上游维护者并修复。


YaST 安全中心和加固模块

YaST 模块安全中心和加固提供了一个中央区域,可以轻松配置 openSUSE 的安全相关设置。它用于配置安全方面,例如登录设置、密码创建、启动权限、用户创建或默认文件权限。要启动它:YaST › 安全和用户 › 安全中心和加固。

更多信息:YaST 安全设置模块文档

Systemd 加固工作

systemd 提供各种选项来加固服务。完整详细信息在此提供,其中大部分选项在此“沙盒”部分中描述。

安全团队希望将更多这些加固添加到发行版的 .service 文件中。这项工作在此 bug 中跟踪。

作为第一步,我们尝试激活那些不太可能破坏用户设置的缓解措施

  • ProtectSystem: 'full'
  • ProtectHome: 'true'
  • PrivateDevices: 'true'
  • ProtectHostname: 'true'
  • ProtectClock: 'true'(意味着DeviceAllow=char-rtc r,这意味着对其他所有设备的限制,因此会破坏例如尝试访问磁盘设备的所有内容,除非进一步的 DeviceAllow= 行
  • ProtectKernelTunables: 'true'
  • ProtectKernelModules: 'true'
  • ProtectKernelLogs: 'true'
  • ProtectControlGroups: 'true'
  • RestrictRealtime: 'true'

如果在您的提交中看到不同的选项集,您的软件包要么已经携带我们不会修改的加固,要么我们根据软件包描述确定某些加固不适用(例如,ProtectClock 对设置时间的守护进程没有意义)。

有数百个服务文件在 openSUSE Factory 中。为了大规模调整它们,使用一个脚本来添加这些加固并提交它们。如果它们破坏了您的软件包,请随时拒绝提交。我们要求您将上述集合缩小到适用于您的软件包的内容。

我们也欢迎关于如何更好地执行此操作的建议,因为这对我们来说也是一项实验。

常见问题解答

  • 旧版本中的支持 在 systemd < 244 中,其中一些选项是未知的,并且会产生警告。Archie Cobbs 提供了此片段以在旧版本中禁用此功能。我们将尝试将其添加到添加这些加固的逻辑中,但在 Factory 的所有 spec 文件中进行操作有点棘手。如果您想确保您的用户看不到这些警告,例如
# Avoid "Unknown key name 'XXX' in section 'Service', ignoring." warnings from systemd on older releases
%if 0%{?is_opensuse} && 0%{?sle_version} < 150300
  sed -r -i '/^(Protect(Home|Hostname|KernelLogs)|PrivateMounts)=/d' src/unit/fonehome.service
%endif
  • 您会将其发送到上游吗/为什么不将其发送到上游? 我们希望您在此提供帮助。我们将以自动化的方式为数百个软件包提交此内容。其中一些服务文件在我们的打包中,一些在上游。目前,我们没有一种机制可以直接将更改带到上游。如果您能与上游合作,以便其他发行版/用户也能从中受益,我们将不胜感激。一旦这在 openSUSE 中使用了一段时间,就不应该很难销售。
  • 我们可以将其中一些设置为 systemd 中的默认值,只在需要时偏离吗? 这也需要大量的提交,并且有一次性破坏大量软件包的风险。通过这种方法,我们可以随着时间的推移进行工作,而不会一次性进行重大破坏性更改

其他

crypt(3) 算法:DES 直到 ..., Blowfish 自 ..., SHA512 自 ...