Статья Разбираемся с osmocom-bb

Приветствую, форумчане! В этой статье я хочу рассказать о том, как начать работать с osmocom-bb - проекте, позволяющем сделать из старой моторолы инструмент изучения и тестирования GSM сетей.
Я постараюсь дать достаточное количество информации, что бы вы без лишней боли смогли начать работу с osmocom.
18673


Osmocom? Впервые слышу!
Osmocom - это открытая имплементация стека протоколов GSM. Включает в себя программное обеспечение и инструменты, реализующие различные стандарты мобильной связи, включая GSM, DECT, TETRA и другие. Так описано на .

Osmocom-bb реализует клиентскую часть протокола GSM. Для этого используются телефоны на базе чипсета calypso и mediatek. К таким телефонам относятся, например, motorola c115, motorola c118, motorola c123, Neo 1973, SciphoneDreamG2. Полный список можно посмотреть на официальном сайте:

По сути osmocombb соединяет osmocom-совместимый телефон и компьютер с линукс (как львиноботы, соединяющиеся в одного супербота), позволяя программировать устройство для работы с gsm или использовать уже готовые проекты для, например, создания собственной базовой станции gsm (2G), устройства для снифинга gsm трафика и ещё .


Hardware
Для того, что бы начать работу с osmocom, нужно обзавестись некоторыми прибамбасами, а именно:
  • Телефон из списка доверенных (желательно motorola на базе e88, но об этом позже)
  • USB-UART конвертер
  • mini jack 2.5 mm TRS (3 контакта)
  • детали для замены фильтров (опционально)
А теперь подробнее

Телефон
Полный список допустимых телефонов можно посмотреть . Однако авторы рекомендуют использовать motorola c123 / motorola c118 (телефоны на базе E88), так как проект изначально затачивался именно под них. Телефоны на базе E87 (motorola c115 / c117) так же отлично подойдут: E88 и E87 идентичны на 99%.

Я взял motorola c118, так как их было проще всего найти, всё нижеописанное я буду проводить именно с ним. Купить телефоны можно на местной барахолке, в переходе или на авито. Цена вопроса - около 500 р. за штуку.

18672

Если вы собираетесь поднимать свою базовую станцию, то понадобится 2 телефона и, соответственно, 2 USB-UART конвертера и 2 мини джека.

О перепайке фильтров
Изначально телефоны отбрасывают весь входящий трафик, не принадлежащий этому телефону (остальной ему просто не нужен). В некоторых проектах, например в снифинге gsm или поднятии собственной базовой станции (BTS), нам нужен весь входящий трафик. Что бы мы могли получать его, нужно перепаять фильтры.

Казалось бы, можно просто выпаять фильтры и замкнуть цепь. Но дело в том, что фильтры также преобразуют несбалансированный сигнал 50 ohm от антенны в сбалансированный на 100 ohm, который впоследствии идёт на чипсет RITA. По этому мы не можем просто удалить фильтры и замкнуть цепь.

Для перепайки фильтров понадобится паяльный фен, так как по другому удалить детали без повреждения телефона вряд ли получится (точно не получится, я пытался). Так же понадобится паяльник с тонким наконечником и прочие паяльные принадлежности (припой, флюз и т.д.)
Детали для перепайки в одном паке можно заказать на aliexpress (цена около 100 р.), или же в русских магазинах, но там цена меня совсем не порадовала.

О том, как и что припаивать, на официальном сайте. описано с теорией.

USB конвертер
Список поддерживаемых USB TTL конвертеров есть на . Конечно, можно купить готовый вариант переходника USB-minijack 2.5 mm, но это во первых дорого, во вторых не интересно. По этому лучше брать отдельно конвертер, отдельно миниджек. Самым дешёвым (цена - около 70 рублей на aliexpress) и стабильным USB-TTL конвертером является CP2102. Хотя для некоторых проектов его нужно перепрошить для возможности работы на нестандартных скоростях - это не является проблемой. О перепрошивке будет ниже, в разделе software

18675


