Введение
В марте на Tom’s Hardware Guide вышла первая часть статьи, посвящённой созданию ружья Bluetooth. При помощи такого ружья можно без труда искать устройства с поддержкой Bluetooth и даже атаковать их. Например, копировать с телефонов адресные книги. Естественно, сборка такого ружья – всего лишь полдела.
Во второй части мы расскажем о программной части проекта и приведём пошаговое руководство создания ядра Linux для ружья. Затем покажем, как установить это ядро на миниатюрный компьютер Gumstix, который лежит в основе ружья, и сохранить его на флэш-памяти Gumstix. Наконец, мы расскажем о том, как можно использовать для работы с Bluetooth основные инструменты, входящие в состав ядра.
Рис.1. Компьютер Gumstix – реальный размер!!!
Для начала нам потребуется шесть деталей:
- компьютер Gumstix (модель waysmall 200st-bt или waysmall 400st-bt);
- компьютер с установленной ОС Linux (мы использовали Fedora Core 2);
- быстрое подключение к Интернету для скачивания необходимого ПО;
- нуль-модемный кабель (от gumstix.com) для подключения Gumstix к компьютеру; если нет последовательного порта, то можно воспользоваться переходником USB/Serial;
- антенна – либо от Gumstix, либо описанная в первой части;
- как минимум, одно устройство Bluetooth, работающее в открытом режиме обнаружения.
Ниже показаны основные шаги нашего процесса:
- установить клиента управления Subversion;
- собрать библиотеки (toolchain);
- отредактировать файл компиляции (makefile) для добавления Bluetooth;
- скомпилировать ядро;
- скопировать образ ядра в ОЗУ Gumstix;
- записать новое ядро на флэш-память Gumstix.
Примечание. При создании ядра, рекомендуем выполнять все действия в точности так, как это указано в статье, поскольку Linux не прощает ошибки в пробелах и опечатки. Кроме того, особое внимание уделите и перепрошивке образа Gumstix. Отключение питания или потеря соединения в это время может привести к отказу Gumstix!
Создаём дерево библиотек (toolchain)
На компьютере с Linux нужно будет скачать все необходимые пакеты, а затем скомпилировать образ для ARM. Надеемся, что ваш компьютер достаточно быстр, поскольку при кросс-платформенной компиляции происходит трансляция кода на C в код, совместимый с ARM – очень ресурсоёмкий процесс.
Совет. Конечно можно воспользоваться CoLinux и скомпилировать ядро из-под Windows, но мы это не рекомендуем. Лучше использовать “чистый” Linux.
На машину под управлением Linux нужно установить клиента Subversion, скачать его можно здесь. Subversion является системой управления, альтернативой CVS. Программа составляет список необходимых для компиляции файлов, а затем скачивает их из Интернета, после чего из этих файлов создаётся дистрибутив Linux для ARM-процессора Gumstix. Кроме того, Subversion устанавливает все необходимые программы для взлома Bluetooth, подробнее о которых мы расскажем ниже.
После установки Subversion выполните следующую команду из командной строки для построения дерева библиотек:
svn co http://svn.rungie.com/svn/gumstix-buildroot/trunk gumstix-buildroot |
Subversion создаст каталог “gumstix-buildroot”. Зайдём в него следующей командой:
cd gumstix-buildroot |
Далее меняем файл конфигурации makefile, добавляя в него библиотеки Bluetooth и соответствующие утилиты. Для этого редактируем файл в любом текстовом редакторе (мы использовали EMACS).
emacs Makefile |
Ищем строку #For Bluetooth и изменяем следующую за ней строчку на:
TARGETS+=bluez-utils bluez-libs |
На Рис. 2 показана изменённая строка. В ней мы включили использование новых драйверов BlueZ для стандартных модулей Bluetooth. Сохраняем отредактированный файл и выходим.
Рис. 2. Модифицируем конфигурационный файл.
Можно добавить два дополнительных приложения для работы с Bluetooth – btscanner и carwhisperer. Тогда строка TARGETS, о которой упоминалось выше (и которая показана на Рис. 2), в этом случае должна быть следующей:
TARGETS+=bluez-utils bluez-libs btscanner carwhisperer |
Ниже мы опишем смысл установки этих приложений.
Неплохо будет добавить в Gumstix поддержку PERL, что позволит создавать и запускать собственные скрипты Bluetooth PERL. Для этого нужно в файл конфигурации makefile добавить следующую строку:
TARGETS+=perl |
Строку можно добавить сразу после строки Bluetooth, указав выше комментарий. Напомним, что комментарии начинаются с символа “#”.
Рис. 3. Сборка.
Теперь можно приступить к компиляции. В командной строке наберите make, после чего gcc начнёт компиляцию нужного ядра. Скачивание необходимых файлов и компиляция займут около часа, так что можно сходить пообедать. Результатом компиляции будет файл размером около трёх мегабайт с названием “root_fs_arm”, расположенный в каталоге, из которого запустили компиляцию make. Полученный файл теперь нужно передать на Gumstix.
Подготовка Gumstix
До сего момента работа проходила на обычном компьютере, и Gumstix мы не затрагивали. Теперь настало время передать скомпилированный образ на Gumstix через последовательный порт.
Сначала мы скопируем образ в ОЗУ Gumstix (64 Мбайт). Затем запишем его из ОЗУ во флэш-память Gumstix, сохранив тем самым изменённое ядро – по крайней мере, до следующей перепрошивки.
Рис. 4. Подключение Gumstix по последовательному кабелю.
Примечание. Будьте особенно осторожны при подключении питания и последовательного порта. Мы случайно сломали разъём питания, в результате нам пришлось его паять. Возможно, будет проще выключать адаптер питания из розетки, а не от Gumstix.
Рис. 5. Разъёмы Gumstix.
Подключим кабели питания и последовательного порта к соответствующим разъёмам Gumstix, но пока не будем вставлять кабель питания в розетку.
Рис.6. Подключаем кабели питания и последовательного порта.
Запустите терминал minicom на компьютере с Linux, набрав в командной строке:
minicom |
Подключите питание, после чего на Gumstix загорится зелёный индикатор. Через несколько секунд после включения Gumstix на экране компьютера с Linux вы увидите строчки загрузки. Нужно прервать процесс загрузки и войти в так называемый режим “U-Boot”, нажав любую клавишу (Рис. 7).
Рис. 7. Сообщения при загрузке Gumstix.
Настройки minicom по умолчанию подходят для подключения к Gumstix, но если по какой-то причине подключение не получается, то настройки следует изменить, нажав после запуска minicom Control+A, а затем Z. Появится экран настроек, на котором следует указать следующие параметры:
115200 baud 8N1 NOR VT102 no parity no flow control terminal settings – ANSI Backspace – BS status line – enabled D – Newline delay – 0 ms |
Исходя из написанного на странице Gumstix Wiki, u-boot является встроенным загрузчиком Gumstix, который выполняет инициализацию аппаратуры, после чего загружает ядро Linux и передаёт ему управление. u-boot обеспечивает низкоуровневый доступ к различным модулям gumstix до того, как загрузится ОС.
Наберите следующую команду:
loadb a2000000 |
Она сообщит Gumstix, что прошивка будет передаваться через kermit. Теперь можно выйти из minicom.
Передача и запись образа в Gumstix
Пришло время передать образ в ОЗУ Gumstix, а затем скопировать его во флэш-память. Такое двухэтапное выполнение процедуры гораздо безопаснее, чем запись непосредственно во флэш-память. Выполните следующее.
- Запустите Kermit, набрав в командной строке компьютера под управлением Linux команду kermit.
- В командной строке Kermit настраиваем последовательный порт, последовательно набирая указанные ниже команды. Все команды нужно выполнять в точности так, как указано ниже, нажимая в конце каждой строки клавишу “enter”.
set prefixing all
set file type binary
set parity none
set carrier-watch off
set speed 115200
set line /dev/ttyS0
connect - Возвращаемся в командную строку Kermit, нажав ctrl+C.
- Выполняем следующую команду:
send root_fs_arm
Kermit начнёт передачу (Рис. 8).
Рис. 8. Передача образа.
Поскольку скорость передачи составляет лишь 115 200 кбит/с, то процесс может занять несколько минут. По завершении передачи можно закрыть kermit. С этого момента образ ядра уже находится в ОЗУ Gumstix.
Поскольку Gumstix поставляется с предварительно записанной флэш-памятью, вам придётся её очистить. Снова запустите minicom, и в его командной строке GUM> выполните (Рис. 9):
era 1:2-31 |
Рис. 9. Очистка флэш-памяти.
После того, как флэш-память будет очищена, можно записать в неё новое ядро. Для этого нужно выполнить следующие команды:
cp.b a2000000 40000 ${filesize} fsload a2000000 boot/uImage |
Убедитесь, что вы ввели нужное количество нулей!
После записи ядра, перезагрузите Gumstix, выполнив команду:
reset |
Если последовательный кабель подключён, а minicom запущен, то после перезагрузки Gumstix вы увидите загрузочный экран системы. Имя пользователя root, пароль gumstix. В командной строке вы сможете выполнять практически все команды, доступные в Linux, например ls для просмотра каталогов.
Рис. 10. Первый вход в систему.
Утилиты для работы с Bluetooth
На данном этапе у нас уже есть готовый компьютер под управлением Linux, с несколькими установленными утилитами для работы с Bluetooth. Среди них есть приличный сканер Bluetooth (с интерфейсом командной строки), встроенный в стек протоколов BlueZ при компиляции ядра. Сканер носит название “hcitool” и позволяет обнаруживать все устройства Bluetooth, находящееся в открытом режиме. Справку по hcitool можно найти здесь.
Команда “hcitool inq” покажет физические адреса, сдвиги тактовых частот (clock offset) и класс (class) обнаруженных устройств. Команда “hcitool scan” покажет физические адреса, производителя и модельный номер обнаруженных устройств.
При использовании стандартной антенны Gumstix смог обнаружить Blackberry 7520 и гарнитуру Jabra с расстояния примерно 6 метров (Рис. 11). При подключении Gumstix к более мощной антенне, такой как на ружье BlueSniper, можно ожидать гораздо лучших результатов.
Рис. 11. Использование hcitool для поиска устройств.
Если внимательно посмотреть на Рис. 11, то можно заметить, что в описании моделей не всегда выводится один и тот же MAC-адрес. Другими словами, при выполнении несколько раз “hcitool scan” в окружении со множеством Bluetooth-устройств, вы можете увидеть меняющиеся MAC-адреса для каждого из них. Возможно, это связано с особенностями hcitool или Bluetooth.
Отметим, что из-за смены рабочих частотных каналов в Bluetooth такого быстрого обнаружения устройств, как при сканировании Wi-Fi, у вас не получится. Для сканирования потребуется несколько секунд. Также отметим, что если вы решите побродить с ружьём по городу, то можете разочароваться. Сканирование Bluetooth-устройств находится ещё на стадии раннего развития, так что для обнаружения оборудования, работающего в скрытом режиме (non-discoverable), есть лишь несколько инструментов.
Ещё одна команда, которую поддерживает стек протоколов BlueZ, – l2ping, являющаяся по сути Bluetooth-версией известной всем команды “ping”. Для того чтобы воспользоваться “l2ping”, необходимо знать Bluetooth MAC-адрес устройства, находящегося поблизости. К счастью, команды “hcitool scan” и “inq” позволяют просмотреть информацию о MAC-адресе. Конечно, если “hcitool” не смогла обнаружить ни одного устройства, то “l2ping” ничем не сможет помочь.
Ниже описано как “пропинговать” Bluetooth-устройство с MAC-адресом 01:02:03:ab:cd:ef:
l2ping -f 01:02:03:ab:cd:ef |
При успешном исходе, вы получите отклик, схожий с тем, что показано ниже. Чтобы остановить “l2ping” нажмите control+c.
l2ping 01:02:03:ab:cd:ef Ping: 01:02:03:ab:cd:ef from ……. 0 bytes from 00:60:57:75:7C:36 id 200 time 37.89ms 0 bytes from 00:60:57:75:7C:36 id 201 time 19.96ms 0 bytes from 00:60:57:75:7C:36 id 202 time 12.25ms 0 bytes from 00:60:57:75:7C:36 id 203 time 12.18ms 0 bytes from 00:60:57:75:7C:36 id 204 time 11.80ms |
Руководство по использованию “l2ping” можно найти здесь.
Заключение
При помощи ружья BlueSniper вы сможете обнаруживать устройства Bluetooth, просматривать их физические адреса, названия производителей и моделей. Нет сомнения в том, что хакеры перенесут наиболее интересный софт для работы с Bluetooth на платформу Gumstix. Вполне вероятно и то, что вскоре появится абсолютно новое ПО. Однако пока с этим не всё так просто.
Недавно Крейг Хьюз (Craig Hughes) из компании Gumstix и Дэйв Смит (Dave Smith) помогли нам портировать ещё несколько утилит для сканирования Bluetooth. Первая называется BTScanner, долго не поддавалась портированию, но, похоже, у Дэйва получилось. BTScanner показывает состояние соединения и доступные службы устройства, работающего в открытом режиме. Необходимые файлы можно скачать здесь (ссылка “sources”).
Дэйв Смит также портировал Car Whisperer – новый инструмент от Trifinite.org. Это небольшое удобное приложение позволяет принимать и передавать звук на Bluetooth-гарнитуры. Скачать версию для Gumstix можно здесь (также по ссылке “sources”).
Примечание. Утилиты BTScanner и Car Whisperer можно интегрировать в образ при компиляции, как показано выше, в соответствующем разделе.
На самом деле сканировать устройства в скрытом режиме (non-discoverable) тоже можно, для этого достаточно воспользоваться утилитами Redfang или Bluesniff. Однако, мы пока не знаем о их существовании под платформу Gumstix. Redfang атакует по диапазону MAC-адресов, благодаря чему можно обнаружить практически любое устройство с Bluetooth (главное, чтобы хватило времени). Bluesniff, по сути, является интерфейсным “довеском” к Redfang, представляя информацию в более понятном формате.
В заключение пожелаем читателям быть аккуратными с получившимся ружьём, и использовать его только в законных целях.