На протяжении 5 лет, которые я работаю в IOActive, мне довелось побывать во многих интересных местах за тысячи километров от дома. Поэтому полёт для меня стал обычным явлением. Можно подумать, что в этом нет ничего особенного, но не для меня, как человеку который боится летать. Не сказать, что мне удалось избавиться от этой фобии; после дюжины полётов ладони всё ещё потеют при взлёте, но я с этим смирился, даже, можно сказать, мне иногда нравится летать… и взламывать системы прямо с борта.
В преодолении страха мне помогло изучение функциональности самолёта и привыкание к шуму, скачкам и турбулентности. В этой статье будет рассказано как работают бортовые системы, а в частности, о Бортовой Развлекательно-Информационной Системе (БРИС), разработанной Panasonic Avionics.
Два года назад, пока я летел из Варшавы в Дубай, я решил немного поиграться с БРИС. И когда я кликнул в определённое место в одном из верхних углов экрана, увидел следующие данные отладчика:
----
Interactive: ek_seatappbase_1280x768_01.01.18.01.cram
Content: ek_seatappcontent_1280x768.01.01.8.01.cram
Engine: qtengine_01.14.0.01.squash
LRU Type: 196 2
IP: 172.17.148.48
Media Player Auto Popup Enabled: false
-----
После прилёта в Дубай и поиска ключевых слов в Google, я нашёл в открытом доступе сотни прошивок для различных авиалиний.
Очевидно, что прошивки активно обновляются, поэтому удастся получить доступ к актуальной, которая установлена на борту. На сегодняшний день, файлы всё ещё там, но доступ к списку каталогов закрыт.
Ниже приведён список авиалиний для которых мне удалось найти прошивки:
- Emirates
- AirFrance
- Aerolineas Argentinas
- United
- Virgin
- Singapore
- FinnAir
- Iberia
- Etihad
- Qatar
- KLM
- American Airlines
- Scandinavian
Базовая архитектура БРИС следующая:
Блок Управления Системой (БУС)
Это сертифицированный бортовой сервер. Пассажиры, как правило, могут следить в режиме реального времени за текущими параметрами полёта, такими как скорость ветра, широта, долгота, высота и температура за бортом. БУС получает всю эту информацию через шину авионики (обычно это ARINC 429) и затем Информационные Терминалы Кресла (ИТК) могут получить к ней доступ через Ethernet.
Информационный Терминал Кресла (ИТК)
Это сменный линейный блок и с помощью него пассажиры имеют доступ к пассивному и активному функционалу БРИС, таким как просмотр фильмов, покупка товаров, чтение статей или доступ в интернет. Проще говоря это вмонтированное устройство с сенсорным экраном. Более новые модели используют Android, в то время как устаревшие, в основном, Linux.
Снятие ИТК — это Rave AIX, а не модель от Panasonic Avionics (источник)
Персональное Управляющее Устройство (ПУУ)
Это опциональное устройство. С помощью ПУУ можно управлять ИТК и, как будет показано ниже, он также может работать как терминал для кредитных карт.
Панель для бортпроводников
Стюардессы и другие члены экипажа с помощью данной панели могут управлять такими функциями авиасудна, как свет, приводы (включая кровати), объявления пассажирам, бортовые покупки или же система вызова персонала. Система Управления Кабины [Cabin Management System] обычно интегрирована с БРИС. Panasonic Avionics это делает с помощью Глобальных Коммуникационных Служб [Global Communications Services], обеспечивая общий функционал для простых операций из кабины экипажа (см. тут). Приложение для экипажа CrewApp доступно из панели для бортпроводников.
БРИС от Panasonic
БРИС от Panasonic: устаревшие 3000/3000i и новые XSeries eFX, eX2 и eX3 (на Android). Аппаратная составляющая может варьироваться, но по архитектуре они схожи и у них есть общие характеристики.
Больше информации по БРИС от Panasonic можно найти на их сайте.
Эти системы можно кастомизировать, что позволяет авиалиниям устанавливать БРИС в соответствии с политикой авиакомпании, в то время как кодовая база почти вся одинаковая.
Проанализировав прошивки, мне не совсем удалось узнать способ загрузки данных на земле. Обычно контент обновляется через Wi-Fi ad-hoc-сети, либо через высокоскоростное мобильное подключение как только самолёт приземляется. БРИС от Panasonic же в основном обновляется через "Флоппинет". Связь со спутниками или мобильные сети в полёте доступны, но в большинстве случаев, БРИС работает автономно, с предзагруженным контентом. Обычно БРИС даже не проверяет кредитные карты в режиме реального времени.
БРИС от Panasonic Avionics придерживается клиент-серверной архитектуры с тремя главными компонентами:
- CrewApp
- SeatApp
- Backend
Я нашёл несколько версий CrewApp и SeatApp по вышеуказанной странице. Когда я гуглил ключевые слова, мне так же удалось найти бэкенд в открытом доступе на разный сайтах .aero. Не смотря на то, что в них есть фирменные и уникальные данные от авиалиний, кодовая база в них от бэкенда Panasonic.
Невозможно охватить все варианты БРИС в одной статье, так как авиалинии расширяют и адаптируют фреймворк, поэтому дальше речь пойдёт о конкретных функциях.
Перезагрузка SeatApp на Linux
Файлы прошивок (в этом случае программа, которая запускается на устройстве не поддерживаемым пользователем), которые я проанализировал не содержали систему целиком, а только части которые должны быть обновлены. Это печально, т.к. мы бы смогли узнать больше информации о работе этих устройств, но всё же некоторые интересные моменты можно прояснить и с помощью доступных файлов.
Скрипты
Panasonic Avionics разработало свой декларативный скриптовый язык программирования для взаимодействия с пользовательским интерфейсом и функциями главного приложения. Он поддерживает десятки команд и обладает хорошим функционалом.
Пример кода core/startup.txt
Реверс-инжиниринг основного бинарного файла (airsurf) позволит узнать как работает парсер таких скриптов. Для демонстрации давайте посмотрим на #define.
Скрипт обрабатывается построчно и когда парсер видит конструкцию #define, пытается разобрать его в sub_80C2690.
В этой функции могут быть определены 5 типов: flash, text, draw, timer, и value.
Первая строка скрипта содержит #define со значением [value], посмотрим как она обрабатывается.
В первую очередь строка парсится и извлекается наименование define. Затем парсер проверяет число ли (ниже голубой блок) то значение, что находится после (ниже зелёный блок).
Если значение не число, то оно сравнивается с различными переменными и если совпадение найдено, то заменяется его значением.
Если же значение число, то пара наименование/значение добавляется в глобальный массив define (голубой блок снизу)
Для команды cmd, бинарник вызывает нужную функцию из таблицы cmd и передаёт аргументы.
Тут можно найти некоторые интересные функции, например, ту которая читает информацию о кредитной карте после задействования её в терминале.
Данные, полученные с кардридера (/dev/ccr), парсятся, распечатываются и сверяются.
Можно найти и обычные файлы, такие как shell скрипты, файлы конфигураций (содержащие вшитые учётные данные), базы данных, ресурсы и библиотеки.
В одном из твитов где была снята перезагрузка БРИС от Panasonic я увидел следующую информацию. Файлы приложения SeatAppBase те же, что мы и рассматриваем.
loadlru.h
В новых версиях БРИС X, Panasonic перешёл на Android и соответственно старые скрипты .txt заменены на подход с использованием QT QML:
В бекенде используется PHP. С первого взгляда бросаются на глаза уязвимости.
Изображение сверху относится к функционалу чата между креслами, где пассажиры могут посылать сообщения друг другу. Вам не будет сложно догадаться, что же тут не так, и это не единственная проблема.
Следующие видео демонстрируют использование уязвимостей, но без нанесения ущерба.
- Обход проверки кредитной карты
- Доступ к файлам (например /dev/random)
- SQL инъекция
Потенциальные угрозы
Так как же далеко может зайти злоумышленник используя такие уязвимости в БРИС? На этот вопрос нет однозначного ответа, но мы попробуем рассмотреть некоторые общие случаи не специфичные для определенного производителя системы, а сделаем мы это рассмотрев больше аспектов в работе системы.
По стандарту DO-178B, который определяет спецификации операционных систем реального времени в авиации, БРИС должен находиться между уровнями D и E. БРИС от Panasonic Avionics сертифицирован на уровне E. Это означает, что даже если вся система даст сбой, это либо вообще ничего не изменит либо создаст некоторые неудобства пассажирам.
Также хотелось бы отметить, что информационная сеть авиасудна разделена на 4 части, по типу данных которые в них обрабатываются: развлечение пассажиров, устройства пассажиров, информационные службы авиалинии и управление самолётом.
Управление самолётом должно принадлежать одноимённой части сети, который должен быть физически отделён от части пассажирской, но это не всегда так. В некоторых суднах используются оптические информационные диоды, в то время как другие отдают предпочтение модулям сетевого шлюза. Это означает, что потенциальную угрозу нельзя исключать, пока связь между двумя частями существует.
БСИД может оказаться вектором атаки. В некоторых случаях такой вид атаки будет невозможен, благодаря изоляции систем, но в других потенциальная угроза остаётся ввиду физической связи систем. IOActive успешно скомпрометировало шлюзы других транспортных средств. Грань между пассажирской и управляющей системами сильно определяется благодаря конкретным устройствам, программному обеспечению и настройками авиасудна.
В 2014 году мы опубликовали серию уязвимостей в устройствах спутниковой связи (SATCOM), включая бортовые терминалы. Больше всего беспокоит то, что эти устройства используются в различных областях системы, что позволяет злоумышленнику использовать оборудование для получения доступа к авионике через скомпрометированную БРИС.
Со стороны IT, взлом БРИС означает, что злоумышленник может управлять информацией, которую получают пассажиры на борту. Например, можно изменить данные о полёте такие как высота или скорость и показывать фиктивный маршрут самолёта на карте. Злоумышленник может скомпрометировать и приложение CrewApp для персонала и контролировать свет или приводы в классах выше. Если эти угрозы совместить, то можно поставить пассажиров в замешательство.
Получение персональной информации, включая данные о кредитной карте, тоже имеют место быть, если бэкенд, который иногда предоставляет специфичную информацию о частоте перелётов или VIP членства, настроен не должным образом.
С другой стороны, Wi-Fi сеть может быть настроена надёжно, без каких либо угроз для безопасности.
Этим хотелось бы сказать, что на наш взгляд, такие системы не смогут выдержать серьёзную атаку от опытного злоумышленника. Авиакомпании должны быть бдительными, когда дело касается их БРИС, обеспечивая тщательно разделённые системы и проверять каждый аспект безопасности поэтапно. Ответственность за безопасность не лежит на плечах только лишь разработчика БРИС, производителя судна или оператора. Каждый играет свою важную роль в безопасности окружения.
Ответственность за раскрытие
Мы сообщили о найденных уязвимостях Panasonic Avionics в марте 2015. Мы надеемся, что времени было достаточно для закрытия найденных уязвимостей, по крайней мере самых очевидных. Тем не менее, мы думаем трудно сказать что все эти проблемы решились в области, где участвуют разные авиалинии и сотни версий продукта.
Комментарии (17)
jok40
22.12.2016 18:52+1В некоторых суднах используются оптические информационные диоды, в то время как другие отдают предпочтение модулям шлюза.
Напишите, пожалуйста, как это было в оригинале (надеюсь, он был на английском).A3a
22.12.2016 18:55Some aircraft use optical data diodes, while others rely upon electronic gateway modules
Прошу, те кто хочет высказать мнение по переводу, пишите в ЛС. Комментарии к статье не для этого.jok40
22.12.2016 19:18+4Спасибо. Я не собирался высказывать никакого мнения по переводу. Просто прочитал это предложение по русски (три раза) — ничего не понял. Думал на английском будет понятнее — ан нет. Легче не стало.
chieftain_yu
23.12.2016 08:52+2Есть устройства однонаправленной передачи данных. Часто делаются на оптике.
Они позволяют физически передавать сигнал только в одном направлении, не допуская проникновения никакой информации в обратную сторону.
Полагаю, подразумеваются именно такие устройства.
И в тексте они противопоставляются обычным шлюзам, которые имеют двунаправленное физическое подключение.
maaGames
22.12.2016 18:54А потом команде «Скорпион» придётся перебрасывать интернет-кабель из ноутбука в машине, едущей рядом с летящим самолётом, чтобы восстановить прошивку. Уже баян.)
Ivnika
23.12.2016 04:56-12Как то вспомнился эпизод из фильма «Особенности национальной рыбалки» (если не путаю), когда один из товарищей на корабле пошел искать где бы попить водички и запустил ракеты…
К чему это я? Какое право вы имели подвергать опасность жизнь других пассажиров вмешиваясь в работу систем самолета? Где гарантия что вы не затронули чего то еще?
А фраза из финала статьи позволяет думать что вы сообщили о уязвимостях, НО, не дождались ответа и публикуете это здесь!
Похвастались? Молодцом! Надеюсь ваша информация попадет в первую очередь в нужные руки.
p.s. Да, возможно у меня синдром всемирного заговора, но…AlexLeeB
23.12.2016 11:16Это лишь перевод…
Ivnika
23.12.2016 11:17Я видел что это перевод )
Стараюсь всегда читать внимательно. Тем не менее небольшое вводное слово от переводчика могло снять многие вопросыA3a
23.12.2016 14:05+1Так к кому вы обращались тогда, зная что это перевод? Рубену Сантамарте? Автор между прочим специалист по безопасности и изучил систему прежде чем начать её взламывать. Поэтому ничья жизнь в опасности не была.
xxvy
23.12.2016 08:46Интересно, а со стороны пассажирского салона имеются какие-нить ревизионные люки (где-нить под ковриком или за пластиком обшивки), через которые можно получить доступ к кабельканалу с проводами системы управления самолётом? И даже если их нет, потенциальный злоумышленник вполне может знать слабое место, где достаточно проковырять дырочку и добраться до нужного провода.
TimsTims
Зарубежные авиакомпании имеют практику вносить пассажиров в чёрные списки. Как бы автору не перекрыли доступ на авиасудна после этой публикации…
semen-pro
Зарубежные авиакомпании имеют практику выплачивать пассажирам за найденные неисправности, будь то сломанная ручка или ещё что. См. историю про Бена Шлаппига — человека, который летает по всему миру бесплатно.
TimsTims
Ваш пример — Систематическая ошибка выжившего
https://ru.m.wikipedia.org/wiki/Систематическая_ошибка_выжившего
Одному дали плюшку, но еще большим дали по голове.