mini jack
Нужен обычный трёхконтактный (TRS) minijack 2.5 mm. Проблема в том, что на дворе 2018 год, и достать 2.5-милиметровый миниджек может быть проблематичным занятием. Если вы везунчик, и вам удалось найти трёхконтактный миниджек, то распайка будет такой:
  • RXD - наконечник
  • TXD - середина
  • GND - нижняя часть
Припаивать надо к RXD, TXD и GND конвертера соответственно.

Мне же, как наверняка и многим другим, удалось найти только "тюльпан" 3RCA TRRS (4 контакта). Под спойлером о том, как его подсоединять
Распайка примерно такая же: берём от начала RXD, TXD и GND, а нижний контакт оставляем пустым.
18676


Штекер в телефон нужно вставлять не полностью, а до того момента, когда начнёт светиться вторая лампочка на USB-TTL конвертере:
18670

обратите внимание на расположение контактов

Проверяем соединение
Что бы проверить связь, будем использовать minicom из под Linux (все дальнейшие действия будут проводиться под Debian 9.4 x86_64)
Выключаем телефон, соединяем с компьютером и в терминале ищем подключенный адаптер: ls /dev | grep ttyUSB
18708


Открываем конфигурацию minicom sudo minicom -s > Настройка последовательного порта, в Последовательный порт вводим найденный адаптер.
18709

Выбираем Выход, затем на телефоне коротко нажимаем кнопку включения. Если в выводе, помимо мусора, появилась надпись @ftmtoolerror, то можно переходить к сборке софтовой части.
18710

выход из minicom - ctrl + a, x, Enter


Software
Для начала определимся со структурой проекта: /opt/osmocom - библиотеки проекта и кросс-компилятор, ~/osmocombb - ветки проекта.
Все действия будут проводиться на Debian 9.4 x86_64

Собираем libosmocore
libosmocore - основная библиотека проекта, почитать про неё можно .
Bash:
su
#устанавливаем зависимости
apt-get update && apt-get install build-essential libtool libtalloc-dev shtool autoconf automake git-core pkg-config make gcc libpcsclite-dev
#создаём рабочее место
mkdir /opt/osmocom
cd /opt/osmocom
#клонируем основные библиотеки
git clone git://git.osmocom.org/libosmocore.git
#компилируем
cd libosmocore/
autoreconf -i
./configure
make
make install
ldconfig -i
cd ..

Собираем кросс-компилятор
У меня возникли проблемы со сборкой по , по этому я сделал .
Bash:
su
apt update && apt install libmpfr-dev libmpc-dev libgmp-dev libgnutls28-dev libgnutlsxx28 texinfo
cd /opt/osmocom
mkdir gnu-arm-toolchain
cd gnu-arm-toolchain
mkdir build install src
cd src/
качаем программы нужных версий
#в официальном мануале используется gcc версии 4.8.2, у меня скомпилировался только 4.9.4
wget http://ftp.gnu.org/gnu/gcc/gcc-4.9.4/gcc-4.9.4.tar.bz2
wget http://ftp.gnu.org/gnu/binutils/binutils-2.21.1a.tar.bz2
wget ftp://sources.redhat.com/pub/newlib/newlib-1.19.0.tar.gz
#разархивируем
tar jxvf gcc-4.9.4.tar.bz2
tar jxvf binutils-2.21.1a.tar.bz2
tar xfvz newlib-1.19.0.tar.gz
cd ../
# качаем установщик
wget https://raw.githubusercontent.com/DrLafa/gnu-arm-toolchain-installer/master/gnu-arm-build.sh
#даём права на исполнение
chmod +x gnu-arm-build.sh
#выполняем установку
./gnu-arm-build.sh
Этот установщик работает на Debian 9.4 x86_64 с gcc 6.3.0 и texinfo 6.3.0. С другими верияси gcc и texinfo могут быть проблемы.
После компиляции нужно прописать путь до бинарников в переменную PATH. Прописываем в конец файла .zshrc, .bashrc или каким ещё терминалом вы пользуетесь:
Код:
export PATH=/opt/osmocom/gnu-arm-toolchain/install/bin:${PATH}
На этом сборка кросс-компилятора закончена. Если возникли проблемы компиляции, можете писать в комментариях. Попробуем решить коллективно.

