在 Windows XP,7,8 上开启 SSH 服务相对复杂,因为它不内置 OpenSSH。你需要使用第三方软件; windows 10 ,11 内置的 OpenSSH 服务器功能来启用 SSH 服务,或者使用第三方软件

Windows xp 系统本身并不内置 SSH 服务器,因此需要使用第三方软件来实现 SSH 功能
Windows 7 系统本身并不内置 SSH 服务器,因此需要使用第三方软件来实现 SSH 功能
windows 8 系统本身并不内置 SSH 服务器,因此需要使用第三方软件来实现 SSH 功能
windows 10 内置的 OpenSSH 服务器功能来启用 SSH 服务,或者使用第三方软件
windows 11 内置的 OpenSSH 服务器功能来启用 SSH 服务,或者使用第三方软件
   

SSH(Secure Shell)中文:安全外壳协议

简要说明

  1. 作用:加密的远程管理协议,替代明文的 Telnet;默认端口 22。
  2. 相关衍生名词
  • SSH‑2:SSH Version 2,现行主流协议版本(RFC 4251‑4254),libssh2 就是实现 SSH‑2 客户端协议库。
  • sshd:SSH Daemon,Linux 的 SSH服务端守护进程。
  • SFTP:SSH File Transfer Protocol,基于 SSH 通道的文件传输协议。

易混淆区分

  • Telnet:Teletype Network,明文远程终端,不安全。
  • SCP:Secure Copy,基于 SSH 的文件拷贝工具。
小知识点:SSH 不是缩写自 Secure Socket Shell,标准全称就是 Secure Shell。

SSH(Secure Shell 安全外壳协议)版本完整演进

SSH‑1(SSH 版本 1)

  • 发布时间:1995 年,Tatu Ylönen 开发,最早 SSH 实现
  • 背景:Telnet、rlogin 全部明文传输,账号密码、命令完全抓包可见,为解决明文风险诞生 SSH。
  • 协议文档:非 RFC 标准,是早期私有协议。
  • 重大缺陷
    1. CRC‑32 校验存在加密漏洞,攻击者可实施SSH1 CRC 劫持攻击,可以篡改加密会话内数据。
    2. 加密算法、密钥交换设计薄弱,安全缺陷持续被披露。
    3. 不支持强大的 Diffie‑Hellman 组协商,扩展性差。
  • 现状:现已彻底废弃,现代 ssh 服务端默认关闭 SSH‑1 支持,几乎不再使用。

SSH‑2(SSH Version 2,现行工业标准)

1996‑2001 年完成标准化,拆分为一套独立 RFC 文档集,和 SSH‑1协议完全不兼容,不是简单改良,属于重新设计。

SSH‑2 核心 RFC 体系

RFC 编号 内容
RFC 4251 SSH‑2 整体架构概述
RFC 4252 用户认证协议 Userauth
RFC 4253 传输层协议 Transport(握手、密钥交换、加密包封装,libssh2 核心实现)
RFC 4254 连接通道协议 Channel(Shell、SFTP、端口转发多路复用)
libssh2 就是完整实现 SSH‑2 客户端协议栈,不支持老旧 SSH‑1。

SSH‑2 关键技术改进对比 SSH‑1

  1. 采用安全 MAC 完整性校验,彻底修复 CRC 劫持漏洞;支持 Encrypt‑then‑MAC 模式(本次 libssh2 漏洞就出在该模式解析)
  2. 模块化架构:传输层、认证层、通道层解耦
  3. 支持 DH/ECDH 密钥交换,多种加密套件可协商(AES‑GCM、ChaCha20‑Poly1305 等)
  4. 多路复用单 TCP 连接:一条 SSH 连接之上可以同时跑 Shell、SFTP、端口转发多个逻辑 Channel 通道
  5. 完善公钥认证、agent 代理转发

SSH‑2 后续迭代(没有 SSH‑3 版本)

重点:没有官方 SSH‑3 协议版本,日常说的新版本是软件实现版本(OpenSSH),不是协议版本。

OpenSSH(最主流实现)软件迭代(协议依旧跑 SSH‑2)

OpenSSH 是 BSD 开源实现,绝大多数 Linux 默认自带:
  1. OpenSSH 5.x:加入 AES‑GCM、ECDH 椭圆曲线密钥交换
  2. OpenSSH 6.x:移除 SSH‑1 协议支持;强化加密算法;支持 chacha20‑poly1305
  3. OpenSSH 7.x:大量淘汰弱算法(rc4、3des 等)
  4. OpenSSH 8.x:支持 ssh‑sk FIDO 安全密钥;进一步清理老旧加密套件
  5. OpenSSH 9.x:强化后量子加密实验支持,抵抗未来量子计算破解
