Поезд, сделанный польской компанией, внезапно сломался во время техобслуживания. Специалисты были беспомощны — поезд был в порядке, только никак не хотел ехать. Доведённые до отчаяния, они вызвали на помощь команду Dragon Sector, члены которой нашли такие чудеса, о которых машинисты даже и не мечтали.
В этой истории мы отправимся в необычное путешествие. Путешествие, полное неожиданных открытий и событий, путешествие под давлением времени и больших денег, а также необычных технологий. Путешествие, в котором поезд играет самую важную роль — хотя, к сожалению, он не едет, а должен был бы. Пристегнитесь — или, по крайней мере, сядьте поудобнее, потому что дальше будут крутые повороты.
![](https://habrastorage.org/getpro/habr/upload_files/dd2/318/04a/dd231804a9a8522d90e77ae73b796643.png)
Выигранный тендер, проигранный сервис
История, вероятно, начинается немного раньше, но мы заглянем на эту сцену весной 2022 года: заканчивается обслуживание первого из одиннадцати поездов Newag Impuls 45WE, эксплуатируемых Нижнесилезскими железными дорогами. Сервисом занимается компания c незамысловатам названием Serwis Pojazdów Szynowych, именуемая в дальнейшем SPS. SPS выиграла тендер на проведение обязательного осмотра поездов после преодоления расстояния в 1 000 000 километров. В тендере на инспекцию принимал участие и производитель поездов, польская компания Newag, но предложение производителя было на 3 миллиона польских злотых выше, и в конечном итоге тендер выиграла компания SPS, которая предложила выполнить услугу за 22 миллиона злотых.
Обслуживание поезда — дело сложное: его нужно разобрать на части, отправить детали отдельным производителям, забрать проверенные, снова собрать поезд и запустить. SPS проводит проверку согласно соответствующей инструкции (объемом около 20 тысяч страниц), предоставленной производителем, но поезд после сборки не двигается. Компьютер говорит, что все в порядке, поезд готов к работе, но он не едет. Инверторы не подают напряжение на двигатели, и никто понятия не имеет, почему это происходит. Ремонтники ищут, проверяют, сверяются, изучают инструкции — ответа не находят.
Загадочные неудачи
У нижнесилезских железных дорог одиннадцать «Импульсов», и согласно графику на обслуживание поступает еще один, а первый, вместо того, чтобы вернуться к работе, всё ещё стоит в мастерской. Второй поезд проходит идентичное обслуживание с тем же эффектом. До сервиса ездил, после сервиса — уже не хочет. Работа по запуску первого поезда, как и сам поезд, не сдвинулась ни на миллиметр — производитель отказывается помогать. В мастерской стоят уже два неподвижных состава. Третий поезд пропускает проверку из-за отказа аккумулятора, поэтому вместо него на сервис отправляется четвертый поезд («из будущего»). Сервис хочет воспользоваться его присутствием, чтобы отбуксировать одного из тех, кто ездить не хочет. После подключения четвертого, ездящего, к одному из неподвижных, обездвиживается и он (до сих пор не удалось установить причину этого события). Кроме того, в другой мастерской, в Щецине, другой «Импульс» ломается при очень похожих обстоятельствах — он не запускается после проведенного обслуживания.
Лучшие польские хакеры
В какой-то момент проблема становится настолько серьёзной, что её замечают СМИ — шесть самых длинных поездов Нижней Силезии выведены из строя, а значит, приходится сокращать расписания, отправлять на пути замещающие поезда, а пассажирам — путешествовать в давке в более коротких поездах. Newag объясняет, что поезда были заблокированы «системой безопасности», но на 20 000 страницах руководства об этом нет ни единого упоминания. День простоя поезда в мастерской стоит несколько тысяч злотых штрафа (по договору), поездов стоит несколько, поэтому уровень напряженности в SPS растет. Поскольку механики и электрики не справляются, кто-то наконец вбивает в Google «польские хакеры» и вверху списка результатов оказывается статья об успехах группы Dragon Sector на арене CTF. SPS устанавливает контакт с Dragon Sector (DS), представители которой поначалу не могут поверить услышанному предложению. Взлом поезда? Собственно, почему бы и нет. Стороны подписывают договор. Проект осуществляют участники Dragon Sector Михал «Redford» Ковальчик и Сергиуш «q3k» Базаньский, известные взломом ноутбуков Toshiba, а также к компании присоединяется Куба «ПанКлещ» Степневич, имеющий опыт в промышленной автоматизации. Команда бодро приступает к работе, а Куба отправляется на экскурсию в мастерскую. На месте они получают поезд, который не едет, два запасных компьютера и файлы SDK производителя компьютера. Работа начинается с прослушивания CAN-шины, но без документирования протоколов прочитать трафик сложно. Они долго пытаются сдампить прошивку с бортового компьютера, но у них нет документации на него, а SDK позволяет загружать только новое программное обеспечение без возможности копирования существующего. В ходе экспериментов с найденной более старой версией программного обеспечения ее загрузка на первый резервный компьютер приводит к тому, что и он перестает отвечать на запросы — у них остается только один исправный резервный компьютер. Наконец, они находят интерфейс для отладки и байт за байтом копируют память устройства.
![](https://habrastorage.org/getpro/habr/upload_files/fe2/2f1/200/fe22f1200fd02deba01ac3929666a0e2.jpg)
Компьютер основан на архитектуре TriCore, как и многие подобные решения, например в автомобильной промышленности. К сожалению, хороших дизассемблеров не хватает, поэтому исследователи немного дорабатывают Ghidra и наконец-то могут взглянуть на код. Правда недостаёт отладочных строк, но работа потихоньку продвигается. Проходит полтора месяца, когда SPS сообщает плохие новости.
Когда наступает срок и поезда ломаются
Нижнесилезские железные дороги, не имея возможности дождаться своих (неподвижных) поездов, решают пойти на сотрудничество с Newag в вопросах ремонта вышедших из строя поездов и их обслуживания, а также поездов, которые согласно первоначальному тендеру должны были обслуживаться только в SPS. До расторжения договора с SPS осталась примерно неделя. Как известно, ничто не влияет на интенсивность работы так же хорошо, как очень близкий срок, к которому нужно показать результат, поэтому исследователи приступают к работе с удвоенной энергией. Во время предыдущей работы они скопировали содержимое памяти многих компьютеров как работающих поездов, так и тех, которые только должны работать. Сравнение этих образов — та ещё работёнка, так как почти каждый поезд имеет свой набор функций и свою версию программного обеспечения, но постепенно исследователи начинают ощущать, что что-то поняли. В памяти компьютеров они нашли значения, которые в одном поезде установлены, а в другом обнулены. Они могут проводить тесты на столе — компьютер, даже когда его снимают с поезда, позволяет ему на мгновение загрузиться (прежде чем он поймет, что ему не хватает всего остального поезда) и показать, готов ли он запустить инверторы.
До окончания работ остается меньше суток, когда они находят конфигурацию флагов, которая дает возможность запустить поезд. К сожалению, в ходе экспериментов сгорает последний работающий бортовой компьютер. Да, горит — горит конденсатор (это скорее случайное событие). После очередного мозгового штурма и множества попыток объединить два поврежденных компьютера в один, им удается починить сгоревший и в 2 часа ночи, накануне Часа X, они настраивают компьютер, который должен запустить поезд. Один из наших героев садится в поезд (другого оператора железных дорог), чтобы добраться с, вероятно, работающим компьютером, до мастерской раньше представителей Нижнесилезских железных дорог, которые объявили о своем визите в 9:30. К сожалению, поезд, на котором исследователь едет на место, опаздывает. В конце концов, утром он с компьютером приезжает на место, подключает молимся-чтобы-заработал-компьютер к сломанному поезду, но поезд не движется. В результате еще одного мозгового штурма выявляется единственный флаг, о котором они забыли, и в 8:42 поезду удается тронуться. Делегация Нижнесилезских железных дорог, видя в 9:30, что у поездов есть шанс вернуться живыми, не расторгает контракт с SPS.
Почему поезд сломался
Выяснить, как запустить поезд, было даже не полдела — нужно еще выяснить, почему он сломался, и здесь наше путешествие только начинается.
Месяцы анализа и реверс-инжиниринга позволили обнаружить чрезвычайно интересные условия, записанные в программном коде различных поездов, предоставленных Newag. После сотен часов, проведенных над кодом, сдампленным с десятков составов, удалось выявить очень интересные механизмы, вызывающие внезапные заболевания поездов.
![](https://habrastorage.org/getpro/habr/upload_files/863/75d/454/86375d45416089529fe6863cfba9f092.jpg)
Найденные в коде компьютера числовые значения 53.13845 и 17.99011 на первый взгляд показались знакомыми. Быстро выяснилось, что это координаты GPS, указывающие на окрестности железнодорожного вокзала Быдгощ-Главный, а именно, расположенного рядом с ним сервиса компании PESA. Вскоре были найдены и координаты других служб, которые могли бы осуществлять ремонт и проверку поездов в Польше. Ниже мы приводим псевдокод алгоритма (названия переменных и функций даны исследователями для наглядности — каковы были оригинальные названия, мы не знаем):
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;
Пары координат определяют территорию мастерских. В коде компьютера записано условие, предписывающее отключить возможность запуска поезда, если он проведет в одной из них не менее 10 дней. Один цех принадлежит самой компании Newag, но для его координат определено другое логическое условие, вероятно, в целях тестирования.
![](https://habrastorage.org/getpro/habr/upload_files/7de/368/526/7de3685266a44aa4514b490c6b343303.jpg)
Вскоре были обнаружены и другие сюрпризы. Среди них была блокировка поезда при замене одного из его компонентов (проверяется по серийному номеру). Также была обнаружена возможность снятия блокировки – для этого не требовалась установка флагов в памяти компьютера, а лишь соответствующая последовательность нажатий кнопок в салоне и на экране бортового компьютера. Когда информация об успешном запуске «Импульсов» дошла до СМИ, поезда получили обновление программного обеспечения, устранившее возможность такого «ремонта». В другом поезде был обнаружен код, предписывающий ему «сломаться» после прохождения миллиона километров.
Проверка даты — это очень сложно
Довольно смешная ситуация была встречена в другом составе, который отказался работать 21 ноября 2022 года, несмотря на то, что в то время не находился в сервисе. Компьютер сообщил о неисправности компрессора, хотя механики заявили, что с компрессором все в порядке. К сожалению, поезд так и не поднял пантографы. Анализ компьютерного кода обнаружил сбой, который выглядит следующим образом:
если день больше или равен 21-му
если месяц больше или равен 11
если год больше или равен 2021
тогда сообщите о неисправности компрессора. Ситуация была забавная, ведь поезд должен был пройти техосмотр в ноябре 2021 года (за год до аварии), но по стечению обстоятельств условие не сработало. Поезд был обслужен мгновением ранее и снова запущен лишь в январе 2022 года – и эта дата уже не соответствовала вышеописанному сложному логическому условию. Вероятно, именно из-за отсутствия у разработчика программного обеспечения навыков создания if-ов пришлось ждать запланированного сбоя до 21 ноября 2022 года.
Аппаратный сюрприз
Сюрпризы скрывались не только в программном обеспечении компьютеров. Исследователи обнаружили на одном из составов устройство, подписанное как «конвертер UDP↔CAN», предположительно обеспечивающее удаленную связь с поездом. После его удаления ничто не перестало работать. Анализ показал, что бортовой компьютер отправлял на это устройство информацию о состоянии блокировки, а само устройство было подключено к GSM-модему.
Не только во Вроцлаве
Информация о том, что сервису SPS удалось отремонтировать «сломанные» поезда Newag, быстро дошла и до других сервисов. Это оказалось довольно распространенной проблемой. Во Вроцлаве проанализировали 13 «Импульсов», но сломались и те, что работали на Мазовецкой ЖД (одна единица), два в Ополе, четыре в Кракове, один в Зеленой Гуре, четыре в Щецине и один в SKM. К счастью, все удалось исправить с помощью инструмента, разработанного нашими исследователями, снимающего программные блокировки с бортового компьютера. В общей сложности коллеги проанализировали программное обеспечение 29 поездов и только в пяти не обнаружили никаких сюрпризов, выходящих за рамки официальных инструкций по эксплуатации.
Что дальше
Как обычно на нашем канале выводы вы делаете сами Оценку используемых производителем решений мы оставляем читателям и клиентам этой компании. Интересно, что, хотя судебные споры продолжаются, в Польше сложно найти ведомство, которое сделало бы что-либо, кроме выражения глубокой озабоченности. Нам не известны какие-либо действия, предпринятые Управлением по защите прав потребителей и конкуренции или Управлением железнодорожного транспорта, которые кажутся целесообразными для устранения с рынка практик, наносящих вред местным органам власти, которые несут значительные убытки, и пассажирам, которые вынуждены путешествовать в толпе, или месяцами использовать альтернативный транспорт. Единственным известным нам учреждением, предпринявшим какие-либо действия, является CERT Polska, который был уведомлен об открытии исследователями. Из полученного нами комментария следует, что CERT Polska уведомила «соответствующие органы», и делом занимаются правоохранительные органы.
Поздравляем лучших польских хакеров с интересным открытием и профессиональным исполнением заказа. Помните, нет ничего более мотивирующего, чем дедлайн, назначенный завтра утром.
Вышеупомянутая статья представляет собой лишь краткое изложение презентации, сделанной на конференции Oh My H@ck 5 декабря 2023 года членами команды: Якубом Стемпневичем, Сергиушем Базаньским и Михалом Ковальчиком. В статье опущены многие детали и большой технический раздел анализа — остается только надеяться, что это побудит авторов исследования записать и опубликовать его курс.
Обновление 2023-12-05 16:00
Президент UTK в курсе дела и проверил информацию о проведенных анализах программного обеспечения железнодорожного транспорта, а также сотрудничает по этому вопросу с профильными службами. Совместно с CERT Polska (команда, созданная для реагирования на инциденты, нарушающие безопасность Интернета) была организована встреча с производителем транспортных средств. Транспортные средства соответствуют основным требованиям, указанным в положениях европейских директив. Лицо, заказывающее транспортное средство, определяет условия обслуживания и гарантии в рамках договорной свободы. Такие требования включены в контракты на закупку поездов. Любые ограничения возможностей обслуживания, включая ограничения, введенные в программное обеспечение, могут представлять собой потенциальный гражданский спор между стороной заказа и производителем. Президент UTK не является компетентным органом в этом вопросе. Согласно ст. 41 п. 2 Закона о национальной системе кибербезопасности от 5 июля 2018 г. (сводный текст: Законодательный вестник 2023 г., поз. 913, 1703) органом, ответственным за кибербезопасность в транспортной сфере (за исключением подотрасли водного транспорта), является министр, отвечающий за вопросы транспорта.
→ Запись доклада исследователей на 37C3: Unlocked