image

Несмотря на вроде бы абсурдный заголовок, принять и декодировать сигналы мобильной связи действительно можно на телевизионный приёмник, хотя и с некоторыми оговорками. Не все и не на любой приёмник, но такая возможность есть. Чтобы вам это выполнить самим, понадобятся:

  • ноутбук,
  • DVB-Т-приёмник в виде USB-брелока,
  • свободный флеш-накопитель для записи дистрибутива Linux на него.

Чтобы лучше разобраться в работе GSМ, нужно два мобильных телефона или телефон и GSM-модем.

Если вас заинтересовала эта тема, и вы хотите расширить свои знания, добро пожаловать под кат.

Наверное, по количеству аббревиатур и стандартов мобильная связь превосходит Wi-Fi и Bluetooth. Большое количество информации пугает, и у многих отпадает всякое желание изучать её, что ещё больше усугубляется отсутствием возможности проведения практического эксперимента.

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

Любой желающий может найти в интернете статьи и видео о том, как это сделать. Но часто от читателя или зрителя требуется предварительное, достаточно долгое и скучное изучение темы. Также информация может быть частично устаревшей, особенно по используемым программам.
Основной целью моей статьи является доступное изложение материала с пошаговой инструкцией, как на практике можно посмотреть внутренние механизмы мобильной связи, приложив минимальное количество усилий. Я думаю, что это даст мотивацию читателю для дальнейшего изучения вопроса.

Как всегда, изложу теорию, позволяющую адекватно воспринимать множество терминов и сокращений в статьях, посвящённых теме мобильной связи. Часть информации имеет ознакомительный характер и непосредственно не будет использоваться в практических примерах.

Если вам теория не интересна, вы её знаете или просто хотите увидеть всё на практике, переходите сразу к практической части.

Оглавление



Поколения мобильной связи


Мобильная связь постепенно эволюционирует, и сейчас используются все поколения мобильной связи, начиная от 2G (GSM) и заканчивая 5G (5G-NR). Разработка стандартов осуществляется организациями, входящими в консорциум 3GPP.

На данный момент он поддерживает стандарты для следующих сетей:

  • GSM (2G),
  • UMTS (3G),
  • LTE (4G),
  • 5G-NR (5G).

Из всех стандартов рассмотрим GSM. Да, GSM уже уходит в прошлое, но до сих пор используется многими операторами, и начинать изучение мобильной связи, я думаю, лучше всего именно с него.

Основы сети GSM


▍ Структура GSM


Основу GSM сети составляют:

  • Network Switching Subsystem (NSS),
  • Base Station Subsystem (BSS),
  • Operation Subsystem (OSS),
  • Mobile Station (MS).

NSS предназначена для коммутации каналов мобильной сети и других телефонных сетей. BSS предназначена для передачи голосового и сигнального трафика между MS и NSS. OSS управляет работой NSS и BSS. MS — это мобильный телефон, GSM-модем или другое устройство абонента сети GSM.

Упрощённо структуру можно представить на рисунке.

image

На рисунке показаны не все компоненты, так как нагромождение различных блоков лишь усложнит восприятие и понимание основ GSM. Далее в статье мы будем рассматривать только взаимодействие MS и BTS.

Если проводить аналогию между GSM и Wi-Fi, то BSS это Wi-Fi-точка доступа, а MS — это устройство, которое подключено к роутеру по Wi-Fi.

▍ Базовая станция


Базовая станция (BTS) уникально идентифицируется четырьмя значениями:

  1. Mobile Country Code (MCC) — код страны оператора мобильной связи. MCC России — 250, США — 310, Китая — 460.
  2. Mobile Network Code (MNC) — код оператора мобильной связи. Для каждого оператора в пределах страны он уникален.
  3. Local Area Code (LAC) — код локальной зоны. Базовые станции, которые обслуживаются одним BSC (контроллером базовых станций), имеют один и тот же LAC.
  4. Cell Id (CI) — идентификатор соты базовой станции.

Эти параметры используются для того, чтобы абонент, подключённый к одной базовой станции, мог общаться с абонентом, подключёным к другой.

▍ Мобильная станция


Мобильная станция (MS) — это устройство, которое по радиочастотным каналам взаимодействует с конкретной базовой станцией (BTS). Мобильной станцией может быть мобильный телефон, GSM-модем или другое устройство, при помощи которого абонент подключается к сети мобильного оператора. До GSM номер телефона привязывался к конкретной мобильной станции, поэтому при краже, поломке станции или при покупке новой абоненту нужно было обращаться к мобильному оператору для перепрограммирования мобильной станции и внесения данных о ней в базы данных оператора.

В GSM для идентификации абонента используется не мобильный телефон, а SIM-карта. При смене мобильной станции абоненту достаточно извлечь её из старой станции и вставить в новую.

Тем не менее каждая мобильная станция должна иметь уникальный код IMEI (International Mobile Equipment Identity) для работы в мобильной сети.

