O trzech takich, co zhakowali prawdziwy pociąg – a nawet 30 pociągów

dodał 5 grudnia 2023 o 14:50 w kategorii Info  z tagami:
O trzech takich, co zhakowali prawdziwy pociąg – a nawet 30 pociągów

Pociąg produkcji polskiej firmy nagle zepsuł się w trakcie serwisu. Fachowcy byli bezradni – pociąg był w porządku, tylko nie chciał jechać. W ostatnim odruchu desperacji na pomoc wezwano zespół Dragon Sector, którego członkowie znaleźli cuda, o których nie śniło się maszynistom.

[For English version click here]

W tej historii zabierzemy was w nietypową podróż. Podróż pełną nieoczekiwanych odkryć i zdarzeń, podróż pod presją czasu i sporych pieniędzy, a także nietypowych technologii. Podróż, w której pociąg gra najważniejszą rolę – chociaż niestety nie jedzie, mimo że powinien. Zapnijcie pasy – a przynajmniej usiądźcie wygodnie, bo będą ostre zakręty.

Wygrany przetarg, przegrany serwis

Historia zaczyna się zapewne trochę wcześniej, ale my na tę scenę wkroczymy wiosną 2022, kiedy to kończy się serwis pierwszego z jedenastu pociągów Newag Impuls 45WE, eksploatowanych przez Koleje Dolnośląskie. Serwis prowadzi firma Serwis Pojazdów Szynowych, zwana dalej SPS. SPS wygrał przetarg na przeprowadzenie obowiązkowego przeglądu pociągów po pokonaniu dystansu 1 000 000 kilometrów. W przetargu na przeprowadzenie przeglądu startował także producent pociągu, polska firma Newag, jednak oferta producenta była o 3 mln zł wyższa i ostatecznie przetarg wygrał SPS, który zaproponował, że serwis przeprowadzi za 22 mln zł.

Serwis pociągu to skomplikowana sprawa – trzeba go rozebrać na części, części wysłać do poszczególnych producentów, odebrać sprawdzone, ponownie pociąg poskładać i uruchomić. SPS przeprowadza przegląd zgodnie z odpowiednią instrukcją (o objętości ok. 20 000 stron), dostarczoną przez producenta, lecz pociąg po poskładaniu nie rusza. Komputer mówi, że wszystko w porządku, pociąg jest gotowy do jazdy – ale nie jedzie. Falowniki nie podają napięcia do silników i nikt nie ma pojęcia, dlaczego tak się dzieje. Serwisanci szukają, sprawdzają, weryfikują, wertują instrukcje – nie znajdują odpowiedzi.

Tajemnicze awarie

Koleje Dolnośląskie mają jedenaście Impulsów i zgodnie z harmonogramem na serwis trafia właśnie kolejny, a pierwszy – zamiast wrócić do pracy – nadal stoi w warsztacie. Drugi pociąg przechodzi identyczny serwis, z identycznym skutkiem. Przed serwisem jeździł, po serwisie już nie chce. Prace nad uruchomieniem pierwszego składu, podobnie jak i sam skład, nie posunęły się ani o milimetr – producent odmawia pomocy. W warsztacie stoją już dwa nieruchome pociągi. Trzeci nie trafia na przegląd na skutek awarii akumulatorów, więc zamiast niego do serwisu przysłany zostaje pociąg czwarty (“z przyszłości”). Serwis chce skorzystać z jego obecności, by przeholować jeden z tych, które jeździć nie chcą. Po podłączeniu czwartego (jeżdżącego) do jednego z nieruchomych, nieruchomieje także jeżdżący (do tej pory nie udało się ustalić przyczyny tego zdarzenia). Na dokładkę w innym warsztacie, w Szczecinie, inny Impuls psuje się w bardzo podobnych okolicznościach – nie uruchamia się po przeprowadzonym serwisie.

Najlepsi polscy hakerzy

