- Des trains Impuls 45WE de Newag en Pologne, après une maintenance indépendante, refusaient de démarrer malgré des diagnostics normaux, et l’atelier SPS a demandé à Dragon Sector de rétroconcevoir l’ordinateur de bord
- Les chercheurs ont remis les trains en marche après avoir analysé le bus CAN, extrait la mémoire basée sur TriCore et amélioré Ghidra pour identifier des flags de verrouillage et des conditions de démarrage dans le logiciel
- Le code de certains trains contenait des conditions bloquant le démarrage après un séjour de plus de 10 jours à certaines coordonnées GPS d’ateliers, des verrous liés au remplacement de pièces, une condition de panne après 1 million de km et une condition de signalement de panne du compresseur basée sur la date
- L’analyse a porté sur 29 trains au total, et des « surprises » hors des consignes officielles d’exploitation ont été trouvées sur tous sauf 5, le problème s’étendant à plusieurs régions comme Wrocław, Opole, Cracovie, Szczecin et Varsovie
- L’affaire a débouché sur des procès et une enquête des autorités, mais aucune mesure concrète des organismes de protection des consommateurs, de la concurrence ou du transport ferroviaire n’a été confirmée
Les trains Newag Impuls immobilisés après maintenance
- L’affaire commence au printemps 2022, lorsqu’un premier train parmi les 11 Impuls 45WE fabriqués par Newag et exploités par Lower Silesian Railways ne peut plus repartir après sa maintenance obligatoire du million de kilomètres
- La maintenance est confiée à l’atelier indépendant Serwis Pojazdów Szynowych (SPS)
- Newag a aussi participé à l’appel d’offres, mais sa proposition était plus chère d’environ 750 000 dollars
- SPS a remporté le contrat pour environ 5,5 millions de dollars pour la maintenance des 11 trains
- SPS a démonté, inspecté et remonté les trains selon les quelque 20 000 pages du manuel de maintenance fourni par le constructeur, mais les trains refusaient de bouger alors même que l’ordinateur de bord indiquait un état normal
- L’onduleur n’alimentait pas les moteurs en tension, et les techniciens de maintenance n’ont pas pu trouver la cause avec le seul manuel et les vérifications électriques et mécaniques
Des arrêts répétés et un risque contractuel croissant
- Le deuxième train s’est lui aussi immobilisé de la même manière après la même maintenance, et le constructeur Newag a refusé d’aider
- Le troisième train a échappé au contrôle à cause d’un problème de batterie, et un quatrième train est entré à l’atelier à sa place
- Quand ce quatrième train en état de marche a été attelé à un train immobilisé, le train en état de marche s’est lui aussi arrêté
- La cause n’a toujours pas été établie
- Dans un autre atelier à Szczecin, des cas de trains Impuls incapables de démarrer après maintenance ont également été signalés
- Avec 6 longues rames de Lower Silesian Railway hors service, il a fallu réduire les horaires, engager des trains de remplacement et faire face à l’affluence dans des compositions plus courtes
- Newag expliquait que les trains avaient été bloqués par un « système de sécurité », mais il n’y avait aucune mention d’un tel système dans les 20 000 pages du manuel
- Chaque train immobilisé à l’atelier entraînait plus de 1 000 dollars de pénalités contractuelles par jour, ce qui alourdissait la pression sur SPS
La rétro-ingénierie de Dragon Sector
- SPS a cherché « Polish hackers », a trouvé Dragon Sector, connu dans le milieu CTF, puis les deux parties ont signé un contrat
- Le projet a impliqué Michał « Redford » Kowalczyk, Sergiusz « q3k » Bazański et Kuba « PanKleszcz » Stępniewicz
- Redford et q3k étaient connus pour le piratage de laptops Toshiba
- Kuba avait une expérience en automatisation industrielle
- Sur place, les chercheurs ont reçu un train immobilisé, deux ordinateurs de rechange et les fichiers SDK du fabricant de l’ordinateur
- L’analyse initiale a commencé par l’écoute du bus CAN, mais sans documentation du protocole, le trafic était difficile à interpréter
- Le SDK ne permettait que de téléverser un nouveau logiciel et ne proposait aucune fonction d’extraction du logiciel existant
- Lorsqu’ils ont chargé une ancienne version du logiciel sur le premier ordinateur de rechange, celui-ci a cessé de répondre
- Les chercheurs ont poursuivi avec le seul ordinateur de rechange restant
- Ils ont finalement trouvé une interface de débogage et téléchargé la mémoire de l’appareil octet par octet
- L’ordinateur de bord reposait sur l’architecture TriCore, également utilisée dans l’automobile, et faute de bon désassembleur, ils ont amélioré partiellement Ghidra pour analyser le code
Les conditions de démarrage trouvées juste avant l’échéance
- Après environ un mois et demi, Lower Silesian Railway ne pouvait plus attendre et a décidé de coopérer avec Newag pour réparer et maintenir les trains en panne
- La résiliation du contrat avec SPS était attendue une semaine plus tard, et les chercheurs devaient donc montrer des résultats dans le temps imparti
- Ils ont comparé les images mémoire des ordinateurs de trains fonctionnels et défaillants
- La comparaison simple était difficile, car les trains avaient des ensembles de fonctions et des versions logicielles différents
- Ils ont trouvé des écarts où certaines valeurs configurées sur certains trains étaient à 0 sur d’autres
- Comme il était possible de faire fonctionner brièvement l’ordinateur hors du train pour vérifier l’état de préparation de l’onduleur, des tests sur table étaient possibles
- À moins d’une journée de l’échéance, ils ont trouvé une configuration de flags susceptible de remettre le train en mouvement, mais pendant les essais, un condensateur du dernier ordinateur de bord fonctionnel a brûlé
- Après avoir tenté de recomposer deux ordinateurs endommagés, ils ont réparé celui qui avait brûlé et l’ont configuré à 2 heures du matin pour permettre le démarrage du train
- Un chercheur a apporté l’ordinateur à l’atelier, mais le train a pris du retard et, une fois connecté sur place, le train n’a d’abord toujours pas démarré
- Après discussion supplémentaire, ils ont trouvé un flag manquant et ont finalement réussi à démarrer le train à 8 h 42
- À 9 h 30, la délégation de Lower Silesian Railway a constaté que le train pouvait être relancé et n’a pas résilié le contrat avec SPS
Des conditions de verrouillage cachées dans le code
- Des mois d’analyse et de rétro-ingénierie ont mis au jour, dans plusieurs logiciels de trains fournis par Newag, des conditions provoquant une incapacité soudaine d’exploitation
- Des nombres comme
53.13845,17.99011présents dans le code se sont révélés être des coordonnées GPS pointant vers le site de PESA près de la gare de Bydgoszcz Główny - D’autres coordonnées d’ateliers polonais capables d’assurer maintenance et réparation ont ensuite été trouvées
- Le code contenait une condition désactivant la capacité de démarrage si un train restait au moins 10 jours dans l’une de certaines zones d’atelier
- L’une des coordonnées correspondait à l’atelier propre de Newag
- D’autres conditions logiques étaient définies pour les coordonnées de l’atelier Newag, probablement à des fins de test
- D’autres trains comportaient également des conditions de verrouillage distinctes
- Si certaines pièces étaient remplacées, le train était bloqué via une vérification du numéro de série de la pièce
- Une option permettait de lever le verrouillage en appuyant sur une séquence précise de boutons dans la cabine et sur l’écran de l’ordinateur de bord
- Après la médiatisation du redémarrage réussi des Impuls, les trains ont reçu une mise à jour logicielle supprimant cette option de « fix »
- Sur d’autres trains, du code ordonnait une « panne » après 1 million de km
Un signalement de panne du compresseur déclenché par la date
- Un autre train a refusé de fonctionner le 21 novembre 2022 alors qu’il n’était pas en maintenance
- L’ordinateur signalait une panne du compresseur, mais les techniciens estimaient que le compresseur n’avait aucun problème
- L’analyse du code a révélé la condition suivante
- si le jour est supérieur ou égal à 21
- et le mois supérieur ou égal à 11
- et l’année supérieure ou égale à 2021
- alors signaler une panne du compresseur
- Ce train devait initialement entrer en maintenance en novembre 2021, mais il y est en fait entré plus tôt et n’est revenu en service qu’en janvier 2022
- En novembre 2021, la condition ne s’est pas déclenchée par hasard, et ce n’est que le 21 novembre 2022 que la condition de panne prévue a finalement été remplie
Un dispositif de connexion GSM trouvé dans le matériel
- Des éléments inhabituels ont été trouvés non seulement dans le logiciel, mais aussi dans le matériel
- Sur une rame, les chercheurs ont découvert un appareil marqué « UDP<->CAN converter »
- Il semblait permettre de communiquer à distance avec le train
- Son retrait n’a interrompu aucune fonction liée à l’exploitation
- L’ordinateur de bord envoyait à cet appareil les informations sur l’état de verrouillage, et l’appareil lui-même était connecté à un modem GSM
Un problème étendu à plusieurs régions et une analyse à grande échelle
- La nouvelle selon laquelle SPS avait réparé les trains « en panne » de Newag s’est propagée à d’autres entreprises, révélant que ce type de problème était courant
- À Wrocław, 13 Impuls ont été analysés
- Des trains présentant des problèmes ont aussi été identifiés dans d’autres régions
- 1 chez Kolej Mazowieckie
- 2 à Opole
- 4 à Cracovie
- 1 à Zielona Góra
- 4 à Szczecin
- 1 à Varsovie
- Les outils créés par les chercheurs ont supprimé les verrouillages logiciels des ordinateurs de bord, et chaque train a pu être réparé
- Au total, le logiciel de 29 trains a été analysé, et sur tous sauf 5, des éléments hors des consignes officielles d’exploitation ont été trouvés
Suites de l’affaire et périmètre de la divulgation
- Des procédures judiciaires sont en cours dans cette affaire
- On ne sait pas si l’Office of Consumer and Competition Protection ou le Railway Transport Office en Pologne a pris des mesures concrètes
- Les chercheurs ont signalé leurs découvertes à CERT Polska
- CERT Polska a informé les « autorités compétentes »
- L’affaire est traitée par les forces de l’ordre
- Ce texte résume brièvement une présentation donnée le 5 décembre 2023 à la conférence Oh My H@ck par Jakub Stępniewicz, Sergiusz Bazański et Michał Kowalczyk
- Le texte original omettait une part importante de l’analyse technique complète et indiquait espérer que les chercheurs publient séparément un document technique dédié
1 commentaires
Avis sur Hacker News
Il existe aussi un article récent lié : Polish trains lock up when serviced in third-party workshops - https://news.ycombinator.com/item?id=38530885 - décembre 2023, 347 commentaires
C’est invraisemblable d’être aussi effronté. Du code qui transforme une locomotive en brique si ses coordonnées GPS restent plus de 10 jours dans la zone d’un atelier de maintenance concurrent
Ça va bien au-delà du fait de rendre les réparations difficiles avec des interfaces non documentées ou du firmware signé cryptographiquement ; ça ressemble davantage à une destruction malveillante de biens. Je ne connais pas le système juridique polonais, mais je ne vois pas comment cela pourrait passer
Les trains existent déjà et doivent circuler, mais les entreprises de maintenance et de réparation ne peuvent pas modifier légalement le logiciel à cause du droit d’auteur. C’est une impasse totale. J’espère que cette entreprise écopera d’énormes amendes, voire de poursuites pénales, mais je doute que cela arrive réellement
Une équipe juridique motivée devrait pouvoir trouver des chefs d’accusation sérieux applicables. D’autant plus si ces trains ou locomotives relèvent d’une infrastructure critique, même si ce n’est pas garanti
Il y a un monde entre ajouter une poignée de main secrète et rédiger une documentation de procédure médiocre pour faire passer un concurrent pour incompétent, et saboter intentionnellement son propre produit parce qu’il est entré dans l’atelier d’un concurrent
Le titre est un peu trompeur. Le « gate » de cette affaire n’est pas, comme Dieselgate, le fait de tricher sur le caractère écologique pour réussir une certification dans des conditions artificielles, mais de simuler une fausse panne
L’entreprise avait codé en dur un algorithme qui, lorsqu’il concluait à partir des données de localisation qu’une autre entreprise avait réparé le train, signalait comme défectueuses des pièces fonctionnant normalement, comme le compresseur, et immobilisait le train
Bien sûr, les deux affaires ne peuvent pas être entièrement identiques, mais on comprend clairement pourquoi cette comparaison a été faite
La première consistait à empêcher le train de fonctionner après qu’il soit resté 10 jours, selon le GPS, sur un site de maintenance concurrent. La seconde consistait, dans un firmware particulier, à faire croire à une panne de compresseur quelques jours après la prochaine maintenance prévue
Le pire, c’est la partie disant qu’« il est difficile de trouver en Pologne une institution qui ait fait davantage qu’exprimer un intérêt poli pour cette affaire. Je ne sais pas non plus quelles mesures ont été prises par l’Office de la protection des consommateurs et de la concurrence ou par l’Office des transports ferroviaires »
Les organismes de protection des consommateurs n’ont pas autant de pouvoir que ces institutions
La discussion de l’article précédent sur ce sujet vaut aussi le détour : https://news.ycombinator.com/item?id=38530885
La solution à ces problèmes étranges de contrôle moteur, comme la manipulation des tests d’émissions ou l’entrave aux réparations par des tiers, pourrait être la standardisation des interfaces de ces systèmes
Si les sorties des capteurs sont standardisées, on peut remplacer différents composants et vérifier que le système n’est pas en train de tromper le régulateur
[1]: https://wheelsports.co/formula-1s-standardised-ecu-explained...
J’ai un ami qui possède une WRX : pas de catalyseur, gros turbo et préparation moteur, donc une voiture qui ne devrait absolument pas passer un contrôle antipollution. Pourtant, les données des capteurs sont synthétisées pour piloter les parties concernées, donc aucun code d’erreur, et elle passe sans problème à chaque fois
Il faudrait supprimer le trou noir que constitue le firmware et rendre les audits possibles
Une standardisation complète n’est pas nécessaire ; l’ouverture suffirait. Mais sur le fond, c’est la bonne direction
On dirait une entrave intentionnelle par logiciel destinée à empêcher le recours à des services tiers moins chers que ceux du constructeur
Je suis curieux de voir ce que dira le tribunal
Le fait que les législateurs, les tribunaux et le public soient perdus face aux questions techniques est un problème, mais ce crime devrait pouvoir rentrer sans difficulté dans le cadre existant du droit pénal relatif aux entraves. La méthode est « nouvelle », mais le crime lui-même est classique
J’ai l’impression que la qualité des firmwares de trains n’est globalement pas très bonne, et j’espère que ce scandale entraînera des contrôles plus stricts.
Il y a trois ans, Deutsche Bahn s’était publiquement plainte de problèmes logiciels « bizarres » sur des trains Bombardier nouvellement livrés. Par exemple, quand le conducteur changeait le sens de marche, le logiciel du train plantait, et il fallait une heure pour redémarrer [0]. La Suisse a connu des problèmes similaires en 2018 [1].
En tant qu’informaticien, je trouve cela embarrassant. Il suffit de comparer avec les vieux trains est-allemands des années 1980 [2] qui tractaient encore récemment ici des voitures ouest-allemandes des années 1950 [3]. Il n’y avait presque pas, voire pas du tout, d’électronique numérique, et pas de temps de démarrage. Ça fonctionnait, tout simplement. Et quand ce n’était pas le cas, le conducteur savait généralement à quel endroit du moteur il fallait donner un coup de marteau pour réparer. On ne peut pas attendre d’un conducteur qu’il hacke le firmware du train et lance gdb pour comprendre pourquoi il ne bouge pas.
[0] https://www.sueddeutsche.de/wirtschaft/deutsche-bahn-ic-1.47...
[1] https://bahnblogstelle.com/33872/twindexx-swiss-express-soft...
[2] https://de.wikipedia.org/wiki/DR-Baureihe_243
[3] https://de.wikipedia.org/wiki/N-Wagen
Les entreprises qui fabriquent des objets contenant du logiciel ne sont pas sur un marché où elles sont prêtes à payer leurs profils logiciel deux à trois fois plus qu’avant. Il reste donc ceux qui considèrent l’intérêt du travail comme une partie de la rémunération totale, et ceux qui n’ont pas réussi à décrocher un poste mieux payé. Ce sont ces personnes qui construisent la plupart des systèmes critiques pour la sécurité que nous utilisons. Comparez la rémunération des développeurs chez X et chez SpaceX pour voir comment fonctionne le marché. L’intérêt du travail compte aussi dans la rémunération totale, mais cela conduit aussi des gens qui ne sont pas de bons développeurs à se réorienter vers la conception de nouveaux processus et outils dans ce domaine. Ils peuvent s’accrocher à une mode full-stack déjà dépassée et tenter de l’appliquer au firmware des trains. Je ne serais pas surpris qu’il y ait dix fois plus de texte dans Jira que dans Git, qu’on fasse du scrum en cascade, et qu’on mette des API REST ou des architectures orientées services dans des systèmes embarqués critiques pour la sécurité.
À l’exception de choses comme Tc3 de Beckhoff, on n’en est même pas encore à l’orienté objet, et tout le secteur reste coincé dans une vieille mine de blue screens. On gère la complexité avec de minces documents de standards, sans même gestion de versions, alors que les machines deviennent de plus en plus complexes côté capteurs et actionneurs. On ne peut pas traiter une machine moderne comme un petit appareil embarqué de hobbyiste, mais c’est ce que fait l’industrie. Des programmeurs extérieurs arrivent parfois, résolvent les problèmes d’hier avec une vraie architecture logicielle et de bonnes pratiques de développement en C, et gagnent très bien leur vie. Mais l’industrie n’en tire aucune leçon. Pour eux, produire du logiciel ne sera jamais un métier spécialisé.
Beaucoup de trains modernes souffrent de problèmes logiciels de conduite élémentaires [0] et de retards d’homologation liés au logiciel [1]. Mais, à mon avis, le pire recul est la perte de compatibilité. Les automotrices modernes ne fonctionnent en pratique qu’avec d’autres rames du même lot. Même pour un même modèle, si deux compagnies passent commande séparément, elles sont souvent incompatibles ; et faire fonctionner ensemble des automotrices de compagnies différentes, ou commandées à plus de dix ans d’écart, est quasiment à oublier. À l’inverse, avant le numérique, il était courant de faire rouler ensemble des tramways de générations différentes et d’adapter le câblage. Les anciennes voitures fonctionnent ensemble sans problème, mais combiner IC2 et Railjet, ou RailJet et ICE-L, n’a rien de simple. Il était aussi fréquent que certaines locomotives ne fonctionnent qu’avec certaines voitures.
Les systèmes informatisés sont bien plus complexes et opaques, ce qui rend beaucoup plus difficile de les faire fonctionner ensemble. Les cartes à circuits logiques traditionnelles peuvent généralement être rétro-ingéniérées assez facilement, alors que la rétro-ingénierie logicielle est un travail très spécialisé. Le même phénomène est visible dans d’autres domaines où le passage à des protocoles numériques propriétaires a fortement dégradé l’interopérabilité.
Cela tient aussi au fait que le logiciel, parce qu’il est opaque, est plus difficile à homologuer que les technologies précédentes, mais le manque réel de qualité pèse aussi beaucoup. L’une des raisons pour lesquelles Bombardier s’est retrouvé en grande difficulté était également la mauvaise qualité de son logiciel, au point qu’un contrat portant sur plus de 40 trains a été annulé ([2]).
Je pense qu’il est beaucoup plus difficile de produire un logiciel fiable et compréhensible que de concevoir des circuits logiques ou des systèmes mécaniques. Je ne connais pas la solution, mais c’est un problème ancien.
[0]: https://www.vrt.be/vrtnws/de/2013/02/12/belgische_bahn_storn...
[1]: https://www.augsburger-allgemeine.de/augsburg/Neue-Zuege-auf...
[2]: https://de.wikipedia.org/wiki/Bombardier_Talent_3#%C3%96BB
Je ne consomme que du contenu en anglais. Pour les contenus d’autres pays, je ne vois que ce qui filtre via les grands médias.
Je me demande combien de bons contenus pourraient être traduits.
Cela dit, l’anglais est désormais, au moins dans les milieux les plus éduqués du monde, devenu ironiquement une langue commune, et même les personnes plus à l’aise dans leur langue maternelle font souvent traduire leurs meilleurs travaux en anglais pour qu’ils soient lus plus largement. Les articles scientifiques en sont l’exemple typique. Peut-être que le plus grand cadeau que la Grande-Bretagne ait fait au monde, c’est l’anglais.
Pourtant, c’est sur HN que j’ai découvert toute cette histoire de dépendance au fournisseur pour ces trains. Sinon, je n’en aurais probablement jamais entendu parler, ou seulement des semaines voire des mois plus tard.