Мобильные телефоны. Они являются нашими постоянными компаньонами, нашими партнерами. Они знают всё о нашей повседневной жизни. Каждый день они собирают и хранят нашу информацию. Мы фотографируем, делимся впечатлениями в социальных сетях, отправляем рабочую и не очень почту, сообщения, совершаем звонки. Благодаря всей этой информации наш телефон становится настоящим сокровищем для злоумышленников.
Производители уверяют нас, что их устройства и данные на оных защищены. Они выпускают обновления безопасности.
Мы тоже предпринимаем шаги для защиты нашей приватности. Любители копаться в своих устройствах устанавливают сторонние прошивки, изучают работу операционной системы, получают root-права, чтобы иметь более глубокий контроль и над своим телефоном, и над ПО, которое они считают полезным и безопасным.
В то же время обычный пользователь, который предпочитает использовать свой телефон таким, каков он есть, устанавливает ПИН-код, сложный пароль или настраивает доступ по отпечатку и пользуется только официальным магазином приложений.
Большинство пользователей верит, что эти меры обеспечивают сохранность их данных. Но так ли это?
Как показал наш эксперимент, в некоторых случаях даже простая зарядка мобильного устройства через USB может грозить серьезными проблемами.
Передача данных
Некоторое время назад я решил провести небольшое исследование и посмотреть, что же происходит, когда вы подключаете ваш телефон к компьютеру.
Обычно, если ваш телефон защищен, компьютер видит только имя телефона. Если же на телефоне не установлен ПИН-код или пароль, то доступ можно получить ко всему содержимому телефона.
Объем данных, передаваемых по USB, зависит от производителя, версии ОС, прошивки устройства. Но данные передаются всегда. Даже если это телефон с последней версией Android (Marshmallow) или iOS 9.
Передача данных – сравнительная таблица
Ниже приведена таблица сравнения объема передаваемых данных между ПК и подключенным мобильным телефоном в момент начального хендшейка.
Обозначения:
DN – Device Name – имя устройства
DM – Device Manufacturer — производитель
DT – Device Type – тип устройства
SN – Serial Number – серийный номер
FW – Firmware info – информация о прошивке
OS – Operating System info – информация об ОС
FS – File system info/file list – информация о файловой системе
ECID – Electronic Chip ID
Устройство | Моб. ОС | Режим | ОС хоста | Объем данных (байт) | Данные |
Nexus 5 | Android 4.4 | MTP (default) | Windows 8.1 | 32 336 | DN, DM, DT, SN, FS |
MTP (unblocked) | Windows 8.1 | 32 155 | DN, DM, DT, SN, FS | ||
MTP + ADB | Windows 8.1 | 11 946 | DN, DM, SN | ||
MTP (default) | Windows 10 | 8 827 | DN, SN | ||
MTP (unblocked) | Windows 10 | 242 206 | DN, SN, FS | ||
MTP + ADB | Windows 10 | 10 582 | DN, SN, FW | ||
MTP (default) | OSX 10.9 | 1 213 | DN, DM, DT, SN | ||
MTP (unblocked) | OSX 10.9 | 581 | DN, DM, DT, SN | ||
Nexus 6 | Android 6.0.1 | Charging only (default) | Windows 8.1 | 8 965 | DN, DM, SN |
MTP (unblocked) | Windows 8.1 | 39 418 | DN, DM, DT, SN, FS | ||
Charging only (default) | Windows 10 | 8 975 | DN, SN | ||
MTP (unblocked) | Windows 10 | 91 342 | DN, SN, FS | ||
Charging only (default) | OSX 10.9 | 14 000 | DN, DM, DT, SN | ||
MTP (unblocked) | OSX 10.9 | 7 674 | DN, DM, DT, SN | ||
Samsung Galaxy S4 | Android 5.0.1 | MTP (default) | Windows 8.1 | 4 098 | DN, DM, DT, SN |
MTP (default) | Windows 10 | 7 740 | DN, DM, DT, SN, FS, FW | ||
Apple iPhone 5 | iOS 9.1 | Default (locked) | Windows 8.1 | 5 001 | DN, DM, SN |
Default (locked) | OS X 10.9 | 83 272 | DN, DM, DT, SN, OS, ECID, device public key | ||
Unblocked + Paired | Windows 8.1 | 1 829 145 | UniqueChipID, device class, iOS version, SessionID, device model, File System total size, File system free space | ||
Unblocked + Paired | OS X 10.9 | 23 223 | DN, DM, DT, SN, OS, ECID, device public key |
В общем и целом мы видим, что данных передается достаточно много.
А что еще?
Во время проведения исследования я наткнулся на одну очень интересную особенность одного очень популярного производителя. Я обнаружил, что тестируемый аппарат во время установки CDC-драйвера (использовался обычный Windows-ПК и стандартный MicroUSB-кабель) устанавливает также COM-порт, обозначая его в качестве модема. На первый взгляд ничего необычного. Однако на этом телефоне был отключен режим модема, как и режимы разработчика и отладки.
К этому COM-порту легко подключиться обычными средствами. Что ж, мы подключились к модему. Или нет? Мы подключились всего лишь к слою, к интерфейсу, позволяющему нам общаться с модемом, но это не прямая связь с ним.
Теперь немного теории. ОС Android состоит из многих слоев. Один из этих слоев – Radio Interface Layer (RIL). Он отвечает за взаимодействие между приложениями Прикладного слоя (например, фреймворк-телефонии) и модемом при помощи специальных команд (отправка и получение).
Дабы не уходить слишком далеко, я не буду описывать подслой RIL Java, который общается с rild-демоном, или Vendor RIL. Назовем все это просто RIL.
Исторически сложилось, что для всех модемов используется набор команд Хайеса, разработанный Деннисом Хайесом в 1981 году. Команды, используемые для общения с модемом, называются АТ-командами. Команды, доступные каждому конкретному модему в смартфоне, зависят от ограничений прошивки, установленных производителем, ограничений RIL-слоя и так далее. Многие производители также расширяют набор команд своими командами. Например, Qualcomm использует синтаксис AT$Q<command>, Infineon – AT+X<command>.
Перейдем к практике. Подключившись к COM-порту, при помощи команд ATI1-9 я могу получить общую информацию о смартфоне и его модеме.
ATI1, например, возвращает информацию о версии ПО смартфона.
ATI2 возвращает IMEI номер. Тут мы видим, что испытуемый аппарат – двухсимочный.
Больше информации доступно при помощи многих других команд.
Копаясь глубже
Поэкспериментировав еще, мы можем узнать все команды, доступные для модема. Необходимо учесть, что далеко не все эти команды работают – они либо запрещены для использования, либо требуют дополнительных параметров и вернут лишь ошибку при попытке использования.
Кстати, команды, специфичные для вендора, не будут отображены в этом списке!
При помощи команды AT+CSQ мы можем узнать текущий уровень сигнала. При помощи других – уровень заряда батареи и многое другое.
Есть еще одна очень интересная команда – стандартная для модемов – она позволяет произвести вызов произвольного номера вне зависимости от того, заблокирован экран или нет. И это работает даже на телефонах, на которых установлена защита и с которых без знания пароля можно всего лишь вызвать экстренные службы.
Также имеются команды, позволяющие считать адресную книгу сим-карты. На тестируемом аппарате считать адресную книгу телефона не удалось, но кто гарантирует, что это не так в случае других аппаратов?
Дальше – хуже
Вы можете подумать: ну и что? Что можно сделать с этой информацией? Но вдумайтесь, вы можете получить информацию о производителе, информацию о прошивке. Этого достаточно для оценки защищенности телефона. Вы можете узнать номер телефона пользователя – позвонив с него на свой номер. Узнав уровень заряда батареи, вы можете прикинуть, как долго он будет заряжаться. Очень даже немало.
Но есть еще кое-что, что можно сделать с этой информацией.
Продолжив исследование, я наткнулся еще на одну команду. Она фактически выполняет перезагрузку телефона в режим обновления прошивки.
Этот режим позволяет злоумышленнику выполнять любые действия с устройством в определенных условиях. Чтобы это проверить, я решил провести эксперимент. Дабы обеспечить его чистоту, я восстановил телефон до заводской прошивки и настроек, чтобы убедиться, что ни один из отладочных интерфейсов недоступен.
Сначала я подключился к телефону.
Затем, при помощи АТ-команд, я вытащил информацию о модели устройства, версии текущей ОС.
Затем последней обнаруженной командой я перезагрузил телефон в режим перепрошивки.
Что дальше?
Руководствуясь информацией, полученной ранее через АТ-команды, я явно идентифицировал устройство.
А дальше я попробовал получить root-права в системе. Я нашел подходящий пакет, запустил приложение обновления прошивки.
Вот что случилось дальше:
Обновление заняло около минуты (файл был очень небольшим).
Затем телефон перезагрузился, и загруженный скрипт выполнил установку root-приложения, после чего прибрал за собой и самоудалился.
Еще одна перезагрузка – и что мы видим?
Все пользовательские данные на месте, но в системе установлено еще одно приложение – SuperSU. Оно не может быть удалено стандартными средствами и имеет доступ с root-правами к файловой системе.
Вся процедура заняла около 3 минут, и это с учетом того, что процесс не был полностью автоматизированным.
Время включить воображение
Теперь предположим, а что если…?
Что если пакет, установленный подобным способом, был бы не общего назначения, а предназначался только для определенной задачи – установки конкретного приложения или изменения конфигурации устройства?
Это позволило бы уменьшить размер пакета и скрипта в несколько раз, сократив таким образом время, требуемое на установку.
А если пакет вместо приложения устанавливает системную службу? А если он устанавливает бэкдор? А если это один из множества троянцев под Android? И установленное ПО работает в фоновом режиме, передавая ваши данные кому-то на другом конце света?
А если он просто включает режим разработчика и ADB и добавляет отпечаток ПК в доверенные? Эти изменения не будут обнаружены, так как фактически не являются вредоносными. Времени это займет отнюдь не много.
И что же мы можем сделать с телефоном через ADB с подключенного ПК?
Ответ: что угодно. Можно устанавливать и удалять приложения, создавать резервную копию сообщений, фото и видео, кэша приложений и файлов данных. И делается это быстро. Можно зашифровать данные и требовать выкуп за возврат данных. Существуют сценарии, когда данные хотят уничтожить, а не похитить – и их можно стереть.
Открывается море возможностей. Предположим, что вы отправились в поездку. Вы только что сошли с рейса длительностью 5-8 часов. Телефон почти разряжен. И тут в аэропорту вы видите станцию зарядки.
Вы подключаетесь, телефон начинает заряжаться, вы оставляете его на полочке или в ящике на 20-30 минут и занимаетесь своими делами.
А теперь взгляните на описанное выше. Как долго, по-вашему, займет выполнение скрипта и скачивание абсолютно всей информации с вашего телефона и/или его заражение?
При помощи этих данных ваше устройство можно взломать, за вами можно следить, а ваши данные могут быть украдены или уничтожены.
Все очень просто.
Заключение
По всему миру существуют сообщества, которые специализируются на изучении особенностей мобильных операционных систем, модифицируют их и публикуют результаты для всеобщего обозрения. Другие люди пользуются результатами работы этих сообществ, чтобы обновить прошивку на своих устройствах. Они могут просто забыть отключить режим разработчика или режим отладки. Кроме того, нет никакой гарантии, что эта прошивка не содержит уязвимостей и закладок.
Несмотря на все усилия производителей смартфонов, абсолютная безопасность мобильных устройств практически недостижима.
Наш эксперимент – очередное тому подтверждение. Он был проведен только при помощи информации, находящейся в публичном доступе в интернете. Эксперимент проводился только на устройствах одного производителя, но никто не может с уверенностью заявить, что похожих способов не существует для других производителей.
Покопавшись еще, я нашел отчет об этой же уязвимости с BlackHat 2014. Шума тогда публикация не подняла, судя по информации из новостных и социальных каналов. Уязвимость до сих пор не исправлена, и проблема существует, даже для самых последних моделей устройств.
Уже работая над статьей, я наткнулся на публикацию ребят, которые в некоторой степени тоже описали эту уязвимость.
Технику кражи данных с подключенного к зараженному компьютеру мобильного устройства использовали, например, в нашумевшей в 2013 году кибершпионской кампании Red October.
О возможности кражи данных с мобильного устройства при его подзарядке с публичных зарядных станций наши эксперты писали еще в 2014 году. Вы можете думать, что это паранойя и никто не будет тратить усилия на создание и размещение вредоносной станции зарядки в аэропорту, кафе или на остановке. Но мы думаем иначе.
Безопасно ли заряжать смартфон через USB?
Костян Михалыч
Не в этом ли кроется причина отзыва иска к компании Эппл со стороны спецслужб США?