OpenSSH 9.6/9.6p1 (2023-12-18)的发布说明(中文译文)

OpenSSH 9.6/9.6p1 (2023-12-18)

OpenSSH 9.6 于 2023 年 12 月 18 日发布。相关镜像位于OpenSSH。OpenSSH 是 100% 完整的 SSH 协议 2.0 实现包括 sftp 客户端和服务器支持。

再次感谢 OpenSSH 社区的帮助,继续支持该项目,特别是那些将代码或补丁、报告的错误、测试的快照或捐赠给项目,做出贡献的人。

有关捐赠的更多信息,请访问: OpenSSH网站

自 OpenSSH 9.5 以来的变化

======================

此版本包含许多安全修复和一些小功能和错误修复。

安全

====

此版本包含对新发现的SSH 传输协议风险的修复,与受限 PKCS#11 相关的逻辑错误ssh-agent(1) 中的密钥以及使用包含无效字符的用户名或主机名调用ssh(1)的程序的对策。

* ssh(1), sshd(8):OpenSSH 9.6 通过引入“strict KEX”协议扩展来应对所谓的“Terrapin attack”。这种攻击允许中间人(MITM)在加密开始之前发送额外的消息,并在加密启动后立即删除相等数量的连续消息,从而在早期加密的SSH传输协议中造成有限的完整性破坏。虽然这种攻击在密码学上比较新颖,但其对安全性的影响相对有限。
“strict KEX”协议扩展主要做了两方面的改变来增强初始密钥交换的完整性:
1、终止不必要的连接:它要求在密钥交换过程中,如果收到任何不必要或意外的消息(包括之前合法但不严格要求的消息,如SSH2_MSG_DEBUG),则终端点必须终止连接。这消除了早期协议中的大部分可变性。
2、重置MAC计数器:它在每次密钥交换结束时重置消息认证码(MAC)计数器,防止之前插入的消息在密钥交换完成后对序列号造成持久性更改。
这些更改中的任何一项都应该足以阻止Terrapin攻击。
要在现有的SSH实现中实施这些协议扩展,您需要:
1、更新SSH库:确保您的SSH客户端和服务器都更新到了支持“strict KEX”的版本(如OpenSSH 9.6或更高版本)。
2、配置SSH:在SSH配置文件(通常是sshd_config对于服务器,和客户端的配置文件对于客户端)中启用“strict KEX”。具体的配置选项可能会因版本和实现而异,所以请查阅您所使用的SSH版本的文档。
3、测试:在部署到生产环境之前,在测试环境中彻底测试新的配置,以确保它与现有的系统和应用程序兼容,并且按预期工作。
4、保持更新:继续关注SSH和相关安全性的更新,因为新的攻击和漏洞可能会不断被发现。
最后,请注意,这些建议基于您提供的信息,并假设您正在使用的是或计划升级到支持“strict KEX”的SSH版本。如果您使用的是不同的SSH实现或版本,请查阅该实现的官方文档以获取具体的指导。

* ssh-agent(1):在添加PKCS#11托管的私钥时,如果指定了目标约束,而PKCS#11令牌返回了多个密钥,那么只有第一个密钥会应用这些约束。常规私钥、FIDO令牌和无约束密钥的使用不受影响。 

* ssh(1):如果向ssh(1)传递了包含shell元字符的无效用户或主机名,并且ProxyCommand、LocalCommand指令或“match exec”谓词通过%u、%h或类似的扩展令牌引用了用户或主机名,那么攻击者如果可以向ssh(1)提供任意的用户/主机名,就可能会根据用户提供的ssh_config(5)指令中存在的引号来执行命令注入。
这种情况可能出现在git子模块中,因为存储库可能包含用户/主机名中包含shell字符的子模块。在从不受信任的来源检出存储库时,git不会在用户或主机名中禁止使用shell元字符。
尽管我们认为确保传递给ssh(1)的参数的有效性是用户的责任,特别是在上述git示例这样的安全边界上,但OpenSSH 9.6现在禁止在通过命令行提供的用户和主机名中使用大多数shell元字符。这种防范措施并不能保证在所有情况下都有效,因为对于ssh(1)来说,普遍过滤可能与用户提供的命令相关的shell元字符是不可行的。
通过ssh_config(5)提供的用户/主机名不受这些限制,允许继续使用使用奇怪名称的配置,假设用户知道他们在自己的配置文件中正在做什么。
简而言之,这是一个关于ssh安全性的重要更新,它试图防止恶意用户或攻击者利用用户/主机名中的shell元字符进行命令注入攻击。然而,它并不能提供100%的安全保证,因此用户仍需小心谨慎地处理自己的SSH配置和命令。
潜在的不兼容更改

