О троице, которая хакнула настоящий поезд. Даже целых 30 поездов
- четверг, 7 декабря 2023 г. в 00:00:15
Поезд, сделанный польской компанией, внезапно сломался во время техобслуживания. Специалисты были беспомощны — поезд был в порядке, только никак не хотел ехать. Доведённые до отчаяния, они вызвали на помощь команду Dragon Sector, члены которой нашли такие чудеса, о которых машинисты даже и не мечтали.
В этой истории мы отправимся в необычное путешествие. Путешествие, полное неожиданных открытий и событий, путешествие под давлением времени и больших денег, а также необычных технологий. Путешествие, в котором поезд играет самую важную роль — хотя, к сожалению, он не едет, а должен был бы. Пристегнитесь — или, по крайней мере, сядьте поудобнее, потому что дальше будут крутые повороты.
История, вероятно, начинается немного раньше, но мы заглянем на эту сцену весной 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 позволяет загружать только новое программное обеспечение без возможности копирования существующего. В ходе экспериментов с найденной более старой версией программного обеспечения ее загрузка на первый резервный компьютер приводит к тому, что и он перестает отвечать на запросы — у них остается только один исправный резервный компьютер. Наконец, они находят интерфейс для отладки и байт за байтом копируют память устройства.
Компьютер основан на архитектуре TriCore, как и многие подобные решения, например в автомобильной промышленности. К сожалению, хороших дизассемблеров не хватает, поэтому исследователи немного дорабатывают Ghidra и наконец-то могут взглянуть на код. Правда недостаёт отладочных строк, но работа потихоньку продвигается. Проходит полтора месяца, когда SPS сообщает плохие новости.
Нижнесилезские железные дороги, не имея возможности дождаться своих (неподвижных) поездов, решают пойти на сотрудничество с Newag в вопросах ремонта вышедших из строя поездов и их обслуживания, а также поездов, которые согласно первоначальному тендеру должны были обслуживаться только в SPS. До расторжения договора с SPS осталась примерно неделя. Как известно, ничто не влияет на интенсивность работы так же хорошо, как очень близкий срок, к которому нужно показать результат, поэтому исследователи приступают к работе с удвоенной энергией. Во время предыдущей работы они скопировали содержимое памяти многих компьютеров как работающих поездов, так и тех, которые только должны работать. Сравнение этих образов — та ещё работёнка, так как почти каждый поезд имеет свой набор функций и свою версию программного обеспечения, но постепенно исследователи начинают ощущать, что что-то поняли. В памяти компьютеров они нашли значения, которые в одном поезде установлены, а в другом обнулены. Они могут проводить тесты на столе — компьютер, даже когда его снимают с поезда, позволяет ему на мгновение загрузиться (прежде чем он поймет, что ему не хватает всего остального поезда) и показать, готов ли он запустить инверторы.
До окончания работ остается меньше суток, когда они находят конфигурацию флагов, которая дает возможность запустить поезд. К сожалению, в ходе экспериментов сгорает последний работающий бортовой компьютер. Да, горит — горит конденсатор (это скорее случайное событие). После очередного мозгового штурма и множества попыток объединить два поврежденных компьютера в один, им удается починить сгоревший и в 2 часа ночи, накануне Часа X, они настраивают компьютер, который должен запустить поезд. Один из наших героев садится в поезд (другого оператора железных дорог), чтобы добраться с, вероятно, работающим компьютером, до мастерской раньше представителей Нижнесилезских железных дорог, которые объявили о своем визите в 9:30. К сожалению, поезд, на котором исследователь едет на место, опаздывает. В конце концов, утром он с компьютером приезжает на место, подключает молимся-чтобы-заработал-компьютер к сломанному поезду, но поезд не движется. В результате еще одного мозгового штурма выявляется единственный флаг, о котором они забыли, и в 8:42 поезду удается тронуться. Делегация Нижнесилезских железных дорог, видя в 9:30, что у поездов есть шанс вернуться живыми, не расторгает контракт с SPS.
Выяснить, как запустить поезд, было даже не полдела — нужно еще выяснить, почему он сломался, и здесь наше путешествие только начинается.
Месяцы анализа и реверс-инжиниринга позволили обнаружить чрезвычайно интересные условия, записанные в программном коде различных поездов, предоставленных Newag. После сотен часов, проведенных над кодом, сдампленным с десятков составов, удалось выявить очень интересные механизмы, вызывающие внезапные заболевания поездов.
Найденные в коде компьютера числовые значения 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, но для его координат определено другое логическое условие, вероятно, в целях тестирования.
Вскоре были обнаружены и другие сюрпризы. Среди них была блокировка поезда при замене одного из его компонентов (проверяется по серийному номеру). Также была обнаружена возможность снятия блокировки – для этого не требовалась установка флагов в памяти компьютера, а лишь соответствующая последовательность нажатий кнопок в салоне и на экране бортового компьютера. Когда информация об успешном запуске «Импульсов» дошла до СМИ, поезда получили обновление программного обеспечения, устранившее возможность такого «ремонта». В другом поезде был обнаружен код, предписывающий ему «сломаться» после прохождения миллиона километров.
Довольно смешная ситуация была встречена в другом составе, который отказался работать 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 года членами команды: Якубом Стемпневичем, Сергиушем Базаньским и Михалом Ковальчиком. В статье опущены многие детали и большой технический раздел анализа — остается только надеяться, что это побудит авторов исследования записать и опубликовать его курс.
Президент UTK в курсе дела и проверил информацию о проведенных анализах программного обеспечения железнодорожного транспорта, а также сотрудничает по этому вопросу с профильными службами. Совместно с CERT Polska (команда, созданная для реагирования на инциденты, нарушающие безопасность Интернета) была организована встреча с производителем транспортных средств. Транспортные средства соответствуют основным требованиям, указанным в положениях европейских директив. Лицо, заказывающее транспортное средство, определяет условия обслуживания и гарантии в рамках договорной свободы. Такие требования включены в контракты на закупку поездов. Любые ограничения возможностей обслуживания, включая ограничения, введенные в программное обеспечение, могут представлять собой потенциальный гражданский спор между стороной заказа и производителем. Президент UTK не является компетентным органом в этом вопросе. Согласно ст. 41 п. 2 Закона о национальной системе кибербезопасности от 5 июля 2018 г. (сводный текст: Законодательный вестник 2023 г., поз. 913, 1703) органом, ответственным за кибербезопасность в транспортной сфере (за исключением подотрасли водного транспорта), является министр, отвечающий за вопросы транспорта.
→ Исследователи запланировали доклад на 37C3: Unlocked