lucidiot's cybrecluster

CertBoat

Lucidiot Informatique 2022-11-13
Un outil pour mettre à jour les certificats d'autorité sous Windows XP sans risquer de bloquer le canal de Suez.


Parmi les nombreux logiciels que j'ai mentionné quand j'ai écrit mes longs articles introduisant mon utilisation actuelle de Windows XP, j'ai mentionné rapidement Escargot, le projet visant à raviver MSN Messenger et Yahoo! Messenger. Je continue à m'y connecter régulièrement, même si je n'ai dessus qu'un seul contact, une personne avec qui je discute plus souvent sur XMPP sur mon téléphone et qui passe sur MSN une fois par mois environ. J'avais atteint un pic de trois contacts, mais les deux autres étaient deux personnes qui ont juste testé MSN rapidement et ne sont pas revenues régulièrement. Leurs comptes ont été détruits après qu'ils n'aient pas effectué la migration vers des comptes @escargot.chat il y a quelques mois. Je n'ai pas non plus tellement d'espoir d'attirer d'autres personnes sur ce service, et je ne suis de toute façon franchement pas si intéressé, parce que XP est mon environnement où je réduis mes distractions et je me concentre ; une messagerie instantanée va complètement à l'opposé de ça.

J'aime bien quand même avoir la petite icône verte de MSN dans ma barre des tâches. Utiliser XP est juste normal, naturel, et je ne suis pas constamment en train de le regarder et de retrouver beaucoup de souvenirs — je l'utilise, tout simplement — et pouvoir cliquer sur cette icône et avoir cette fois-ci un peu de nostalgie est toujours sympa. Alors quand j'ai commencé à avoir des erreurs de connexion il y a quelques mois, j'étais assez déçu.

J'ai donc ressorti Wireshark, que j'utilise régulièrement pour dépanner les occasionnels problèmes de connexion sous XP, et j'ai pu voir apparaître des paquets indiquant un échec de négociation TLS. Juste après que le serveur d'Escargot aie répondu à mon ordinateur pour envoyer le certificat serveur et pour l'informer des algorithmes pris en charge, mon ordinateur a répondu avec un paquet indiquant une erreur côté client et ordonnant la fermeture de la connexion TLS, en spécifiant comme message d'erreur que le certificat était considéré comme invalide. Après avoir désactivé mon proxy HTTPS, qui ignore la plupart des vérifications de certificat pour pouvoir me laisser accéder à Internet même avec un système bancal, j'ai pu constater que le certificat d'Escargot ne plaisait effectivement pas à Internet Explorer, car Let's Encrypt, l'autorité de certification qui signe le certificat d'Escargot, a vu son propre certificat expirer. Windows XP croit que Let's Encrypt n'est plus valide !

Jusque ici, j'ai eu recours au Cert Updater, un programme que j'ai trouvé en errant sur les forums MSFN après avoir rencontré des problèmes de certificats par le passé, mais cet outil n'est plus mis à jour depuis 2019 donc je suis garanti de ne plus avoir de versions à jour de mes certificats d'autorité racines. Il va me falloir d'abord essayer de comprendre d'où les certificats d'autorité apparaissent sous Windows...

Mise à jour des certificats d'autorité sous Windows

Les certificats SSL/TLS sont extrêmement centralisés. Le certificat actuel de Brainshit est signé par Let's Encrypt, et le certificat de Let's Encrypt est signé par l'ISRG. Le certificat de l'ISRG est auto-signé, c'est-à-dire qu'il se signe lui-même et que personne n'est là pour certifier que le certificat est valide. Pour que tout le monde puisse valider le certificat de l'ISRG et par conséquent ceux de Let's Encrypt et de Brainshit, tout en refusant d'accepter qu'un certificat auto-signé soit en général valide (car n'importe qui peut en forger un sans aucun contrôle par personne), il faut établir une liste de certificats d'autorités de certification racines. Chaque système d'exploitation fournit d'une façon ou d'une autre une telle liste à ses utilisateurs, et depuis peu, les navigateurs ont commencé à se séparer de ces listes et à utiliser des listes qu'ils contrôlent eux-mêmes, dans leurs efforts continuels pour se complexifier toujours et encore.

