Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

articles:java-mobile [2017/09/05 02:55] (текущий)
Строка 1: Строка 1:
 +====== java-mobile ======
 +<​sub>​{{java-mobile.odt|Original file}}</​sub>​
 +
 +====== java на мобильных телефонах — атаки и угрозы ======
 +
 +крис касперски,​ no-email
 +
 +**многие компании активно используют сотовые телефоны в служебных целях, доверяя им не только связь, но и конфиденциальную информацию,​ совершенно не задумываясь о возможных последствиях. практически все модели телефонов содержат серьезные дефекты в системе безопасности и количество хакерских атак на них неуклонно****растет. наибольшую угрозу представляют ****java-****мидлеты скачиваемые пользователями из различных ненадежных источников в полной уверенности,​ что "​безопасная"​ ****java ****не позволит им сделать ничего дурного. настало время развеять это заблуждение!**
 +
 +===== введение =====
 +
 +За последние несколько лет сотовые телефоны резко "​поумнели"​. Сначала они обзавелись быстрыми процессорами и емкой энергонезависимой памятью,​ затем в них появились встроенные фото/​видеокамеры и протоколы,​ ориентированные на передачу больших объемов данных через Интернет. Фактически,​ телефон превратился в миниатюрный компьютер,​ а компьютеру,​ как известно,​ нужны программы и программы вскоре пошли косяками — игры, записные книжки,​ органайзеры,​ платежные системы,​ картографические приложения,​ средства навигации…
 +
 +А вслед за программами подтянулись вирусы,​ черви и троянские кони.
 +
 +===== источники угрозы =====
 +
 +Сотовый телефон — это своеобразный электронный кошелек. Микро-платежи через SMS уже давно перестали быть новостью и, чтобы пополнить свой счет, достаточно просто зарегистрировать платный номер и создать мидлет,​ рассылающий SMS без ведома владельца аппарата. Но это все так, мелочи. Электронные платежные системы типа WebMoney, осуществляющие подтверждение транзакции путем отправки запроса на сотовый телефон,​ могут быть хакнуты нечестным мидлетом,​ позволяющим злоумышленнику оплачивать покупки из своего кармана или (при желании с его стороны) выгребать все электронные счета под чистую,​ наскоро выводя деньги из платежной системы и тут же обналичивая их, чтобы не быть пойманным.
 +
 +Информация из записной книжки представляет огромный интерес как для журналистов типа "​папараци",​ так и для лиц, занимающихся промышленным шпионажем,​ поскольку,​ позволяет не только установить телефоны влиятельных лиц, но и узнать некоторые "​интимные"​ подробности их жизни, существенно упрощающие "​психологические"​ атаки типа социального инженеринга.
 +
 +Фотографии,​ снятые встроенной камерой,​ это настоящая кладезь информации. Очень часть сотовый телефон используется для оперативной съемки "​интересных"​ событий или технологических процессов,​ не предназначенных для посторонних глаз, не говоря уже про портреты в стиле "​ню",​ которые (если хорошо покопаться) можно найти практически у каждого. Наличие высокоскоростных сетевых протоколов позволяют зловредным мидлетам скрытно передавать содержимое памяти телефона на какой-нибудь анонимный ftp/​smtp-сервер или на другой сотовый телефон.
 +
 +Наконец,​ аппарат может быть "​порабощен"​ спаммером,​ рассылающим SMS-сообщения или даже обыкновенные письма через протокол GPRS. Ну и что с того, что GPRS это медленно?​! Ведь трафик все равно не свой, а система защиты в сотовых телефонах намного слабее,​ чем в персональных компьютерах.
 +
 +Вы видели сотовый телефон с антивирусом?​! А заплатки когда последний раз устанавливали?​ И брандмауэра,​ надо полагать,​ у вас тоже нет! Одна надежда на встроенную систему безопасности,​ которую мы сейчас рассмотрим во всех подробностях.
 +
 +===== безопасность сотовых телефонов =====
 +
 +С высоты птичьего полета архитектура J2ME для CLDC-устройств выглядит следующим образом (см. рис. 1). Но для начала несколько пояснений касающихся используемой терминологии (наплодили тут аббревиатур,​ понимаешь!). Сокращение J2ME расшифровывается как "Java 2 Platform, Micro Edition"​то есть Java-платформа версии 2, специальная редакция микро-устройств. CLDC, в свою очередь означает:​ Connected Limited Device Configuration (Конфигурации Коммуникационных Устройств с Ограниченными Ресурсами). В общем, Java для мобильных телефонов,​ КПК и смартфонов.
 +
 +J2ME-приложение,​ называемое мидлетом (от англ. MIDlet), начинает свой жизненный путь с предверификатора (preverifier),​ анализирующего байт-код на предмет выявления откровенно "​левых"​ вещей.
 +
 +Проверенный байт-код передается в MIDP — Mobile Information Device Profile (Профиль для Мобильного устройства с Информационными функциями),​ в сферу компетенции которого входят следующие функции:​
 +
 +  - жизненный цикл мидлета (инсталляция,​ удаление,​ обновление,​ запуск,​ остановка,​ пауза, возобновление работы);​
 +  - безопасность и авторизация доступа к защищенным функциям (например,​ коммуникационным);​
 +  - графический интерфейс (в том числе низкоуровневый,​ пригодный для программирования игр);
 +  - ввод команд пользователя (например,​ посредством клавиатуры);​
 +Для абстрагирования от конкретного оборудования MIDP обращается к CLDC-библиотеке,​ экспортирующей все жизненно важные функции (кстати говоря,​ CLDC версии 1.0 не поддерживала плавающей арифметики и ее — там где она нужна — приходилось эмулировать непосредственно самому мидлету).
 +
 +Байт-код (включая код библиотеки CLDC) исполняется на виртуальной Java-машине,​ обозначаемой аббревиатурой KVM (K-Virtual Machine, буква "​K"​ по-видимому никак не расшифровывается),​ а сама виртуальная машина опирается на API-функции операционной системы (Operating System), натянутой поверх аппаратного обеспечения (Hardware).
 +
 +Для увеличения производительности,​ Java-машина оптимизирует код (компонент Java code Compact или, сокращенно,​ JCC), применяя вполне традиционные алгоритмы оптимизации общие для всех языков. Собственного названия удостоилась лишь одна технология — ROMizing ("​ромизация"​),​ обеспечивающая упреждающую предзагрузку и связывание (prelink) классов,​ что замедляет загрузку,​ но увеличивает производительность мидлета во время его выполнения.
 +
 +{{java-mobile_Image_0.png}}
 +
 +Рисунок 1 схематическое устройство мобильной версии Java-машины
 +
 +Теперь,​ разобравшись с основными концепциями,​ перейдем к реальным атакам на сотовые телефоны,​ рассмотрев самые интересные (и актуальны из них).
 +
 +===== рассылка SMS =====
 +
 +Разработчики сотовых телефонов позволили мидлетам рассылать SMS-сообщения путем вызова специальной API-функции,​ на "​аппаратном уровне"​ выводящий запрос на подтверждение,​ который никак нельзя отключить,​ что вполне логично. Пользователь должен знать, что происходит с его аппаратом.
 +
 +Известное изречение гласит:​ защита как столб — ее трудно перепрыгнуть,​ но легко обойти. И точно! Хакерской группе "The Phenoelit Hackers group" удалось найти брешь в обороне Siemens S55. Вывести запрос на подтверждение ("​allow SMS 15142467980 – Yes/​No"​) конструкторы вывели,​ а вот заблокировать дисплей забыли,​ в результате чего мидлеты получили возможность перезаписать оригинальный текст, заменив ее каким-нибудь безобидным вопросом в стиле "Wanna Play?" ("​Ну,​ что, будем играть или как?"​). Пользователь нажимает "​Yes"​ и SMS-сообщение скрытно уходит адресату.
 +
 +{{java-mobile_Image_1.png}}
 +
 +Рисунок 2 подмена оригинального запроса отправки SMS на предложение сыграть в игру
 +
 +Проверка остальных телефонов показала,​ что данная уязвимость затрагивает и весь модельный ряд от Siemens'​а,​ распространясь не только на SMS, но и другие запросы на подтверждение.
 +
 +{{java-mobile_Image_2.png}}
 +
 +Рисунок 3 телефоны Siemens по атакой
 +
 +А вот у телефонов Motorola V600 и Nokia 3600 в этом отношении все нормально,​ поскольку они блокирует дисплей перед выводом любых запросов на подтверждение:​
 +
 +Void PermissionDialog(...)//​ запрос на подтверждение отправки SMS
 +
 +{
 +
 +
 +
 +PermissionForm.setCommandListener(this);​
 +
 +
 +
 +// блокировка дисплея от изменений
 +
 +displayManager.**preemptDisplay**(token,​ this, form, true);
 +
 +}
 +
 +private void SetAnswer(...)//​ отправка SMS
 +
 +{
 +
 +
 +
 +// снятие блокировки с дисплея
 +
 +displayManager.**donePreempting**(preemptToken);​
 +
 +notify();
 +
 +}
 +
 +Листинг 1 фрагмент Java-кода,​ выдранный из Motorola V600,​ обеспечивающий защиту запроса на подтверждение отправки SMS
 +
 +===== грабим склады и хранилища =====
 +
 +Когда мидлету требуется сохранить некоторые данные в энергонезависимой памяти,​ то он это делает не напрямую,​ а через специальный интерфейс,​ обеспечивающий управление хранилищами (Record Stores).
 +
 +Каждый мидлет может иметь одно или более хранилищ,​ а, начиная с MIDP 2.0,​появилась поддержка разделяемых хранилищ,​ к которым могут обращаться сразу несколько мидлетов.
 +
 +Физически хранилища представляют собой группы записей (Record), а записи есть ни что иное как обыкновенные массивы байт. Доступ к хранилищем осуществляется по уникальному имени, состоящему из: имени производителя (Vendor Name), имени мидлита (MIDlet Suite Name) и имени записи (Record Store Name). Записи,​ принадлежащие различным миделетам,​ могут иметь совпадающие имена и никакой неоднозначности тут не происходит (точно как разные каталоги могут содержать одноименные файлы).
 +
 +Хранилищами заведует Система Управления Записями — Record Management System или, сокращенно,​ RMS, гарантирующая что данные одного мидлета не попадут к остальным без его согласия. Программисты,​ уверенные в непогрешимости защиты,​ сплошь и рядом помешают в хранилища секретные данные,​ надеясь,​ что никакой хакер их не утянет.
 +
 +
 +
 +{{java-mobile_Image_3.png}}
 +
 +Рисунок 4 использование низкоуровневого API для доступа к чужим хранилищам
 +
 +В действительности,​ большинство производителей реализуют RMS-системы на языке Java, предоставляя высокоуровневые API-функции (High level MIDP API), вызываемые мидлетами и выполняющие все необходимые проверки (см. рис. 4). Однако,​ если спуститься на одну ступеньку вглубь,​ мы обнаружим низкоуровневые API-функции (Low level API), так же доступные мидлетам и позволяющие обращаться к любому хранилищу без каких бы то ни было проверок вообще (в первую очередь следует обратить внимание на класс RecordStoreFile,​ название которого готовит за себя).
 +
 +Кстати говоря,​ хранилища обычно размещаются в одном из файлов и потому доступы для просмотра через штатный проводник или функции файлового ввода/​вывода. Теоретически,​ хранилища должны быть зашифрованы,​ чтобы никакой мидлет не смог добраться к ним через файловую систему,​ однако,​ в некоторых телефонах они хранятся в открытом виде! В частности,​ на Nokia 3650 хранилища сосредоточены в файле rms.db, находящемся в текущем каталоге мидлета (т.е. лежат там же, где и Jad/​Jar-файлы),​ что делает их легкой жертвой для атаки.
 +
 +{{java-mobile_Image_4.png}}
 +
 +Рисунок 5 незашифрованный файл rms.db на Nokia 3650
 +
 +===== заключение =====
 +
 +Мы рассмотрели только две разновидности атак на мобильные устройства,​ а всего же их существует более сотни и буквально каждый месяц появляются новые. Так что не спешите выкидывать свой телефон на помойку,​ если в нем обнаружена уязвимость. Где гарантия,​ что другой аппарат окажется лучше?
 +
 +Единственный выход — скачивать мидлеты _только_ из надежных источников,​ желательно многократно проверенных на друзьях и знакомых. Конечно,​ это не защит от атак на 100%, но существенно снизит их вероятность.
 +
 +