Хабрахабр

Символьная уязвимость: как простое сообщение приводит к ошибкам в телефоне

image
Кадр из фильма “Матрица” (1999)

Одна только концепция передачи коротких текстовых сообщений была разработана более 30 лет назад. На фоне возможностей современных смартфонов легко забыть, что мобильная связь — это очень старая технология. Если бы люди занялись созданием SMS в 2018 году, то, вероятно, не стали бы ограничивать одно сообщение 160 символами (в 7-битной кодировке).

Многие ошибки, скрытые и явные, ждут своего часа годами, начиная с далекого мобильного прошлого. Связь наследует не только ограничения, заложенные при создании. Современный смартфон — это своего рода «кремниевое творение Франкенштейна», компоненты которого создаются сторонними компаниями, чей код не полностью контролируют Apple и Google. Со временем к ним добавляются новые аппаратные или программные недочёты.

Достаточно нескольких символов, чтобы буквально погасить экран самого современного гаджета стоимостью более $1000. В таких условиях не удивляет, что один из самых главных недостатков современной связи (а также мобильных приложений и железа) — это наличие простых уязвимостей, приводящих к выводу из строя различных устройств. И сегодня мы подробнее рассмотрим, как это происходит.
Год за годом уязвимость эксплуатируется вновь и вновь.

SMS of death

image
(с)

Многие уже с настороженностью относятся к ссылкам, полученным от неизвестных контактов. Хакеры, исследователи и просто любопытные разработчики всё чаще переключаются с простой социнженерии на поиск более редких атак, которые не требуют сложного взаимодействия с пользователями. Но большинство по-прежнему доверяют простым текстовым сообщениям, полученным в виде SMS или через мессенджер.

Мобильные приложения для корректной работы должны понимать и правильно отображать тысячи символов из сотен языков. Отсутствие ссылки на вредоносный сайт не означает, что ошибку нельзя инициировать другим способом. Идеальное поле для возникновения уязвимостей. А если это редкие языки с необычным написанием?

Проблема возникала на некоторых версиях iOS в приложениях, использующих дефолтный шрифт San Francisсo. Большую известность получила ошибка, связанная с воспроизведением символов Unicode для индийского языка телугу. Если один из символов телугу появлялся во всплывающих уведомлениях, то блокировался SpringBoard — приложение, отвечающее за главный экран в iOS. Получив всего несколько символов జ్ఞా, пользователь терял управление над многими приложениями в iOS, включая почту и Facebook.

Она заключается в последовательном построении иероглифов из элементов письма — глифов, при этом имеется определенное расположение символов, не характерное для языка. Ошибка изменения символов, приводящая к краху системы, кроется в особенности языка телугу, бенгали и некоторых других диалектов. Вследствие несовместимости глифов возникает ошибка, которую не может обработать процессор устройства. К сбою приводит преобразование соединительных суффиксов в согласных: когда вторую согласную букву слоговой алфавитной письменности телугу присоединяют к первой согласной для объединения без значительного изменения формы слова.

Часть подобных ошибок связана с особенностью сокращения длинных сообщений на экране. Другое текстовое сообщение — للصبللصبرر ॣ ॣ h ॣ ॣ 冗 — также приводит к сбою в iPhone. Если некоторые символы поместить в середине текстового сообщения, написанного на нелатинском языке, включая арабский и китайский, то удастся вызвать сбой системы и перезагрузку телефона.

Core Text генерирует глифы и позиционирует их относительно друг друга. В перечисленных случаях виновником был не просто Unicode, а Core Text — система, которую Apple использует для вывода символов на экран телефона на основе найденных в Unicode тегов. Правила наложения глифов один на другой четко описаны в форматах TrueType и OpenType.

Когда Core Text пытается сделать то, что, как ему кажется, означает инструкция, процесс быстро начинает использовать всё свободное количество ОЗУ. В случае ошибки Core Text «думает», что Unicode «просит» его сделать то, что он буквально не может сделать — отобразить несуществующий символ и создать бесконечное количество графем. iPhone «видит», что используется слишком много памяти, и закрывает «виноватый» процесс — Springboard, рабочий стол телефона.

Наследие прошлого

image
(с)

Некоторая особенность работы с символами сразу закладывалась как «фича», чтобы получить доступ к расширенным данным о сети или телефоне с помощью специальных кодов. Уязвимость существует ровно столько же, сколько существуют текстовые сообщения в мобильной сети. Например, сейчас на Android код * # * # 4636 # * # * открывает доступ к разнообразной информации, включая расширенные показания батареи и данные по Wi-Fi подключению.