▍ Код IMEI


Код IMEI идентифицирует мобильную станцию (приёмопередатчик мобильной станции) в сети мобильной связи и используется при авторизации для отслеживания местоположения мобильной станции оператором и блокирования в случае её кражи.

IMEI записывается производителем в микросхему мобильной станции, но существуют способы его изменить. Следует заметить, что в некоторых странах изменение IMEI устройства является уголовно наказуемым деянием (например, в Республике Беларусь).

Можно узнать IMEI мобильного телефона, набрав *#06#. Если телефон позволяет использовать несколько SIM-карт одновременно, вы увидите несколько IMEI.

▍ Номер мобильного телефона


Каждый абонент в сети мобильной связи имеет один или несколько MSISDN (Mobile Subscriber Integrated Services Digital Number). MSISDN представляет собой номер телефона в международном формате. Он соответствует стандарту E.164 и состоит из следующих частей:

  1. Country Code (СС) — код страны. Например, для США — 1, для России — 7, Казахстана — 77.
  2. National Destination Code (NDC) — код направления внутри страны. Обычно за оператором мобильной связи внутри страны закреплён один или несколько NDC. Но в последнее время абоненты мобильной связи могут сохранять свой MSISDN при переходе от одного оператора к другому, поэтому NDC теряет свою значимость
  3. Subscriber Number(SN) — номер абонента.

Длина MSISDN и его составляющих регламентируются международным и локальными законодательствами.

▍ SIM-карта


Основное назначение SIM-карты (Subscriber Identification Module) — идентификация абонента в мобильной сети.

У SIM-карты есть два постоянных идентификатора:

  • ICCID (Integrated Circuit Card Identifier),
  • IMSI (International Mobile Subscriber Identity).

ICCID — это серийный номер карты, который уникально идентифицирует карту. Он никогда не повторяется, и при перевыпуске карты в случае утери, кражи или поломки будет другим. В соответствии со стандартом E.118 состоит из нескольких частей.

  • Major industry identifier (MII) — две цифры, которые определяют сферу применения. Для мобильной связи это всегда 89.
  • Country Code (СС) — код страны, совпадает с СС в MSISDN. Содержит от 1 до 3 цифр.
  • Issue Identifier (II) — код эмитента SIM-карты (того, кто выпустил эту карту), часто совпадает с MNC. Содержит от 1 до 4 цифр.
  • Individual account identification (IAI) — код, который эмитент SIM-карты может использовать по своему усмотрению. Содержит разное количество цифр, но для карт с одинаковым MII и СС все IAN состоят из одинакового количества цифр.
  • Сheck digit — контрольное число, которое определяется по алгоритму Луна.
  • IMSI — уникальное число, которое позволяет идентифицировать абонента (владельца SIM-карты) в сети мобильной связи. Определяется стандартом E.212. Состоит из:

    • Mobile Counry Code (MCC) — код страны. Состоит из 3 цифр.
    • Mobile Network Code (MNC) — код мобильного оператора. Состоит из 2 или 3 цифр.
    • Mobile Subscription Identification Number (MSIN) — идентификатор абонента внутри сети мобильного оператора. Обычно состоит из 9 или 10 цифр.

SIM-карта представляет собой микроконтроллер, обладающий микропроцессором, оперативным и постоянным устройствами памяти, устройствами ввода-вывода.

С данными, хранящимися на SIM-карте в файловой системе, можно работать, посылая SIM-карте APDU-команды (Smart Card Application Protocol Data Unit).

Кроме всего прочего, на SIM-карте содержится специальная программа для получения ключа шифрования Kc и значения SRES. Kc используется для шифрования голоса и данных, которые передаются между мобильной и базовой станцией. SRES используется для авторизации мобильной станции в мобильной сети.

Для получения Kc и SRES необходимо значение ключа Ki, которое тоже содержится на SIM-карте, но известно только мобильному оператору и компании, выпустившей SIM-карту.

▍ IMSI, MSISDN, TMSI


IMSI, MSISDN и TMSI хранятся на SIM-карте.

Именно IMSI участвует при идентификации абонента в сети при подключении к базовой станции, а не номер телефона (MSISDN). IMSI выступает ключом для хранения данных об абоненте сети мобильной связи в специальной базе данных оператора HLR (Home Location Registry).

Хотя для хранения номеров MSISDN также предусмотрено место на SIM-карте, сейчас на многих SIM-картах эти записи пустые. Наличие или отсутствие MSISDN на SIM-карте никак не влияет на работу мобильной станции в сети мобильной связи.

TMSI (Temporary Mobile Subscriber Identity) — это временный идентификатор, который выдаётся при регистрации мобильной станции в Location Area (LA). В целях безопасности количество передач IMSI между базовой и мобильной станцией минимизируют. Единственный случай, когда нельзя обойтись без передачи IMSI, это при регистрации MS в LA. По идее, достаточно один раз передать IMSI от мобильной станции к базовой при регистрации в LA и в дальнейшем использовать назначенный TMSI, но всё-таки иногда IMSI мобильных станций рассылаются в незашифрованном виде в широковещательных сообщениях от базовой станции.

