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

相关文章

Linux join命令的使用及说明

《Linuxjoin命令的使用及说明》`join`命令用于在Linux中按字段将两个文件进行连接,类似于SQL的JOIN,它需要两个文件按用于匹配的字段排序,并且第一个文件的换行符必须是LF,`jo... 目录一. 基本语法二. 数据准备三. 指定文件的连接key四.-a输出指定文件的所有行五.-o指定输出

Redis中Hash从使用过程到原理说明

《Redis中Hash从使用过程到原理说明》RedisHash结构用于存储字段-值对,适合对象数据,支持HSET、HGET等命令,采用ziplist或hashtable编码,通过渐进式rehash优化... 目录一、开篇:Hash就像超市的货架二、Hash的基本使用1. 常用命令示例2. Java操作示例三

Redis中Set结构使用过程与原理说明

《Redis中Set结构使用过程与原理说明》本文解析了RedisSet数据结构,涵盖其基本操作(如添加、查找)、集合运算(交并差)、底层实现(intset与hashtable自动切换机制)、典型应用场... 目录开篇:从购物车到Redis Set一、Redis Set的基本操作1.1 编程常用命令1.2 集

Python sys模块的使用及说明

《Pythonsys模块的使用及说明》Pythonsys模块是核心工具,用于解释器交互与运行时控制,涵盖命令行参数处理、路径修改、强制退出、I/O重定向、系统信息获取等功能,适用于脚本开发与调试,需... 目录python sys 模块详解常用功能与代码示例获取命令行参数修改模块搜索路径强制退出程序标准输入

MySQL之复合查询使用及说明

《MySQL之复合查询使用及说明》文章讲解了SQL复合查询中emp、dept、salgrade三张表的使用,涵盖多表连接、自连接、子查询(单行/多行/多列)及合并查询(UNION/UNIONALL)等... 目录复合查询基本查询回顾多表查询笛卡尔积自连接子查询单行子查询多行子查询多列子查询在from子句中使

Python实现中文大写金额转阿拉伯数字

《Python实现中文大写金额转阿拉伯数字》在财务票据中,中文大写金额被广泛使用以防止篡改,但在数据处理时,我们需要将其转换为阿拉伯数字形式,下面我们就来看看如何使用Python实现这一转换吧... 目录一、核心思路拆解二、中文数字解析实现三、大单位分割策略四、元角分综合处理五、测试验证六、全部代码在财务票

修复已被利用的高危漏洞! macOS Sequoia 15.6.1发布

《修复已被利用的高危漏洞!macOSSequoia15.6.1发布》苹果公司于今日发布了macOSSequoia15.6.1更新,这是去年9月推出的macOSSequoia操作... MACOS Sequoia 15.6.1 正式发布!此次更新修复了一个已被黑客利用的严重安全漏洞,并解决了部分中文用户反馈的

Redis中哨兵机制和集群的区别及说明

《Redis中哨兵机制和集群的区别及说明》Redis哨兵通过主从复制实现高可用,适用于中小规模数据;集群采用分布式分片,支持动态扩展,适合大规模数据,哨兵管理简单但扩展性弱,集群性能更强但架构复杂,根... 目录一、架构设计与节点角色1. 哨兵机制(Sentinel)2. 集群(Cluster)二、数据分片

Springboot项目构建时各种依赖详细介绍与依赖关系说明详解

《Springboot项目构建时各种依赖详细介绍与依赖关系说明详解》SpringBoot通过spring-boot-dependencies统一依赖版本管理,spring-boot-starter-w... 目录一、spring-boot-dependencies1.简介2. 内容概览3.核心内容结构4.

redis和redission分布式锁原理及区别说明

《redis和redission分布式锁原理及区别说明》文章对比了synchronized、乐观锁、Redis分布式锁及Redission锁的原理与区别,指出在集群环境下synchronized失效,... 目录Redis和redission分布式锁原理及区别1、有的同伴想到了synchronized关键字