На протяжении последних нескольких лет набирает популярность концепция connected car — автомобили с доступом в интернет. Речь идет не только о инфо-мультимедиа системах (музыка, карты, фильмы на борту доступны на современных автомобилях премиум сегмента), но и о ключевых как в прямом, так и в переносном смысле системах автомобиля. С помощью специализированных мобильных приложений можно получить координаты автомобиля, его маршрут, открыть двери, запустить двигатель, включить вспомогательные устройства. С одной стороны, это чрезвычайно полезные возможности, которыми пользуются уже миллионы людей, с другой стороны – окажись у угонщика доступ к мобильному устройству жертвы, на котором установлено такое приложение, разве угон авто не станет сущим пустяком?
В поисках ответа на этот вопрос мы решили разобраться, что действительно может сделать злоумышленник, и как владельцы машин могут избежать возможных проблем.
Потенциальные угрозы
Следует сказать, что такие приложения довольно популярны: аудитория приложений от наиболее популярных брендов колеблется от нескольких десятков тысяч до нескольких миллионов пользователей. Ниже для примера показаны несколько приложений с числом их установок.
Для экспериментов мы взяли несколько приложений для управления различными марками автомобилей. Не будем раскрывать их названия, но отметим, что в ходе нашего исследования уведомляли разработчиков о его результатах.
Мы рассмотрели каждое приложение со следующих позиций:
- Содержит ли оно потенциально опасные возможности, то есть можно ли с его помощью угнать автомобиль или вывести из строя одну из его систем.
- Использовали ли создатели приложения средства, усложняющие реверс инжиниринг приложения (обфускацию или упаковку). Если нет, то злоумышленнику не составит труда прочитать код приложения, найти его узкие места и с их помощью пробиться к инфраструктуре авто.
- Есть ли у приложения проверка на наличие root-прав на устройстве (с последующим отказом от установки в случае положительного результата). Ведь если вредоносной программе удается заразить рутованное устройство, ее возможности становятся практически безграничными. В этом случае важно понять использовали ли создатели сохранение учетных данных пользователя на устройстве в виде Plaintext.
- Есть ли у приложения проверка, что после его запуска именно его интерфейс показывается пользователю (защита от перекрытия). Android позволяет отслеживать какое приложение в данный момент показывается пользователю, вредоносная программа может это событие перехватить – показав пользователю фишинговое окно с идентичным интерфейсом – и украсть, например, учетные данные пользователя.
- Есть ли у приложения контроль целостности, т.е. проверяет ли оно себя на предмет изменений в коде. От этого зависит, например, сможет ли злоумышленник взять и внедрить свой код в приложение, а затем разместить его в магазине приложений, сохранив при этом функциональность и работоспособность оригинала.
К сожалению, все приложения оказались так или иначе уязвимы к атакам.
Начинаем тестирование автомобильных приложений
Для исследования мы взяли семь наиболее популярных приложений от известных брендов и проверили их на предмет слабых мест, которыми могут воспользоваться злоумышленники для доступа к инфраструктуре автомобиля.
Результаты тестирования собраны в сводной таблице, плюс мы отдельно описали особенности каждого приложения с точки зрения безопасности.
Приложение | Возможности приложения |
Обфускация кода приложения |
Нешифрованные логин или пароль |
Защита от перекрытия окна приложения |
Есть ли детект прав root |
Проверка целостности приложения |
Приложение №1 | открытие дверей | нет | да (логин) | нет | нет | нет |
Приложение №2 | открытие дверей | нет | да (логин и пароль) | нет | нет | нет |
Приложение №3 | открытие дверей, запуск двигателя | нет | — | нет | нет | нет |
Приложение №4 | открытие дверей | нет | да (логин) | нет | нет | нет |
Приложение №5 | открытие дверей, запуск двигателя | нет | да (логин) | нет | нет | нет |
Приложение №6 | открытие дверей, запуск двигателя | нет | да (логин) | нет | нет | нет |
Приложение №7 | открытие дверей, запуск двигателя | нет | да (логин и пароль) | нет | нет | нет |
Приложение №1
Механизм регистрации автомобиля в приложении сводится к вводу логина и пароля пользователя, а также VIN автомобиля. При этом в приложении есть PIN, который надо ввести в систему автомобиля штатными средствами для завершения «привязки» смартфона к машине. Поэтому одного лишь VIN недостаточно для открытия дверей авто.
Приложение не проверяет, есть ли на устройстве root, и при этом хранит логин от сервиса в открытом виде в файле accounts.xml вместе с ним и VIN от авто. При наличии у троянца прав суперпользователя на привязанном смартфоне эти данные очень легко украсть.
Приложение №1 легко декомпилировать, код можно разобрать. Кроме того, оно никак не противодействует перекрытию собственного интерфейса, а значит логин и пароль можно увести при помощи фишингового приложения, состоящего из 50 строчек кода. Достаточно проверить какое приложение запущенно в данный момент и, если приложение с целевым именем пакета, то запустить своё Activity c аналогичным интерфейсом.
Для проверки отсутствия контроля целостности мы модифицировали метод loginWithCredentials
В данном случае логин и пароль просто отобразятся на экране телефона, но ничего не помешает встроить отправку учетных данных на сервер злоумышленников.
Отсутствие проверки на целостность позволяет любому желающему взять приложение, модифицировать его на своё усмотрение и начать раздавать потенциальным жертвам. Проверки подписи очень не хватает. Конечно такая атака потребует от злоумышленника определенных усилий – нужно заставить пользователя скачать модифицированную версию приложения. Но зато она носит очень скрытый характер, пользователь ничего не заметит, пока его машину не уведут
Из приятного: приложение тащит с собой сертификаты SSL и осуществляет соединение с их помощью. В целом это разумно – предотвращает атаку типа Man-in-the-Middle.
Приложение №2
Приложение предлагает сохранить учетные данные пользователя, но при этом рекомендует произвести шифрование всего устройства на случай кражи. Разумно, но мы красть телефон не собираемся – мы его «заразили». В результате та же беда что и в приложении №1 – хранение логина вместе с паролем в открытом виде в файле prefs.{?????????}.xml (знаки вопроса – случайные символы, сгенерированные приложением):
В соседнем файле лежит и VIN:
Дальше – больше. Разработчики тоже не удосужились сделать проверку целостности кода приложения и про обфускацию тоже почему-то забыли. В результате нам легко удалось модифицировать код LoginActivity:
Таким образом приложение сохранило свою функциональность, но указанные нами при регистрации логин и пароль были выведены на экран смартфона сразу после попытки входа в систему.
Приложение №3
Автомобили, относящиеся к этому приложению, по желанию заказчика комплектуются модулем управления, который может запустить двигатель и открыть двери. Его устанавливает дилер при этом каждый модуль комплектуется стикером с кодом доступа, который выдается на руки владельцу машины. Поэтому привязать автомобиль, зная его VIN, к чужим учетным данным не удастся.
Однако есть другие возможности для атаки: во-первых, приложение очень маленькое, всего 180 килобайт в APK-виде, во-вторых всё приложение обложено отладочной печатью в лог-файл, который сохраняется на SD карту.
Логирование в начале LoginActivity
Место, куда сбрасывается лог
Незадача заключается в том, что логирование работает только в том случае, если приложение имеет флаг android:debuggable=»true». В публичной версии приложении этого флага по понятным причинам нет, но нам ничего не помешает его туда вставить; для этого воспользуемся инструментом Apktool. После запуска отредактированного приложения и попытки зайти в систему на SD-карте устройства будет создана папка marcsApp с файлом TXT. В нашем случае в этом файле были записаны и логин, и пароль от учетной записи:
Конечно, заставить жертву удалить оригинальное приложение и установить точно такое же, но с флажком отладки, не так уже и просто. Но такую рокировку можно провернуть, например, приведя жертву на сайт, где под видом критического обновления размещены отредактированное приложение и инструкция по его установке. Опыт показывает, что вирусописатели хорошо владеют подобными методами социальной инженерии. Ну а для добавления в приложение функции отсылки лог-файла на заданный сервер или на номер телефона в виде SMS много ума не надо.
Приложение №4
Приложение позволяет подцепить существующий VIN к любым учетным данным, но сервис обязательно пошлёт запрос на бортовой компьютер автомобиля. Посему простейшая кража VIN не поможет вскрыть машину.
Однако исследуемое приложение беззащитно перед перекрытием своего окна, и если благодаря этому у злоумышленника окажутся логин и пароль от системы, он сможет открыть авто.
К сожалению, приложение хранит в открытом виде логин от системы, равно как и много другой интересной информации, такой как модель авто, VIN, номер авто. Всё это расположено в файле MyCachingStrategy.xml.
Приложение №5
Для того чтобы привязать автомобиль к смартфону, на котором установлено это приложение, необходим PIN-код, который сообщит бортовой компьютер авто. Значит, как и в случае с предыдущим приложением, одного VIN недостаточно, требуется доступ внутрь автомобиля.
Приложение №6
Приложение от российских разработчиков, концептуально отличающееся от своих аналогов тем, что в качестве авторизации используется номер телефона владельца. Такой подход создает немалый риск для владельца автомобиля: для начала атаки нужно выполнить одну API функцию Android и получить в результате логин к системе.
Приложение №7
Из особенностей последнего рассмотренного приложения стоит отметить хранение логина и пароля в открытом виде в файле credentials.xml.
Успешное заражение смартфона троянцем с правами суперпользователя позволит без особого труда украсть этот файл.
Возможности для угона автомобиля
В теории, после кражи учетных данных злоумышленник сможет получить контроль над автомобилем, однако это не означает, что преступник сможет просто так его угнать. Дело в том, что для того чтобы тронуться на авто обязательно наличие ключа, поэтому, попав внутрь машины, угонщики используют блок программирования и записывают в борт управления авто новый ключ. А теперь вспомним что почти все описанные приложения позволяют разблокировать двери, т.е. снять машину с охранной сигнализации. Таким образом злоумышленник проделает все необходимые для угона операции скрытно и быстро, не надо ничего ломать или сверлить.
Также не следует ограничивать риски владельца одним лишь угоном. Получив доступ к авто, его можно испортить так, что жертва попадет в аварию и может получить серьёзные травмы или погибнуть.
Ни одно из рассмотренных нами приложений не имеет защиты. Однако надо отдать должное разработчикам приложений и сервисов – очень хорошо, что для управления авто ни в одном из описанных случаев не были использованы голосовые или SMS каналы. Однако именно такими средствами пользуются aftermarket изготовители охранных сигнализаций, в том числе и в России. С одной стороны, ничего удивительного в этом нет, качество мобильного интернета не всегда и не везде позволяет авто быть онлайн, в то время как голосовые вызовы и SMS как базовые функции будут доступны. С другой стороны, это создает дополнительные угрозы безопасности авто, рассмотрим, какие именно.
Голосовое управление происходит с помощью так называемых DTMF команд. Владельцу нужно в прямом смысле слова позвонить автомобилю, охранная сигнализация ответит на входящий звонок и приятным женским голосом сообщит статус автомобиля, после чего перейдёт в режим ожидания команды от владельца. Для того чтобы заставить авто открыть двери или запустить мотор, достаточно будет набрать соответствующие цифры на клавиатуре телефона. Сигнализация распознает коды и выполнит нужную команду.
Создатели таких систем позаботились о безопасности и предусмотрели список разрешенных номеров, которым позволено управлять авто. Однако никто не подумал о ситуации, когда телефон владельца скомпрометирован. То есть злоумышленнику достаточно заразить телефон жертвы примитивным приложением, которое от ее имени будет звонить охранной сигнализации. Если при этом отключить звук динамика и экран, можно управлять автомобилем полностью незаметно для жертвы.
Конечно, не всё так просто, как может показаться на первый взгляд. Например, многие автолюбители сохраняют номер охранной системы под вымышленным именем, т.е. для успешной атаки необходимо, чтобы жертва часто взаимодействовала с авто через звонки. Только так злоумышленник, укравший историю исходящих вызовов, может найти номер авто в списке контактов жертвы.
Создатели другого способа управления охраной авто – при помощи SMS-команд – точно не читали ни один из наших обзоров по безопасности устройств на базе платформы Android. Дело в том, что первыми и самыми многочисленными мобильными троянцами, с которыми боролась «Лаборатория Касперского», были SMS-троянцы. То есть зловреды, содержащие в своём коде возможность скрытой отправки SMS; причем такая отправка осуществлялась как в ходе штатной работы троянца, так и по удаленной команде злоумышленников. В результате, для того, чтобы открыть двери авто жертвы, хозяевам зловреда достаточно выполнить три действия:
- Перебрать всё SMS на смартфоне на предмет команд автомобилю.
- В случае обнаружения нужных SMS, извлечь из них номер телефона и пароль доступа.
- Послать на обнаруженный номер SMS с текстом, открывающим двери авто.
Все три операции троянец может проделать втайне от жертвы, единственная сложность, с которой, впрочем, злоумышленники умеют справляться, — это заражение смартфона.
Заключение
Автомобиль — вещь дорогая, и к его безопасности нужно подходить не менее тщательно, чем к безопасности банковского счета. Разумеется, понятна позиция автопроизводителей и разработчиков, которые стараются оперативно выпускать на рынок приложения с новыми возможностями для удобства владельцев машин. Однако думая о безопасности connected car не стоит ограничиваться безопасностью инфраструктуры (серверов управления), каналами взаимодействия авто и инфраструктуры. Стоит также обратить внимание на сторону клиента, в частности на приложение, которое в данный момент находится у пользователей. Сейчас его слишком просто обернуть против его владельца, и это, возможно, сейчас самое узкое место, на которое могут нацелится злоумышленники.
Тут следует сказать, что пока мы не видели ни одного случая атак на приложения для управления авто, ни один из тысяч обнаруженных нами новых зловредов пока не содержал код для скачивания файлов конфигурации таких приложений. Однако современные троянцы весьма гибкие, если сегодня один такой троянец показывает персистентную рекламу (которую пользователь сам никогда не сможет удалить), то завтра он по команде злоумышленников загрузит на C&C конфигурационный файл от автоприложения. Или удалит его и поставит поверх другое – модифицированное. Как только это станет финансово выгодно злоумышленникам, новые возможности для самых обычных мобильных троянцев не заставят себя ждать.
Мобильные приложения и угон автомобиля