Собираем OsmocomBB
Настало время собрать основную ветку проекта
Код:
# создаём рабочее место
cd ~/
mkdir osmocombb
cd osmocombb
#клониурем основную ветку
git clone git://git.osmocom.org/osmocom-bb.git master
cd master/src
Тут стоит отметить, что если вы хотите иметь возможность отправлять трафик gsm (а не только принимать), то в файле src/target/firmware/Makefile практически в самом низу нужно раскомментировать строку CFLAGS += -DCONFIG_TX_ENABLE. Однако имейте ввиду, что вещание на частотах gsm в России регулируется законом, так что вас могут счесть за врага народа и отправить в концлагерь призвать к судебной ответственности. Подробнее читайте в разделе .

Чуть ниже есть 2 строки, раскомментировав которые, вы получите возможность загружать прошивку в постоянную память, а не только в RAM.
18647


Перед компиляцией основной ветки давайте поговорим о перепрошивке USB-TTL конвертера CP2102.
Перепрошивка требуется для работы на нестандартных скоростях. Это может понадобиться в некоторых ветках проекта.
Нам понадобится программа-прошивальщик. Скачать её можно .
Втавляем cp2102 в компьютер и выгружаем модуль ядра:
Код:
sudo rmmod cp210x
Запускаем прошивальщик, что бы убедиться, что всё в порядке:
Код:
sudo ./cp210x-program
18648


Он должен вывести таблицу скоростей, содержащей следующие значения:
Код:
[baudrate table]
[...]
921600 = FFE6, FFF6, 1 #  923077 Baud, 20 us
[...]
460800 = FFCC, FFEC, 1 #  461538 Baud, 40 us
[...]
230400 = FF98, FFD9, 1 #  230769 Baud, 78 us
[...]
115200 = FF30, FFB2, 1 #  115385 Baud, 156 us
[...]

На всякий случай сделаем бекап памяти конвертера:
Код:
sudo ./cp210x-program -f eeprom.hex

Теперь мы можем перепрошить конвертер:
Код:
sudo ./cp210x-program -p -F eeprom.hex -w --set-baudrate 812500:FFE2,FFF4,1 --set-baudrate 406250:FFC5,FFE9,1 --set-baudrate 203125:FF8A,FFD3,1

Проверяем работу:
Код:
sudo ./cp210x-program
В выводе таблицы скоростей теперь должны быть следующие значения:
Код:
[baudrate table]
[...]
812500 = FFE2, FFF4, 1 #  800000 Baud, 24 us
[...]
406250 = FFC5, FFE9, 1 #  406780 Baud, 46 us
[...]
203125 = FF8A, FFD3, 1 #  203390 Baud, 90 us
[...]
115200 = FF30, FFB2, 1 #  115385 Baud, 156 us
[...]
Переподключите конвертер. На этом перепрошивка завершена.
Итак, если у вас cp2102 и вы перепрошили его, то перед компиляцией основного проекта в файл src/host/osmocon/osmocon.c нужно добавить строку #define I_HAVE_A_CP210x
18649


Теперь вы готовы собрать основную ветку
Код:
cd ~/osmocombb/master/src/
make
Если компиляция завершилась без ошибок, то можно переходить к самому интересному. К тестированию


Тестируем
Прошивки ветки master для motorola c115, c118, c123 и прочих на платформе compal_e88 (и 87) находятся по пути src/target/firmware/board/compal_e88/
Прошивки заливаются на телефон с помощью . Синтаксис загрузчика следующий:
  • -m {c123,c123xor,c140,c140xor,c155,romload,mtk} - платформа телефона. Для motorola c118 это c123xor,
  • -p /dev/ttyXXXX - путь к USB-TTL конвертеру
  • -c - загрузка по цепочке. Указывается, если вы загружаете тяжеловесную прошивку, в названии которых фигурирует слово hightram (например rssi.highram.bin)
  • file.bin - прошивка
Для удобства я сделал ссылку на osmocon и добавил её в переменную PATH
Код:
cd ~/osmocombb/master/src/host/osmocon/
mkdir osmocon-link
ln -s ~/osmocombb/master/src/host/osmocon/osmocon osmocon

