SSH 连接到不受信任的主机有哪些风险?

信息安全 SSH
2021-08-31 03:35:57

当 SSH 连接到已被具有 root 权限的攻击者入侵(或使用被盗的服务器密钥完全替换)的主机时,客户端可能发生的最坏情况是什么?

众所周知,X 转发会带来一些风险,在这种情况下,代理转发显然是个坏主意,但还有更多问题吗?

  • 除了 ssh 设置的环境变量(SSH_CONNECTION,来自 ~/.ssh/environment 的所有内容)之外,还可以获得有关客户端的哪些信息?
  • 终端转义序列可以完成什么?
  • 假装注销(响应 CTRL+D、注销等)到客户端,从而促使用户在远程主机上执行具有潜在敏感输入的附加命令(例如带有密码输入的 sudo)有多难?可以远程读取客户的提示以使这种欺骗更具说服力吗?
  • 是否有任何有效的方法来防止这种欺骗,例如将 ssh 别名为“ssh; echo somesecret”?
2个回答

在敌对服务器上拦截“注销”命令很容易。拦截“Ctrl-D”需要在原始模式下控制终端,但这不是一个大问题。

读回终端内容可能会很困难。不同的终端实现自己的一套控制序列;xterm 因实施其中很多而臭名昭著。我没有看到任何允许读回终端内容的序列;但是,仍然可以对序列进行一些相当大的混乱,例如移动窗口、切换字体等。在过去,实际上可以让 xterm 创建本地文件,尽管对文件名没有太多控制(我不记得细节,但它可能与“日志文件”功能有关,该功能可能在编译时被禁用 -时间)。除了跳舞之外,xterm 也可以用“铃铛字符”来唱歌——尽管它比攻击向量更令人讨厌。

说到麻烦:根据客户端系统及其配置和图形驱动程序,高速滚动文本的流氓终端可能会冻结受害者的控制台(根据我的经验,gnome-terminal 和合成窗口管理器可能会变成一个糟糕的组合为了那个原因)。

仍然在 xterm 中,有一些序列可以操作剪贴板(在上面链接的参考页面中搜索“操作选择”)。对于阅读和写作来说,这可能是令人讨厌的。有关可能问题的讨论,请参阅此页面(问题跟踪评论列表,来自人们讨论在名为 mintty 的终端仿真器中导入该机制的可能性)。


总体结论是:不要通过 SSH 连接到不安全的主机。如果你这样做了,你可能想从rxvt-unicode执行此操作,这是一个 rxvt 分支,作者在默认情况下(除其他功能外)在禁用“不安全”控制序列方面做出了一些努力(它们可以通过“-insecure”恢复命令行参数)。

如果您禁用 X11 转发和 SSH 代理转发(至少在 Ubuntu 18.04 上这是默认配置),远程 root 无法执行任何他们在该主机上已经无法执行的操作,除非您使用 ssh 连接到它。(当然,如果远程 root 知道您的 ssh 软件中的某些安全漏洞,则可以接管您的客户端并在您的计算机上以您的帐户执行代码。这与您用于连接任何远程计算机的任何软件相同。)

远程机器进程以 root 身份运行的示例(例如远程机器管理员或代表他或她运行的任何进程):

  • 读取和修改您访问、读取或写入的任何文件。
  • 任何进程的任何系统调用的虚假结果,包括更改任何参数、不运行任何东西或其他东西或伪造返回值。
  • 读取和修改任何进程的内存。
  • 控制在所述机器上运行的任何打开的 TCP/IP 连接。
  • 监视和修改任何事件(例如,您击中的每个键击都是远程机器上可见的纯文本,即使是一个进程)。

远程机器进程不能做的事情的例子:

  • 读取在远程机器外部进行加密的机器上运行的加密管道的纯文本内容(例如 P2P 加密流量)。
  • 如果您没有将加密密钥作为文件或作为 RAM 的一部分存储在远程计算机上,请读取加密文件的内容。例如,如果您在自己的计算机上加密文件并使用 ssh/scp 将这些文件复制到远程计算机。
  • 阅读本地环境的内容(包括提示设置),除非您已配置ssh将此类设置转发到远程主机。(例如,在所有机器上获得熟悉的提示样式。)

强制注销/断开连接的唯一方法是在ssh设置中使用转义字符。默认情况下应该是这样~,如果您按顺序按enter, ~.ssh 将检测到此转义序列并关闭连接。远程主机无法阻止转义字符序列。可以伪造任何其他键序列的行为。请注意,如果~已将芬兰键盘配置为“死键”,则必须输入转义序列为enter, altgr+~, space,.enter, altgr+~, altgr+~, .我认为美国国际键盘配置将表现相同。请注意,如果您使用ssh连接host-a并从那里连接到host-b, 使用上述转义序列将终止与 to 的连接,host-a因为转义序列将由ssh首先读取输入的进程解释(在这种情况下,ssh在 localhost 中运行并连接到 的进程host-a)。如果您需要转义序列来断开与每个主机的连接,则每个主机连接都必须使用单独的转义序列。显然,如果host-a受到攻击者的控制,他或她可以修改任何使用任何字符序列的尝试。有关更多信息,参阅man ssh“ESCAPE CHARACTERS”的副标题或尝试使用活动连接。enter~?ssh