很多人混淆:协议版本只有 SSH‑1 / SSH‑2;OpenSSH 是软件实现,它有自己软件号,不等于协议版本。

版本速记

  1. SSH‑1:1995,有严重安全漏洞,淘汰。
  2. SSH‑2:2001RFC 定稿,至今全球通用标准协议。
  3. 不存在 SSH‑3 协议;新功能都是 OpenSSH 软件升级,底层依旧是 SSH‑2 协议。

关联工具库版本补充

  • libssh2:只实现 SSH‑2 客户端;最高版本 1.11.1(本次爆出 4 枚高危漏洞)
  • libssh:另一套 SSH 库,同时支持客户端 + 服务端,区别 libssh2。

常见排坑

报错 Protocol major versions differ: 1 vs. 2
 
客户端试图使用 SSH‑1 去连接只开启 SSH‑2 的服务端,现在几乎不会见到。

SSH‑1 与 SSH‑2 对比简表(含报文 / 数据包结构差异)

说明:SSH‑1 为私有非 RFC 协议;SSH‑2 整套标准化 RFC4251‑4254,现代唯一在用协议。
对比项 SSH‑1(SSH‑1.5) SSH‑2(SSH Version 2)
诞生年份 1995 Tatu Ylönen 1996 草案,2001 正式 RFC 发布
标准化状态 私有协议,无正式 RFC RFC 4251/4252/4253/4254 完整标准
协议兼容性 和 SSH‑2完全不兼容 不兼容 SSH‑1
安全校验机制 CRC‑32 校验,存在著名 CRC 劫持漏洞,可以篡改加密流量 HMAC / Encrypt‑then‑MAC,抗报文篡改;可区分完整性失败
密钥交换 固定 Diffie‑Hellman 组,算法选择极少 灵活 KEX 协商:DH、ECDH;可扩展后量子算法;服务端 / 客户端双向协商套件列表
加密套件 DES、3DES、Blowfish,选择有限 AES‑CBC、AES‑GCM、ChaCha20‑Poly1305 等,支持大量现代密码
多路复用 不支持;每一类功能需要新建一条 TCP 连接 单 TCP 连接之上多路复用多个Channel 逻辑通道:Shell、SFTP、SCP、端口转发同时跑
认证方式 密码、RSA 公钥 密码、公钥、主机认证、Keyboard‑Interactive、SSH‑SK (FIDO)
Agent 代理 简易 Agent 完善 ssh‑agent 协议,支持 agent 转发
现状 全部废弃,现代 sshd 默认关闭 SSH‑1 工业通用标准,OpenSSH/libssh2/libssh 全部基于 SSH‑2

报文 / 数据包结构差异

SSH‑1 数据包结构

plaintext
uint32 packet_length      // 数据包总长度
uint8 padding_length      // 填充字节数
byte[payload_len] payload // 有效载荷
byte[pad_len] padding     // 随机填充
uint32 crc32              // CRC32校验(安全缺陷根源)
  • 缺陷:仅 CRC32 做完整性校验,不是密码学安全 MAC;攻击者可位翻转篡改密文,实现会话劫持。
  • 无独立 MAC 字段,CRC 同时承担校验,加密和校验耦合。

SSH‑2 标准数据包(RFC4253 transport‑packet)

libssh2 fullpacket() 就是组装该报文;本次 CVE‑2026‑66035 漏洞就在这个包的处理逻辑
plaintext
uint32  packet_length        // 不含MAC的整个包长度(4字节大端)
uint8   padding_length       // 填充字节数量
byte[N] payload              // 业务载荷
byte[P] padding              // 随机填充,最小4字节
byte[MAC‑len] MAC            // HMAC/Encrypt‑then‑MAC校验摘要(可选位置由模式决定)
两种工作模式:
  1. EtM Encrypt‑then‑MAC:先加密载荷 + 填充,再对密文计算 MAC;本次 libssh2 预认证漏洞触发条件之一。
  2. MtE MAC‑then‑Encrypt:先算明文 MAC,整体再加密。
SSH‑2:所有数值字段强制大端网络字节序;SSH‑1 同样大端,但字段定义、长度语义不一样。

关键底层差异小结

  1. SSH‑1:CRC32 弱校验 → 可被篡改,无 Channel 多路复用,功能简单、安全硬伤。
  2. SSH‑2:传输层包格式重新设计,分离加密与完整性校验;引入 Channel 多路复用,一套 TCP 连接跑多种业务(终端、文件传输、转发),可灵活切换密码套件。
  3. libssh2 只实现 SSH‑2,完全没有 SSH‑1 协议代码,本次全部漏洞均针对 SSH‑2 传输层 / SFTP 业务报文解析。