Возможно, вы застали тот момент (2002 год), когда сотовые телефоны Siemens «убивались» простым текстовым сообщением, содержащим символы вроде "%English" (либо другое слово из языкового меню телефона вместе с кавычками и символом %).

Текст %English интерпретировался телефоном как команда смены языка меню. Когда интерпретатор телефона получал SMS-сообщение и приступал к разбору его текста, он сталкивался с записью, идентичной какой-либо сервисной команде. Телефон пытался выполнить эту команду, но не мог, так как процессор был занят непосредственным чтением текста сообщения.

Используя определенные комбинации Unicode-символов, можно было удаленно отключить или «подвесить» телефон. Многие модели Nokia, Siemens, Motorola, LG были подвержены атакам через SMS со специальными текстами.

Модели Nokia 6210, 3310, 3330 можно было удаленно отключить, послав SMS-сообщения с одним из следующих текстов:

M:::::. 0x04 0x05 0x15 0х8А
%RPT
%I:::::. G

Модели Motorola с350 и с100 зависали от такого текста:

0x04 0x05 0x15 0х8А

В коде изображения прописывались специальные символы, которые телефон не мог «прочитать», что приводило к краху системы: Кроме того, активно эксплуатировалась возможность передавать графику через SMS.

%IMG………………
………………………
…………………….

Если вместо символов, которые интерпретатор позже сможет преобразовать в изображение, указать произвольную последовательность байтов, обычно не используемую для кодирования изображений, то в большинстве случаев это приведет к зависанию телефона. Символы %IMG означали, что вслед за ними на экране будет выведено изображение.

Самые масштабные уязвимости

image
(с)

Для этого достаточно было перегрузить поле ввода пароля большим количеством символов. Все устройства под управлением пятой версии Android были подвержены уязвимости, при которой происходили отказ системы и разблокирование без ввода пароля на экране блокировки.

Ошибка, получившая название ”Stagefright” в честь медиа-библиотеки, оказалась одной из самых больших дыр в системе безопасности Android версий 2. Другая атака затронула 95 % устройств на Android — около 950 миллионов гаджетов в 2015 году. 2 и выше.

При этом пользователь мог не знать, что его устройство скомпрометировано — вредоносное MMS можно было удалить дистанционно. Чтобы украсть данные или перехватить управление над микрофоном и камерой, требовалось лишь отправить мультимедийное сообщение в виде MMS с вредоносным ПО. Уязвимость крылась в коде C++ библиотеки Stagefright, обрабатывавшей несколько популярных медиаформатов с ошибочным обращением к памяти.

Две стороны одной уязвимости

image

Но бывают исключения. Обычно речь идет об узконаправленных атаках, которые затрагивают лишь одну версию приложения или только одну платформу. Однако устройства Android, на которых использовался браузер Chrome, также начинали работать нестабильно и сильно нагревались. Так, специально для браузера Safari на устройствах Apple был создан сайт crashsafari.com, URL-адрес которого с помощью сгенерированной очень длинной строки символов в поле адреса перезагружал браузер, а с ним и всё устройство.

Текстовое сообщение из четырех символов, расставленных в определенной последовательности, приводило к проблемам на iOS 10. Была еще одна ошибка, сработавшая одновременно для iOS и Android. iPhone зависал, как только получал текст, даже если пользователь не открывал или не читал сообщение. Это белый флаг в эмодзи, невидимый символ VS16 (вариативный сектор 16), ноль и еще один символ эмодзи — радуга.

После получения гаджетом подобного сообщения iMessage пытается совместить два смайлика в один, но VS16 включает в связку еще и цифру ноль, отчего устройство не справляется с обработкой команды и зависает. Команда VS16 автоматически объединяет несколько смайликов в один специфический, который невозможно найти в стандартном наборе эмодзи.

Однако её удалось использовать только в WhatsApp: устройство зависнет, если в WhatsApp открыть вредоносное сообщение. Оказалось, что некоторые телефоны Android также подвержены этой ошибке.

Складывается впечатление, что символьная уязвимость остается самой распространенной и долгоживущей ошибкой всех мобильных телефонов. Но есть верный способ защиты — не пропускать обновления безопасности и самостоятельно следить за актуальностью установленной версии ОС.

Теги
Показать больше

Похожие статьи

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»
Закрыть