-------------------------

 * ssh(1), sshd(8):RFC4254连接/通道协议提供了一种类似于TCP的窗口机制,该机制限制了未经对方接受就可以发送的数据量。在过去,如果非标准的SSH实现对端超出了这个限制,ssh(1)/ sshd(8)会丢弃多余的数据。从OpenSSH 9.6开始,如果对端超过窗口限制超过了一个小的容差因子,ssh(1)/ sshd(8)现在将终止连接。这个更改对于遵循规范的SSH实现应该没有影响。
新功能

----------

 * ssh(1):添加一个%j令牌,该令牌可以扩展为配置的ProxyJump主机名(如果未使用此选项,则为空字符串),并且可以在ssh_config(5)关键字bz3610中使用。
* ssh(1):在客户端中添加对ChannelTimeout的支持,在服务器中的镜像相同选项,并允许ssh(1)终止静默通道。
* ssh(1), sshd(8), ssh-add(1), ssh-keygen(1): 添加对以PEM PKCS8格式读取ED25519私钥的支持。以前仅支持OpenSSH私钥格式。
* ssh(1), sshd(8):引入一种协议扩展,允许在服务器了解用于身份验证的用户名之后,重新协商可接受的用于公钥身份验证的签名算法。这允许在“Match user”块中更改sshd_config(5)的PubkeyAcceptedAlgorithms。
* ssh-add(1), ssh-agent(1):添加代理协议扩展,以便在加载PKCS#11密钥时指定证书。这允许在所有支持ssh-agent(1)的OpenSSH工具中使用由PKCS#11私钥支持的证书。以前只有ssh(1)支持这种用例。
错误修正

------------

* ssh(1):在决定是否启用击键时间混淆时,仅当具有TTY的通道处于活动状态时才启用它。
* ssh(1):将主循环从poll(3)切换到ppoll(3),并在检查在信号处理程序中设置的标志之前屏蔽信号。这避免了在向ssh发出退出信号和轮询之间可能出现的竞态条件。bz3531
* ssh(1):当连接到同时使用AddressFamily和CanonicalizeHostname指令的目标时,可能会忽略AddressFamily指令。bz5326
* sftp(1):正确处理服务器返回意外消息时的[email protected]选项。
* 对PuTTY和Dropbear的regress/integration测试进行了一些修复。
* ssh(1):仅在身份验证结束时释放GSS OID,避免不必要的初始化/清理周期。bz2982
* ssh_config(5):在手册中提到“none”是IdentityFile的有效参数。bz3080
* scp(1):改进了在旧SCP/RCP协议模式下,因与服务器的路径不匹配客户端的glob(3)模式而被拒绝的调试。
* ssh-agent(1):如果之前的会话绑定操作失败,则拒绝针对目标受限密钥的签名操作。如果用户使用的ssh(1)客户端和ssh-agent(1)不匹配,而客户端支持代理不支持的密钥类型,那么这可能会防止将来出现故障开放的情况。
可移植性

-----------

* 更好地识别不受支持和不稳定的编译器标志,例如在多个clang版本中一直不稳定的-fzero-call-used-regs。
* 对回归测试可靠性和日志收集进行了一些修复。
* 更新RPM规范中的OpenSSL依赖项。

你可能感兴趣的:(linux,运维,国产操作系统,运维,linux,openssh)