4.7. 安全性
系统范围的 crypto-policies
现在更为安全
在这个版本中,系统范围的加密策略已被调整,以提供最新的安全默认值:
- 在所有策略中禁用 TLS 1.0、TLS 1.1、DTLS 1.0、RC4、Camellia、DSA、3DES 和 FFcontainerruntime-1024。
- 在 LEGACY 中增加了最小 RSA 密钥大小和最小 Diffie-Hellman 参数的大小。
- 使用 SHA-1 禁用 TLS 和 SSH 算法,在 Hash-based Message Authentication Codes (HMACs) 中使用 SHA-1 除外。
如果您的场景需要启用一些禁用的算法和密码,请使用自定义策略或子策略。
(BZ#1937651)
RHEL 9 提供 OpenSSL 3.0.1
RHEL 9 提供了上游版本 3.0.1 的 openssl
软件包,其中包括很多改进和程序错误修复。最显著的变化包括:
- 添加了新的供应商概念。供应商是算法的集合,您可以为不同的应用程序选择不同的供应商。
- 以以下格式引入了新版本方案: <major>.<minor>.<patch>。
- 添加了对证书管理协议(CMP、RFC 4210)、证书请求消息格式(CRMF)和 HTTP 传输(RFC 6712)的支持。
- 引入了支持 GET 和 POST、重定向、普通和 ASN.1- 编码的内容、代理和超时的 HTTP(S)客户端。
- 添加了新的 Key Derivation Function API(EVP_KDF)和消息身份验证代码 API(EVP_MAC)。
-
使用
enable-ktls
配置选项编译对 Linux Kernel TLS(KTLS)的支持。 - 添加了 CAdES-BES 签名验证支持。
- 向 CMS API 添加了 CAdES-BES 签名方案和属性支持(RFC 5126)。
添加了对新算法的支持,例如:
- KDF 算法"SINGLE STEP"和"SSH"
- MAC 算法"GMAC"和"KMAC"。
- KEM 算法"RSASVE"。
- 密码算法 "AES-SIV"
- 添加了使用 AES_GCM 的 AuthEnvelopedData 内容类型结构(RFC 5083)。
-
PKCS #12 使用
PKCS12_create()
功能创建的默认算法改为更现代的 PBKDF2 和基于 AES 的算法。 - 添加了一个新的通用 trace API。
Openssl 现在包含了供应商
包括在 RHEL 9 中的版本 3.0.1 的 OpenSSL 工具包中增加了一个供应商(provider)的概念。供应商是算法的集合,您可以为不同的应用程序选择不同的供应商。openssl 目前包括以下供应商:base
, default
, fips
, legacy
, 和 null
。
默认情况下,OpenSSL 载入并激活 default
供应商,其中包括常用的算法,如 RSA、DSA、DH、CAMELLIA、SHA-1 和 SHA-2。
当在内核中设置 FIPS 标志时,OpenSSL 会自动加载 FIPS 供应商,并只使用 FIPS 批准的算法。因此,您不必手动将 OpenSSL 切换到 FIPS 模式。
要更改为系统级别上的不同供应商,请编辑 openssl.cnf
配置文件。例如,如果您的场景需要使用传统
供应商,请取消注释对应的部分。
明确激活提供程序会覆盖默认提供程序的隐式激活,并可能使系统能够远程访问,例如 OpenSSH 套件。
有关每个供应商中包含的算法的详情,请查看相关的 man page。例如,legacy
供应商的 OSSL_PROVIDER-legacy(7)
man page。
OpenSSL 随机位生成器现在支持 CPACF
这个 openssl
软件包版本引进了对 OpenSSL NIST SP800-90A-based determineistic random bit generator(DRBG)中的 Cryptographic Functions(CPACF)的支持。
(BZ#1871147)
openssl-spkac
现在可以创建使用 SHA-1 和 SHA-256 签名的 SPKAC 文件。
openssl-spkac
工具现在可以创建使用与 MD5 不同的哈希签名的 Netscape 签名的公钥和质询(SPKAC)文件。现在,您可以创建和验证使用 SHA-1 和 SHA-256 哈希签名的 SPKAC 文件。
RHEL 9 提供 openCryptoki 3.17.0
RHEL 9 带有 openCryptoki
版本 3.17.0。与 3.16.0 相比,重要的程序错误修复和增强包括:
-
p11sak
实用程序添加了列出密钥的新功能。 opencryptoki
现在支持:- OpenSSL 3.0.
- 事件通知。
- ICA 令牌中的软件回退。
- 在启用了硬件加密适配器时,WebSphere Application Server 不会再出现无法启动的问题。
RHEL 9 包括了带有额外补丁的 OpenSSL,它们特定于 RHEL。如果系统处于 Federal Information Processing Standards(FIPS)模式,OpenSSL 会自动加载 FIPS 供应商和基础供应商,并强制应用程序使用 FIPS 供应商。因此,RHEL 9 中的 openCryptoki
的行为与上游社区版本中的不同:
- 依赖 OpenSSL 的加密操作(软令牌和 ICA 令牌软件回退)的令牌现在只支持 FIPS 批准的机制(未批准但被列为可用的机制不被支持)。
openCryptoki
支持两种不同的令牌数据格式:旧数据格式(使用非FIPS 批准的算法(如 DES 和 SHA1)以及新的数据格式(只使用 FIPS 批准的算法)。旧数据格式不再可以正常工作,因为 FIPS 供应商只允许使用 FIPS 批准的算法。
重要为了在 RHEL 9 上使用
openCryptoki
,请在为系统启用 FIPS 模式前将令牌迁移为使用新数据格式。这是必要的,因为旧数据格式仍然是openCryptoki 3.17
中的默认设置。当系统改为启用 FIPS 时,使用旧令牌数据格式的现有openCryptoki
安装将无法正常工作。您可以使用
pkcstok_migrate
程序(由openCryptoki
提供),将令牌迁移为使用新的数据格式。请注意,pkcstok_migrate
在迁移过程中使用非FIPS 批准的算法。因此,在系统中启用 FIPS 模式前使用这个工具。如需更多信息,请参阅迁移到 FIPS 合规性 - pkcstok_migrate 工具程序。
(BZ#1869533)
GnuTLS 的版本为 3.7.3
在 RHEL 9 中,gnutls
软件包在上游版本 3.7.3 中提供。与之前的版本相比,这提供了很多改进和程序错误修复,最重要的是:
- 引入了 FIPS 140-3 明确指示符的 API。
- 强化用于导出 PKCS#12 文件的默认值。
- 修复了早期数据的时间(零往返数据,0-RTT)交换。
-
在签署证书签名请求(CSR)时,
certutil
工具不再从证书颁发机构(CA)发布点继承 CRL(Certificate Revocation List)分布点。
(BZ#2033220)
RHEL 9 提供 NSS 3.71
RHEL 9 提供网络安全服务(NSS)库版本 3.71 提供。主要变更包括:
- 对旧的 DBM 数据库格式的支持已被完全删除。NSS 仅支持 RHEL 9 中的 SQLite 数据库格式。
- PKCS #12 加密密码现在使用带有 PBKDF2 和 SHA-256 算法的 AES-128-CBC(而不是 PBE-SHA1-RC2-40 和 PBE-SHA1-2DES)。
NSS 不再支持少于 1023 位的 RSA 密钥
网络安全服务(NSS)库的更新将所有 RSA 操作的最小密钥大小从 128 位改为 1023 位。这意味着 NSS 不再执行以下功能:
- 生成大于 1023 位的 RSA 密钥。
- 使用少于 1023 位的 RSA 密钥进行签名或验证 RSA 签名。
- 使用超过 1023 位的 RSA 密钥加密或解密值。
OpenSSH 中的最小 RSA 密钥位长度选项
意外使用短的 RSA 密钥可能会使系统容易受到攻击。有了这个更新,您可以为 OpenSSH 服务器和客户端设置 RSA 密钥最小位长度。要定义最小 RSA 密钥长度,请在 /etc/ssh/sshd_config
文件中为 OpenSSH 服务器,在 /etc/ssh/ssh_config
文件中为 OpenSSH 客户端使用新的 RSAMinSize
选项。
OpenSSH 的版本为 8.7p1
RHEL 9 包括 OpenSSH 版本 8.7p1。与 OpenSSH 版本 8.0p1 相比,这个版本提供了很多改进和程序错误修复,它在 RHEL 8.5 中发布,重点包括:
新功能
支持使用 SFTP 协议作为之前使用 SCP/RCP 协议的替换。SFTP 提供了更可预测的文件名处理方式,远程端的 shell 不再需要 glob(3) 模式扩展。
默认启用 SFTP 支持。如果您的环境无法使用 SFTP 或存在不兼容的情况,您可以使用
-O
标志来强制使用原始 SCP/RCP 协议。-
LogVerbose
配置指令,允许按 file/function/line pattern 列表来强制限制最大的调试日志记录。 -
使用新的
sshd_config
PerSourceMaxStartups
和PerSourceNetBlockSize
指令,基于客户端地址的速率限制。这比全局MaxStartups
限制提供更精细的控制。 -
Host basedbasedAcceptedAlgorithms
关键字现在根据签名算法过滤,而不是根据密钥类型进行过滤。 -
sshd
守护进程中的Include
sshd_config
关键字,允许使用glob
模式包含其他配置文件。 -
支持由 FIDO 联盟指定的 Universal 2nd Factor (U2F)硬件身份验证器。U2F/FIDO 是广泛用于网站身份验证的双重认证硬件的、成本低的开放标准。在 OpenSSH 中,FIDO 设备由新的公钥类型
ecdsa-sk
和ed25519-sk
以及相应的证书类型提供支持。 -
支持需要每个用途的 FIDO 密钥。您可以使用
ssh-keygen
和新的verify-required
选项生成这些密钥。当使用 PIN-required 密钥时,系统会提示用户完成签名操作。 -
authorized_keys
文件现在支持一个新的verify-required
选项。这个选项需要 FIDO 签名,以断言用户在签名前存在的令牌验证。FIDO 协议支持多种验证方法,OpenSSH 目前仅支持 PIN 验证。 -
添加了对验证 FIDO
Webauthn
签名的支持。webauthn
是在 Web 浏览器中使用 FIDO 密钥的标准。这些签名是普通 FIDO 签名的一种稍有不同格式,因此需要明确支持。
bug 修复
-
ClientAliveCountMax=0
关键字的明确语义。现在,它完全禁用连接终止,而不是之前的行为在第一个存活度测试后立即终止连接,而不考虑成功。
安全性
- 修复了在 XMSS 密钥类型的私钥解析代码中可利用的整数溢出错误。这个密钥类型仍是实验性的,默认情况下不会编译它。便携式 OpenSSH 中没有面向用户的 autoconf 选项以启用它。
- 为 RAM 中剩余的私钥添加保护,以防规范和内存侧通道攻击,如 Spectre、Mltdown 和 Rambleed。当私钥没有与来自随机数据的非对称密钥一起使用时加密它们(当前为 16 KB)。
在 OpenSSH 中默认禁用区域设置转发
在小镜像(如容器和虚拟机)中使用 C.UTF-8
本地设置,这与传统的 en_US.UTF-8
设置相比,可减少其大小并提高性能。
大多数发行版本都会默认发送本地设置(locale)环境变量,并在服务器端接受它们。但是,这意味着,从使用 C
或 C.UTF-8
以外的本地设置的客户端 SSH 到没有 glibc-langpack-en
或 glibc-all-langpacks
软件包的服务器时,用户使用体验会有所降低。特别是,UTF-8 格式的输出无法正常工作,有些工具无法正常工作或频繁发出警告信息。
在这个版本中,OpenSSH 默认关闭本地设置转发功能。即使客户端使用最小安装(仅支持少量的本地设置)连接到服务器,也可以保留本地设置。
OpenSSH 支持 U2F/FIDO 安全密钥
在以前的版本中,保存在硬件中的 OpenSSH 密钥只通过 PKCS #11 标准支持,这限制了在 SSH 中使用其他安全密钥。支持 U2F/FIDO 安全密钥由上游开发,现在已在 RHEL 9 中实施。这会提高独立于 PKCS #11 接口的 SSH 中的安全密钥的可用性。
libreswan 的版本为 4.6
在 RHEL 9 中提供了上游的 Libreswan 版本 4.6。这个版本提供了很多程序错误修复和增强,特别是对使用 IKEv2(Internet Key Exchange version 2)的被标签的 IPsec 的改进。
(BZ#2017355)
libreswan 默认不接受 IKEv1 软件包
因为 IKEv2(Key Exchange v2) 现已广泛部署,所以 Libreswan 不再支持 IKEv1 数据包。IKEv2 提供更安全的环境,并对安全攻击更具有防御性。如果您需要使用 IKEv1,可以在 /etc/ipsec.conf
配置文件中添加 ikev1-policy=accept
选项来启用它。
RHEL 9 提供 stunnel
5.62
RHEL 9 带有 stunnel
软件包版本 5.62。重要的程序错误修复和增强包括:
-
在 FIPS 模式的系统中,
stunnel
现在总是使用 FIPS 模式。 -
NO_TLSv1.1
,NO_TLSv1.2
, 和NO_TLSv1.3
选项现在已分别被重新命名为NO_TLSv1_1
,NO_TLSv1_2
, 和NO_TLSv1_3
。 -
新的服务级
sessionResume
选项启用和禁用会话恢复。 -
现在,在使用
protocol
选项的stunnel
客户端中支持 LDAP。 - 现在提供了 Bash 补全脚本。
RHEL 9 提供 nettle
3.7.3
RHEL 9 提供了 nettle
软件包 3.7.3 版本,提供多个程序错误修复和增强。主要变化如下:
-
支持新的算法和模式,例如
Ed448
、SHAKE256
、AES-XTS
、SIV-CMAC
。 - 为现有算法添加特定于架构的优化。
(BZ#1986712)
RHEL 9 提供 p11-kit
0.24
RHEL 9 提供带有 0.24 版本的 p11-kit
软件包。这个版本提供多个程序错误修复和增强。值得注意的是,存储不受信任的证书颁发机构的子目录已重命名为 blocklist
。
(BZ#1966680)
cyrus-sasl
现在使用 GDBM 而不是 Berkeley DB
cyrus-sasl
软件包构建时没有 libdb
依赖项,sasldb
插件使用 GDBM 数据库格式而不是 Berkeley DB。要迁移以旧 Berkeley DB 格式存储的现有简单身份验证和安全层(SASL)数据库,请使用 cyrusbdb2current
工具,语法如下:
cyrusbdb2current <sasldb_path> <new_path>
RHEL 9 中的 SELinux 策略与当前内核保持同步
SELinux 策略包括新的权限、类和功能,也属于内核的一部分。因此,SELinux 可以使用内核提供的完整潜力。具体来说,SELinux 对授予权限提供更好的粒度,其具有后续的安全优势。这也启用了使用 MLS SELinux 策略运行的系统,因为 MLS 策略会在系统包含策略中没有权限时阻止一些系统启动。
(BZ#1941810, BZ#1954145)
默认 SELinux 策略不允许使用文本重新定位库的命令
selinuxuser_execmod
布尔值现在默认关闭,以提高已安装系统的安全性。因此,SELinux 用户无法使用需要文本重新定位的库输入命令,除非库文件具有 textrel_shlib_t
标签。
OpenSCAP 在版本 1.3.6 中提供
RHEL 9 在 1.3.6 版本中包括 OpenSCAP,它提供程序错误修复和增强,最重要的是:
-
您可以使用
--local-files
选项提供远程 SCAP 源数据流组件的本地副本,而不是在扫描过程中下载它们 -
OpenSCAP 接受多个
--rule
参数,以便在命令行上选择多个规则。 -
您可以使用
--skip-rule
选项跳过某些规则的评估。 -
您可以使用
OSCAP_PROBE_MEMORY_USAGE_RATIO
环境变量来限制 OpenSCAP 探测所使用的内存。 - OpenSCAP 现在支持 OSBuild Blueprint 作为补救类型。
OSCAP Anaconda 附加组件现在支持新的附加组件名称
在这个改进中,您可以使用新的 com_redhat_oscap
附加组件名称,而不是在 OSCAP Anaconda 附加组件的 Kickstart 文件中旧的 org_fedora_oscap
附加组件名称。例如,Kickstart 部分的结构如下:
%addon com_redhat_oscap content-type = scap-security-guide %end
OSCAP Anaconda 附加组件目前与旧附加组件名称一致,但在以后的主 RHEL 版本中将删除对传统附加名称的支持。
(BZ#1893753)
CVE OVAL feed 现在会被压缩
在这个版本中,红帽以压缩的形式提供 CVE OVAL feed。它们不再作为 XML 文件提供,而是使用 bzip2
格式。RHEL9 源的位置也已更新,以反映这个变化。请注意,第三方 SCAP 扫描程序可能会遇到扫描规则以使用压缩源的问题,因为引用压缩内容没有标准化。
提供的 SCAP 安全指南版本为 0.1.60
RHEL 9 包括 scap-security-guide
0.1.60 版本的软件包。此版本提供程序错误修正和增强,最重要的是:
-
规则强化 PAM 堆栈现在使用
authselect
作为配置工具。 - SCAP 安全指南现在为 STIG 配置集提供了一个 delta 定制文件。此定制文件定义了一个配置集,它代表了 DISA 的自动化 STIG 和 SSG 自动化内容之间的区别。
RHEL 9.0 支持的 SCAP 安全指南配置集
使用 RHEL 9.0 中包含的 SCAP 安全指南合规性配置集,您可以从发出的组织将系统强化到建议。因此,您可以使用关联的补救和 SCAP 配置集根据所需的强化级别配置和自动化 RHEL 9 系统合规性。
配置文件名称 | 配置文件 ID | 策略版本 |
---|---|---|
法国信息系统安全局(ANSSI)BP-028 增强级 |
| 1.2 |
法国信息系统安全部(ANSSI)BP-028 高级别 |
| 1.2 |
法国信息系统安全局(ANSSI)BP-028 中级 |
| 1.2 |
法国信息系统安全局(ANSSI)BP-028 最低级 |
| 1.2 |
[DRAFT] CIS Red Hat Enterprise Linux 9 基准(第 2 级 - 服务器) |
| 草案[a] |
[DRAFT] CIS Red Hat Enterprise Linux 9 基准(第 1 级 - 服务器) |
| DRAFT[a] |
[DRAFT] CIS Red Hat Enterprise Linux 9 Benchmark for Level 1 - Workstation |
| DRAFT[a] |
[DRAFT] CIS Red Hat Enterprise Linux 9 Benchmark for Level 2 - Workstation |
| DRAFT[a] |
[DRAFT] 在非保障信息系统和机构中未分类的信息(NIST 800-171) |
| r2 |
澳大利亚网络安全中心(ACSC)要点 8 |
| 未版本化 |
健康保险可移植性和责任法案(HIPAA) |
| 未版本化 |
澳大利亚网络安全中心(ACSC)ISM 官方 |
| 未版本化 |
[DRAFT] 常规目的操作系统的保护配置文件 |
| 4.2.1 |
适用于 Red Hat Enterprise Linux 9 的 PCI-DSS v3.2.1 控制基本行 |
| 3.2.1 |
[DRAFT] DISA STIG for Red Hat Enterprise Linux 9 |
| 草案[b] |
[DRAFT] DISA STIG with GUI for Red Hat Enterprise Linux 9 |
| DRAFT[b] |
[a]
CIS 尚未发布 RHEL 9 的官方基准
[b]
DISA 尚未发布 RHEL 9 的官方基准
|
自动补救可能会导致系统无法正常工作。先在测试环境中运行补救。
(BZ#2045341, BZ#2045349, BZ#2045361, BZ#2045368, BZ#2045374, BZ#2045381, BZ#2045386, BZ#2045393, BZ#2045403)
RHEL 9 提供 fapolicyd
1.1
RHEL 9 提供 fapolicyd
软件包版本 1.1。最显著的改进包括:
-
包含允许和拒绝执行规则的文件的
/etc/fapolicyd/rules.d/
目录替代了/etc/fapolicyd/fapolicyd.rules
文件。fagenrules
脚本现在将此目录中的所有组件规则文件合并到/etc/fapolicyd/compiled.rules
文件。详情请查看新的fagenrules(8)
手册页。 -
除了用于将 RPM 数据库之外的文件标记为可信的
/etc/fapolicyd/fapolicyd.trust
文件外,您现在可以使用新的/etc/fapolicyd/trust.d
目录,它支持将可信文件列表分成多个文件。您还可以通过使用fapolicyd-cli -f
子命令及--trust-file
指令,为这些文件添加一个文件项。如需更多信息,请参阅fapolicyd-cli(1)
和fapolicyd.trust(13)
手册页。 -
fapolicyd
信任数据库现在支持文件名中的空格。 -
现在,当将文件添加到信任数据库时,
fapolicyd
会保存可执行文件的正确路径。
rsyslog 包含用于高性能操作和 CEF 的 mmfields
模块
rsyslog 现在包含 rsyslog-mmfields
子软件包,它提供 mmfields
模块。这是使用 property replacer 字段提取的替代方式,但与属性替换器不同,所有字段都会一次性提取并存储在结构化的数据部分中。因此,您可以使用 mmfields
特别用于处理基于字段的日志格式,如 Common Event Format(CEF),并且如果您需要大量字段或重复使用特定字段,可以使用 mmfields。在这些情况下,mmfields
的性能比现有 Rsyslog 功能要提高性能。
单独 rsyslog-logrotate
软件包中包含的 logrotate
logrotate
配置与主 rsyslog
软件包分隔到新的 rsyslog-logrotate
软件包中。这在某些最小环境中非常有用,例如不需要日志轮转的情况,以防止安装不必要的依赖项。
sudo
支持 Python 插件
通过 sudo
程序版本 1.9(包括在 RHEL 9 中),您可以在 Python 中编写 sudo
插件。这样可以更轻松地增强 sudo
以更精确地适合特定的场景。
如需更多信息,请参阅 sudo_plugin_python(8)
man page。
libseccomp
的版本为 2.5.2
RHEL 9.0 提供了上游版本 2.5.2 libseccomp
软件包。与之前的版本相比,这个版本提供了很多程序错误修复和增强,最重要的是:
-
将 Linux 的 syscall 表更新为
v5.14-rc7
版本。 -
在 Python 绑定中添加
get_notify_fd()
函数来获取通知文件描述符。 - 将所有架构的多路系统调用处理整合到一个位置。
- 为 PowerPC(PPC)和 MIPS 架构添加了多路系统调用支持。
-
更改内核中的
SECCOMP_IOCTL_NOTIF_ID_VALID
操作的含义。 -
libseccomp
文件描述符通知逻辑已被修改来支持内核之前和现在对SECCOMP_IOCTL_NOTIF_ID_VALID
的使用。 -
修复了一个错误,
seccomp_load()
只能调用一次。 -
对通知
fd
的处理进行了更改,在过滤有一个_NOTIFY
操作时只请求一个通知fd
。 -
向
seccomp_add_rule(3)
manpage 中添加了与SCMP_ACT_NOTIFY
相关的内容。 - 阐明维护器的 GPG 密钥。
Clevis 现在支持 SHA-256
在这个版本中,Clevis 框架支持 SHA-256
算法作为 JSON Web 密钥(JWK)指纹的默认哈希值,如 RFC 7638
的建议。因为旧的 thumbprints(SHA-1)仍被支持,所以您仍可以解密之前加密的数据。
(BZ#1956760)