Jusqu'à Windows XP, c'est Windows Update qui est responsable de télécharger la liste de certificats d'autorité racines fournie par Microsoft et de l'installer de façon transparente sur le système, et de la maintenir à jour lorsque c'est nécessaire. Microsoft distribue aussi une liste de révocations, c'est-à-dire une liste de certificats pour lesquels leur propriétaire a distribué un message annonçant publiquement que leur certificat a été compromis et doit être considéré comme invalide avant sa date d'expiration. Avec la fin des mises à jour pour Windows XP en 2014, qu'il est possible de repousser jusque 2019 si vous arrivez à passer à XP Embedded POSReady 2009, Windows Update ne serait plus capable d'installer des mises à jour de certificats d'autorité. De plus, le site de Windows Update ne prend désormais plus en charge les algorithmes de hachage SHA-1 et SHA-2, donc il n'est plus du tout possible pour les services Windows Update de XP ou Vista de récupérer les mises à jour, même celles qui étaient encore publiées jusque 2019.

À partir de Windows Vista, c'est l'outil certutil.exe qui est responsable de la mise à jour. certutil est un couteau suisse des certificats et inclut notamment la commande certutil -syncWithWU <path> qui permet de télécharger quelques fichiers responsables de la mise à jour des certificats, et certutil -generateSSTFromWU file.sst pour générer un fichier de magasin de certificats Windows comprenant les certificats à jour. Cette page publiée lors de l'arrivée de ces commandes dans certutil explique que ces commandes servent à télécharger les certificats manuellement pour aider à la synchronisation dans des environnements déconnectés d'Internet. Cet outil est encore utilisé dans Windows 10, mais je n'ai pas pu confirmer s'il est toujours utilisé dans Windows 11.

Vol à l'étalage dans le magasin de certificats

Après ces quelques recherches sur le fonctionnement des mises à jour de certificats sous XP et sous des versions plus récentes de Windows, je me suis dit que je pourrais avoir recours à mon PC fixe, qui dispose d'une partition sous Windows 7 pour jouer notamment à Euro Truck Simulator 2 et American Truck Simulator, pour récupérer des certificats plus frais, les installer sous Windows XP, et confirmer que c'est bien la solution à mon problème.

Export depuis Windows 7

Puisque je n'avais aucune idée de ce que Windows XP accepterait en provenance d'une version plus récente de Windows, j'ai décidé d'essayer d'exporter tout ce que je pouvais par tous les moyens possibles pour mettre toutes les chances de mon côté. J'ai donc commencé par juste demander à certutil de me donner tous les fichiers qu'il peut récupérer depuis Windows Update et tout mettre sur ma clé USB :

certutil -syncWithWU F:/
certutil -generateSSTFromWU F:/certs.sst

