来源: Attackers Hijacked Over 300 Tor Exit Relays to Intercept SSH Connections
攻击者劫持了超过300个Tor出口中继来拦截SSH连接
研究人员发现,攻击者在 10 月初控制了 300 多个 Tor 出口中继,并利用它们将 SSH 连接重定向到窃取登录密码的服务器。
出口中继是 Tor 电路的最后一跳,流量从这里离开网络前往目的地。只有在 10 月 1 日至 5 日期间,通过 Tor 接受拦截服务器的主机密钥后,对 SSH 服务器进行的密码登录才能被捕获。
Tor 项目于 10 月 4 日开始标记中继服务器,到 10 月 5 日,Tor 客户端使用的中继服务器列表(即共识列表)中已无任何中继服务器。根据发布在 tor-relays 邮件列表上的公开 Tor 目录数据的分析,在 10 月 4 日的峰值,携带攻击者退出策略的中继服务器占 Tor 退出容量的 7.46%(按共识权重计算) 。
这位网名为kaba的研究人员于10月2日扫描了Tor网络约3000个出口,发现其中333个将SSH请求重定向到相同的12个拦截服务器。目录数据分析显示,10月1日至4日期间,由59个运营商运营的377个中继服务器切换到了攻击者的出口策略,研究人员称之为“策略匹配,而非入侵证据”。
被劫持的出口如何拦截 SSH
出口中继服务器只允许流量通过其出口策略指定的端口。攻击者修改了中继服务器的 torrc 配置文件,允许端口 22(SSH 端口)通过,从而使 342 个原本阻止该端口的中继服务器能够使用 SSH。此外,还有 24 个原本并非出口中继服务器的服务器也变成了出口中继服务器。
Tor 项目网络健康团队在 10 月 5 日发给中继服务器运营商的通知中写道:“攻击者似乎正在获取基于 Linux 的主机的访问权限,当这些主机运行的是非出口模式时,攻击者会编辑 torrc 文件,将其更改为出口模式,从而能够发起 SSH 攻击。”目录数据显示,大多数受影响的中继服务器原本就是出口模式。
同样的更改关闭了加密邮件端口 IMAPS 和 POP3S,并在大多数中继上打开了支持明文的端口 POP3 和 IMAP。
Tor客户端只会选择允许目标端口的出口,因此这些中继服务器停止传输加密邮件,转而传输SSH、Telnet以及(在大多数情况下)明文邮件。分析指出,数据中无法显示加密邮件端口关闭的原因。
kaba发现,当22端口开放时,通过这些出口建立的SSH连接会跳转到12个拦截服务器中的一个,而不是目标服务器。当服务器拦截到连接时,它会提供自己的主机密钥。已经知道真实服务器密钥的用户会看到OpenSSH的警告,提示远程主机标识已更改;而首次连接的用户则会看到接受新密钥的常规提示。
在 10 月 2 日的扫描中,大约有十几个出口使用了伪造的主机密钥,而其他 300 多个出口则通过相同的服务器重定向,但密钥没有更改。
用户接受密钥并输入密码后,将其交给了拦截器。拦截器连接到真正的服务器,会话成功建立,每个命令都可以被监控,并使用窃取的密码单独登录,以检查是否存在 sudo 权限并运行一个 base64 编码的 Perl 安装程序。在 kaba 的蜜罐中,该安装程序的形式与在某个中继运营商的服务器上安装 Ebury(一个隐藏在 OpenSSH 内部的后门)的命令相同,如下所述。
基于密钥的 SSH 登录无法通过这种方式进行转发。根据SSH 身份验证协议,客户端的签名包含每个会话唯一的标识符,因此拦截器会话生成的签名对真正的服务器无效。拦截器本身仍然可以接受密钥登录并显示一个伪造的 shell,但它无法通过该 shell 连接到真正的服务器。
相比之下,密码是在加密会话中传输的,可以被另一端的服务器(即拦截器)读取。
哪些人被曝光了?如果你也被曝光了该怎么办?
要暴露该漏洞,攻击者必须在10月1日至10月5日下午期间通过Tor网络连接到SSH服务器,访问被劫持的出口服务器,连接被拦截而非直接通过,接受拦截者的主机密钥,并使用密码登录。目前尚无受害者人数统计。
如果您在该窗口中通过 Tor 接受了陌生或已更改的主机密钥,请将您输入的密码视为被盗密码,立即更改密码,并检查该服务器是否存在以下列出的 Ebury 特征。接受该密钥的 OpenSSH 客户端已将其保存在 known_hosts 表中。
拦截 kaba 连接的服务器使用了 ED25519 密钥,其指纹为 SHA256:6baCZCPsl+AfQuujUS81fMEE/C7UeJ+AwjrImqmDB3E,尽管其他拦截服务器可能使用了不同的密钥。
它是如何被发现和制止的
10月2日上午,Kaba遭遇了攻击。当时,他通过Tor网络建立的SSH连接返回了密钥更改警告。随后,他使用exitmap(Tor项目网络健康团队也在使用的一款扫描工具)依次通过各个出口,从他的一台服务器打开到另一台服务器的SSH连接。
一端检查主机密钥是否正确,另一端检查连接是否源自出口服务器或拦截服务器。当晚,他将结果报告给了医疗团队。
卫生团队也通过自身监控发现了这一政策变更。10月4日,他们联系了Quetzalcoatl中继服务器家族的负责人Zimmer,该家族是受影响中继服务器中规模最大的一个。Zimmer确认此次变更并非他所为,并要求将这些中继服务器标记为“不良”,同时停止了运行这些中继服务器的服务器上的Tor服务。
目录管理机构于当天 18:00 UTC 开始对受影响的中继服务器进行 BadExit 和 MiddleOnly 标志的投票,并在 21:00 达成共识。BadExit会告知 Tor 客户端永远不要将中继服务器用作出口。
10月5日上午,Quetzalcoatl的55个主机被预先设定的重启程序覆盖,该程序仍然执行着之前的策略。目前尚不清楚是谁执行了重启。Tor项目在其公告中指出,目录管理机构当时已经开始拒绝受影响的中继服务器加入网络,而Zimmer之前停止的那两个中继服务器在尝试重新加入时也被拒绝了。
截至10月5日17:00 UTC,所有采用攻击者策略的中继服务器均未加入共识,且截至10月9日仍未有任何中继服务器恢复共识,目录数据分析显示。当时仍有41个中继服务器(其中9个为Quetzalcoatl所有)仍在发布该策略,但未被列入共识。
Tor Metrics统计的携带 Exit 标志的中继数量在 10 月 3 日至 10 月 5 日期间减少了约 370 个,与受影响的中继数量相符,并且到 10 月 18 日仍未恢复。
埃伯里,以及攻击者是如何进入的
齐默在 10 月 7 日的邮件列表中对此事进行了事后分析。他的两台服务器运行的是 Ebury 1.8.3 版本:一台是 Contabo 的管理服务器,用作该家庭的 VPN 网关和 SSH 跳转主机;另一台是 FranTech 的 VPS,他称之为 Switzerland2,运行着两个出口。
据 ESET 称,Ebury 是一个针对 OpenSSH 的后门和凭证窃取程序,自 2009 年以来一直活跃。ESET 在 2024 年估计,它已经感染了40 万台服务器,到 2023 年底仍有超过 10 万台服务器受到感染。
攻击者于 8 月 28 日首次尝试就使用操作员帐户密码登录了管理服务器,五分钟内获得了 root 权限,安装了 Ebury,然后一个多小时后到达了 Switzerland2 并在那里也安装了 Ebury。
“根本原因在于我们自身:SSH登录、sudo和备用密码都使用了同一个密码,并且以明文形式存储在两台服务器上,此外,面向互联网的管理服务器上还启用了SSH密码验证,”齐默尔写道。攻击者从何处获取该密码尚不清楚。
Ebury的后门登录不会留下任何记录。10月2日,出口的配置文件被重写,日志中没有任何登录信息、sudo命令或cron作业记录,两个中继服务器于UTC时间09:34发布了攻击者的策略。该策略在两个中继服务器上持续运行了约52小时,每天传输约3.4 TiB的数据。
10 月 4 日的一次例行重启清除了攻击者的隐藏工具,但 Ebury 很快就卷土重来。
齐默尔写道,该家族所谓的“离线”主密钥“实际上并未离线:副本保存在管理服务器的工作站备份中,并使用攻击者已有的密码进行了加密”。他停用了该家族的所有中继和桥接器,并删除了两台服务器。
这个 Ebury 是一个单独的 setuid 库文件,位于 /usr/lib/x86_64-linux-gnu/libkeyutils.so.1.10.2,并有 libkeyutils.so.1 符号链接指向它。打包后的库文件未被修改,因此 dpkg -V 和 debsums 命令无法检测到它,sshd、sudo 和 PAM 的软件包检查也都通过了。版本 1.8.3 比 ESET 公开的版本指示更新(ESET 的版本指示更新到 1.8.2),而且ESET于 10 月 21 日发布的检测脚本中也没有列出该库的套接字名称。
曾参与撰写 ESET 2014 年 Ebury 报告的 Marc-Etienne M. Léveillé,也参与撰写了 2024 年的报告,现已离开公司。他回复称,1.8.3 版本至少从 2026 年 6 月起就已存在,并发布了涵盖该版本的更新脚本。他写道:“考虑到 2009 年至 2023 年间有 40 万台服务器感染了 Ebury,很可能还有其他被攻破的 Tor 中继服务器。”
其他58家运营商的主机是如何被入侵的,这是目前尚未解决的主要问题。目录数据分析发现,在10月1日列出的这些中继服务器中,托管在BuyVM主机品牌背后的网络FranTech Solutions上的101个中继服务器中有71个切换到了攻击者的策略,而托管在其他网络的9054个中继服务器中只有13个切换到了攻击者的策略。
10 月 1 日,21 个运营商的 40 个中继在五分半钟内发生变化,其中大部分是通过配置重新加载实现的,分析表明,一个参与者已经拥有了所有 40 个中继的访问权限。
莱维耶认为,密码的最佳猜测是来自已运行 Ebury 的主机的登录信息,另一种可能性是托管服务提供商遭到入侵。他写道,ESET 发现一些服务提供商的管理服务器运行着 Ebury,而这些服务提供商的客户的虚拟服务器最终都受到了感染。
Kaba 统计了 FranTech/BuyVM 中 Quetzalcoatl 家族之外的 27 台被入侵服务器中的 26 台,并在列表中问道:“他们是否有可能在主机级别入侵了这些服务器?”
Quetzalcoatl 自身的漏洞是通过其 Contabo 管理服务器传播的,其 273 个受影响的中继中有 225 个位于其他网络上。
幕后黑手是谁尚不清楚,受影响的主机中有多少台运行着 Ebury 也无从得知:Zimmer 检查了他自己的两台主机,目录数据仅显示了策略信息。其他运营商向 Tor 项目报告的迹象包括伪造的大写 CRON 守护进程和重定向 22 端口的 NAT 规则。Zimmer 的服务器上没有这些迹象,这些案例是否由同一人所为也尚待查明。
齐默尔写道,由于端口变更,在他管理的中继服务器上,任何邮件检索都只能以明文形式进行,而且一个名为 snf 的隐藏进程在大部分时间里都在 Switzerland2 服务器上运行。它的具体功能尚不清楚。
中继操作员应该检查哪些内容
Tor 项目的通知要求 Linux 中继运营商检查中继搜索中是否存在他们未设置的退出标志或退出策略,并检查 torrc 和任何包含的文件,查找已更改的 ExitRelay、ExitPolicy、ContactInfo、MyFamily 或 Nickname 行。
它还列出了端口 22 上的 NAT 规则、未知监听进程或出站连接、新用户、authorized_keys 条目、cron 作业和 systemd 单元,以及一个软件包检查失败的 tor 二进制文件。Zimmer 的服务器没有显示列表中任何主机级别的迹象,只有退出策略发生了更改,因此干净的主机检查并不能排除 Ebury 的可能性。
根据齐默尔的帖子,植入物的迹象有:
文件: /usr/lib/x86_64-linux-gnu/libkeyutils.so.1.10.2,已设置用户 ID (setuid),且不属于任何软件包(在其服务器上大小为 63,368 字节,每个服务器上的哈希值都不同)
符号链接: libkeyutils.so.1 指向该文件
套接字:抽象 UNIX 套接字 @event-0YsOG9WSOE
进程:一个伪造的 /sbin/rsyslogd(早期版本为 systemd-udevd 或 arpd)在 ssh.service cgroup 中运行。
IP地址: 185.225.226[.]62,即8月28日登录的来源
SSH密钥: RSA SHA256:dvACokMYcXJ2om4wuS+TvdtjrAgPK7rC7ZQHDgvBHzk,用于登录Switzerland2。
植入体中嵌入的 SSH 密钥: RSA SHA256:KlICz/B59619CpuQdGzgmmvzWBfTMUJ77EwihTYobuo 和 ED25519 SHA256:OfLY0uF9SwOW9xVjiMXZGDfk6Atmz6CbHy4epknLm8Y
拦截器主机密钥: ED25519 SHA256:6baCZCPsl+AfQuujUS81fMEE/C7UeJ+AwjrImqmDB3E,在 kaba 的连接中看到
如果可以,请从救援系统或离线磁盘映像进行检查。在运行中的服务器上,请使用密钥登录。“切勿在您怀疑的服务器上输入密码,因为 Ebury 会捕获它,”齐默尔写道。
使用 H=1 I=1 LD_PRELOAD=“:” LD_DEBUG=“:” bash 启动 shell,以便在运行 Léveillé 更新的脚本或 Zimmer 的帖子中的命令之前绕过用户空间 rootkit。
如果你找到了,Tor 项目的步骤如下:
将中继器离线
擦除磁盘前请保留磁盘和日志。
重新安装而不是清理
生成新的中继身份,并将旧密钥视为被盗密钥。
轮换主机上的所有凭证