▍ Как прочитать информацию с SIM-карты


Информация на SIM-карте хранится в файлах. Прочитать информацию из файлов SIM-карты можно, используя низкоуровневые APDU-команды и устройство для чтения смарт-карт или GSM-модем и AT-команды модема.

Существуют также специализированные программы, которые позволяют читать информацию с SIM-карт, используя графический интерфейс. Более подробно о чтении с SIM-карты смотрите в практической части статьи.

▍ Радиоинтерфейс между BTS и MS


BTS и MS взаимодействуют на определённых радиочастотах. Для европейских стран сейчас это частоты диапазона GSM-900 и GSM-1800. GSM-1800 часто называется DCS-1800.

BTS и MS используют дуплексный режим для работы, что означает, что оба устройства могут одновременно принимать и передавать радиосигнал. При передаче сигнала от BTS к MS используется радиочастота из диапазона downlink, а при передаче от MS к BTS — радиочастота из диапазона uplink.

Например, для GSM-900 выделен диапазон частот от 890MHz до 960MHz. 890-915 MHz используется для uplink, а 935-960 MHz используется для downlink.

Для рационального использования частот в GSM существует Frequency Division Multiple Access (FDMA) и Time Division Multiple Access (TDMA).

В случае GSM-900 FMDA подразумевает разделение полосы в 25MHz для uplink и в 25MHz downlink на 124 радиочастотных канала 200kHz для каждого диапазона.

Несущие частоты канала для uplink и downlink можно определить по формулам:

  • F(ARFCN)uplink = 890 + 0.2*ARFCN
  • F(ARFCN)downlink = 935 + 0.2*ARFCN

TDMA — это использование одной и той же частоты несколькими устройствами путём деления на временные окна (TS — timeslots). Устройства взаимодействуют между собой только в конкретные выделенные для них окна. Восемь подряд временных окон образуют TDMA-кадр.

GSM-трафик передаётся по так называемым физическим каналам. В простейшем случае физический канал занимает один радиочастотный канал и одно временное окно, но в случае Frequency Hopping он может использовать несколько радиочастотных каналов. В этом случае MS и BTS при передаче данных по физическому каналу будут переключаться между радиочастотными каналами синхронно по заранее согласованному алгоритму.

▍ Мультиплексирование в GSM


Когда начинаешь читать литературу и документацию GSM, очень сложно разобраться в основных понятиях, касающихся того, как организована передача информации по радиоинтерфейсу в GSM. Я постараюсь вам рассказать более доходчиво и наглядно.

Минимальная порция информации, которую можно передать по радиоинтерфейсу, это burst. Burst представляет собой последовательность битов передаваемой информации. Информацию в burst можно записывать в определённом формате. В зависимости от формата бывают следующие виды burst:

  • Normal Burst,
  • Frequency Correction Burst,
  • Synchronization Burst,
  • Dummy Burst,
  • Access Burst.

Burst передаётся в течение периода времени, выделенного под одно временное окно (TS). Временное окно — это интервал времени в 576,6 мкс. 8 TS образуют TDMA-кадр (TDMA Frame) длительностью 4.615 мс.

Когда именно и на какой радиочастоте будет передаваться определённый burst, определяется следующими параметрами:

  • Absolute Radio Frequency Number (ARFCN) — абсолютный радиочастотный номер канала;
  • Frame Number (FN) — номер кадра;
  • Slot number (SN) — номер временного окна;
  • направление передачи — uplink, downlink.

ARFCN и FN определяют физический канал, то есть на одной частоте существует 8 физических каналов. Физический канал для uplink идёт с опозданием на три TS относительно физического канала для downlink. То есть кадр в uplink с тем же номером, что и в downlink, будет на 576,6 мкс * 3 = 1,733 мс позже.

Помимо физических каналов, существуют логические каналы. На одном физическом канале может быть несколько логических каналов. Передаваемая информация может быть разного назначения (голос, данные, служебная), поэтому определённые последовательности burst группируются в логические каналы, которые бывают Traffic Channels и Control Channels. Bursts, передаваемые по логическим каналам, образуют сообщения.

▍ Traffic Channels


Traffic Channels используются для передачи голоса и данных, Control Channels используются для передачи управляющей (служебной, сигнальной) информации. Traffic Channels бывают TCH/F и TCH/H. F означает, что данные или голос передаются на полной скорости, в каждом TDMA-кадре передаётся информация. H значит, что данные или голос передаются на половине скорости, т. е. каждый второй TDMA-кадр физического канала, на котором располагается этот логический канал, будет использоваться другим TCH/H.

▍ Control Channels


Каналы служебной информации (Control Channels) делятся на:

  • Broadcast Channel (BCH) — широковещательные;
  • Common Control Channel (CCCH) — общего назначения;
  • Dedicated Control Channel (DCCH) — выделенные.