补充常见报错

Protocol major versions differ:1 vs 2
 
客户端尝试使用 SSH‑1 协议去连接只启用 SSH‑2 的服务端,现代环境极少见。

SSH‑2 完整握手 & 业务时序(RFC4253)

角色:Client 客户端(libssh2) ↔ Server SSH 服务端(sshd)
 
标注漏洞区间:KEX 阶段 = 预认证区间(CVE‑2026‑66033/34/35 在此可触发);SFTP 会话 = 认证后业务层(CVE‑2026‑66032)
plaintext
TCP三次握手建立连接
Client ───TCP SYN───→ Server
Client ←──TCP SYN+ACK─ Server
Client ───TCP ACK───→ Server

阶段 1:版本字符串协商(明文)

plaintext
Client ──"SSH‑2.0‑libssh2_1.11.1\r\n"──→ Server    【客户端版本公告,明文】
Client ←─"SSH‑2.0‑OpenSSH_9.7\r\n"─── Server    【服务端版本公告,明文】
此阶段全部明文,还没有任何加密。

阶段 2:KEX 密钥交换(预认证,尚未输入账号密码!高危漏洞区)

plaintext
Client ──KEX_INIT(客户端算法列表)──→ Server     
Client ←─KEX_INIT(服务端算法列表)─── Server     
# 双方协商:KEX算法、加密算法(AES‑GCM)、MAC模式(Encrypt‑then‑MAC)、压缩算法

Client ──KEX_ECDH_INIT(客户端公钥)──→ Server
Client ←─KEX_ECDH_REPLY(服务端主机公钥+服务端DH公钥+签名) ← Server
# 双方计算共享会话密钥;派生:加密key、IV、MAC密钥
# ✨ 自此之后所有报文全部加密
# ⚠️  CVE‑2026‑66033 / 66034 / 66035 预认证漏洞全部发生在KEX_INIT~KEX_REPLY流程,无需认证,恶意服务器构造畸形数据包即可攻击客户端内存

阶段 3:用户身份认证 UserAuth(RFC4252)

plaintext
Client ──USERAUTH_REQUEST(用户名|密码/私钥)──→ Server
Client ←─USERAUTH_FAILURE(继续尝试其他方式)─── Server
Client ──USERAUTH_REQUEST(私钥签名)──────────→ Server
Client ←─USERAUTH_SUCCESS ─────────────────── Server
# ✅ 认证成功,会话正式就绪
# CVE‑2026‑66032 尚未到达,需要进入上层Channel业务

阶段 4:Channel 创建(RFC4254 多路复用通道)

SSH‑2 单 TCP 连接可以同时建立多条独立 Channel:shell、sftp、端口转发
plaintext
Client ──CHANNEL_OPEN("session")──→ Server    请求打开session会话通道
Client ←─CHANNEL_OPEN_CONFIRM─── Server       Channel建立成功,分配本地/远程channel id

Client ──CHANNEL_REQUEST("subsystem","sftp")──→ Server  请求启动SFTP子系统
Client ←─CHANNEL_SUCCESS ──────────────────── Server   SFTP子系统启动完成
# 📌 SFTP逻辑通道就绪,开始执行SFTP指令交互
# ⚠️ CVE‑2026‑66032(sftp_open Double Free)就在这个之后的SFTP_FXP_OPEN应答处理逻辑

阶段 5:SFTP 业务交互(sftp.c 业务报文)

plaintext
Client ─‑SFTP_FXP_OPEN(打开文件)‑‑‑‑‑‑‑‑‑‑→ Server
Client ←‑SFTP_FXP_HANDLE / 畸形成功应答‑‑‑ Server 
# libssh2 sftp_open()处理服务端返回包,错误路径触发Double Free
# 完成业务读写、stat、readdir等SFTP操作

阶段 6:会话关闭

plaintext
Client ─CHANNEL_CLOSE─→ Server
Client ─DISCONNECT消息─→ Server
TCP断开

时序阶段风险标记总览

阶段 是否认证完成 可触发漏洞
版本协商 ❌未认证 无本次漏洞
KEX 密钥交换 ❌预认证 CVE‑2026‑66033、66034、66035
UserAuth 认证 部分交互 无本次漏洞
Channel Open / subsystem sftp ✅认证成功 到达漏洞前置条件
SFTP 业务报文交互 ✅认证成功 CVE‑2026‑66032 Double Free RCE

