Радиохакинг

Радиохакинг

DEEPSIDE
Попытаюсь сразу не согласиться с легендарными советскими писателями о том что «радио есть, а счастья нет». Радио в современном представлении дало нам такие замечательные вещи как – Wi-Fi, сигнализация, рация, GSM, 2/3/4/5G и кучу других G-овно устройств, которые в реальном времени вещают на разных частотах и, конечно же, подвержены всевозможным уязвимостям, что не может не делать нас чуточку счастливее.

В статье пойдет речь про всеми любимый протокол и «прародитель» сотовой связи – это, конечно, GSM.


Начало работы с GSM

Суть темы – уязвимость алгоритма шифрования A5/1 и её эксплуатация. Ходят слухи, что до сих пор используется практически всеми операторами сотовой связи даже в мегаполисах. У МТС изредка проскакивает A5/3. Сам я этого, конечно же, не проверял , но доверюсь общедоступному мнению что так и есть, а значит все видыдвухфакторной аутентификации(!), разговоры(!), трафик, - подвержены данной атаке.

Есть много информации в открытом доступе на данную тему, но когда начинаешь экспериментировать с нуля, возникает огромное количество вопросов и нестыковок. Еще бы - эти нестыковки начали появляться с самого 2009 года, когда Карстен Нол рассказал миру о проблеме. Стали появляться в сети испорченные билды программ, пропадать таблицы из общего доступа и вообще - «Ассоциация GSM описала планы Нола как незаконные и опровергла». Все дело в том, что для решения данного вопроса требуются нехилые вливания финансов, а операторы, особенно стран ближнего зарубежья и РФ «просвистели» все деньги вместо того что бы вливать их в инфраструктуру как оказалось, а тут еще Яровая со своими ЦОД-ами.


Минимальные знания

*IMSI - международный идентификатор мобильного абонента (индивидуальный номер абонента), ассоциированный с каждым пользователем мобильной связи стандарта GSMUMTS или CDMA. Во избежание перехвата, этот номер посылается через сеть настолько редко (только аутентификация пользователя), насколько это возможно — в тех случаях, когда это возможно, вместо него посылается случайно сгенерированный TMSI.

*TMSI - временный идентификатор мобильной станции GSM (мобильного телефона). TMSI назначается после успешной аутентификации и используется в процессе установки звонка, регистрации в сети и т. д. TMSI используется из соображений безопасности, для сокрытия других идентификаторов абонента, а именно, во избежание передачи IMSI через радиоэфир. 

*MCC - мобильный код страны в комбинации с MNC является уникальным идентификатором сотового оператора сетей GSMCDMAiDENTETRA и UMTS, а также некоторых операторов спутниковой связи.

*Кс - сеансовый ключ шифрации, который нам и нужно получить.

*ARFCN - В сетях GSM абсолютный номер канала.

*A5/1 - поточный шифр, наиболее распространенный на сегодня.


Подбор железа

На что ловим. Software-defined radio (SDR) Программно-определяемое радио - это система радиосвязи, в которой компоненты, которые традиционно применяются в аппаратном обеспечении (например, микшеры, фильтры, усилители, модуляторы / демодуляторы, детекторы и т.д.), вместо этого реализуются с помощью программного обеспечения на персональном компьютере или встроенной системы. Хотя концепция SDR не нова, быстро развивающиеся возможности цифровой электроники делают практическими многие процессы, которые когда-то были возможны только теоретически.

Необходимым программным обеспечением будет - Gnu-Radio. Это очень крутой открытый проект, возможности в котором ограничиваются только вашими знаниями.

Необходимым железом для перехвата пакетов будет любой SDR-комплект. От самого простейшего RTL-SDR «свистка» (~1000 рублей):