BCH, в свою очередь, бывают:

  • Frequency Correction Channel (FCCH) — коррекции частоты;
  • Synchronization Channel (SCH) — синхронизации;
  • BroadCast Control Channel (BCCH) — широковещательный.

Для нас больший интерес представляет BCCH, в котором передаётся основная информация о базовой станции.

CCCH-каналы бывают:

  • Paging Channel (PCH) — канал, который используется BTS для инициирования входящих звонков и SMS на MS;
  • Random Access Channel (RACH) — канал, который используется MS для запроса выделенного канала у BTS, для обмена данными с BTS;
  • Access Grant Channel (AGCH) — канал, который используется BTS для ответа на запросы мобильной станции о выделении канала.

Так как мы в дальнейшем будем изучать данные, передаваемые по downlink-радиоканалу, то мы сможем увидеть только то, что передаётся по логическим каналам PCH и AGCH.

DCCH бывают:

  • Standalone Dedicated Control Channel (SDCCH) — канал, по которому передаются сообщения для установки звонка (Call setup) и передаются SMS;
  • Slow Associated Conrol Channel (SACCH) — этот канал используется, когда уже MS и BTS обмениваются данными по TCH каналу;
  • Fast Associated Control Channel (FACCH) — Канал используется для передачи срочных сообщений, например, когда мобильная станция переключается с одной BTS на другую.

Так как мы будем рассматривать только приём входящего звонка мобильной станцией и приём входящей SMS, то для нас представляет интерес только SDCCH.

▍ Временные окна, кадры, мультикадры, суперкадры, гиперкадры


Мне понадобилось время, чтобы понять эти концепции. Думаю, и вы столкнётесь с этой же проблемой. Сложно представить, как всё разделено во времени и как связаны с burst физические и логические каналы. Попробую привести вам метафору из области фантастики, которая поможет понять суть.

В далёкой, далёкой галактике есть две обитаемых планеты. Одна называется BTS, вторая — MS. Согласно галактическому закону, их сутки, называемые TDMA Frame, длятся 8 часов. Час у них называется timeslot (TS). На планетах существует 8 часовых поясов, называемых Physical Channels.

Между планетами налажено общение. Для этого ровно в полночь по локальному времени каждого часового пояса, жители этого пояса подают определённые световые сигналы, называемые bursts. Какие именно сигналы они должны подавать в определённое время, написано в галактическом законе GSM Specification, а расписание этих сигналов для каждого часового пояса регламентируется законами Logical Channels. В часовых поясах, где действует положение Сontrol Channel, месяц называется Сontrol Multiframe и длится 51 TDMA Frame дней, а где положение — Traffic Channel, месяц называется Traffic Multiframe и длится 26 TDMA Frame дней. Год, называемый у них Super Frame, длится 1326 дней (TDMA Frame). Чтобы можно было отмечать Новый год в один день, он длится или 52 Trafic Multiframe месяца или 26 Сontrol Multiframe месяца. Век, называемый у них Hyperframe, длится ровно 2048 лет. После окончания века летоисчисление начинается заново.

Так как планеты BTS и MS разделяет космическое пространство, они договорились, что полночь на планете MS начинается позже на 3 Timeslot часа.

Можно, конечно, эту фантастическую историю расширить и включить туда ARFCN и Frequency Hopping, но я не сделал с целью упрощения картины.

Надеюсь, что получилось объяснить. А если всё-таки непонятно, то можно или перечитать раздел статьи ещё раз, или почитать интересную статью «Как работает радиоинтерфейс в GSM-сетях», которую, к сожалению, я обнаружил, когда уже большая часть моей статьи была написана.

Аппаратное обеспечение


▍ Software Defined Radio


Чтобы принимать GSM-сигналы, необязательно иметь специализированное дорогое оборудование. Достаточно приёмника Software Defined Radio (SDR). На данный момент на рынке существует множество SDR, от дешёвых до очень дорогих. Так как GSM-сигнал является радиосигналом, то, что его можно принять на SDR и обработать, выделив из него интересующую информацию.

▍ RTL-SDR


Ценник SDR-приёмника, не говоря уже о стоимости SDR-трансивера, начинается где-то от 200-300$. Но в 2012 году оказалось, что оцифрованный радиосигнал, обработанный микросхемой RTL2832U, используемой во многих DVB-Т-приёмниках, можно фильтровать и выделять из него полезный сигнал. То есть превратить DVB-Т-приёмник в SDR. Возможности у него будут меньше, чем у полноценного SDR, но для начала изучения GSM-связи их хватит.

Ограничения следующие: приём только сигнала GSM-900. Приём DCS-1800 на него невозможен, а также из-за узкой полосы принимаемого сигнала вы не сможете одновременно принять сигнал для downlink- и uplink-радиоканалов. Также, если оператор на базовой станции использует Frequency Hopping и расстояние между используемыми ARFСN велико, то вы сможете декодировать только часть трафика (ту, что передаётся на частоте, на которую настроен RTL-SDR).

