URL: https://linuxfr.org/news/pratiques-dans-l-industrie-ferroviaire-un-train-de-retard Title: Pratiques dans l'industrie ferroviaire : un train de retard… Authors: Andre Rodier Ysabeau, BAud, L'intendant zonard, martoni, Benoît Sibaud, FrancoisA30 et bobble bubble Date: 2023-12-15T19:10:20+01:00 License: CC By-SA Tags: train, droit_de_réparer, pologne, newag, 37c3 et ccc Score: 4 Une histoire, comme il en est tant, hélas, de pratiques anticoncurrentielles dans l’industrie. Oubliez les imprimantes et les tracteurs, cette fois-ci, nous passons à une étape supérieure : les trains. Oui, oui, les trains, vous avez bien lu. _Si_ les faits se confirment, un constructeur de train polonais aurait été pris en flagrant délit de pratiques anti-concurrentielles. ---- ---- # Les faits Au printemps 2022, le premier des onze trains du modèle _Newag Impuls 45WE_, exploités par la compagnie régionale Koleje Dolnośląskie en Basse-Silésie, est en fin de vie. Leur maintenance est gérée par la société _Serwis Pojazdów Szynowych_, (_SPS_), qui a remporté l’appel d’offre, pour un prix total d’environ 5,1 millions d’euros (22 millions de złoty). Cette inspection est obligatoire, après un million de kilomètres. Le constructeur à l’origine des trains, la société _Newag_, a également participé à l’appel d’offres, mais leur prix était supérieur d’environ 696 000 € (3 millions de złoty). L’entretien d’un train est une affaire complexe : chaque pièce doit être démontée et envoyée aux fabricants concernés pour ensuite être ré-assemblées à leur retour. SPS effectue l’inspection conformément au manuel fourni, d’environ vingt mille pages. Une fois le premier train remonté, l’ordinateur de bord indique le succès de l’opération et la conformité de l’ensemble. Cependant, les onduleurs ne fournissent pas de tension aux moteurs et le train n’avance pas, sans que personne ne comprenne. Les techniciens de service recherchent, vérifient et re-vérifient les composants, parcourent les instructions – et ne trouvent aucune réponse. Koleje Dolnośląskie dispose de onze trains _Impuls_ et, selon le calendrier, un autre est en cours de maintenance. Tandis que le premier est toujours immobilisé, le deuxième train arrive, subit la même révision, avec malheureusement, le même résultat. Tout fonctionnait parfaitement avant la maintenance, mais les moteurs refusent de démarrer une fois celle-ci terminée. Pour empirer la situation, le constructeur refuse d’aider. Nous avons maintenant deux trains à l’arrêt dans l’atelier. Le troisième rate l’inspection en raison d’une panne de batterie, et un quatrième train est envoyé à sa place. La société décide d’utiliser la quatrième pour remorquer une des locomotives en panne. Cependant, une fois connectée à l’une d’entre elle, la nouvelle locomotive s’arrête également, mais la raison semble différente et totalement inconnue. Pendant ce temps, dans un autre atelier, à _Szczecin_, une autre locomotive Impuls tombe en panne, dans des circonstances très similaires : elle ne redémarre pas après la maintenance. Le problème devient si grave que les médias s’en mêlent et relatent l’affaire. Les six trains les plus longs de Koleje Dolnośląskie étant hors service, les horaires doivent être réduits, des trains de remplacement doivent être envoyés, et les passagers s’entassent dans des trains trop courts. Newag explique que les trains sont bloqués par un « système de sécurité », mais rien n’est mentionné dans les pages du manuel. Chaque journée d’un train immobilisé dans l’atelier coûtant plusieurs milliers de zlotys en pénalités contractuelles, et avec plusieurs trains en attente, la tension chez SPS augmente. Le problème n’étant identifié ni par les mécaniciens ni par les électriciens, quelqu’un finit rechercher des hackers polonais, et contacte le groupe _Dragon Sector_. SPS prend donc contact avec eux, dont les représentants incrédules finissent par signer le contrat. Le projet est entrepris par des membres de Dragon Sector, spécialement ceux connus pour avoir hackés le BIOS de portables Toshiba -- Michał « Redford » Kowalczyk et Sergiusz « q3k » Bazański. Kuba « PanKleszcz » Stępniewicz, qui a de l’expérience dans l’automatisation industrielle, se joint également à l’équipe. L’équipe se met rapidement au travail et Kuba part en voyage à l’atelier. Une fois sur place, ils reçoivent un train qui ne roule pas, deux ordinateurs de rechange et les fichiers SDK du fabricant de l’ordinateur. Ils commencent par écouter le bus de données CAN (Controller Area Network), mais sans information sur les protocoles, la tâche s’avère ardue. Ils tentent de télécharger le microcode de l’ordinateur de bord, mais la documentation du SDK permet uniquement les mises à jour, pas d’inspecter la version installée. La première tentative d’utilisation d’une ancienne version du micrologiciel, sur un ordinateur de rechange se solde par un échec : l’ordinateur ne répond plus. Ils trouvent finalement l’interface de débogage sur le dernier ordinateur de rechange, et octet par octet, en extraient la mémoire. L’ordinateur est basé sur l’architecture Infineon TriCore, souvent utilisée dans l’industrie automobile, et les chercheurs finissent enfin par examiner le code en utilisant une version modifiée de Ghidra. Les travaux avancent doucement, mais l’échéance approche et les trains tombent toujours en panne. Dos au mur, Koleje Dolnośląskie, décide de coopérer avec Newag sur l’entretien des trains en panne, y compris ceux qui, selon l’appel d’offres initial, devaient être entretenus uniquement par SPS. Le contrat devant être résilié d’ici une semaine, les chercheurs se mettent à travailler de plus belle. Le groupe est enfin en possession de tous les micro-logiciels des trains, autant ceux en état de marche que ceux en panne. Chacun des trains ayant des fonctionnalités particulières et une version différente du logiciel, l’analyse est difficile, mais ils commencent à identifier une piste. Entre un ordinateur en état de marche et un autre en panne, certaines plages de mémoire diffèrent. Une fois corrigées sur un ordinateur en panne, celui-ci démarre enfin. Le test étant effectué sur un ordinateur isolé sur un bureau, il s’arrête dès que le logiciel détecte qu’il manque le reste du train, mais il est prêt à faire fonctionner les onduleurs. Moins de 24 heures avant la date fatidique, les chercheurs identifient des paramètres supplémentaires pour faire démarrer le train. Malheureusement, le condensateur du dernier ordinateur de bord en état de marche brûle pendant les expériences. Après un nouveau brainstorming et de nombreuses tentatives pour combiner deux ordinateurs endommagés en un seul, le premier est réparé, et à 2 heures du matin, la veille de l’heure apocalyptique, les chercheurs configurent l’ordinateur qui fera démarrer le train. Un de nos héros monte à bord d’un train (d’une autre compagnie) pour rejoindre l’atelier avec un ordinateur probablement en état de marche devant les représentants des chemins de fer de Basse-Silésie, qui ont annoncé leur visite pour 9h30. Malheureusement, le train que prend le chercheur pour se rendre sur place est en retard. Finalement, dans la matinée, un chercheur équipé d’un ordinateur arrive sur les lieux et le connecte au train en panne. Et celui-ci ne bouge pas… Un autre brainstorming identifie le dernier drapeau oublié et à 8h42 le train parvient enfin à démarrer ! La délégation de Koleje Dolnośląskie, voyant à 9h30 que les trains ont une chance de reprendre vie, ne résilie pas le contrat avec SPS. ## Pourquoi le train est tombé en panne ? Déterminer comment faire démarrer le train ne représentait qu’une petite partie du problème. Il fallait maintenant découvrir pourquoi il était tombé en panne. Des mois d’analyse et de rétro-ingénierie ont permis de révéler des conditions extrêmement intéressantes inscrites dans le code logiciel de différents trains fournis par Newag. Après des centaines d’heures passées à étudier les codes émis par des dizaines de trains, il a été possible d’identifier des mécanismes provoquant des pannes soudaines dans les trains. Les valeurs numériques 53,13845 et 17,99011 trouvées dans le code informatique semblaient familières à première vue. Il s’est rapidement avéré qu’il s’agissait de coordonnées GPS, indiquant les environs de la gare de Bydgoszcz Główna, ou, plus précisément, le centre de service PESA situé juste à côté. Bientôt, les coordonnées d’autres services susceptibles d’effectuer des réparations et des inspections de trains en Pologne ont également été trouvées. Ci-dessous, nous montrons le pseudo-code de l’algorithme : ```c check1 = 53.13845 < lat && lat < 53.13882 && 17.99011 < long && long < 17.99837 ; check2 = 53.14453 < lat && lat < 53.14828 && 18.00428 < long && long < 18.00555 ; check3 = 52.17048 < lat && lat < 52.17736 && 21.53480 < long && long < 21.54437 ; check4 = 49.60336 < lat && lat < 49.60686 && 20.70073 < long && long < 20.70840 && (this->lock_function_test & 1) ; check5 = 53.10244 < lat && lat < 53.10406 && 18.07817 < long && long < 18.08243 ; check6 = 50.12608 < lat && lat < 50.12830 && 19.38411 < long && long < 19.38872 ; check7 = 52.77292 < lat && lat < 52.77551 && 18.22117 < long && long < 18.22724 ; ``` Les paires de coordonnées définissent les zones d’atelier. Il existe une condition inscrite dans le code informatique qui exige que le train soit désactivé s’il passe au moins dix jours dans l’un de ces ateliers. L’un des ateliers appartient à Newag lui-même - mais une condition logique différente a été définie pour ses coordonnées, probablement à des fins de test. D’autres surprises furent bientôt découvertes. Il s’agissait notamment du blocage du train lorsqu’un de ses composants (vérifié par son numéro de série) était remplacé. Une option permettant d’annuler le verrouillage a également été découverte -- cela ne nécessitait pas de définir des indicateurs au niveau de la mémoire de l’ordinateur, mais uniquement la séquence appropriée de clics sur les boutons dans la cabine et sur l’écran de l’ordinateur de bord. Lorsque les informations sur le lancement réussi des trains Impuls sont parvenues aux médias, les trains ont reçu une mise à jour logicielle qui supprimait cette possibilité de « réparation ». Un code a été trouvé sur un autre train lui indiquant de « casser » après avoir parcouru un million de kilomètres. ## Vérifier la date… Une situation assez cocasse a été rencontrée dans une autre escouade qui a refusé de démarrer, le 21 novembre 2022, alors qu’elle n’était pas sur place à ce moment-là. L’ordinateur signale une panne du compresseur, les mécaniciens n’ont, pourtant, identifié aucune panne sur le compresseur. Les [pantographes](https://fr.wikipedia.org/wiki/Pantographe_(transport)) ne fonctionnant toujours pas, l’analyse du code informatique a détecté une condition de crash suivante, qui signalait une panne de compresseur : ```txt si le jour est supérieur ou égal au 21 et si le mois est supérieur ou égal à 11 et si l’année est supérieure ou égale à 2021 ``` La situation était amusante, car le train devait être inspecté en novembre 2021 (un an avant la panne), mais par coïncidence, la condition n’a pas fonctionné. Le train a été entretenu un instant plus tôt et n’a été relancé qu’en janvier 2022 - et cette date ne répondait plus à la condition logique sophistiquée décrite ci-dessus. C’est probablement l’incapacité de l’auteur du logiciel à écrire correctement des conditions qui a obligé à attendre le 21 novembre 2022 pour que l’on puisse constater l’effet prévu. ## Surprise matérielle Les surprises ne se cachent pas seulement dans les logiciels informatiques. Dans l’un des dépôts, les chercheurs ont découvert un dispositif signé comme « convertisseur UDP / CAN », permettant vraisemblablement une communication à distance avec le train. Le supprimer n’a pas empêché quoi que ce soit de fonctionner. L’analyse a montré que l’ordinateur de bord envoyait des informations sur l’état du verrouillage à cet appareil et que l’appareil lui-même était connecté à un modem GSM. ## Pas seulement à Wrocław L’information selon laquelle le service SPS avait réussi à réparer les trains Newag « cassés » est rapidement parvenue à d’autres services. Cela s’est avéré être un problème assez courant. À Wrocław, ils ont analysé 13 rames Impuls, mais celles qui circulaient à Koleje Mazowieckie sont également tombées en panne (une unité), deux à Opole, quatre à Cracovie, une à Zielona Góra, quatre à Szczecin et une à SKM. Heureusement, chacune a été réparée à l’aide d’un outil développé par nos chercheurs, qui supprime les verrous logiciels de l’ordinateur de bord. Au total, nos collègues ont analysé le logiciel de 29 trains, et seulement cinq ont trouvé des surprises allant au-delà des instructions d’exploitation officielles. ## La suite Nous laissons l’évaluation des solutions utilisées par le fabricant aux lecteurs et clients de cette entreprise. Il est intéressant de noter que, même si des poursuites judiciaires sont en cours, il est difficile de trouver en Pologne une institution qui ferait autre chose qu’exprimer un intérêt amical dans cette affaire. Nous n’avons connaissance d’aucune mesure prise par « l’Office de la protection des consommateurs et de la concurrence », ni par « l’Office du transport ferroviaire », qui semble pourtant appropriée. Cette dernière à pour rôle de surveiller les pratiques des sociétés qui travaillent avec les organisations gouvernementales locales. Que des voyageurs aient subi des désagréments ou forcés à utiliser des transports alternatifs pendant des mois semble pourtant éligible à un dédommagement. La seule institution connue à avoir pris des mesures est le CERT Polska, qui a été informé de la découverte par les chercheurs. Le commentaire que nous avons reçu montre que CERT Polska a informé les « autorités compétentes » et que l’affaire est traitée par les autorités chargées de l’application de la loi. Nous félicitons les meilleurs hackers polonais pour leur découverte intéressante et l’exécution professionnelle de la commande. Décidément rien n’est plus motivant qu’une date limite demain matin. L’article ci-dessus n’est qu’un bref résumé de la présentation donnée lors de la conférence _Oh My H@ck_ le 5 décembre 2023 par les membres de l’équipe : Jakub Stępniewicz, Sergiusz Bazański et Michał Kowalczyk. L’article a omis de nombreux détails et une grande partie technique de l’analyse -- nous ne pouvons qu’espérer que cela motivera les auteurs de l’étude à rédiger et publier son cours. Mis à jour le 05/12/2023 à 16h00 # Réponse de l’Office des transports ferroviaires (UTK) Nous avons reçu la position officielle de l’Office des transports ferroviaires (UTK), que nous citons intégralement ci-dessous : >Le président de l’UTK est au courant de l’affaire et a vérifié les informations concernant les analyses effectuées sur les logiciels des véhicules ferroviaires et coopère également avec les services compétents à ce sujet. En collaboration avec CERT Polska (une équipe créée pour répondre aux incidents violant la sécurité Internet), une réunion avec le constructeur ferroviaire a été organisée. Les véhicules répondent aux exigences essentielles précisées dans les dispositions des directives européennes. C’est la personne qui commande le véhicule qui détermine les conditions de service et de garantie dans le cadre de la liberté contractuelle. Ces exigences sont incluses dans les contrats d’achat de trains. Toute limitation des capacités de service, y compris les limitations introduites dans le logiciel, peut constituer un éventuel litige civil entre le client et le fabricant. Le président de l’UTK n’est pas l’autorité compétente en la matière. >Conformément à l’art. 41 alinéa 2 de la loi du 5 juillet 2018 relative au système national de cybersécurité (texte consolidé : Journal des lois de 2023, articles 913, 1703), l’autorité chargée de la cybersécurité du secteur des transports (hors sous-secteur du transport par eau) est l’autorité compétente en matière de cybersécurité. Ministre chargé des questions de transports. ## Liens - [Newag_Impuls](https://pl.wikipedia.org/wiki/Newag_Impuls) (pl) - [Infineon_TriCore](https://en.wikipedia.org/wiki/Infineon_TriCore) (en) - [Ghidra](https://en.wikipedia.org/wiki/Ghidra) (en) - [CERT Polska](https://en.wikipedia.org/wiki/CERT_Polska) (en) - [journal LinuxFr.org](https://linuxfr.org/users/chocolatineflying/journaux/devoir-hacker-un-train) - BadCyber [Dieselgate, but for trains – some heavyweight hardware hacking](https://badcyber.com/dieselgate-but-for-trains-some-heavyweight-hardware-hacking/) (en) - 404media [Polish Hackers Repaired Trains the Manufacturer Artificially Bricked. Now The Train company is threatening them](https://www.404media.co/polish-hackers-repaired-trains-the-manufacturer-artificially-bricked-now-the-train-company-is-threatening-them/) (en) - [l’histoire par un ses hackers](https://social.hackerspace.pl/@q3k/111528162462505087) (en) - HackADay [The Deere Disease Spreads To Trains](https://hackaday.com/2023/12/06/the-deere-disease-spreads-to-trains/) (en)