W pewnym momencie problem robi się już na tyle poważny, że zauważają go media – sześć najdłuższych pociągów Kolei Dolnośląskich wyłączonych z użytkowania powoduje, że trzeba redukować rozkłady jazdy, na tory wysyłać składy zastępcze, a pasażerowie podróżują w dużym ścisku w krótszych składach. Newag tłumaczy, że pociągi zablokował “system bezpieczeństwa” – jednak na 20 000 stron instrukcji na próżno szukać o nim choćby wzmianki. Dzień przestoju pociągu w warsztacie kosztuje kilka tysięcy złotych kary umownej, pociągów stoi kilka, więc poziom napięcia w SPS rośnie. Skoro mechanicy ani elektrycy nie dają rady, to w końcu ktoś wpisuje w Google “polscy hakerzy” i na szczycie listy wyników trafia na artykuł o sukcesach grupy Dragon Sector na arenie CTF-owej. SPS nawiązuje kontakt z DS, którego przedstawiciele na początku nie mogą uwierzyć w propozycję, którą słyszą. Hakowanie pociągu? W sumie dlaczego nie. Strony podpisują umowę. Do projektu zabierają się znani z hakowania laptopów Toshiby członkowie Dragon Sectora – Michał “Redford” Kowalczyk oraz Sergiusz “q3k” Bazański, a do towarzystwa dołącza Kuba “PanKleszcz” Stępniewicz posiadający doświadczenie w automatyce przemysłowej. Zespół dziarsko rusza do pracy, a Kuba jedzie na wycieczkę do warsztatu. Na miejscu dostają pociąg, który nie jeździ, dwa zapasowe komputery i pliki SDK producenta komputera. Prace zaczynają od podsłuchiwania szyny CAN, ale trudno odczytać ruch, nie mając dokumentacji protokołów. Długo próbują zrzucić oprogramowanie wbudowane z komputera pokładowego. Nie mają żadnej dokumentacji komputera, a SDK umożliwia jedynie wgranie nowego oprogramowania, bez opcji zgrania istniejącego. W trakcie eksperymentów ze znalezioną starszą wersją oprogramowania jej wgranie do pierwszego zapasowego komputera powoduje, że ten przestaje reagować – zostaje im już tylko jeden sprawny komputer zapasowy. W końcu znajdują interfejs do debugowania i bajt po bajcie zgrywają pamięć urządzenia.

Komputer oparty jest o architekturę TriCore, jak wiele podobnych rozwiązań na przykład w branży samochodowej. Niestety brakuje dobrych dezasemblerów, więc badacze poprawiają nieco Ghidrę i w końcu mogą spojrzeć w kod. Co prawda, brakuje stringów, ale prace powoli idą do przodu. Mija półtora miesiąca, gdy SPS przekazuje złą informację.

Gdy goni termin, a pociągi się psują

Koleje Dolnośląskie, nie mogąc się doczekać swoich (nieruchomych) pociągów, postanawiają jednak nawiązać współpracę z Newagiem w kwestii naprawy popsutych składów i ich serwisu, włączając w to także pociągi, które zgodnie z pierwotnym przetargiem dopiero miały być serwisowane w SPS. Do zerwania umowy z SPS ma dojść za tydzień. Jak wiadomo, nic nie wpływa na intensywność prac tak dobrze jak bardzo bliski nieprzekraczalny termin, w którym trzeba pokazać wynik, więc badacze ruszają do dzieła ze zdwojoną energią. Podczas dotychczasowych prac zgrali zawartość pamięci wielu komputerów zarówno pociągów działających, jak i tych, które tylko działać powinny. Porównywanie tych obrazów to droga przez mękę, ponieważ prawie każdy pociąg posiada inny zestaw funkcji i inną wersję oprogramowania, ale powoli zaczynają mieć wrażenie, że na coś trafiają. W pamięci komputerów identyfikują wartości, które w jednym pociągu są ustawione, a w innym wyzerowane. Testy mogą przeprowadzać na biurku – komputer, nawet wyjęty z pociągu, pozwala na chwilę się uruchomić (zanim zorientuje się, że brakuje mu całej reszty pociągu) i pokazać, czy jest gotowy uruchomić falowniki.

Do terminu zakończenia prac pozostaje mniej niż doba, gdy odnajdują konfigurację flag, która daje szansę uruchomienia pociągu. Niestety w trakcie eksperymentów płonie ostatni działający komputer pokładowy. Tak, płonie – pali się kondensator (to raczej przypadkowe zdarzenie). Po kolejnej burzy mózgów i wielu próbach poskładania dwóch uszkodzonych komputerów w jeden udaje się naprawić ten spalony i o 2 w nocy, w noc poprzedzającą godzinę sądu ostatecznego, badacze konfigurują komputer, który ma uruchomić pociąg. Jeden z naszych bohaterów wsiada do pociągu (innego operatora), by dotrzeć z prawdopodobnie działającym komputerem do warsztatu jeszcze przed przedstawicielami Kolei Dolnośląskich, którzy zapowiedzieli wizytę na godzinę 9:30. Niestety pociąg, którym badacz podąża do serwisu, spóźnia się. W końcu rano badacz z komputerem dociera na miejsce, podłącza módlmy-się-aby-zadziałał-komputer do popsutego pociągu, ale pociąg nie rusza. Kolejna burza mózgów pozwala zidentyfikować jedną flagę, o której zapomniano i o 8:42 pociąg udaje się uruchomić. Delegacja Kolei Dolnośląskich, widząc o 9:30, że pociągi mają szansę jednak wrócić do żywych, nie zrywa umowy z SPS.