Выключаем телефон и подключаем к компьютеру
Код:
#идём в папку с прошивками
cd ~/osmocombb/master/src/target/firmware/board/compal_e88
osmocon -m c123xor -p /dev/ttyUSB0 hello_world.compalram.bin
#коротко жмём кнопку включения на телефоне. Начинается загрузка.

18653


Могут быть проблемы с загрузкой прошивки из-за плохого соединения. Просто переподсоедините телефон и попробуйте снова.

Что со всем этим можно сделать
У osmocom . Есть, допустим, burst_int, нацеленный на снифинг gsm-трафика, emi для дос-атак на устройства gsm, но это всё темы для отдельных статей.

О том, что есть в ветке мастер (которую мы только что скомпилировали) можно почитать на оффициальном сайте: . Рассмотрим пример одной прошивки, использующей только телефон и другой, использующей телефон и компьютер одновременно.

RSSI
RSSI может работать без кмопьютера после прошивки. Он показывает системную информацию о базовой станции. Давайте загрузим эту прошивку на телефон:
Код:
#идём в папку с прошивками
cd ~/osmocombb/master/src/target/firmware/board/compal_e88
osmocon -m c123xor -p /dev/ttyUSB0 -c hello_world.compalram.bin
#коротко жмём кнопку включения на телефоне. Начинается загрузка.
Здесь используется параметр -c, так как это hightram-прошивка

После того, как прошивка загрузилась, в выводе терминала будет системная информация о ближайшей базовой станции. Есть возможность менять канал (ARFCN). А ещё он пикает, если нажать кнопку "вверх" :)
18662

С вышкой можно синхронизироваться (зелёная кнопка), тогда будет выдано ещё больше информации:
18664
Здесь MMC (Mobile Country Code) - код страны, MNC (Mobile Network Code) - код оператора, LAC (Location Area Code) - код локальной зоны. В двух словах LAC - это объединение некоторого количества базовых станций, которые обслуживаются одним контроллером базовых станций (BSC). cell id - идентификатор базовой станции.
С помощью этой информации можно узнать примерное местоположение вашего телефона. Учитывая то, что телефон подключён к сети для экстренных вызовов, вы теперь знаете, как вас смогут найти сверху :)

mobile
Другая, самая интересная на мой взгляд прошивка в этой ветке - mobile. Превращает ваш компьютер в телефон со всеми вытекающими плюшками (возможность просмотра трафика в wireshark, выполнение DTMF команд и комечто же звонки и смс-ки). Mobile использует телефон как физический уровень gsm, а всё остальное (layer 2-3) располагается на компьютере. Для нормальной работы нужна, конечно же, рабочая симка.

Зальём прошивку на телефон:
Код:
#подключаем выключенный телефон
cd ~/osmocombb/master/src/target/firmware/board/compal_e88
osmocon -m c123xor -p /dev/ttyUSB0 -c layer1.highram.bin
#коротко жмём на кнопку включения
Здесь, опять же, для загрузки прошивки использовался параметр -c, потому что для тяжеловесных прошивок используется загрузка по цепочке: сначала загружается кастомный загрузчик, который загружает прошивку типа hightram. Физическое взаимодействие с сетью (layer 1 модели OSI) запустился, сворачиваем это окно.

Во второй консоли запускаем наш "мобильник" mobile, выступающий в качестве 2 и 3 уровня модели OSI
~/osmocombb/master/src/host/layer23/src/mobile/mobile -i 127.0.0.1
Мобильник запущен. Мы можем подключиться к консоли управления через telnet:
telnet 127.0.0.1 4247

Давайте откроем wireshark и попробуем отловить смс-ку. В акуле телефон будет loopback-интерфейсом
18671

Ну разве не восхитительно!

Пожалуй на этом я и закончу данную статью, она и так уже довольно затянулась. Желаю всем дешёвых моторол, удачной пайки, компиляции с первого раза и не забывать об УК РФ, прежде чем соберётесь поднимать свою BTS.
 