Хочу обратить ваше внимание, что DVB-T-приёмник, помимо микросхемы RTL2832U, выполняющей оцифровку сигнала, содержит ещё аналоговую часть, выполненную на другой микросхеме, которая в большой степени определяет возможности вашего RTL-SDR.

Когда только узнали о возможности превращения DVB-T-приёмника в RTL-SDR, существовали приёмники, использующие микросхему Elonics E4000, обладающую более широкими возможностями, чем современные от Rafael Micro.

▍ GSM-модем


Хотя мы и будем использовать RTL-SDR-приёмник для работы с GSM-сигналом, дополнительное использование GSM-модема позволит провести более интересные эксперименты.

Раньше многие телефоны позволяли использовать их в качестве GSM-модема, сейчас эта возможность тоже есть у современных и не очень Android-телефонов, но требует дополнительных действий для активации. Я использовал свой Galaxy S9 Plus в качестве модема.

Используя GSM-модем, можно достаточно просто прочитать Kc, TMSI, которые играют важную роль в декодировании и исследовании GSM-трафика.

Для активации GSM-модема на телефоне Galaxy S9 plus нужно набрать в приложении «Телефон» номер *#0808# и выбрать опцию, где есть ACM или Modem. После этого в Linux модем будет виден как устройство /dev/ttyACM0 или /dev/ttyUSB0. Через него, используя программу minicom, putty или другой эмулятор терминала, можно вводить AT-команды модема. Я думаю, и для других телефонов существуют возможности активировать AT-интерфейс для модема.

Программное обеспечение


▍ Osmocom


Osmocom — это проект с открытым исходным кодом, который содержит реализации стандартов в области мобильной связи и GSM в частности. Из разработок нас интересуют gr-osmosdr (набор блоков GnuRadio для работы со стеком OSMOCOM) и librtlsdr — библиотека, которая позволяет использовать DVB-Т-приёмник c микросхемой RTL2832U/RTL2832P как SDR-приёмник.

▍ Net Monitor


В прошивках телефонах присутствует специальная программа, называемая Net Monitor. Не берусь утверждать, что она есть на всех телефонах, но, например, на многих телефонах Samsung войти в меню Net Monitor можно при помощи *#0011#. Там же можно увидеть много интересной и полезной информации.

▍ GNU Radio


GNU Radio — это бесплатный SDK, содержащий блоки обработки сигналов для реализации SDR и систем обработки сигналов. Вы можете разрабатывать свои блоки или использовать готовые. Блоки можно графически настроить и соединить в GNU Radio Companion.

▍ Wireshark


Wireshark — это анализатор пакетов. Обладая удобным графическим интерфейсом, он позволяет фильтровать пакеты и исследовать их. Главное — найти способ, как эти пакеты ему передать :) Мы в него будем передавать пакеты, которые генерирует программа grgsm_livemon и передаёт на loopback-интерфейс для анализа.

▍ Поддержка SDR операционными системами


Хотя и существует возможность работать с SDR под операционной системой Windows, Linux всё-таки более удобная среда для экспериментов. Различные дистрибутивы Linux в своих репозиториях могут содержать, а могут не содержать необходимые нам пакеты. Если дистрибутив не содержит нужный пакет, то необходимо загрузить исходный код нужной программы из интернета и выполнить сборку самому. У меня есть подозрение, что собрать с первого раза все нужные программы не получится ни у кого, да и нужно же ещё добиться, чтобы собранное работало вместе.

В экосистеме Linux существует практика дистрибутивов, созданных для решения определённых задач. Например, Kali Linux для исследования безопасности систем, SystemRescue для восстановления систем, Alpine Linux для использования в качестве основы при создании Docker-образов.

Дистрибутив Linux подразумевает, что приложения, входящие в его состав, собираются и обновляются разработчикам дистрибутива, и пользователю гораздо проще установить эти приложения, чем собирать самому из исходников и бороться с совместимостью библиотек, так как это уже сделали разработчики дистрибутива за него.

Для работы с SDR разрабатывается и поддерживается дистрибутив Dragon OS. Поэтому мы будем использовать его, а не компилировать всё сами.

Я думаю, что уже достаточно утомил вас теоретическими сведениями, и нужно привести практический пример.

Практическая часть


▍ Настройка и проверка RTL-SDR-приёмника


1. Загружаем дистрибутив Dragon OS из сети интернет. Я использовал образ DragonOS_FocalX_R29.1.iso.

2. Записываем на флеш-накопитель с помощью balenaEtcher.

3. Перезагружаем компьютер и выбираем загрузку с флеш-накопителя.

После загрузки Dragon OS подключаем RTL-SDR-приёмник с антенной. Я использовал домашнюю телевизионную для приёма DVB-T2.

