Interception de trafic chiffré détectée sur jabber.ru chez Hetzner et Linode
(notes.valdikss.org.ru)- Des indices montrent que des connexions XMPP STARTTLS sur le port 5222 ont été interceptées par un proxy MiTM transparent sur le serveur dédié Hetzner et les VPS Linode du service XMPP russe jabber.ru/xmpp.ru
- Les attaquants ont obtenu plusieurs certificats TLS via Let’s Encrypt et ont terminé les connexions chiffrées au milieu du chemin ; le problème a été révélé lorsque le port 5222 de jabber.ru chez Hetzner a commencé à présenter un certificat expiré
- Aucune trace de compromission des serveurs ni d’ARP spoofing sur le même segment réseau n’a été trouvée, et les instances Linode montraient un chemin et une adresse MAC de passerelle différents de ceux d’une VM normale, ce qui suggère fortement une reconfiguration du réseau d’hébergement
- Le MiTM a été confirmé au minimum du 21 juillet au 19 octobre 2023, avec une possibilité dès le 18 avril 2023 ; 100 % des connexions sur le port 5222 ont été affectées, tandis que le port 5223 ne l’a pas été
- Les communications jabber.ru/xmpp.ru pendant cette période doivent être considérées comme compromises, et même le chiffrement de bout en bout comme OMEMO, OTR ou PGP n’était protecteur que si les deux parties avaient vérifié les clés
Interception révélée par un certificat expiré
jabber.ruest un service XMPP russe lancé en 2000, également connu sous le nom dexmpp.ru- Le 16 octobre 2023, lors d’un accès au service, le message « Certificate has expired » est apparu, alors que tous les certificats installés sur le serveur étaient à jour
- L’anomalie n’apparaissait que sur le port 5222 utilisé par XMPP STARTTLS, et n’a pas été observée sur d’autres ports comme le port 5223 pour XMPP sur TLS
- Les serveurs touchés étaient un serveur dédié Hetzner en Allemagne et deux serveurs virtuels Linode
- Sur le trafic du port 5222, il a été observé que le serveur recevait non pas le ClientHello d’origine du client, mais un ClientHello remplacé
Résultats de l’enquête côté compromission serveur
- L’enquête visait à vérifier à la fois l’hypothèse d’un piratage des serveurs et celle d’un spoofing sur le réseau local
- Côté serveur, les éléments suivants ont été vérifiés sans résultat anormal
- l’ensemble des journaux
- les dates de modification des exécutables et bibliothèques
- les processus en cours, les cartes mémoire et les dangling file descriptors
- la présence éventuelle de bibliothèques de détournement
LD_PRELOADen espace utilisateur à l’aide d’unbusyboxcompilé statiquement - l’existence de modules de détournement au niveau noyau via un dump de mémoire noyau avec LiME et une analyse avec volatility
- Dans les journaux du noyau du serveur dédié Hetzner, seule une coupure de 19 secondes du lien réseau physique le 18 juillet 2023 a été relevée comme exception
- Les serveurs Linode n’étaient utilisés que comme tunnels de chemin alternatif vers le serveur Hetzner et n’exécutaient que des services de base comme SSH et NTP
- À l’intérieur du tunnel Hetzner↔Linode, le ServerHello légitime du serveur Hetzner était visible, mais il était modifié au moment de l’envoi au client via l’interface réseau Linode
- en d’autres termes, le même type d’interception de connexion chiffrée se produisait à la fois chez Hetzner et chez Linode
Anomalies observées sur le réseau Linode
- Du point de vue réseau, les points suivants ont été examinés sans trouver de traces de détournement à proximité des serveurs
- un éventuel ARP spoofing de l’adresse MAC de la passerelle
- le fait qu’une même IP réponde plusieurs fois aux requêtes ARP sur le segment L2
- des règles de routage anormales injectées via ICMP redirect ou autres mécanismes
- les règles Netfilter
- l’existence de tunnels difficiles à détecter, comme IPsec
- Les machines Linode affectées ne pouvaient ni résoudre par ARP ni joindre par ping les IP voisines du même segment réseau, alors que depuis des réseaux externes ces IP voisines fonctionnaient normalement
- Une VM Linode tierce non affectée pouvait joindre les hôtes voisins par ping et était connectée à un routeur Cisco Systems
- En revanche, les VPS affectés étaient connectés à une passerelle dont l’adresse MAC ne permettait pas d’identifier le constructeur
- Cette différence renforce l’hypothèse que les VM Linode affectées utilisaient une configuration réseau différente des instances Linode ordinaires, ou qu’elles étaient isolées dans un VLAN distinct
Certificats frauduleux et traces dans Certificate Transparency
- La base de données de certificate transparency crt.sh a révélé des rogue certificates que les serveurs jabber.ru n’avaient pas émis
- Deux types de certificats étaient utilisés par le service XMPP légitime
xmpp.ru, *.xmpp.rujabber.ru, *.jabber.ru
- Les certificats émis de manière malveillante différaient légèrement des certificats légitimes
- soit en omettant le Subject Alternative Name wildcard
- soit en regroupant
jabber.ruetxmpp.rudans un même certificat
- La configuration MiTM côté Linode pointant vers le domaine
xmpp.ruétait partiellement incorrecte- le serveur d’origine était configuré pour fournir à la fois les certificats
jabber.ruetxmpp.ruselon le domaine XMPP demandé - le côté MiTM ne fournissait que le certificat
xmpp.ru
- le serveur d’origine était configuré pour fournir à la fois les certificats
- L’heure d’émission du certificat du 18 juillet 2023 coïncide presque avec l’instant où le lien réseau du serveur Hetzner a été coupé pendant quelques secondes
- Un scanner réseau externe a confirmé qu’au minimum depuis le 21 juillet 2023, les serveurs Linode présentaient le certificat
04:b7:85…sur le port 5222 - Ce scanner ne couvrait pas la plage Hetzner
Équipement en amont du port 5222 et différences de chemin
- Des tests réseau supplémentaires ont été effectués depuis l’extérieur vers les VPS Linode
- Les hôtes voisins du même segment Linode étaient joignables au hop 13 depuis une connexion Internet de portable
- Le port 5222 intercepté du serveur Linode
dawn.jabber.ruétait lui aussi joignable au hop 13 - Mais les ports non interceptés du même serveur, comme le port SSH 22, n’étaient joignables qu’au hop 14 après un hop supplémentaire non public
- Cela indique que l’adresse IP de la VM Linode se trouvait derrière un équipement supplémentaire, lequel traitait directement le port TCP 5222 et routait les autres ports vers la destination réelle
- À l’intérieur du VPS, il était impossible de créer de nouvelles connexions avec le port source 5222
- le routeur ne répondait pas aux paquets émis avec ce port source
- il n’envoyait pas non plus d’ICMP error ni de Time-to-Live Exceeded pour les paquets sortants avec TTL=0 ou TTL=1
Mode de terminaison STARTTLS et empreinte de détection
- D’après l’analyse réalisée avec testssl.sh, le proxy intercepteur autorisait des anonymous ciphers à la fois sur Linode
xmpp.ruet sur Hetznerjabber.ru - Il s’agit d’une mauvaise configuration rare qui peut servir d’empreinte de détection d’un MiTM XMPP
- Les bibliothèques SSL/TLS classiques sont généralement compilées sans prise en charge des anonymous ciphers, et même lorsqu’on les autorise explicitement dans la configuration, il est souvent difficile de faire en sorte qu’un service les utilise réellement
- Le serveur d’origine n’avait pas d’anonymous ciphers configurés
- En testant une vingtaine de services XMPP populaires avec la même commande
testssl.sh, aucun signe anormal comme la prise en charge d’Anonymous NULL Ciphers n’a été observé
Conclusions établies et impact pour les utilisateurs
- Les attaquants ont obtenu via Let’s Encrypt plusieurs certificats SSL/TLS pour les domaines jabber.ru et xmpp.ru à partir du 18 avril 2023
- Une attaque Man-in-the-Middle visant à déchiffrer le trafic XMPP client de jabber.ru/xmpp.ru a été confirmée au minimum du 21 juillet au 19 octobre 2023
- Il reste possible qu’elle ait commencé dès le 18 avril 2023, sans confirmation formelle
- Le périmètre d’impact couvre 100 % des connexions XMPP STARTTLS sur le port 5222, le port 5223 n’étant pas concerné
- Les attaquants n’ont pas réussi à renouveler les certificats TLS, et le proxy MiTM du port 5222 de jabber.ru chez Hetzner a commencé à présenter un certificat expiré
- L’attaque MiTM a cessé juste après l’enquête du 18 octobre 2023, les tests réseau et l’ouverture de tickets auprès du support Hetzner et Linode
- Cependant, sur au moins un serveur Linode, une écoute passive subsistait sous la forme d’un hop de routage supplémentaire
- Aucune trace de piratage des serveurs n’a été trouvée, et tout porte à croire que les réseaux Hetzner et Linode ont été reconfigurés pour mener cette attaque contre les adresses IP du service XMPP
- Les communications jabber.ru/xmpp.ru durant cette période doivent être considérées comme compromises
- les attaquants pouvaient agir comme s’ils exécutaient des actions depuis un compte authentifié sans connaître le mot de passe du compte
- ils pouvaient télécharger le roster du compte, accéder à l’historique complet des messages côté serveur non chiffrés, envoyer de nouveaux messages et modifier des messages en temps réel
- Les communications chiffrées de bout en bout avec OMEMO, OTR ou PGP n’étaient protégées contre l’interception que si les deux parties avaient vérifié les clés de chiffrement
- Les utilisateurs doivent vérifier la présence de nouvelles clés OMEMO ou PGP non autorisées dans le dépôt PEP et changer leur mot de passe
Prévention et supervision possibles pour les opérateurs
- Les nouvelles émissions de certificats étant enregistrées dans Certificate Transparency, il est possible de mettre en place une surveillance Certificate Transparency
- par exemple : Cert Spotter, code source GitHub
- L’utilisation de RFC 8657 CAA Record Extensions for Account URI and ACME Method Binding permet de restreindre les méthodes d’émission de certificats et les identifiants de compte autorisés à émettre
- Il est possible de surveiller via un service externe les changements de certificats SSL/TLS de tous les services
- Il est possible de surveiller les changements d’adresse MAC de la passerelle par défaut
- Le channel binding de XMPP peut détecter un MiTM même si l’intercepteur présente un certificat valide
- le client et le serveur doivent tous deux prendre en charge le mécanisme d’authentification SCRAM PLUS
- ce n’était pas activé sur jabber.ru au moment de l’attaque
- D’autres recommandations du développeur ACME Hugo Landau sont regroupées dans More recommendations from ACME developer Hugo Landau
Réponses de Hetzner et Linode
- Au 20 octobre 2023, aucune réponse suffisante n’avait été reçue de Hetzner et Linode
- Dans la mise à jour du 3 novembre 2023, aucun des deux fournisseurs n’avait encore apporté de réponse appropriée à cet incident
- Hetzner a répondu qu’il ne fournissait pour les serveurs root dédiés et les serveurs Cloud que le matériel, l’accès réseau et l’infrastructure nécessaire, et qu’il ne pouvait proposer de solution supplémentaire
- Linode a indiqué avoir reçu les journaux mais n’avoir observé aucune activité illicite affectant le service, puis a clos le ticket
- Les opérateurs estiment plus probable que Hetzner et Linode aient été contraints d’appliquer cette configuration dans le cadre d’une interception légale à la demande de la police allemande
- Une autre possibilité serait une intrusion dans les réseaux internes de Hetzner et de Linode visant spécifiquement jabber.ru, mais ce scénario paraît bien moins crédible sans être totalement impossible
1 commentaires
Avis sur Hacker News
Il semble très probable que ce soit lié à une enquête sur la cybercriminalité russe. Si vous avez lu Krebs ou fréquenté des forums russes plus obscurs, xmpp.ru vous sera familier, et il y a effectivement ce contexte
Je ne cherche pas à faire porter quoi que ce soit aux opérateurs ; je veux dire que lorsqu’on exploite un service anonyme, il finit par avoir ce genre de profil
https://ddanchev.blogspot.com/2021/03/exposing-currently-act...
https://ddanchev.blogspot.com/2019/07/profiling-currently-ac...
https://blog.talosintelligence.com/picking-apart-remcos/
https://flashpoint.io/wp-content/uploads/Plea-Agreement-USA-...
L’article lui-même est vraiment intéressant, et ressemble à un exemple concret de pourquoi tout le monde devrait utiliser un service de surveillance de la transparence des certificats
Je suis d’accord avec la plupart des mesures d’atténuation proposées. Si l’on est une cible à haut risque, il vaut la peine d’envisager d’empiler une couche d’authentification supplémentaire qui ne dépende pas des autorités de certification de confiance : Tor onion services, SSH, WireGuard, etc.
Je suis d’accord sur le fait que tous les certificats SSL/TLS émis sont soumis à la transparence des certificats, et crt.sh propose aussi un flux RSS
Utiliser CAA est généralement une bonne idée, mais je doute que cela aide dans ce cas. L’attaquant peut demander exactement la configuration de certificat autorisée par CAA ; cela pourrait aider s’il était possible de restreindre plus fortement une méthode de validation précise
Je suis aussi d’accord sur le fait qu’il faut surveiller, via un service externe, les changements de certificats SSL/TLS de tous les services. Les cibles à haut risque doivent toujours savoir quels certificats sont valides et les vérifier
Quant à surveiller les changements d’adresse MAC de la passerelle par défaut, une attaque plus sophistiquée pourrait conserver la même adresse MAC
J’ignorais que le « channel binding » de XMPP pouvait aussi détecter une attaque de l’homme du milieu présentant un certificat valide
Cela suppose bien sûr que le serveur de noms soit protégé par DNSSEC. Sinon, les requêtes DNS peuvent aussi être interceptées lorsque l’autorité de certification les consulte
Pour l’ensemble des considérations de sécurité, voir la RFC 8657. Cette RFC a été conçue pour être plus lisible que la plupart des RFC
Mon billet de blog avec le contexte : https://www.devever.net/~hl/acme-caa-live
Réussir une vraie attaque de l’homme du milieu à la perfection puis oublier de renouveler le certificat, c’est assez allemand :-)
Ou bien quelqu’un a peut-être suivi les ordres très consciencieusement. Il y avait bien un ordre de configurer le certificat, mais aucune exigence de renouvellement automatique :)
Archive : https://archive.ph/C0jYJ
Les théories sont intéressantes et, si elles sont vraies, elles expliquent comment le certificat a été obtenu. La leçon à en tirer est peut-être de disposer de plusieurs sondes chez plusieurs fournisseurs, de vérifier toutes les empreintes TLS et, lorsqu’une empreinte inconnue apparaît, de recevoir une alerte et de vérifier aussi la présence dans les journaux de transparence des certificats
openssl s_client -servername news.ycombinator.com -connect news.ycombinator.com:443 < /dev/null 2>/dev/null | openssl x509 -fingerprint -noout -in /dev/stdinSHA1 Fingerprint=7E:49:BA:40:86:87:B3:39:66:93:94:9E:9C:45:71:85:3C:8D:95:16Comme tous les certificats SSL/TLS émis sont soumis à la transparence des certificats, il est recommandé de configurer une surveillance de la transparence des certificats comme Cert Spotter afin de recevoir une notification par e-mail lorsqu’un nouveau certificat est émis pour le domaine
Avec l’extension des enregistrements CAA de la RFC 8657, c’est-à-dire Account URI et ACME Method Binding, on peut limiter les méthodes de validation et préciser l’identifiant exact du compte autorisé à émettre de nouveaux certificats, ce qui permet d’empêcher l’émission de certificats pour le domaine via d’autres autorités de certification, comptes ACME ou méthodes de validation
Il faut surveiller via un service externe les changements de certificats SSL/TLS de tous les services, ainsi que les changements d’adresse MAC de la passerelle par défaut
J’étais un peu curieux parce que l’adresse MAC n’était pas une adresse administrée localement. Il semble possible que quelqu’un ait choisi intentionnellement cette plage d’adresses
https://www.google.com/search?q=%2290%253Ade%253A01%22+linod...
En cherchant
"90:de:01" linodeet"90:de:00" linode, il semble que des adresses de ce bloc aient récemment été attribuées à d’autres VM Linode. Je n’ai pas de VM Linode sous la main pour comparer directement, mais on dirait que le trafic a été routé vers une autre VM de l’infrastructure LinodeCe n’est qu’une spéculation sans preuve, mais je pense que Jabber a été ciblé parce qu’il est notoirement utilisé sur les marchés du darknet pour le trafic de drogue ou d’autres activités illégales
Cela montre qu’il ne faut pas se contenter de croire que « c’est chiffré, donc tout va bien ». Au minimum, les messages devraient être chiffrés avec PGP
Je me demande si PGP peut être cassé par des ordinateurs quantiques, et si des renforcements contre ce type d’attaques verront le jour. Si des messages ont été collectés en masse sous forme chiffrée, leur déchiffrement pourrait au final n’être qu’une question de temps
Et il semble que ce genre de chose arrive à presque tout le trafic web auquel ils peuvent mettre la main. Voir https://en.wikipedia.org/wiki/Utah_Data_Center
Évidemment, échanger des clés en toute sécurité avec un vendeur de drogue anonyme sur Internet est propice aux erreurs
https://therecord.media/genesis-market-takedown-cybercrime
PGP a beaucoup de problèmes et beaucoup de gens conseillent de l’éviter. Par exemple : https://www.latacora.com/blog/2019/07/16/the-pgp-problem/ / https://news.ycombinator.com/item?id=20455780
Les communications chiffrées de bout en bout comme OMEMO, OTR ou PGP ne protègent contre l’interception que si les deux parties ont vérifié les clés de chiffrement. L’attaquant doit mettre en place une attaque de l’homme du milieu distincte pour chaque méthode de chiffrement de bout en bout utilisée
Certains clients XMPP que j’ai vus refusaient de fonctionner si l’on n’indiquait pas explicitement avoir vérifié une identité de chiffrement donnée
Cela reste un bon rappel. Si vous n’avez jamais eu à vérifier une suite de chiffres absurdement longue, ou quelque chose d’équivalent, il est difficile de considérer que le chiffrement de bout en bout est réellement établi
Il y a un point que je ne comprends pas dans cette histoire. S’il s’agissait d’une interception légale, pourquoi Hetzner et Linode auraient-ils configuré une interception par homme du milieu avec des certificats et clés LE séparés ?
Ils auraient pu extraire directement la clé privée TLS depuis la RAM ou le stockage du VPS. Même avec un serveur physique dédié, il serait possible d’obtenir un dump de la RAM après un redémarrage non annoncé et d’en extraire la clé privée
L’extraction de la clé privée n’apparaît pas dans les logs CT, elle est donc bien plus discrète et pratiquement impossible à détecter
Une autre possibilité est qu’un côté relevait d’une « perquisition » et l’autre d’une « interception », avec des niveaux d’autorisation différents. Cela dit, je ne connais pas bien la situation juridique actuelle en Allemagne
Ça paraît tellement standard pour les forces de l’ordre qu’il doit bien exister du matériel prêt à l’emploi pour ça
Un utilisateur l’avait déjà posté sur Reddit il y a 3 jours : https://www.reddit.com/r/hetzner/comments/17ankoh/does_hetzn...
Je me demande s’il existe un moyen d’obliger légalement Hetzner/Linode à commenter cette situation. Il semble très probable qu’une agence gouvernementale ou la police soit derrière cette interception
À l’inverse, s’il ne s’agit pas d’une interception légale, je doute que Hetzner l’ait autorisée, car ce serait également contraire à la loi