Последнее редактирование:
Люди подскажите не могу никак закачать не одну highram прошивку все перебрал уже получается только compal .В выводе постоянно пишет Received DOWNLOAD ACK from phone ,your code is runing now! и ниже Enabled Compal ramloader -> Calypso romloader chaingloading mode и индикатор tx моргает постоянно при чем тускло как то и труба так и не загорается. Вот такой командой пытаюсь загрузить ту тяжеловесную прошивку
Bash:
# osmocombb/master/src/host/osmocon/osmocon -p /devttyUSB0 -m c123xor -c ~/osmocombb/master/srctarget/firmware/board/compal_e88/layer1_highram.bin
 
Последнее редактирование:
Люди подскажите не могу никак закачать не одну highram прошивку все перебрал уже получается только compal .В выводе постоянно пишет Received DOWNLOAD ACK from phone ,your code is runing now! и ниже Enabled Compal ramloader -> Calypso romloader chaingloading mode и индикатор tx моргает постоянно при чем тускло как то и труба так и не загорается. Вот такой командой пытаюсь загрузить ту тяжеловесную прошивку
Bash:
# osmocombb/master/src/host/osmocon/osmocon -p /devttyUSB0 -m c123xor -c ~/osmocombb/master/srctarget/firmware/board/compal_e88/layer1_highram.bin
Заряди телефон, попробуй батарейку вытащить и залить заного, посмотри, не отходит ли провод. Вообще в последнее время была та же проблема, сетую на плохое соединение со штекером.
 
Заряди телефон, попробуй батарейку вытащить и залить заного, посмотри, не отходит ли провод. Вообще в последнее время была та же проблема, сетую на плохое соединение со штекером.
Та на сотку заряжена,а так буду проверять и мучать тдальше , и то как руки дойдут.
 
Люди подскажите не могу никак закачать не одну highram прошивку все перебрал уже получается только compal .В выводе постоянно пишет Received DOWNLOAD ACK from phone ,your code is runing now! и ниже Enabled Compal ramloader -> Calypso romloader chaingloading mode и индикатор tx моргает постоянно при чем тускло как то и труба так и не загорается. Вот такой командой пытаюсь загрузить ту тяжеловесную прошивку
Bash:
# osmocombb/master/src/host/osmocon/osmocon -p /devttyUSB0 -m c123xor -c ~/osmocombb/master/srctarget/firmware/board/compal_e88/layer1_highram.bin
У меня было тоже самое но это была ветка sylvain/burst_ind а там прошивка highram не грузится. Продолбался долго пока понял............ но у вас master а там должна грузиться без проблем............. контакты конечно вряд ли............раз обычная грузится, проверьте модель телефона и какой выбрали загрузчик как вариант и ещё советуют попробовать без XOR
 
У меня было тоже самое но это была ветка sylvain/burst_ind а там прошивка highram не грузится. Продолбался долго пока понял............ но у вас master а там должна грузиться без проблем............. контакты конечно вряд ли............раз обычная грузится, проверьте модель телефона и какой выбрали загрузчик как вариант и ещё советуют попробовать без XOR
конкретно на какие детали по телефону обратить внимание подскажите? Знаю что только c 118 для рашки произведен больше ничего, а так пробовал без xor безрезультатно,а так я его с момента покупки даже не заряжал надо попробовать зарядить.Но все же там полный заряд показывает.Незнаю буду копать.
 
разные загрузчики для разных моделей................ а вообще то у вас странно не грузит, какой чип у вас на переходнике?
 
Здравствуйте,можно ли сделать подобное на SDR ?
 
на SDR именно и развивается проект, с моторолами как раз всё встало
 
  • Нравится
Реакции: Dr.Lafa
должен работать хорошо, тем более на мастере...............

Знаю что только c 118 для рашки произведен больше ничего - у меня спокойно работают разные модели, из списка рекомендованных, купленные в китае, не подходят только для америки, но и те будут грузиться............сеть не будут видеть
 
Здравствуйте, пробовал заниматься осмокомом, получилось только поднять бс и отправить своим "абонентам" смс. Почитав вашу тему хотел бы уточнить некоторые моменты о возможностях осмоком.
1. Тут писали что путем MITM то есть запуском поддельной БС не получиться получить ВХОДЯЩИЙ трафик СМС. Правильно я понял?
2. Как я понял для перехвата входящего смс в рамках осмоком нужно использовать снифинг, то есть нужно записать дамп трафика и далее пустить его в кракен. На сколько я знаю в GSM есть некие каналы связи в количестве 8 штук и абоненты сколнны прыгать по ним, исходя из этого нужно снифать сразу все 8 каналов 8ю моторалами?
 
  • Нравится