4. Проверяем, работает ли приёмник. Например, попробуем послушать радио.

$ gqrx -r

image

5. Устанавливаем частоту известной вам радиостанции. И слушаем её. Если вы услышали звук любимой радиостанции, можно продолжать дальше.

▍ Просмотр трафика GSM


Как я уже говорил ранее, GSM-900 использует следующие частоты: 890-915 МГц и 935-960 МГц.
Для приёма и передачи сигнала используются разные частоты. Большинство RTL-SDR-приёмников могут принимать и оцифровывать радиосигнал от 26 МГц до 1766 МГц при максимальной полосе в около 2.4 Мгц, что не позволит нам посмотреть весь трафик базовой станции GSM.

Наиболее эффектно выглядит широковещательный трафик от базовой станции, который специально передаётся с высоким уровнем сигнала.

Поэтому попробуем посмотреть его.

1. Для начала нужно узнать ARFCN базовой станции, на котором транслируется широковещательный трафик. Сделать это можно из системного меню телефона. Например, в телефонах Samsung это комбинация *#0011#.

Частота для ARFCN downlink в МГц рассчитывается по формуле:

F(ARFCN)downlink = 935 + 0.2*ARFCN

2. Запускаем grgsm_livemon c этой частотой.

$ grgsm_livemon -f <частота в мегагерцах>M -g 40

В терминале должны «забегать» различные циферки. Это значит, что нам удалось раскодировать GSM-сигнал. Обратите внимание, мы только раскодируем сигнал, никакого дешифрования мы не выполняем.

image

3. Запускаем Wireshark.

$ sudo wireshark -k -f udp -Y gsmtap -i lo

В Wireshark вы должны увидеть сообщения, которые вещает базовая станция, и их структуру.

image

▍ Просмотр IMSI и LAC базовой станции, которые фигурируют в трафике GSM


В целях безопасности значение IMSI между базовой станцией и абонентом передаётся как можно реже. Вместо него используется TMSI, который выдаёт GSM-сеть при регистрации абонента в LA. Но иногда базовая станция всё-таки шлёт пакеты с IMSI. Это абоненты, для которых нет TMSI в VLR. Можно в Wireshark посмотреть такие пакеты, а можно воспользоваться скриптом simple_IMSI-catcher, который более красиво предоставит эту информацию.

Воспользуемся скриптом simple_IMSI-catcher.

$ cd /usr/src/IMSI-catcher
$ sudo python3 ./simple_IMSI-catcher.py --sniff

Если хотим записывать полученную информацию в файл, то:

$ sudo python3 ./simple_IMSI-catcher.py --sniff | sudo tee filename.txt

Информацию о базовой станции мы можем использовать для нахождения её местоположения, например, можно использовать сайт OpenCelliD.

image

▍ Дешифрация входящего SMS


Входящее SMS можно расшифровать, только зная используемый алгоритм шифрования и значение ключа Kc. Если алгоритм можно узнать из радиоэфира, то значение Kc находится на SIM-карте абонента, поэтому, что логично, посмотреть содержимое вы сможете только для SMS, которые предназначаются вам.

Технологии уже давно шагнули вперёд и, скорее всего, вам необходимо создать «лабораторные условия», чтобы дешифровать SMS-сообщение.

Оператор может присылать входящую SMS, используя технологию GPRS, поэтому нужно отключить мобильный интернет на телефоне.

Также вам нужно переключить телефон в режим, когда он использует только 2G.

Дешифрация SMS может вызвать трудности, так как оператор может использовать Frequency Hopping, DCS-1800 совместно с GSM-900, и телефон может упорно работать с BTS на частотах DCS, недоступных для большинства RTL-SDR. Поэтому вам может понадобиться выполнить рутование телефона или использовать GSM-модем, который позволяет более тонко настраивать работу с BTS (например, принудительно заставить работать модем только с определённым ARFCN), или использовать полноценный SDR-приёмник. Но при использовании полноценного SDR пропадает та самая изюминка, что вы принимаете сигнал GSM на телевизор).

Алгоритм действий следующий:

1. Загружаемся с флеш-накопителя с Dragon OS.

2. Подключаемся к своей Wi-Fi-сети с выходом в интернет.

3. Запускаем консоль и устанавливаем putty.

$ sudo apt update
$ sudo apt install putty

4. Подключаем телефон или GSM-модем. Для телефонов Samsung, чтобы можно было вводить AT-команды, нужно ввести комбинацию *#0808# и выбрать режим с ACM или modem.

5. Подключаем RTL-SDR c антенной.

6. Поверяем, распознался ли модем операционной системой.

$ ls /dev/tty*

Вы должны увидеть в списке ttyUSB0 или ttyACM0.

7. Запускаем и настраиваем putty.

$ putty

image

image

8. Открываем консоль putty. Если вы используете телефон в качестве модема, то радиомодуль телефона может проявлять активность, и вы увидите некоторые сообщения. Желательно дождаться момента, когда новые сообщения не будут появляться.

