jabber.ru(又名 xmpp.ru)是2000年建立的最古老的俄罗斯XMPP服务,最近,jabber.ru经验丰富的管理员oxpa发现,在其位于德国Hetzner和Linode服务器托管提供商上发现了针对XMPP(Jabber)即时消息协议的加密TLS连接窃听(中间人攻击)。
oxpa在2023年10月16日连接到该XMPP服务时对“证书已过期”消息感到困惑。所有证书似乎都是最新的服务器,但与端口5222 (XMPP STARTTLS) 的连接向客户端提供了过时的证书。在其他专业人员和软件作者的帮助下,对ejabberd进行各种软件、网络和配置检查时,发现:
- 该软件在网络流量中提供正确的、未过期的证书;
- 服务器上不存在过期的证书;
- 该过期证书基于其他私钥并且从未由服务器授权的acme.sh证书颁发脚本颁发;
- 连接到5222端口的TCP连接被更改;
- 在其他非5222端口(例如5223 XMPP TLS 端口)上未观察到此行为;
- 受影响的机器是Hetzner上的专用服务器和Linode上的两个虚拟服务器,全部托管在德国。
经测试并对XMPP的流量进行抓包分析,5223端口上的所有数据都完好无损,但5222端口上的连接在应用程序级别(L7)被劫持,它们具有不同的源端口、SEQ/ACK 编号,并且似乎在没有任何中间路由跃点的情况下到达 (TTL=64),服务器从客户端接收替换的ClientHello消息。很明显,5222端口上的连接受到中间人攻击,该攻击会拦截加密通信。
并且,与常规的Linode实例相比,受影响的Linode虚拟机具有不常见的网络设置,可能已被隔离到单独的VLAN中。
在检查crt.sh证书透明度数据库后,发现了并非由任何jabber.ru服务器颁发的恶意证书。
jabber.ru正常的XMPP服务使用两种正版证书:一种是为 颁发的xmpp.ru, *.xmpp.ru,另一种是为jabber.ru, *.jabber.ru.
恶意颁发的证书与这些域名的常规证书略有不同:要么缺少通配符主题备用名称,要么为这两个域颁发了单个证书jabber.ru, xmpp.ru。此外,xmpp.ru域名(指向 Linode 服务器)上的MiTM配置略有错误:它仅提供xmpp.ru证书,但原始服务器被配置为根据请求的XMPP域名提供对应的jabber.ru证书或者xmpp.ru证书。
根据外部网络探测的信息确认,Linode服务器至少从2023年7月21日起就开始在端口5222上提供证书。
根据分析得出结论:
自2023年4月18日起,攻击者设法通过Let's Encrypt为jabber.ru和xmpp.ru域名颁发了多个SSL/TLS 证书,这些证书用于使用透明MiTM代理劫持5222端口上的加密STARTTLS连接。
针对jabber.ru/xmpp.ru客户端XMPP流量解密的中间人攻击已确认至少自2023年7月21日起持续到2023年10月19日,可能(未确认)自2023年4月18日起开始攻击,该XMPP服务的5222端口(不是5223)的STARTTLS连接100%受到窃听影响。窃听总共可能持续长达6个月(已确认90天)。
由于Let's Encrypt颁发的证书有效期通常为3个月,其中一个攻击用的MiTM证书因未及时更新(重新颁发)而过期,从而导致该攻击被发现。在jabber.ru管理员于2023年10月18日开始调查和网络测试后不久,MiTM攻击就停止了。
可以确认的是,jabber.ru的两台服务器都没有被黑客入侵,也没有迹象表明该网段存在服务器漏洞或欺骗攻击,恰恰相反:流量重定向已在托管提供商网络上配置。
Hetzner和Linode两个IDC似乎都是专门针对此类XMPP服务的IP地址进行了网络的重新配置,因此可以认为这是Hetzner和Linode根据德国警方的要求被迫设置的合法拦截。