我是如何让 300 多个 Tor 出口节点被下线的
Hacker News 摘要原标题:How I got over 300 Tor exit nodes removed
这篇文章讲述了作者如何发现并协助清除 Tor 网络中超过 300 个受感染出口节点的过程。
事件背景与攻击规模
在 10 月 2 日星期五上午,有 333 个受感染的 Tor 出口节点发起了一场协同攻击。整个 Tor 网络大约只有 3000 个出口中继,这意味着约 10% 的出口节点落入了攻击者的控制。
攻击者早在两个月前的 8 月就获得了这些服务器的访问权限,并在后台悄悄部署了 Ebury 1.8.3 载荷。Ebury 是一种针对 Linux 系统的 OpenSSH 后门和凭据窃取工具。
攻击方式
本次攻击主要有两个目的:
• 收集尽可能多的未加密邮件流量。攻击者通过封锁特定端口,让这些受感染的节点只处理未加密的邮件流量。
• 对 SSH 连接发起中间人攻击(MITM)。
作者重点分析了 SSH 中间人攻击的机制。如果用户的流量恰好经过这 333 个受感染节点之一,普通的加密网页流量会正常转发,用户很难察觉异常。但一旦用户尝试通过 22 端口发起 SSH 连接,流量就会在不知情的情况下被重定向到 12 台 SSH 拦截服务器中的一台。
作者在周五早上就遇到了这种情况,他的客户端弹出了远程主机身份已更改(REMOTE HOST IDENTIFICATION HAS CHANGED)的警告。如果用户忽略该警告并强行登录,攻击者会执行三项操作:
• 窃取用户的登录密码。
• 建立到目标服务器的连接并实施中间人攻击,监控用户输入的每一条命令。
• 建立第二条连接,向目标服务器植入 Ebury 恶意程序。
下线受感染节点的过程
作者在周五晚间将自己的发现提交给了 Tor 项目的网络健康团队。该团队表示此前从未见过此类攻击,并迅速联系受影响的中继运营者。整个处置时间线如下:
• 10 月 2 日(周五):拦截攻击开始。
• 10 月 4 日(周日):Tor 网络健康团队向运营者发布公告,运营者开始关闭受感染节点。同时,官方将这些中继标记为 BadExit,客户端不再使用它们导出流量。
• 10 月 5 日(周一):攻击者重启了其中许多中继,但因已被标记,它们只能充当普通中间中继。
• 10 月 5 日(周一):所有受感染服务器被完全关闭,关闭操作部分来自运营者,部分来自攻击者。
根据健康团队的公告,攻击者获取了 Linux 主机的权限,修改机器上的配置文件,将原本非出口的中继变成了出口中继,从而实施 SSH 攻击。在 Tor 官方指标监控图上,可以明显看到出口节点数量在 10 月 4 日出现剧烈下滑,并且一直没有恢复。
技术排查与定位方法
作者使用 exitmap 编写了一个脚本,测试了全部约 3000 个出口中继:
• 脚本固定指定一个出口节点,从作者的服务器 A 向服务器 B 发起 SSH 连接。
• 服务器 A 检查接收到的 SSH 指纹是否来自服务器 B。
• 服务器 B 检查连接是直接来自固定的出口节点,还是来自那 12 台拦截服务器。
测试发现,有十几个节点返回了伪造指纹,另有 300 多个节点虽然没有拦截指纹,但将流量重定向到了相同的拦截服务器。仅凭发生重定向这一特征,作者就确认了该节点已被感染。
随后作者使用 sshesame 搭建了蜜罐做进一步分析。诱骗攻击者登录蜜罐后发现,他们使用了 Python 的 paramiko 库,并通过 Perl 脚本来安装 Ebury。其方式是先检查运行权限和 sudo 状态,然后通过 Bash 解码 Base64 编码的命令并交给 Perl 执行。
未解之谜与启示
目前该事件仍有两个疑问尚未解开:
• 攻击者最初是如何黑进这些服务器的。有一种说法是主机提供商本身遭到了入侵,但这只是推测。
• 幕后黑手是谁。由于使用了 Ebury 并且大肆搜集未加密数据,攻击更可能来自以金钱为动机的犯罪团伙。有安全研究人员指出,在 2009 年至 2023 年间,全球有 40 万台服务器感染过 Ebury,因此网络中很可能还有其他被攻陷的 Tor 中继。此外,攻击者特意选择周五发起攻击,可能是料定响应人员不想在周末加班排查。
作者总结指出,额外的安全防范是非常值得的。用户应当禁用密码登录,改用 SSH 密钥,或者配置硬件安全密钥。Tor 中继和网桥设备必须被视作高风险、极易受到针对的生产级机器来严格维护。