«Смертоносное» сообщение с приглашением к обмену файлами по Bluetooth

Большинство пользователей сотовой связи не догадываются, что популярный и удобный коммуникационный сервис Bluetooth, может нести в себе почти «смертельную» опасность для их мобильного телефона. Передача и прием сообщений по Bluetooth для многих моделей аппаратов может оказаться почти фатальной. Представьте себе, в один прекрасный момент на экране вашего устройства может появиться сообщение о том, что некто хочет подключиться, чтобы передать какую-либо картинку, мелодию или исполняемое приложение.

Разумеется, большинство пользователей, особенно после прочтения данной статьи, от подобного предложения откажутся, памятуя о том, что эти файлы могут содержать вирус. Но не все так просто. Если злоумышленник благодаря вашей аккуратности не смог заразить ваш телефон, то он все же может вывести его из строя. Конечно, это относится не ко всем моделям телефонов.

Дело в том, что даже если вы не открыли стандартное сообщение типа «Принять файл от XXX по Bluetooth?», появившееся на экране вашего телефона, аппарат может «зависнуть». Причем вместо XXX может стоять совершенно невообразимая последовательность символов, например: $%#.. ^.

Таким образом, желаете вы того или нет, а ваш телефон с включенным Bluetooth-передатчиком в любой момент может быть выведен из строя. Ведь вам, как пользователю мобильного устройства, необязательно принимать или отклонять предложение получить файл -телефон отключится и без вашего участия.

Уязвимость, используемая данной атакой, заключается в неправильной интерпретации многими мобильными телефонами имени подключаемого устройства.

Рассмотрим природу данной уязвимости более подробно. Имя устройства согласно стандарту Bluetooth кодируется в формате UTF-8. Это означает, что имя телефона, присвоенное его владельцем при настройке Bluetooth, записывается в памяти в виде специальной последовательности байт, которая интерпретируется всеми устройствами Bluetooth именно как UTF-8 формат. Поддержка иного формата кодирования изначально не предусмотрена самим стандартом Bluetooth. Эта последовательность байт при отображении на экране мобильного телефона трансформируется в графическое изображение символов. В формате UTF-8 могут кодироваться любые символы, существующие в мире. Это могут быть даже китайские иероглифы или специальные символы, например:

% & * # ^ $

Тем не менее, некоторые интерпретаторы никак не ожидают увидеть в имени устройства символы, которые изначально нельзя даже набрать, используя клавиатуру мобильного телефона. Более того, интерпретаторы не производят никакой проверки на наличие неподдерживаемых символов. Конечно, так обстоит дело не со всеми моделями, а лишь с теми, в прошивке которых имеются недоработки. С другой стороны, понять разработчиков мобильных телефонов можно — они просто не ожидают, что в имени телефона, запрашивающего соединение по Bluetooth, может быть символ, который в принципе невозможно ввести с клавиатуры. Список таких «непредусмотренных» символов достаточно велик и варьируется достаточно сильно в зависимости от модели.

Для проведения подобной атаки злоумышленники, как правило, используют ноутбук с установленной операционной системой типа UNIX и Bluetooth-передатчиком.

Дело в том, что обычному пользователю работать под UNIX не так просто, как в среде Windows. UNIX — это операционная система, которая помимо графического режима, привычного для пользователей Windows, обладает мощными возможностями командного языка.

Она требует значительных умений и знаний, но при этом наделяет возможностями выполнять практически любые настройки и адаптировать систему, что называется, «под себя».

Кратко рассмотрим необходимые аспекты, которые помогут понять абоненту сотовой связи, с помощью каких технических средств на него ведется охота.

Для работы с Bluetooth-адаптером под операционной системой UNIX злоумышленник использует специальные средства, одним из которых является пакет Bluez, который он скачивает из Интернета.

Возможности работы с Bluetooth-адаптером под операционной системой UNIX с помощью пакета Bluez еще не раз будут рассматриваться далее вместе с указанием на то, как ими пользуются злоумышленники.

Очевидно, что основной задачей злоумышленника является подмена имени устройства Bluetooth таким образом, чтобы в нем содержались символы, которые не могут интерпретироваться атакуемым телефоном. Присвоить такое имя с помощью одной из стандартных утилит из пакета Bluez невозможно ввиду того, что эти утилиты явно блокируют присвоение имени с неверными для Bluetooth символами. Для этого злоумышленнику приходится прибегать к созданию собственных утилит, которые, тем не менее, используют системные вызовы, определенные в Bluez-пакете. Именно эти системные вызовы предоставляют возможность присвоения имен.