Dlaczego pociąg się zepsuł

Odkrycie, jak pociąg uruchomić, nie było nawet połową sukcesu – trzeba było jeszcze ustalić, dlaczego się zepsuł i tu dopiero zaczyna się jazda bez trzymanki.

Miesiące analiz i inżynierii wstecznej pozwoliły na odkrycie niezwykle ciekawych warunków zapisanych w kodzie oprogramowania różnych pociągów dostarczonych przez Newag. Po setkach godzin spędzonych nad kodem zrzuconym z kilkudziesięciu składów udało się zidentyfikować bardzo ciekawe mechanizmy powodujące nagłe choroby pociągów.

Znalezione w kodzie komputera wartości liczbowe 53.13845 i 17.99011 wydały się na pierwszy rzut oka znajome. Szybko okazało się, że są to koordynaty GPS wskazujące na okolice Dworca Kolejowego Bydgoszcz Główna, a konkretnie znajdującego się tuż obok serwisu firmy PESA. Wkrótce odnaleziono także koordynaty innych serwisów, które mogłyby prowadzić naprawy i przeglądy pociągów w Polsce. Poniżej pokazujemy pseudokod algorytmu (nazwy zmiennych czy funkcji  są nadane przez badaczy dla przejrzystości – nie wiemy, jakie były nazwy oryginalne):

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;

Pary koordynat definiują tereny warsztatów. W kodzie komputera zapisano warunek nakazujący wyłączenie możliwości uruchomienia pociągu, jeśli spędzi przynajmniej 10 dni w jednym z tych warsztatów. Jeden z warsztatów należy do samego Newagu – jednak dla jego współrzędnych zdefiniowano inny warunek logiczny, prawdopodobnie w celach testowych.

Wkrótce odkryto także inne niespodzianki. Wśród nich było blokowanie pociągu, gdy wymieniony zostanie jeden z jego komponentów (weryfikowanych po numerze seryjnym). Odkryto także opcję cofnięcia blokady – nie wymagało to ustawienia flag na poziomie pamięci komputera, a jedynie odpowiedniej sekwencji kliknięć przycisków w kabinie i na ekranie pokładowego komputera. Gdy informacje o skutecznym uruchomieniu Impulsów trafiła do mediów, pociągi otrzymały aktualizację oprogramowania, która usunęła tę możliwość “naprawy”. W innym pociągu znaleziono kod nakazujący, aby “zepsuł się” po pokonaniu miliona kilometrów.

Sprawdzanie daty to skomplikowana sprawa

Dość śmieszną sytuację spotkano w innym składzie, który odmówił pracy 21 listopada 2022, mimo że nie znajdował się wtedy w serwisie. Komputer informował o awarii sprężarki, chociaż mechanicy stwierdzili, że ze sprężarką wszystko jest w porządku. Niestety pociąg nadal nie podnosił pantografów. Analiza kodu komputera wykryła warunek wymuszający awarię, który brzmiał tak:

  • jeśli dzień jest większy bądź równy 21 oraz
  • jeśli miesiąc jest większy bądź równy 11 oraz
  • jeśli rok jest większy bądź równy 2021

to zgłoś awarię sprężarki. Sytuacja była śmieszna, bo pociąg miał zaplanowany przegląd na listopad 2021 (rok przed awarią), lecz warunek wówczas przez zbieg okoliczności nie zadziałał. Pociąg trafił do serwisu chwilę wcześniej, a ponownie został uruchomiony dopiero w styczniu 2022 – a ta data wyżej opisanego wyrafinowanego warunku logicznego już nie spełniała. Prawdopodobnie to brak umiejętności konstruowania IF-ów przez autora oprogramowania sprawił, że na zaplanowaną awarię trzeba było czekać aż do 21 listopada 2022. 

Niespodzianka sprzętowa