关键理解

libssh2 是客户端库;攻击链路:恶意 SSH 服务端发送畸形数据包 → 受害客户端 libssh2 解析处理报文触发内存破坏。
 
不需要拿到客户端账号密码,KEX 阶段的 3 个漏洞,只要客户端主动连恶意服务器,握手阶段就中招。

在 Windows XP 上开启 SSH 服务相对复杂,因为它不内置 OpenSSH。你需要使用第三方软件。以下是一些常见的方法:

方法 1:使用 Cygwin

  1. 下载 Cygwin:

  2. 安装 Cygwin:

    • 运行安装程序,选择安装目录。
    • 在软件包选择界面,搜索并选择 openssh 进行安装。
  3. 配置 SSH 服务:

    • 安装完成后,打开 Cygwin 终端。
    • 运行以下命令以生成 SSH 密钥:
      bashCopy Code
      ssh-host-config
    • 按提示设置服务,并输入“yes”以安装服务。
  4. 启动 SSH 服务:

    • 在 Cygwin 终端中运行以下命令:
      bashCopy Code
      net start sshd

方法 2:使用其他 SSH 服务器软件

可以使用一些专门为 Windows 开发的 SSH 服务器,例如:

  • FreeSSHd:简单易用,适合基本的 SSH 服务。
  • Bitvise SSH Server:功能更强大,支持多种认证方式。

安装步骤(以 FreeSSHd 为例):

  1. 下载 FreeSSHd:

  2. 安装并配置:

    • 按照安装向导进行安装。
    • 安装完成后,打开 FreeSSHd,进行必要的配置,包括用户设置和端口配置。
  3. 启动服务:

    • 在 FreeSSHd 界面中选择启动服务。

使用 SSH 连接

一旦 SSH 服务启动,你可以使用 SSH 客户端(如 PuTTY)进行连接:

bashCopy Code
ssh username@hostname

替换 username 和 hostname 为你的用户名和计算机名称或 IP 地址。

 


在 Windows 7 上,系统本身并不内置 SSH 服务器,因此需要使用第三方软件来实现 SSH 功能。以下是几种常见的方法:

方法 1:使用 OpenSSH for Windows

  1. 下载 OpenSSH:

  2. 解压缩并安装:

    • 解压下载的文件,将文件夹内容复制到 C:\Program Files\OpenSSH(可以根据需要选择其他位置)。
  3. 安装 OpenSSH 服务:

    • 打开命令提示符(以管理员身份)。
    • 运行以下命令安装 SSH 服务:
      bashCopy Code
      cd "C:\Program Files\OpenSSH"
      install-sshd
  4. 启动 SSH 服务:

    • 运行以下命令启动 SSH 服务:
      bashCopy Code
      net start sshd
  5. 设置开机自启:

    • 运行以下命令设置 SSH 服务在启动时自动运行:
      bashCopy Code
      sc config sshd start=auto

方法 2:使用 Cygwin

  1. 下载并安装 Cygwin:

  2. 选择 OpenSSH 包:

    • 在安装过程中,当提示选择软件包时,找到 OpenSSH 并选择安装。
  3. 配置 SSH 服务:

    • 安装完成后,打开 Cygwin 终端,运行以下命令生成 SSH 密钥对:
      bashCopy Code
      ssh-keygen -t rsa -b 2048
  4. 启动 SSH 服务:

    • 运行以下命令启动 SSH 服务:
      bashCopy Code
      /usr/bin/sshd

方法 3:使用其他第三方软件

还有其他一些第三方 SSH 服务器软件,例如:

  • Bitvise SSH Server
  • FreeSSHd

这些工具通常提供简单的安装向导和配置界面,适合不想手动配置的用户。

注意事项

  • 确保 Windows 防火墙允许 SSH 端口(默认是 22)通过。
  • 在使用 SSH 进行远程连接时,确保有相应的用户凭据。

在 Windows 8 上开启 SSH 服务的过程与 Windows 7 类似,因为系统本身不自带 SSH 服务器。你可以使用第三方软件来实现。以下是几种常见的方法:

方法 1:使用 OpenSSH for Windows

  1. 下载 OpenSSH:

  2. 解压缩并安装:

    • 解压下载的文件,将内容复制到 C:\Program Files\OpenSSH(或其他位置)。
  3. 安装 OpenSSH 服务:

    • 以管理员身份打开命令提示符。
    • 运行以下命令来安装 SSH 服务:
      bashCopy Code
      cd "C:\Program Files\OpenSSH"
      install-sshd
  4. 启动 SSH 服务:

    • 运行以下命令启动 SSH 服务:
      bashCopy Code
      net start sshd
  5. 设置开机自启:

    • 运行以下命令使 SSH 服务在启动时自动运行:
      bashCopy Code
      sc config sshd start=auto

