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

2024-01-30 01:20

本文主要是介绍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):正确处理服务器返回意外消息时的limits@openssh.com选项。
* 对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依赖项。

这篇关于OpenSSH 9.6/9.6p1 (2023-12-18)的发布说明(中文译文)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/658699

相关文章

SQL Server安装时候没有中文选项的解决方法

《SQLServer安装时候没有中文选项的解决方法》用户安装SQLServer时界面全英文,无中文选项,通过修改安装设置中的国家或地区为中文中国,重启安装程序后界面恢复中文,解决了问题,对SQLSe... 你是不是在安装SQL Server时候发现安装界面和别人不同,并且无论如何都没有中文选项?这个问题也

mybatis-plus QueryWrapper中or,and的使用及说明

《mybatis-plusQueryWrapper中or,and的使用及说明》使用MyBatisPlusQueryWrapper时,因同时添加角色权限固定条件和多字段模糊查询导致数据异常展示,排查发... 目录QueryWrapper中or,and使用列表中还要同时模糊查询多个字段经过排查这就导致只要whe

Python实现中文文本处理与分析程序的示例详解

《Python实现中文文本处理与分析程序的示例详解》在当今信息爆炸的时代,文本数据的处理与分析成为了数据科学领域的重要课题,本文将使用Python开发一款基于Python的中文文本处理与分析程序,希望... 目录一、程序概述二、主要功能解析2.1 文件操作2.2 基础分析2.3 高级分析2.4 可视化2.5

SpringBoot改造MCP服务器的详细说明(StreamableHTTP 类型)

《SpringBoot改造MCP服务器的详细说明(StreamableHTTP类型)》本文介绍了SpringBoot如何实现MCPStreamableHTTP服务器,并且使用CherryStudio... 目录SpringBoot改造MCP服务器(StreamableHTTP)1 项目说明2 使用说明2.1

JAVA覆盖和重写的区别及说明

《JAVA覆盖和重写的区别及说明》非静态方法的覆盖即重写,具有多态性;静态方法无法被覆盖,但可被重写(仅通过类名调用),二者区别在于绑定时机与引用类型关联性... 目录Java覆盖和重写的区别经常听到两种话认真读完上面两份代码JAVA覆盖和重写的区别经常听到两种话1.覆盖=重写。2.静态方法可andro

zookeeper端口说明及介绍

《zookeeper端口说明及介绍》:本文主要介绍zookeeper端口说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、zookeeper有三个端口(可以修改)aVNMqvZ二、3个端口的作用三、部署时注意总China编程结一、zookeeper有三个端口(可以

Go语言中make和new的区别及说明

《Go语言中make和new的区别及说明》:本文主要介绍Go语言中make和new的区别及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1 概述2 new 函数2.1 功能2.2 语法2.3 初始化案例3 make 函数3.1 功能3.2 语法3.3 初始化

java中新生代和老生代的关系说明

《java中新生代和老生代的关系说明》:本文主要介绍java中新生代和老生代的关系说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、内存区域划分新生代老年代二、对象生命周期与晋升流程三、新生代与老年代的协作机制1. 跨代引用处理2. 动态年龄判定3. 空间分

Redis出现中文乱码的问题及解决

《Redis出现中文乱码的问题及解决》:本文主要介绍Redis出现中文乱码的问题及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. 问题的产生2China编程. 问题的解决redihttp://www.chinasem.cns数据进制问题的解决中文乱码问题解决总结

MySQL之InnoDB存储引擎中的索引用法及说明

《MySQL之InnoDB存储引擎中的索引用法及说明》:本文主要介绍MySQL之InnoDB存储引擎中的索引用法及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录1、背景2、准备3、正篇【1】存储用户记录的数据页【2】存储目录项记录的数据页【3】聚簇索引【4】二