Радиохакинг
DEEPSIDEПопытаюсь сразу не согласиться с легендарными советскими писателями о том что «радио есть, а счастья нет». Радио в современном представлении дало нам такие замечательные вещи как – Wi-Fi, сигнализация, рация, GSM, 2/3/4/5G и кучу других G-овно устройств, которые в реальном времени вещают на разных частотах и, конечно же, подвержены всевозможным уязвимостям, что не может не делать нас чуточку счастливее.
В статье пойдет речь про всеми любимый протокол и «прародитель» сотовой связи – это, конечно, GSM.
Начало работы с GSM
Суть темы – уязвимость алгоритма шифрования A5/1 и её эксплуатация. Ходят слухи, что до сих пор используется практически всеми операторами сотовой связи даже в мегаполисах. У МТС изредка проскакивает A5/3. Сам я этого, конечно же, не проверял , но доверюсь общедоступному мнению что так и есть, а значит все видыдвухфакторной аутентификации(!), разговоры(!), трафик, - подвержены данной атаке.
Есть много информации в открытом доступе на данную тему, но когда начинаешь экспериментировать с нуля, возникает огромное количество вопросов и нестыковок. Еще бы - эти нестыковки начали появляться с самого 2009 года, когда Карстен Нол рассказал миру о проблеме. Стали появляться в сети испорченные билды программ, пропадать таблицы из общего доступа и вообще - «Ассоциация GSM описала планы Нола как незаконные и опровергла». Все дело в том, что для решения данного вопроса требуются нехилые вливания финансов, а операторы, особенно стран ближнего зарубежья и РФ «просвистели» все деньги вместо того что бы вливать их в инфраструктуру как оказалось, а тут еще Яровая со своими ЦОД-ами.
Минимальные знания
*IMSI - международный идентификатор мобильного абонента (индивидуальный номер абонента), ассоциированный с каждым пользователем мобильной связи стандарта GSM, UMTS или CDMA. Во избежание перехвата, этот номер посылается через сеть настолько редко (только аутентификация пользователя), насколько это возможно — в тех случаях, когда это возможно, вместо него посылается случайно сгенерированный TMSI.
*TMSI - временный идентификатор мобильной станции GSM (мобильного телефона). TMSI назначается после успешной аутентификации и используется в процессе установки звонка, регистрации в сети и т. д. TMSI используется из соображений безопасности, для сокрытия других идентификаторов абонента, а именно, во избежание передачи IMSI через радиоэфир.
*MCC - мобильный код страны в комбинации с MNC является уникальным идентификатором сотового оператора сетей GSM, CDMA, iDEN, TETRA и 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 - международный идентификатор мобильного абонента (индивидуальный номер абонента), ассоциированный с каждым пользователем мобильной связи стандарта GSM, UMTS или 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
OsmoBTS – тут все еще жестче, но стабильнее всего.
https://osmocom.org/projects/osmobts/wiki/Wiki
Заключение
Материала по радиохакингу получилось обширно, признаем. Во всем этом нужно разбираться и очень хорошо углубляться, но при должных навыках это открывает мир радиохакинга. В статье мы разобрали GSM и FakeBTS, от железа и до конечной установки. В каких целях использовать все это - решать вам, но следует напомнить, что это серьезно карается законом.