Думаю, что многие из вас пользовались медиа центром на спинке кресла дорогих авиакомпаний, или хотя бы видели, как он работает. Там можно смотреть фильмы, музыку и даже играть в примитивные игры на джойстике.
Но что делать, если это устройство много часов у вас перед глазами, а вам очень скучно?
Конечно же, искать уязвимости и недочеты интерфейса!
Находить их, а потом отправлять в техническую поддержку, чтобы их исправили.
Что я собственно и сделал, но опубликовал способ обхода интерфейса до исправления недочетов.
Если хотите узнать почему я так поступил, что находится под интерфейсом медиа центра и что делает тех поддержка Turkish Airlines в свободное время — читайте под катом.
В чем же проблема интерфейсов встраиваемых устройств?
К сожалению, у множества устройств «Интернета вещей» есть мелкие недочеты позволяющим обойти «стандартный» интерфейс и попасть внутрь операционной системы.
Я часто увлекаюсь поиском таких багов в свое удовольствие, но не во вред устройствам и общественности. Узнаешь, как взломать чужой — поймешь, как защитить свой софт.
Много разработчиков интерфейсов не уделяют должного внимания безопасности, из-за чего могут пострадать пользователи. А ведь это очень серьезно, злоумышленник может средствами фишинга заниматься кражей персональных данных. Наивные пользователи могут вводить свои пароли и данные кредитных карт в устройство, которое с первого взгляда не может причинить им ущерб.
Долгие часы перелета
Это был не первый мой полет с авиакомпанией Turkish Airlines, и я уже видел медиа центры нескольких самолетов этой компании. Отличить Windows CE устройство от Android можно проверив работу жестов тачскрина, на Windows CE поддержка multi-touch отсутствует. В Windows CE всегда ставят тачскринырезистивные, а на Android почти все емкостные.
В этот раз попался медиа центр на Android. На глаз интерфейсы одинаковы, но на ощупь сразу заметно отличия.
Пока никто из персонала не смотрел в мою сторону, я начал изучать возможные недочеты. Некоторые устройства можно подчинить одним лишь пальцем, но не это.
В кресла встроены гнезда для наушников, джойстик, а так же Ethernet и USB порт. В Windows CE устройствах на борту он был отключен. Я решил попробовать подключить флешку и тут.
Появилось сообщение «USB Device detected».
Я нашел секцию проигрывания с USB диска, там три секции, JPG, MP3, PDF.
Дальше я сохранил произвольный PDF файл на флешку и подключил ее обратно в медиа центр. В результате он появился в списке и успешно открылся.
Внизу появились стандартные кнопки Android. При нажатии на кнопку Home происходит перехват программой и возврат к медиа центру. Так что эти кнопки бесполезны.
Чтобы пойти дальше я выделил пальцем кусок текста и появилось меню в правом верхнем углу.
Через меню Share я получил доступ к Mail и Messages, откуда получилось посмотреть файловую систему.
Внутри оказалась флешка на 64 Gb, скорее всего MicroSD.
Дальше через то же меню через кнопку Web Search удалось запустить Google Chrome.
Но интернета там не оказалось. Возможно на других рейсах он будет.
Дальше я попробовал открыть файл /etc/hosts, что успешно получилось.
К моему удивлению выяснилось что они не используют ни DHCP сервер, ни DNS, все устройства внутри самолета, включая сервер стриминга прописаны в файле конфигурации hosts.
Дальше мне удалось копировать файлы, в том числе вышло заменить файл /etc/hosts своим, после чего я вернул его обратно. Это дает возможность перенаправить трафик медиа сервера на любой IP адрес а так заменить веб элементы самого медиа центра на свои.
Выходит можно пройтись по всех медиа центрах и залить им фишинговые страницы, или нацепить рекламный банер, который сможет снять только технический отдел. Это явно угроза безопасности путешественников и я решил отправить все в тех поддержку Turkish Airlines.
Обращение в поддержку Turkish Airlines
В самолете я подготовился и снял видео всего процесса, чтобы отправить в поддержку Turkish Airlines. В нем только то, что нужно показать поддержке для устранения уязвимостей.
К сожалению было темно, так что прошу прощения за качество видео и картинок в этой статье.
Это видео я загрузил в YouTube месяц назад, после смены приватного статуса дата обнулилась. Ссылка была приватной. Никто не мог просматривать видео кроме меня и службы поддержки. Я позвонил в поддержку Turkish Airlines и не с первого раза, но мне удалось объяснить, что я пытаюсь им помочь. Они объяснили, куда именно на их сайте написать обращение.
После отправки заявки с ссылкой видео мне пришло письмо от робота что мне ответят в течении 7 дней. После отправки видео я время от времени проверял счетчик просмотров, чтобы узнать смотрела ли его тех поддержка, число не менялось.
Ожидание ответа от поддержки
Прошло 2 недели, ответ так и не поступил и я решил написать им в Twitter @TK_HelpDesk. Сразу получил ответ, они сказали что проверят мой запрос и быстрее ответят.
Прошел месяц, ответа нет, захожу в YouTube а там 175 просмотра и 4 дизлайка.
Аналитика YouTube говорит, что по ссылке переходили из разных стран. Кто-то из технической поддержки Turkish Airlines слил ссылку в публичный доступ. Во первых — это не профессионально с их стороны, во вторых — стало очевидно что кто-то из просмотревших скорее всего загрузит копию или запишет свое видео о взломе. А значит больше нет смысла держать видео приватным и я решил его опубликовать.
Я открыл видео в публичный доступ, и после этого мне написали с поддержки через Twitter @TK_HelpDesk в лс, а так же сюда. Говорят «мы же тебе ответили 9 числа», поискал, нашел, действительно есть письмо. Но текст его совсем не ответ на мой запрос, а «We would like to state our regret for being unable to respond your feedback in time due to intensity», где они извиняются, что не могут ответить вовремя из-за нагрузки, и ответят позже.
Ответ на мой тикет до сих пор не получен.
Послесловие
Мой совет, если вы разрабатываете интерфейс для терминала, или любого устройства с тачскрином, уделяйте больше внимания на интеграцию вашей программы с самой ОС.
По моему опыту труднее всего было «обойти UI» на устройствах что на базе Windows XP и на Windows CE.
Надеюсь моя статья поможет кому-то делать свои устройства чуть более надежными.
Если вы нашли ошибку в тексте, прошу писать в личные сообщения. Русский не мой родной язык.
Автор: IGHOR