Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
USSH — 基于 USTPS 重现 SSH | Kitploit
工具/GitHubGitHub/x1colegal/ussh
加密/解密工具网络安全密码学实用工具与框架身份验证远程访问工具
GitHubx1colegal/ussh

USSH

基于 USTPS 重现 SSH

查看仓库
3419天前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

USSH

USSH 是一种基于 USTP-Secure 构建的 shell 协议及客户端/服务器端程序对。

它不是 TCP 隧道,也不会将 SSH 封装在 TCP 中。

状态:Beta

许可证:MIT

AEAD 密码名称

  • chacha20 = CHACHA20_POLY1305
  • aes-256-gcm = AES_256_GCM
  • aes-128-gcm = AES_128_GCM
  • 默认 AEAD 密码:chacha20

默认端口

  • 5322

服务器端

root@kitploit:~
python3 ussh_server.py \
  --peer-ip <CLIENT_IP_OR_DOMAIN> \
  --peer-port 0 \
  --bind-ip 0.0.0.0 \
  --bind-port 5322 \
  --cipher chacha20 \
  --congestion-control auto

如果省略 --password,服务器端将在启动时提示输入 USSH 登录密码。

在交互式启动时,服务器端会询问是否将其自身安装为 systemd 服务。回答 n 可正常运行。使用 --no-systemd-prompt 可跳过该问题。

客户端

root@kitploit:~
python3 ussh_client.py \
  --peer-ip <SERVER_IP_OR_DOMAIN> \
  --peer-port 5322 \
  --bind-ip 0.0.0.0 \
  --bind-port 0 \
  --cipher chacha20 \
  --congestion-control off \
  --cleartext off

客户端会像 SSH 一样交互式地提示输入密码。

客户端将首次看到的服务器 X25519 公钥存储在 ~/.ussh_known_hosts.json 中。 如果该密钥之后发生变化,客户端会以 TOFU 不匹配错误中止,而不是静默信任新密钥。 如果你有意轮换服务器主机密钥,请使用 --regen-key 运行客户端,以便在交互式确认后允许替换存储的 TOFU 密钥。

Internet-Draft

  • USSH Internet-Draft:https://datatracker.ietf.org/doc/draft-x1co-ussh/

说明

  • 传输层为基于 UDP 的 USTP-Secure。
  • USSH 还支持可选的明文 DATA 模式,并带有逐包 HMAC 完整性校验:
    • 服务器端:--cleartext auto|on|off
    • 客户端:--cleartext on|off
    • 当服务器端为 auto 时,USSH 遵循客户端请求。
    • 当服务器端为 on 或 off 时,服务器端强制指定最终的明文模式。
    • 使用 --cleartext on 时,USSH 会打印警告,提示明文在真实互联网上存在危险,仅建议在受控环境(如本地网络)中使用。
  • 在 USSH 之下,USTPS 使用可读的 ASCII 控制行,如 ACK: 10 MAC:<tag>、NACK: 42 MAC:<tag>、HELLO: ...、CLOSE:,以及二进制 UPACK(UPAK)DATA 帧。
  • ACK 和 NACK 保持明文以便调试,但它们带有每会话 HMAC 标签进行认证,以防止伪造的 ACK/NACK 控制攻击。

传输层握手

  • USSH 继承了与 USTP-Secure 相同的 USTPS 重试令牌握手。
  • 服务器端首先使用重试令牌和会话元数据向客户端发起挑战。
  • 客户端必须在加密的 USSH 会话被接受之前回显该令牌。
  • 同一握手还协商最终的 AEAD 密码以及 USTPS Congestion 为 on 还是 off。
  • 同一握手还协商 DATA 使用 AEAD 加密还是明文加 HMAC。
  • 重试令牌仅在会话创建前作为可达性证明。
  • 它不是会话密钥,不是包 nonce,也不是后续派生的 AEAD 会话密钥的替代品。
下载工具
  • 在正常模式下,DATA 载荷使用 AEAD 加密。
  • 在明文模式下,DATA 载荷不加密,但仍携带 HMAC,因此第三方无法在不被发现的情况下修改它们。
  • USSH 继承了 USTPS 传输层每个 UPACK DATA 载荷 900 字节的载荷上限。
  • USSH 未在 USTPS 之下定义第二层分片层。
  • 传输层 MTU、PMTU、nonce 行为、重复包处理和过期包处理均继承自 USTPS。
  • 自动网络/路径迁移已被移除。
  • 如果客户端更换网络且其源 IP:port 发生变化,当前 USSH 会话预计将关闭,用户应干净地重新连接。
  • 迁移实现被移除,因为它导致了实际中的可靠性和安全问题:
    • 当 NAT 或移动网络快速切换路径时,反复出现迁移洪泛
    • 会话看似已恢复,但停止传递终端数据
    • 客户端在发现路径失效前出现长时间静默
    • 真实漫游客户端与声称属于现有会话的伪造数据包之间存在歧义
    • 恢复状态可能使终端卡住,而不是干净地重新连接
  • 当前行为有意保持更简单:在当前 IP:port 上验证客户端,将会话绑定到该端点,如果端点发生变化则重新连接。
  • USSH 从传输层继承了可选的 USTPS Congestion。
  • 服务器端:--congestion-control auto|on|off
  • 客户端:--congestion-control on|off
  • 当服务器端为 auto 时,USSH 遵循客户端请求。当服务器端为 on 或 off 时,服务器端强制指定最终模式。
  • USTP-Secure 本身保持无序。
  • USSH 不会将传输层转变为类似 TCP 的有序通道。
  • USSH 仅在写入终端前重组逻辑 stdout 字节流。
  • USSH 还可能为 shell 输入/输出块保持应用层排序,因为 PTY 期望连贯的字节流行为。
  • 这种重组之所以存在,是因为交互式 shell 输出是连续的字节流,而按原始到达顺序渲染终端字节可能会破坏大型输出,如 ls、find 或编译器日志。
  • 这意味着 USTP-Secure 仍然避免传输层的队头阻塞,而 USSH 仅恢复终端渲染所需的应用层顺序。
  • 载荷逐包使用 AEAD 加密。
  • 不使用静态 PSK。
  • 每个客户端通过 X25519 获得独立的临时 AEAD 会话密钥。
  • 密码用于在安全会话建立后执行 USSH 认证。
  • 服务器端在运行 ussh_server.py 的机器上启动一个真正的 PTY 支持的 shell。
  • 客户端发送 stdin 字节并渲染 stdout 字节。
  • 服务器端支持多个客户端,每个客户端对应一个 shell/会话。
  • 如果服务器端设置了 --cipher,则服务器端使用该确切密码。
  • 如果省略 --cipher 或设置为 auto,则服务器端使用客户端请求的密码。
  • 客户端拒绝意外的密码协商。
  • 客户端启用了 TOFU(首次使用信任),以检测首次连接后意外的服务器密钥变化。
  • 服务器端默认在 ~/.ussh_host_key 中保留持久的 X25519 主机密钥,以便 TOFU 在重连和重启后保持稳定。
  • 正常的服务器端重启不会改变主机密钥。
  • 仅当你确实想要轮换该主机密钥时,才在服务器端使用 --regen-key。
  • TOFU 条目按 <peer-ip-or-domain>:<peer-port> 存储,因此位于不同地址/端口的不同服务器被视为不同的主机身份。