собираем ружье Bluetooth: охота за "синими зубами", часть 2

Во второй части /* напоминаю, что первая часть публиковалась в СР №6 за 2005 г. – прим. ред. */ мы расскажем о программной части проекта и приведем пошаговое руководство создания ядра 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!

cоздаем дерево библиотек (toolchain)

На компьютере с Linux нужно будет скачать все необходимые пакеты, а затем скомпилировать образ для ARM. Надеемся, что ваш компьютер достаточно быстр, поскольку при кросс-платформенной компиляции происходит трансляция кода на C в код, совместимый с ARM - очень ресурсоемкий процесс. Совет. Конечно можно воспользоваться CoLinux и скомпилировать ядро из-под Windows, но мы это не рекомендуем. Лучше использовать "чистый" Linux. На машину под управлением Linux нужно установить клиента Subversion. Subversion является системой управления, альтернативой CVS. Программа составляет список необходимых для компиляции файлов, а затем скачивает их из Интернета, после чего из этих файлов создается дистрибутив Linux для ARM-процессора Gumstix. Кроме того, Subversion устанавливает все необходимые программы для взлома Bluetooth, подробнее о которых мы расскажем ниже.

После установки Subversion выполните следующую команду из командной строки для построения дерева библиотек:

svn cohttp://svn.rungie.com/svn/gumstix-buildroot/trunkgumstix-buildroot

Subversion создаст каталог "gumstix-buildroot". Зайдем в него следующей командой:

cd gumstix-buildroot

Далее меняем файл конфигурации makefile, добавляя в него библиотеки Bluetooth и соответствующие утилиты. Для этого редактируем файл в любом текстовом редакторе.
Ищем строку #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, но пока не будем вставлять кабель питания в розетку. Примечание. Будьте особенно осторожны при подключении питания и последовательного порта. Мы случайно сломали разъем питания, в результате нам пришлось его паять. Возможно, будет проще выключать адаптер питания из розетки, а не от Gumstix.


Рис. 5. Разъемы Gumstix.


Рис.6. Подключаем кабели питания и последовательного порта.

Запустите терминал minicom на компьютере с Linux.

Подключите питание, после чего на 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. В командной строке Kermit настраиваем последовательный порт, набрав указанные ниже команды. Все команды нужно выполнять в точности так, как указано ниже (последовательность важна!):

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. Передача образа.

Поскольку скорость передачи составляет лишь 115200 кбит/с, то процесс может занять несколько минут. По завершении передачи можно закрыть kermit. С этого момента образ ядра уже находится в ОЗУ Gumstix.
Поскольку Gumstix поставляется с предварительно записанной флэш-памятью, вам придется ее очистить. Снова запустите minicom, и в его командной строке выполните (Рис. 9):

era 1:2-31



Рис. 9. Очистка флэш-памяти.

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

cp.b a2000000 40000 ${filesize}
fsload a2000000 boot/uImage

Убедитесь, что вы ввели нужное количество нулей!
После записи ядра, перезагрузите Gumstix, выполнив команду:

reset

Если последовательный кабель подключен, а minicom запущен, то после перезагрузки Gumstix вы увидите загрузочный экран системы. Имя пользователя root, пароль gumstix. В командной строке вы сможете выполнять практически все команды, доступные в Linux.


Рис. 10. Первый вход в систему.

утилиты для работы с Bluetooth

На данном этапе у нас уже есть готовый компьютер под управлением Linux с несколькими установленными утилитами для работы с Bluetooth. Среди них есть приличный сканер Bluetooth (с интерфейсом командной строки), встроенный в стек протоколов BlueZ при компиляции ядра. Сканер носит название "hcitool" и позволяет обнаруживать все устройства Bluetooth, находящееся в открытом режиме.

Команда "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 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

заключение

При помощи ружья BlueSniper вы сможете обнаруживать устройства Bluetooth, просматривать их физические адреса, названия производителей и моделей. Нет сомнения в том, что хакеры перенесут наиболее интересный софт для работы с Bluetooth на платформу Gumstix. Вполне вероятно и то, что вскоре появится абсолютно новое ПО. Однако пока с этим не все так просто.

Недавно Крейг Хьюз (Craig Hughes) из компании Gumstix и Дэйв Смит (Dave Smith) помогли нам портировать еще несколько утилит для сканирования Bluetooth. Первая – BTScanner - долго не поддавалась портированию, но, похоже, у Дэйва получилось. BTScanner показывает состояние соединения и доступные службы устройства, работающего в открытом режиме.

Дэйв Смит также портировал Car Whisperer - новый инструмент от Trifinite.org. Это небольшое удобное приложение позволяет принимать и передавать звук на Bluetooth-гарнитуры. Скачать версию для Gumstix можно здесь (также по ссылке "sources").

Примечание. Утилиты BTScanner и Car Whisperer можно интегрировать в образ при компиляции.

На самом деле сканировать устройства в скрытом режиме (non-discoverable) тоже можно, для этого достаточно воспользоваться утилитами Redfang или Bluesniff. Однако мы пока не знаем об их существовании под платформу Gumstix. Redfang атакует по диапазону MAC-адресов, благодаря чему можно обнаружить практически любое устройство с Bluetooth (главное, чтобы хватило времени). Bluesniff, по сути, является интерфейсным "довеском" к Redfang, представляя информацию в более понятном формате.

В заключение пожелаем читателям быть аккуратными с получившимся ружьем, и использовать его только в законных целях.



Humphrey Cheung, перевод Андрея Пировских.


Сетевые решения. Статья была опубликована в номере 09 за 2005 год в рубрике лабораторная работа

©1999-2024 Сетевые решения