Niespodzianki czyhały nie tylko w oprogramowaniu komputerów. Badacze w jednym ze składów odkryli urządzenie podpisane jako “konwerter UDP<->CAN”, przypuszczalnie umożliwiające zdalną komunikację z pociągiem. Jego wymontowanie nie sprawiło, że cokolwiek przestało działać. Analiza wykazała, że pokładowy komputer wysyłał do tego urządzenia informacje o stanie blokad, a samo urządzenie było podłączone do modemu GSM.

Nie tylko we Wrocławiu

Informacja o tym, że w serwisie SPS udało się naprawić “popsute” składy Newagu szybko trafiła także do innych serwisów. Okazało się, że jest to dość popularny problem. We Wrocławiu analizowali 13 Impulsów, ale psuły się także te jeżdżące w Kolejach Mazowieckich (jedna sztuka), w Opolu dwa, w Krakowie 4, jeden w Zielonej Górze, cztery w Szczecinie, a także jeden w SKM. Na szczęście każdy udało się naprawić za pomocą narzędzia opracowanego przez naszych badaczy, zdejmującego blokady programowe z pokładowego komputera. W sumie koledzy przeanalizowali oprogramowanie 29 pociągów i tylko w pięciu nie znaleźli żadnych niespodzianek wykraczających poza oficjalną instrukcję obsługi.

Co dalej

Ocenę rozwiązań stosowanych przez producenta zostawiamy czytelnikom oraz klientom tej firmy. Co ciekawe, choć w sprawie toczą się spory sądowe, to ciężko jest znaleźć w Polsce instytucję, która coś zrobiłaby poza życzliwym wyrażeniem zainteresowania tą sprawą. Nie wiemy o żadnych działaniach podjętych ani przez Urząd Ochrony Konsumenta i Konkurencji, ani przez Urząd Transportu Kolejowego, które wydają się właściwe do wyeliminowania z rynku praktyk szkodzących organizacjom samorządowym ponoszącym spore straty i pasażerom, zmuszonym do jazdy w tłoku lub korzystania miesiącami z komunikacji zastępczej. Jedyną instytucją, która podjęła znane nam działania, jest CERT Polska, powiadomiona o odkryciu przez badaczy. Z komentarza, który otrzymaliśmy, wynika, że CERT Polska zawiadomił “stosowne organy”, a sprawą zajmują się organy ścigania.

Najlepszym polskim hakerom gratulujemy ciekawego odkrycia i profesjonalnej realizacji zlecenia. Pamiętajcie, nic tak nie motywuje, jak termin na jutro rano.

Powyższy artykuł jest jedynie pobieżnym streszczeniem prezentacji wygłoszonej na konferencji Oh My H@ck w dniu 5 grudnia 2023 przez członków zespołu w składzie Jakub Stępniewicz, Sergiusz Bazański i Michał Kowalczyk. W artykule pominięto wiele detali oraz całą sporą sekcję techniczną analizy – pozostaje mieć nadzieję, że uda się zmotywować autorów badania do spisania i opublikowania jej przebiegu.

Aktualizacja 2023-12-05 16:00

Otrzymaliśmy oficjalne stanowisko Urzędu Transportu Kolejowego (UTK), które cytujemy poniżej w całości:

Prezes UTK zna sprawę i zweryfikował informacje dotyczące przeprowadzonych analiz oprogramowania pojazdów kolejowych, a także współpracuje w tej kwestii z odpowiednimi służbami. Wspólnie z CERT Polska (zespół powołany do reagowania na zdarzenia naruszające bezpieczeństwo w sieci Internet) zorganizowane zostało spotkanie z producentem pojazdu. Pojazdy spełniają wymagania zasadnicze określone przepisami dyrektyw europejskich. To zamawiający pojazd w ramach swobody kontraktowej określa warunki serwisowania i gwarancji. Tego rodzaju wymagania zawarte są w umowach dotyczących zakupu pociągu. Wszelkie ograniczenia możliwości serwisowania, w tym ograniczenia wprowadzane w oprogramowaniu, mogą stanowić potencjalny spór cywilnoprawny pomiędzy zamawiającym a producentem. Prezes UTK w tej sprawie nie jest właściwym organem.

Zgodnie z art. 41 pkt 2 ustawy z dnia 5 lipca 2018 r. o krajowym systemie cyberbezpieczeństwa (t.j. Dz. U. z 2023 r. poz. 913, 1703) organem właściwym do spraw cyberbezpieczeństwa dla sektora transportu (z wyłączeniem podsektora transportu wodnego) jest minister właściwy do spraw transportu.