Avec ça, je me retrouve déjà avec cinq fichiers différents. Il y a deux fichiers .cab, l'extension des archives au format Cabinet de Microsoft, donc dans le doute je vais jusqu'à les extraire manuellement sur la clé pour ne pas être éventuellement bloqué par ça sur XP. Ensuite, j'ai voulu exporter moi-même tous les certificats que Windows connaît actuellement et dans tous les formats disponibles :

  1. Ouvrir la boîte de dialogue Exécuter en appuyant sur Win + R
  2. Taper certmgr.msc et appuyer sur Entrée pour ouvrir le gestionnaire de certificats dans la console de gestion Microsoft
  3. Dans l'arborescence à gauche, sélectionner Autorités de certification racines de confianceCertificats.
  4. Sélectionner tous les éléments de la liste à droite, par exemple en cliquant sur n'importe quel élément puis en appuyant sur Ctrl + A.
  5. Faire un clic droit sur la sélection, puis cliquer sur Toutes les tâchesExporter….
  6. Suivre les instructions de l'assistant d'exportation de certificat pour exporter au format PKCS#7 .p7b, en activant l'option pour inclure tous les certificats dans le chemin de certification si possible.
  7. Répéter les étapes 5 et 6 en exportant au format de magasin de certificats Windows .sst.
  8. Répéter les étapes 5 et 6 en exportant au format PKCS#12 .pfx, en incluant toutes les propriétés étendues et tous les certificats dans le chemin de certification. Notez bien le mot de passe obligatoire que vous devrez utiliser ici ; j'ai utilisé le mot de passe hautement sécurisé a car il n'y a rien de vraiment sensible ici de toute façon.
  9. Dans l'arborescence à gauche, sélectionner Autorités de certification racines tiercesCertificats et répéter les étapes 4 à 8.
  10. Dans l'arborescence à gauche, sélectionner Autorités de certification intermédiairesCertificats et répéter les étapes 4 à 8.

J'ai choisi de m'arrêter là après avoir exporté 3 types de certificats dans 3 formats différents, mais vous pouvez si vous êtes suffisamment courageux exporter tous les autres magasins de certificats.

Import dans Windows XP

J'ai ensuite débranché ma clé USB qui transporte pour une fois autre chose que le programme d'installation d'une distribution Linux et je suis retourné sous Windows XP. Après un peu d'expérimentation, j'ai découvert qu'il était possible de finalement importer chaque fichier que j'ai pu récupérer :

Après avoir réussi à importer les fichiers d'un seul de ces formats, MSN fonctionnait à nouveau et le certificat d'Escargot semblait bien valide. Cela dit, je n'avais pas vraiment envie de recommencer et de dépendre d'un système Windows 7 pour pouvoir faire fonctionner Windows XP.

Mises à jour automatiques avec CertBoat

Après moult recherches que je détaillerai probablement dans deux autres articles, j'ai finalement créé un outil en C# capable de télécharger de lui-même depuis Windows Update les fichiers .cab des listes de certificats d'autorité racines de confiance et de certificats révoqués, d'en extraire les fichiers .stl et de les installer sur le système. Il est aussi capable de configurer une tâche planifiée qui met automatiquement à jour les certificats d'autorité une fois par jour pour automatiquement assurer que MSN continuera à fonctionner.

L'une des raisons pour lesquelles j'avais créé ToeCracker était de pouvoir générer des noms pour mes futurs projets informatiques. Je n'ai pas eu des résultats très satisfaisants en cherchant des synonymes pour certificate ou authority, mais le thésaurus m'a indiqué qu'il pensait que le mot anglais update se prononçait d'une façon proche à u-boat. Je me suis en même temps souvenu que Certbot existe, et ainsi CertBoat naquit.

Mes recherches m'ont conduit à utiliser des API qui devraient être compatibles avec suffisamment de versions de Windows pour que seul le niveau de compatibilité du .NET Framework soit important, donc CertBoat fonctionne à la fois pour Windows XP et pour Windows 2000. C'est tant mieux, car je regrette souvent le manque de compatibilité de beaucoup de programmes pour Windows 2000.

Installation

Comme d'habitude, j'ai fourni un programme d'installation avec Windows Installer. Vous pouvez donc le télécharger et l'exécuter pour installer CertBoat. Il n'apparaîtra nulle part dans le menu Démarrer, le Bureau, la barre de Lancement rapide, ou le dossier Tous les programmes ; vous ne verrez sa trace que dans le dossier d'installation du programme, dans la liste des programmes installés dans l'Ajout/suppression de programmes, et sous la forme d'une tâche planifiée qui s'exécutera chaque nuit à 4h du matin si vous avez une connexion à Internet et n'êtes pas sur batterie.

Utilisation