9. Вводим команду AT.

> AT

10. Узнаем значение IMSI телефона:

> AT+CIMI

11. Узнаем значение LOCI, первые 4 байта которого являются TMSI:

> AT+CRSM=176,28452,0,0,9

  • 176 — чтение с SIM-карты;
  • 28452 — файл с LOCI на SIM-карте;
  • 0 — младший байт смещения;
  • 0 — старший байт смещения;
  • 9 — количество байт, которые необходимо почитать.

12. Узнаем Kc:

> AT+CRSM=176,28448,0,0,9

Кс — это первые 8 байт из 9.

13. Узнаем ARFCN, на котором работает ваш телефон в Net Monitor. Для Samsung это комбинация *#0011#. Телефон должен работать в режиме GSM-900.

14. Рассчитываем частоту downlink для ARFCN, который вы увидели в Net Monitor по формуле:

F(ARFCN)downlink = 935 + 0.2*ARFCN

15. Записываем радиоэфир в файл:

$ grgsm_capture -f <частота в мегагерцах>M, -s 1M capture.cfile

16. Отсылаем с другого телефона на ваш телефон SMS и ожидаем момента, когда оно придёт.

17. Заканчиваем запись радиоэфира, нажав клавиши Ctrl+C.

18. Запускаем в отдельной консоли Wireshark:

$ sudo wireshark -k -f udp -Y gsmtap -i lo

19. Декодируем сообщения, передаваемые в BCCH, который использует временное окно 0:

$ grgsm_decode -a <ARFCN> -c capture.cfile -m BCCH -t 0

Нас интересуют сообщения Paging Request 1, Paging Request 2, Paging Request 3. В одном или нескольких из этих сообщений должен находиться ваш TMSI или IMSI. Записываем номер последнего кадра с вашим TMSI или IMSI. Он является отправной точкой, когда BTS инициировала процесс передачи SMS.

Ещё представляют интерес сообщения:

  • System Information Type 1 — там содержится информация о том, какие частоты использует BTS;
  • System Information Type 2 — там содержится информация о соседних сотах (BTS);
  • System Information Type 3 — там содержится информация о текущей соте.

Immediate Assignment — это сообщение отсылается в ответ на запрос канала от вашего телефона.

20. Находим наш Immediate Assignment. Он должен содержать Channel Description и с большой долей вероятности должен иметь номер кадра ближайший к нашему Paging Request.

image

Тут нас интересует временное окно (timeslot) выделяемого канала, а также hopping channel должен быть no. У меня один оператор выделял каналы без hopping channel, другой — с hopping channel. Если у вас второй случай, то у вас так просто прочитать SMS не получится. Нужно устройство получше, чем RTL-SDR и немного другие действия.

21. Очищаем сообщения в Wireshark.

22. Декодируем канал SDCCH8, по которому передавалось наше SMS:

$ grgsm_decode -a <ARFCN> -c capture.cfile -m SDCCH8 -t <номер timeslot выделенного канала>

Нас интересует сообщение Ciphering Mode Command, которое в поле Cipher Mode Setting содержит название алгоритма шифрования. У меня был A5/3.

23. Очищаем сообщения в Wireshark.

24. Декодируем и дешифруем наш канал SDCCH8:

$ grgsm_decode -a <ARFCN> -c capture.cfile -m SDCCH8 -t <номер timeslot выделенного канала> -e 3 -k <наш Кс>

-e 3 — в случае, если у нас алгоритм A5/3

Нас интересует сообщение CP-DATA. В поле TP-User-Datа будет находиться искомое сообщение.

Заключение


К сожалению, объём статьи не позволяет изложить всё по сетям GSM. Но я постарался дать самые базовые понятия, которые позволят вам чувствовать себя более уверенно при чтении литературы или просмотре видео по GSM. Я не являюсь экспертом в области мобильных сетей и думаю, что знающий человек найдёт огрехи в статье. Поэтому если вы заметили какие-то неточности, буду рад замечаниям в комментариях или личных сообщениях. Сделаем наш мир лучше, наполняя его более качественным контентом.

Я надеюсь, что вы узнали новую для себя информацию или, по крайней мере, систематизировали уже имеющиеся знания. Вы увидели, что, обладая определёнными знаниями, можно получать информацию из цифр идентификаторов, фигурирующих в мобильной сети. Так как трафик GSM, хоть и в ограниченном виде может посмотреть любой желающий, используя минимум оборудования (хотя расшифровать его, скорее всего, у него не получится), по возможности лучше использовать LTE-сети, так как они более защищённые, a также технологии VoLTE или VoWiFi, если они поддерживаются оператором.

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

Когда операторы полностью перейдут на более совершенные технологии 4G и 5G, я думаю, будет уже не так просто посмотреть, что происходит в мобильной сети, так что спешите это увидеть, пока это возможно.

Пол-лимона подарков от RUVDS. Отвечай на вопросы и получай призы ????