Реакции: swap3r
Как я понял для перехвата входящего смс в рамках осмоком нужно использовать снифинг, то есть нужно записать дамп трафика и далее пустить его в кракен. На сколько я знаю в GSM есть некие каналы связи в количестве 8 штук и абоненты сколнны прыгать по ним, исходя из этого нужно снифать сразу все 8 каналов 8ю моторалами? -не так, если используется хопинг сколько потребуется каналов не известно, поскольку вы не знаете сколько каналов оператор под него задействует, а там ещё надо отслеживать все тайм слоты............... в современных условиях когда сканируют весь блиижайший трафик комплекс состоит из сотен каналов, 250 - 500.................. конечно это касается и смс и разговоров.............

Сколько времени занимает процесс расшифровки? Ту же смс от вк успеет расшифровать до истечения времени ее валидности? - всё зависит от железа и таблиц, покупной дешифратор ( один из лучших) получает 25-27 Кс в секунду, при оптимизации алгоритмов и быстрых дисках порядка одного ключа в 2 секунды...........тут кто во что горазд
 
Последнее редактирование модератором:
Как я понял для перехвата входящего смс в рамках осмоком нужно использовать снифинг, то есть нужно записать дамп трафика и далее пустить его в кракен. На сколько я знаю в GSM есть некие каналы связи в количестве 8 штук и абоненты сколнны прыгать по ним, исходя из этого нужно снифать сразу все 8 каналов 8ю моторалами? -не так, если используется хопинг сколько потребуется каналов не известно, поскольку вы не знаете сколько каналов оператор под него задействует, а там ещё надо отслеживать все тайм слоты............... в современных условиях когда сканируют весь блиижайший трафик комплекс состоит из сотен каналов, 250 - 500.................. конечно это касается и смс и разговоров.............

Сколько времени занимает процесс расшифровки? Ту же смс от вк успеет расшифровать до истечения времени ее валидности? - всё зависит от железа и таблиц, покупной дешифратор ( один из лучших) получает 25-27 Кс в секунду, при оптимизации алгоритмов и быстрых дисках порядка одного ключа в 2 секунды...........тут кто во что горазд
и как действовать в таком случае? что с каналами делать то?
 
как узнать точное количество каналов используемых оператором?
 
просто нужно иметь возможность слушать весь нужный радиодиапазон по которому передается интересующая нас информация. Соответственно: покупаем 8 моторол, или 2 юсрп (по других сдрках анализ количества не искал).
по поводу срока раскодировки - не знаю, я не занимаюсь подобным (нет необходимости ломать вконтакте и подобное :))
на хорошей машине (какой нибудь двухпроцессорный ксеон, например) раскодировка занимает совсем немного времени, насколько я смотрел в разных презентациях исследователей. Арендовать подобное не есть так уж и сложно и дорого, а если нужно, то и приобрести можно.
 
просто нужно иметь возможность слушать весь нужный радиодиапазон по которому передается интересующая нас информация. Соответственно: покупаем 8 моторол, или 2 юсрп (по других сдрках анализ количества не искал).
по поводу срока раскодировки - не знаю, я не занимаюсь подобным (нет необходимости ломать вконтакте и подобное :))
на хорошей машине (какой нибудь двухпроцессорный ксеон, например) раскодировка занимает совсем немного времени, насколько я смотрел в разных презентациях исследователей. Арендовать подобное не есть так уж и сложно и дорого, а если нужно, то и приобрести можно.
так человек выше пишет же, что могут использоваться и 100 каналов, тогда даже и 8 моторол будут бесполезны же
 
человек может не ориентироваться в теме просто.
для 1 абонента хватает 8 моторол, или 2 юсрп (по другим сдркам не анализировал)
 
Тут недавно скидывали что то вроде "Вторая жизнь RTL SDR свистка" потом сообщения удалились, можете заного скинуть
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!