La tâche planifiée devrait se charger toute seule de la mise à jour quotidienne des certificats, mais vous pouvez quand même utiliser CertBoat manuellement. La façon la plus simple est d'ouvrir les Tâches planifiées dans le Panneau de configuration, puis d'utiliser l'option Exécuter au clic droit sur la tâche de CertBoat. L'exécution mettra immédiatement à jour les certificats.

Vous pouvez sinon lancer le programme manuellement dans une invite de commandes : accédez au dossier d'installation, par exemple C:\Program Files\lucidiot\CertBoat\, puis exécutez Lucidiot.CertBoat.exe. Sans arguments, le programme met à jour les certificats tout seul. Vous pouvez utiliser l'argument /help ou /? pour plus d'informations sur les arguments disponibles.

Configuration

Outre la possibilité de juste modifier la tâche planifiée pour qu'elle s'exécute à votre convenance (ou la supprimer), vous pouvez aussi modifier quelques paramètres supplémentaires dans le fichier Lucidiot.CertBoat.exe.config qui se trouve au même endroit que l'exécutable. C'est un fichier XML géré par le système de configuration du .NET Framework, et vous n'aurez probablement besoin de le modifier que s'il y a vraiment des problèmes avec Windows Update lui-même dans le futur (par exemple si les URL de mise à jour deviennent obsolètes) ou s'il y a des problèmes avec la gestion des certificats sur votre système. Les trois paramètres disponibles sont les suivants :

UserAgent
La valeur de l'en-tête HTTP User-Agent qui est envoyé dans chaque requête effectuée à Windows Update pour télécharger les certificats. Par défaut, c'est CertBoat/{0}. Le {0} sera remplacé par la version actuelle du programme, par exemple CertBoat/1.0.0.
CabinetUris
Liste des URLs pointant vers des archives .cab qui seront téléchargées, extraites et installées. Elles ne peuvent contenir qu'un seul fichier chacune, et ce fichier doit être un fichier de liste de certificats de Windows au format .stl. Il vaut mieux privilégier des URL HTTP que HTTPS pour garantir que CertBoat fonctionne même si vos certificats d'autorité TLS ne fonctionnent plus du tout.
SystemStoreName
Le nom du magasin de certificats du système que CertBoat utilisera. Je donnerai plus de détails sur le concept de magasins de certificats dans les articles qui expliqueront l'implémentation de CertBoat. Les noms des magasins disponibles sont visibles dans le Registre sous HKEY_CURRENT_USER\Software\Microsoft\SystemCertificates\, et la valeur par défaut est trust, qui semble pointer vers le magasin de certificats où Windows Update plaçait initialement les certificats quand la mise à jour originale fonctionnait encore.

Si le fichier de configuration est absent, vous pouvez exécuter CertBoat pour le régénérer immédiatement avec les paramètres par défaut. Si vous voulez revenir aux paramètres par défaut, vous pouvez par conséquent juste supprimer votre fichier de configuration actuel.

Conclusion

Voilà comment, à la manière de ma réécriture de TSUnpack, j'ai encore créé un nouvel outil pour lutter contre l'obsolescence progressive de Windows XP et de tout ce que j'y utilise.

J'avais voulu dans cet article mentionner le chemin assez long que j'ai pris durant deux ou trois week-ends pour en arriver à CertBoat et à son implémentation actuelle, mais rien qu'en listant tous les liens que j'ai parcouru et les différentes méthodes que j'ai testé, et en réalisant toutes les explications que j'allais devoir donner pour donner du contexte à chacune de ces méthodes, il allait me falloir écrire plusieurs articles. Dans les prochaines semaines, il y aura donc beaucoup plus de détails sur la gestion des certificats sous XP qui vont arriver.

Enfin, si cet article vous fait bondir car j'ose parler de sécurité sous Windows XP et qu'il serait possible que je m'imagine être en sécurité tout en utilisant XP, je ne peux que vous inviter à vous référer à mon article introductif sur Windows XP, où j'explique que je sais très bien ce que je fais, et que je n'en ai rien à faire.


Commentaires

Votre nom, 2023-10-29

Merci!