Комментарии (15)


  1. Javian
    17.05.2023 02:39

    В данном случае на E4000 были бы какие-то существенные отличия от Rafael ?


    1. artyomsoft Автор
      17.05.2023 02:39

      E4000 позволяет оцифровывать сигнал до 2300МГц, что захватывает диапазон DCS-1800 и DCS-1900, которые недоступны Rafael (1750 МГц). Но я не проверял с DCS-1800, так как у меня нет Е4000, поэтому в статье только GSM-900.


  1. npupoga
    17.05.2023 02:39

    в ликбез надо добавить lte-over-3g и volte@5.5g - когда терминал видит четыре lte и они все в разных g ... многие смартфоны прям мучаются когда видят одновременно две lte


  1. dlinyj
    17.05.2023 02:39
    +6

    Очень хабратортная статья, снимаю шляпу. Очень круто!


    1. artyomsoft Автор
      17.05.2023 02:39
      +4

      Спасибо )


  1. Toshykan
    17.05.2023 02:39
    -1

    Оч.интересно. плюсанул, но кАрма не позволят )


  1. MaFrance351
    17.05.2023 02:39
    +2

    Очень интересно!
    Встречал уже как-то пост с описанием того, как принимать этот трафик на RTL-SDR, но декодирования и дешифрования там не было. А, как оказалось, попробовать с этим поиграться не так уж и сложно.


    С DragonOS, кстати, тоже дело имел, там из коробки имеются средства для запуска OsmoBTS.


  1. Tsentr
    17.05.2023 02:39

    Спасибо за статью!

    Подскажите пожалуйста если кто в теме - как мне залочить телефон андроид, чтобы он только с вышками из одобренного списка соединялся - а сигналы от других вышек полностью игнорировал? Есть для этого софт или какое-то другое решение? Лет 5 искал ответ на этот вопрос и так и не нашел - а тут статья про телек - наверняка эксперты будут читать - не то что я


    1. artyomsoft Автор
      17.05.2023 02:39
      +1

      Насколько мне известно, для разных мобильных станций это делается по-разному. Например, для телефонов Samsung нужно войти в Net Monitor (*#0011#) и ввести код в пункт меню Key Input. Но телефон должен быть рутованый.

      А, например, GSM-модем может иметь Еngineering Mode, который позволят ограничить список допустимых ARFCN. Это делается через AT-команды модема.


      1. Tsentr
        17.05.2023 02:39

        спасибо за пинок в нужном направлении)


  1. iamkisly
    17.05.2023 02:39
    +1

    Когда операторы полностью перейдут на более совершенные технологии 4G и 5G

    Зависит от плотности населения. В России вероятно gsm900 будет очень долго так как осуществляет функции покрытия. Иногда вместо него UMTS900, но это "особые случаи". А DCS1800 наоборот повсеместно вывыпиливается в пользу LTE1800.


    1. Astroscope
      17.05.2023 02:39

      Зависит от плотности населения. В России вероятно gsm900 будет очень долго так как осуществляет функции покрытия.

      Но LTE band 8 занимает тот же диапазон, что и GSM-900, а LTE band 20 и того ниже, при этом точно так же поддерживает голосовую связь (VoLTE), но в дополнение дает более-менее передачу данных, обычно небыструю в реальных сетях, но все же несопоставимую с GPRS/EDGE. Так что нет, не аргумент.

      Иногда вместо него UMTS900, но это "особые случаи".

      Это опять все тот же диапазон (band 8) - какой смысл в UMTS при наличии LTE или и вовсе 5G NR, читай band N8?

      А DCS1800 наоборот повсеместно вывыпиливается в пользу LTE1800.

      Логично же.


      1. iamkisly
        17.05.2023 02:39
        +1

        Так что нет, не аргумент

        Что вижу то и пою. Я своими глазами с 2012 наблюдаю, как всё это время хоронят gsm и всё никак.

        В России доля VoLTE растёт не так быстро как хотелось бы, голос ещё долго просидит в 2/3g. Потом мне кажется, что проникновение терминалов в rural зону ну такое себе, там достаточно людей со старыми звонилками.. сам heat мапы давно не смотрел. А бесшовный suburban у нас только вокруг мегаполисов. Ну и наконец, темпы строительства новых сайтов снизились до из-за санкций. Всех операторов вероятно ждёт процесс переиспользования оборудования, будут снимать с одних сайтов и вешать на другие более приоритетные. В этих условиях отказываться от 2g подложки никто не будет.


  1. vvzvlad
    17.05.2023 02:39

    Kc при следующей регистрации в сети будет другим?


    1. artyomsoft Автор
      17.05.2023 02:39

      При использовании телефона Кс поменялось после выключения и последуюшего выключения. Когда использовал GSM-модем - меня удивило, что после перагрузки модема Кс осталось прежним. Ну а так да, вы правы, полагаться, что Кс не поменяется не стоит.