К одним из таких системных вызовов относится вызов hci_send_ cmd. Этот системный вызов имеет строго определенный синтаксис. Рассмотрим пример данного системного вызова, который используется злоумышленником для смены имени Bluetooth-адаптера таким образом, что мобильный телефон, к которому осуществляется обращение «зависает».

hci_send_cmd(s, OGF_HOST_CTL, OCF_CHANGE_LOCAL_NAME,
CHANGE_LOCAL_NAME_CP_SIZE, (void *) &cp);

В качестве первого параметра в системном вызове указывается имя сокета, который использует Bluetooth-адаптер ноутбука для обмена данными между самим ноутбуком и устройством Bluetooth. Этот сокет можно открыть и получить его имя с помощью элементарных команд Bluez. Делается это злоумышленником в утилите до системного вызова hci_send_cmd.

Параметр OCF_CHANGE_LOCAL_NAME указывает на то, что в данном вызове будет осуществлена смена имени устройства. Ведь сам по себе вызов hci_send_cmd передает определенную команду на исполнение устройству Bluetooth. То, что обращение идет к тому уровню стека протоколов Bluetooth, который несет ответственность за изменение имени, определяется специальным параметром OGF_HOST_CTL.

В качестве параметров в данную функцию передается новое имя и его длина. Имя передается в структуре ср. Одно из полей этой структуры носит название name и используется для хранения имени устройства, которое будет передаваться всем мобильным телефонам, к которым обратится Bluetooth-адаптер. Поле данной структуры name злоумышленник инициализирует специальным значением, содержащим как раз запрещенные символы. Длина нового имени помещается в поле length структуры ср. Указатель на эту структуру с новым именем и его длиной передается в параметре (void*) &ср.

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

Разработчики протокола Bluetooth не предусмотрели целый ряд возможных атак, в том числе оставив возможность для злоумышленника удаленно выводить телефон из строя.

Отметим, что приведенная выше процедура не является единственным способом атаки на мобильный телефон посредством Bluetooth. Также на подобные устройства возможно осуществление, так называемой DoS-атаки, то есть атаки отказа в обслуживании (Denial of Service).

Суть атаки заключается в следующем. Мобильному устройству по Bluetooth-каналу передаются данные, которые в силу определенной реализации Bluetooth-передатчика, приводят к выходу аппарата из строя. Если говорить конкретно о DoS-атаке на мобильные телефоны, то такой атаке могут быть подвержены устройства, в которых существует уязвимость переполнения буфера. Переполнение буфера в первом приближении подразумевает, что размер памяти для приема данных меньше объема реально поступающей информации. Это приводит к тому, что выделенная память переполняется, и мобильный телефон выходит из строя.

Уязвимость большинства устройств заключается в том, что они не реализуют проверку длины пакета передаваемых данных, оставаясь тем самым уязвимыми к пакетам, размер которых достаточно велик для того, чтобы переполнить выделяемый под них буфер. Как правило, длины пакета в 600 байт оказывается вполне достаточным для переполнения памяти большинства мобильных телефонов.

Для осуществления атаки с использованием уязвимости стека Bluetooth злоумышленник применяет компьютер с операционной системой типа UNIX и библиотекой Bluez. С помощью содержащейся в этой библиотеке утилиты l2ping злоумышленник способен задавать длину посылаемых пакетов. Для этого он выполняет следующую команду:

l2ping -s 600 <адрес устройства>

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

Защититься от подобной атаки невозможно. Если у пользователя есть возможность не принимать сообщения по Bluetooth, то отказаться от приема приглашений к обмену файлами нельзя. Чтобы защититься от этих атак, необходимо перевести передатчик Bluetooth в скрытый режим и включать его только тогда, когда возникает необходимость получения файлов от пользователя, которого вы хорошо знаете.

Также может оказаться полезной «перепрошивка» телефона с целью добавления поддержки всех символов UTF-8. Но подобного рода «перепрошивка» может быть выполнена только профессионалом, а в настоящее время специалистов высокого уровня найти нелегко. Отметим также, что к подобной атаке уязвимы не все модели телефонов. Кроме того, существуют модели беспроводных устройств, которые не поддерживают передачу данных по Bluetooth, что в связи с вышеизложенным уже нельзя отнести к абсолютному недостатку.