До лютейшего комплекса, который работает в режиме full-duplex - UmTRX Price: $950.00 (и который, кстати, подойдет для организации собственной тестовой сети:

Или готовая БС которой мне посчастливилось пользоваться UmDesk Price: $3,000 (на базе того же UmTRX):

«Таскать» такое с собой в кармане не получится, поэтому самым приемлемым портативным вариантом с более широкой полосой пропускания, чем у RTL-SDR будет HackRF One. Цена без кейса ~100$:

Есть вот такое интересное решение для апгрейда. PortaPack 220$:

Как видим, кейс с дисплеем и регулятором для HackRF. Отлично подойдет для поиска «жучков» и просто как анализатор спектра частот. Честно… open-source, но ценник чересчур не демократичный при наличии прямых рук можно сделать дисплей, регулятор, звук отдельно. Частично перекрывается Android смартфоном и SDR-софтом.

  • С полным списком SDR-устройств можно ознакомится на Википедии - https://en.wikipedia.org/wiki/List_of_software-defined_radios.
  • Лучше взять сразу full-duplex, но и цена значительно разнится с простым приемником. Знакомство с SDR и Gnu-Radio однозначно только GSM не ограничится!
  • Для корректного приема потребуется антенна, которая уверенно принимает на 900Mhz. Часто комплектной достаточно на небольшие дистанции.
  • Обязательно потребуется наличие двух жестких дисков по 2TB каждый, - для расшифровки трафика программным комплексом Kraken.
  • Не слабый компьютер. При установки одного из важных пакетов уйдет не мало ресурсов, как и при записи трафика широкой полосой.


Установка и конфигурация​

Ставим Linux Ubuntu 16.04. Только на ней с коробки все корректно «заколосилось» и не было никаких претензий к работе Gnu-Radio и SDR.

Далее соблюдая очередность ставим необходимые пакеты:

sudo apt-get install git

git clone https://github.com/pybombs/pybombs.git

cd pybombs

sudo python setup.py install

sudo pybombs recipes add gr-recipes git+https://github.com/gnuradio/gr-recipes.git

//грузим так называемые «рецепты»
sudo pybombs recipes add gr-etcetera git+https://github.com/gnuradio/gr-etcetera.git

sudo pybombs prefix init /usr/local/ -a gr-gsm

// установка Gr-Gsm крайне долгая процедура ~4 часа. На i3 c 4Gb ОЗУ не установилось вообще. Работаю на i7.
sudo pybombs -p gr-gsm install gr-gsm

sudo ldconfig

Самое страшное и долгое - радужные таблицы с помощью которых идет подбор Kс ключа. По данной ссылке нужно скачать ~1600Gb таблиц (40 файлов по 40) - https://opensource.srlabs.de/projects/a51-decrypt). Оооооочень медленно, начните с этого.

Клонируем и компилим git:

git clone https://github.com/joswr1ght/kraken

//есть вариации подбора ключа из радужных таблиц с помощью видеокарты, что происходит немного быстрее, но я делал под процессор
make noati

Далее нужно изменить файл конфигурации tables.conf в папке indexes (там должен быть файл с примером tables.conf.sample), в нем нужно указать на диск (именно на диск, а не раздел(!), так как Kraken будет переносить таблицы на чистую, без файловой системы).

После этого нужно запустить скрипт из папки indexes:

python ./Behemoth.py /path/to/a51/tables/

И указать ему в качестве параметра папку, со скачанными заранее таблицами.


Запуск и анализ​

Переходим в каталог с .grc файлами (GNU Radio Companion). Готовая блок схема для корректного получения трафика:

cd /usr/local/src/gr-gsm/apps
//и запускаем
sudo gnuradio-companion grgsm_livemon.grc

//далее запускаем Wireshark «натравленный» на GSM:
sudo wireshark -k -f udp -Y gsmtap -i lo

Тем самым мы можем видеть трафик в real-time.

Для работы в реальных сетях и потребуется любой калькулятор ARFCN, допустим - http://niviuk.free.fr/gsm_band.php

В общем доступе есть списки принадлежности к тому или иному оператору ARFCN которые нужно сопоставить с вашей целью для анализа непосредственно этой частоты.

Как узнать к какому ARFCN подключен абонент?

Для iPhone *3001#12345#*

Для Android *#*#4636#*#* или *#*#197328640#*#*

Необходимо выяснить TMSI цели. Самый простой способ – отправка СМС.


Получение Kc​

Данный пункт в текстовом варианте решил опустить по той причине, что есть информативное видео от Датских коллег. За исключением моментов:

  • GR-GSM мы уже установили.
  • Вы выяснили на каком канале сидит абон, далее записали эфир grgsm_capture.
  • Для декодирования и анализа в Wireshark gsm_decode.

И далее работа с голосом:

Ознакомьтесь со всеми возможностями GR-GSM:

https://github.com/ptrkrysik/gr-gsm/wiki/Usage

https://github.com/ptrkrysik/gr-gsm/wiki/Usage:-Decoding-How-To

Обратите внимание на нижние строки "Decode hopping channels". Этот пункт понадобиться для работы с речью. Во время звонка происходят прыжки между каналами, для улучшения качества связи. Для борьбы с этим пунктом требуется grgsm_channelize.


Работа с FakeBTS

*MCC/MNC - код страны. Список всех MNC можно посмотреть здесь: http://mcclist.com/mobile-network-codes-country-codes.asp

*Cell ID - Идентификатор базовой станции.

*LAC (Location Area Code) — код географической зоны, которая обслуживается одним контроллером базовых станцией (BSC). Когда происходит входящий вызов, то оповещение одновременно получают все базовые станции данной зоны.

*ARFCN Absolute radio-frequency channel number — идентификатор, однозначно определяющий пару частот, используемых для приёма и передачи. Пример: за диапазоном 1800 закреплены номера 512 — 885. При этом частота передачи вычисляется по формуле 1710.2 + 0.2·(n−512), а частота приёма = частота передачи + 95.

* IMSI - международный идентификатор мобильного абонента (индивидуальный номер абонента), ассоциированный с каждым пользователем мобильной связи стандарта GSMUMTS или CDMA. Во избежание перехвата, этот номер посылается через сеть настолько редко (только аутентификация пользователя), насколько это возможно — в тех случаях, когда это возможно, вместо него посылается случайно сгенерированный TMSI.

*TMSI - временный идентификатор мобильной станции GSM (мобильного телефона). TMSI назначается после успешной аутентификации и используется в процессе установки звонка, регистрации в сети и т. д. TMSI используется из соображений безопасности, для сокрытия других идентификаторов абонента, а именно, во избежание передачи IMSI через радиоэфир.

Все действия необходимо проводить только в своей сети со своими абонентами!


Подбор железа

Тут все не так однозначно как по цене, так и по сути работы SDR.

Необходим Full-Duplex по той простой причине что трубка обменивается данными аутентификации и регистрируется в БС (получает TMSI, соотносит с номером абонента и т.д. т.п.).

Устройства типа HackRF - Half-Duplex не подойдут. Они работают только в режиме приема, либо передачи.

Самый простой и дешевый, очень популярный девайс - два телефона Motorola с123/с113/с118.

И покажу вам другу сторону данного телефона, это сканер-помощник поиска ARFCN, отличная вещь!

И уже полноценный SDR, приемлемый по цене и функционалу – BladeRF (~400$)

По качеству исполнения есть устройство превосходящее - LimeSDR (~40-60 т.р) Есть версия Mini, а есть и полноценная - два канала на прием и два на передачу. Шикарно то что выходит вообще за область бытия и просиживания задницы на стуле… из Lime возможно сделать, доплеровский радар. Вам однозначно не будет скучно c SDR.

Полноценные по ширине канала от Fairwaves:

UmTRX Price: $950.00

Детище Ettus Research:

USRP B210 Price: $1216.00

USRP B200 Price: $745.00

Но у UmTRX есть преимущества:

  • все схемы платы и исходные коды софта доступны под open source лицензией
  • дешевле, чем аналогичная конфигурация на USRP
  • плата может работать с двумя независимыми каналами, в то время как USRP имеют только один канал
  • GPS для точной подстройки опорного генератора частоты уже встроен, а не закупается отдельно, как в USRP (плавающая частота генератора приводит в GSM к проблемам)

Или готовая БС - UmDesk Price: $3,000 (на базе того же UmTRX). Системный блок с платой UmTRX и предустановленной OpenBTS. Кароче найдите куда потратить деньги лучше.


Установка, конфигурация, запуск

Опишу общие принципы работы, все остальное поковырять самому и прочесть предлагающиеся мануалы ниже. Подробно пошаговые инструкции по установке. Самое главное на что нужно обратить внимание:

  • Вы прописываете в конфигурационных файлах или напрямую в веб-интерфейсе такие параметры как - LAC / MCC / MNC предварительно «подглядев» их в открытых источниках.
  • Понижаете «сiphering mode» до A5/0.
  • Покупаете / подключаете IP телефонию с подменой CallerID и интеграцией с Asterisk (этих услуг более чем достаточно на просторах).
  • Цепляете абонента. Он получает внутренний номер. Исходя из настроек Asterisk’a получает CallerID при звонке.
Что то в духе того:/etc/asterisk/iax.conf

[VoicePulse]
type=peer
host=server.example.voicepulse.com
username=SomeuSer
secret=PaSsWorD
/etc/asterisk/sip.conf

[sipuser]
type=peer
host=dynamic
username=allan
secret=1234
context=outgoing
[outgoing]
exten => _1NXXNXXXXXX,1,SetCallerID(2024561111)
exten => _1NXXNXXXXXX,n,Dial(IAX2/VoicePulse/${EXTEN})

Что использовать:

YateBTS

https://wiki.yatebts.com/index.php/Installing - полноценный мануал по установке.

https://wiki.yatebts.com/index.php/Network_in_a_PC - настройка, веб-морда(!), asterisk, sip-транки.

OpenBTS – онли консоль.

https://github.com/RangeNetworks/dev/wiki

http://openbts.org/wiki/

OsmoBTS – тут все еще жестче, но стабильнее всего.

https://osmocom.org/projects/osmobts/wiki/Wiki


Заключение

Материала по радиохакингу получилось обширно, признаем. Во всем этом нужно разбираться и очень хорошо углубляться, но при должных навыках это открывает мир радиохакинга. В статье мы разобрали GSM и FakeBTS, от железа и до конечной установки. В каких целях использовать все это - решать вам, но следует напомнить, что это серьезно карается законом.

Report Page