方法 2:使用 Cygwin

  1. 下载并安装 Cygwin:

  2. 选择 OpenSSH 包:

    • 在安装过程中,选择 OpenSSH 包进行安装。
  3. 配置 SSH 服务:

    • 安装完成后,打开 Cygwin 终端,运行以下命令生成 SSH 密钥对:
      bashCopy Code
      ssh-keygen -t rsa -b 2048
  4. 启动 SSH 服务:

    • 运行以下命令启动 SSH 服务:
      bashCopy Code
      /usr/bin/sshd

方法 3:使用其他第三方软件

你还可以考虑使用一些第三方 SSH 服务器软件,例如:

  • Bitvise SSH Server
  • FreeSSHd

这些工具通常提供用户友好的安装和配置界面,适合不想手动配置的用户。

注意事项

  • 确保 Windows 防火墙允许 SSH 端口(默认是 22)通过。
  • 在使用 SSH 进行远程连接时,确保有相应的用户凭据。

在 Windows 10 上,你可以通过内置的 OpenSSH 服务器功能来启用 SSH 服务,或者使用第三方软件。以下是使用内置功能的步骤:

方法 1:使用内置 OpenSSH 服务器

  1. 检查是否安装 OpenSSH 服务器:

    • 打开“设置” > “应用” > “可选功能”。
    • 滚动查找“OpenSSH 服务器”,如果没有,点击“添加功能”,搜索并安装它。
  2. 启动 OpenSSH 服务器:

    • 按 Win + R,输入 services.msc,然后按回车。
    • 在服务列表中找到“OpenSSH SSH Server”。
    • 右键点击它,选择“启动”。
  3. 设置开机自启:

    • 右键点击“OpenSSH SSH Server”,选择“属性”。
    • 在“启动类型”中选择“自动”,然后点击“应用”并“确定”。
  4. 检查防火墙设置:

    • 确保 Windows 防火墙允许端口 22(SSH 的默认端口)通过。
    • 你可以在控制面板的“系统和安全” > “Windows 防火墙” > “高级设置”中添加规则。

方法 2:使用第三方软件

如果你更喜欢使用第三方软件,可以考虑以下选项:

  • Bitvise SSH Server
  • FreeSSHd

这些软件通常提供简单的安装和配置向导。

使用 SSH 连接

一旦 SSH 服务启动,你可以使用 SSH 客户端(如 PuTTY 或 Windows 内置的 SSH 客户端)进行远程连接:

bashCopy Code
ssh username@hostname

替换 username 和 hostname 为你的用户名和计算机名称或 IP 地址。

 


在 Windows 11 上开启 SSH 服务的步骤与 Windows 10 类似,因为 Windows 11 同样内置了 OpenSSH 服务器功能。以下是具体步骤:

方法 1:使用内置 OpenSSH 服务器

  1. 检查是否安装 OpenSSH 服务器:

    • 打开“设置”应用,选择“应用” > “可选功能”。
    • 滚动查找“OpenSSH 服务器”。如果没有安装,点击“添加功能”,在列表中找到并安装它。
  2. 启动 OpenSSH 服务器:

    • 按 Win + R,输入 services.msc,然后按回车。
    • 在服务列表中找到“OpenSSH SSH Server”。
    • 右键点击它,选择“启动”。
  3. 设置开机自启:

    • 右键点击“OpenSSH SSH Server”,选择“属性”。
    • 在“启动类型”中选择“自动”,然后点击“应用”并“确定”。
  4. 检查防火墙设置:

    • 确保 Windows 防火墙允许端口 22(SSH 的默认端口)通过。
    • 你可以在“控制面板” > “系统和安全” > “Windows 防火墙” > “高级设置”中添加入站规则。

方法 2:使用第三方软件

如果你更喜欢使用第三方 SSH 服务器软件,可以考虑以下选项:

  • Bitvise SSH Server
  • FreeSSHd

这些工具通常提供用户友好的安装和配置界面。

使用 SSH 连接

一旦 SSH 服务启动,你可以使用 SSH 客户端(如 Windows 内置的 SSH 客户端或 PuTTY)进行远程连接:

bashCopy Code
ssh username@hostname

替换 username 和 hostname 为你的用户名和计算机名称或 IP 地址。


 

posted @ 2024-11-03 16:54  suv789  阅读(1116)  评论(0)    收藏  举报