Содержание статьи
- Теория
- Общая архитектура мобильной сети
- Логика работы сети при подключении нового устройства
- Компоненты ядра Osmocom
- Практика
- Стенд
- Сборка компонентов
- Настройка компонентов ядра
- Настройка параметров сети
- Проверка базовой работоспособности сети
- Звоним!
- SMS между абонентами
- Эксперименты
- Установка текстового SMS Sender ID
- Режим оповещений о происшествиях
- Заключение
Я давно интересуюсь темой мобильных сетей, их проектированием и работой. К сожалению, моя основная специальность никак с мобильными сетями не связана, поэтому в один момент я решил начать самостоятельно изучать, как работают мобильные сети.
Все началось со статьи «Это база! Как поднять свою базовую станцию GSM с помощью YateBTS», которая вышла в «Хакере» в январе 2026-го. В YateBTS, как оказалось, есть много ограничений, которые не дают полноценно воссоздать все возможности настоящей мобильной сети с шифрованием. Сегодня поднимем OsmoBTS и рассмотрим то, что было упущено в материале про YateBTS.
Эта статья предназначена для читателей, интересующихся мобильными сетями и их безопасностью. Конечно, сети 2G давно устарели и во многих странах даже уже отключены, но на их примере легко проследить, как развивалась технология, ведь даже с учетом прошедшего времени многие принципы работы сетей все еще сохранены в современных мобильных сетях.
warning
Статья имеет ознакомительный характер и предназначена для специалистов по безопасности. Автор и редакция не несут ответственности за любой вред, причиненный с применением изложенной информации. Распространение вредоносных программ, нарушение работы систем и нарушение тайны переписки преследуются по закону. Представленная информация может рассматриваться только в теоретическом или историческом контексте и не предназначена для практического применения.
Теория
Давай хорошенько разберем всю теорию, необходимую для понимания работы сети. Хоть теоретическая часть и не обязательна, чтобы поднять стенд, полностью понимать происходящее весьма полезно. Если не хочешь разбираться — переходи сразу к разделу «Практика», а сюда возвращайся, если встретишь незнакомый термин.
Наш лабораторный стенд будет работать в режиме CS (Circuit Switched) с двумя активными абонентами (двумя обычными телефонами). Для передачи и приема радиосигнала будем использовать USRP N210, а в качестве ядра — ноутбук ThinkPad E14. Данные в сети будут зашифрованы с помощью устаревшего алгоритма A5/1.
Цель — собрать полностью работающую сеть для звонков и SMS, без подключения к интернету, так как IP-доступ требует PS-домена и наличия узлов SGSN и GGSN, а SMS может работать без пакетной сигнализации (в режиме только канального доступа).
Еще проверим возможность назначения своего Sender ID для SMS и работу службы экстренных оповещений.
Общая архитектура мобильной сети
Начнем с самого простого: базовой станции, контроллера базовых станций, коммутационного ядра, базы абонентов, транспортной системы и медиашлюза. Все эти понятия нужны для базового описания архитектуры, начнем по порядку.
Базовая станция (BS, Base Station) — это приемопередающее устройство в сотовой связи, которое служит мостом между устройством абонента и сетью оператора (ядром). Она принимает сигналы от абонента и передает сигналы ядра обратно. По сути, это довольно глупый радиомодем, который не принимает никаких важных решений самостоятельно. В публичной сети базовая станция обычно устанавливается на мачты либо вышки с секторными антеннами.
Контроллер базовых станций (BSC, Base Station Controller) — главный элемент подсистемы базовых станций, который управляет всеми станциями, подключенными к нему. Он отвечает за переключение абонента между базовыми станциями, управление частотами, мощностью сигналов передатчиков и установлением соединений между устройствами и сетью (ядром), по сути выступая посредником между базовой станцией и коммутационным ядром.
Коммутационное ядро (MSC, Mobile Switching Center) — основная система ядра системы сотовой связи. Отвечает она за связь между контроллерами базовых станций и внешними сетями. Еще MSC в связке с базой абонентов (HLR) отвечает за аутентификацию абонентов.
База абонентов (HLR, Home Location Register) — это еще одна часть системы ядра, в которой хранятся все данные об абонентах, включая IMSI, MSISDN, Ki и другие данные для регистрации и работы с абонентом.
Транспортная система (STP, Signal Transfer Point) — узел маршрутизации сигнализации SS7/SIGTRAN, который соединяет BSC и MSC. Именно тут работает нашумевший протокол SS7, на котором все части системы и общаются между собой.
Медиашлюз (MGW, Media Gateway) отвечает за обеспечение голосового трафика между абонентами и элементами сети. MGW взаимодействует с BSC и MSC и обслуживает RTP-потоки голосового трафика. В больших сетях оба эти узла имеют свой шлюз (для распределения нагрузки), но в маленьких сетях можно подключить оба компонента к одному медиашлюзу.
Отличие канальной и пакетной коммутации
CS (канальная коммутация) — это тип коммутации, где для абонента на время сессии выделяется отдельный канал. В 2G в режиме CS идут голосовые звонки, SMS и служебный трафик.
PS (пакетная коммутация) — это альтернативный и более прогрессивный тип коммутации, где все передается пакетами, то есть каналы не закреплены за абонентом, и через все каналы идут пакеты от разных абонентов. Через PS обычно идут интернет, GPRS/EDGE и другие приложения, использующие пакеты.
Наш тестовый стенд будет работать в канальном режиме. Пакетный же устроен несколько сложнее, а для целей изучения безопасности эта сложность будет избыточна.
Канальная коммутация в современном мире встречается только в регионах, где все еще поддерживают legacy/fallback, так как он очень неэффективно использует радиоканал. Если во времена звонков и SMS он справлялся, то при появлении интернета пришлось перейти на пакетную систему.
Для лучшего понимания давай разберем простую схему 2G-сети в канальном режиме. Схема сильно упрощена, и рассматривать будем только плоскость пользователя.

На схеме изображены два абонента (MS1 и MS2), которые подключены к двум разным базовым станциям (BS1 и BS2). Всеми базовыми станциями на стенде управляет BSC (контроллер базовых станций), который напрямую общается с MGW (медиашлюзом) и STP (транспортной системой). MSC также подключен к MGW, это необходимо для корректной работы голосовой связи, так как в данном случае MSC и BSC должны работать вместе для ее обеспечения. Также MSC имеет прямой доступ к базе клиентов (HLR).
Логика работы сети при подключении нового устройства
Что же происходит при подключении нового устройства к сети 2G в режиме CS?
Начинается все с регистрации устройства. Допустим, HLR и MSC уже знают абонента, то есть есть ключи авторизации и IMSI внесены в таблицу. После включения телефона он начинает сканировать все сети вокруг, находит их базовые станции и получает от них информацию. Это включает в себя точную синхронизацию частоты с помощью FCCH (Frequency Correction Channel) и получение параметров базовой станции: связку MCC + MNC для опознания своей домашней сети, LAC и Cell ID. На основании этой информации принимается решение, стоит ли пытаться регистрироваться в этой сети.
Если устройство решило провести регистрацию, то для общения с сотой необходимо запросить выделенный канал связи. Для этого служит запрос типа CHANNEL , в котором указывается, что канал требуется для LU (Location Update Request), то есть запроса регистрации. Сеть отвечает на запрос пакетом IMMEDIATE и выдает специальный канал для устройства, который обозначается как SDCCH (Standalone Dedicated Control Channel). По этому каналу клиент может напрямую посылать запросы в сеть и получать на них ответы.
Затем клиент отправляет сам запрос LU, где обычно содержится тип обновления, который указывает, зачем вообще проводится регистрация: это может быть как смена локации, так и новая активация. Также в запросе может быть указан старый LAI, который состоит из MCC (Mobile Country Code — код страны по E.212), MNC (Mobile Network Code — код оператора) и LAC (Location Area Code — код локации, который оператор сам назначает для каждой группы сот).
В конце запроса обязательно должен быть указан идентификатор абонента — TMSI либо, если его нет, IMSI. Предпочитается использование TMSI, так как это временный идентификатор, что позволяет меньше отправлять ценный уникальный идентификатор IMSI в эфир.
info
Использование TMSI вместо IMSI мешает работе IMSI-перехватчиков. Подробнее о них мы уже писали в статье «Большой FAQ по перехвату мобильной связи: IMSI-кетчеры и как от них защититься».
После того как абонент отправил LU, базовая станция пересылает его в коммутационное ядро, которое проверяет абонента в базе HLR. Если все в порядке, выполняется аутентификация SIM, а затем, если требуется, активируется шифрование на радиоинтерфейсе.
Теперь, когда все компоненты системы договорились и проверили абонента, его можно полноценно регистрировать в сети, то есть добавить в базу VLR (Visitor Location Register, в стеке Osmo совмещен с MSC) с обновленными параметрами: выданным TMSI, новым LAI, профилями, услугами и так далее. После этого сеть отправляет пакет LU ACCEPT, который подтверждает регистрацию.
Так как в ответе назначается новый TMSI, устройство должно подтвердить его назначение пакетом TMSI , иначе потом сеть не опознает абонента с неактуальным TMSI.

Так как выделенный канал больше не нужен, соединение разрывается, а устройство клиента возвращается в режим ожидания. Канал выделяется только на время процедур вроде Location Update, отправки SMS или установки голосового вызова.
SMS в сети 2G CS
Чтобы получить более прикладные знания, давай разберем, как SMS находят своего адресата, потому что этот процесс затрагивает большинство систем ядра.
Представим, что оба абонента уже прошли регистрацию и сеть их знает. Для отправки SMS устройству отправителя нужно как‑то передать это послание в сеть. Для этого запрашивается канал SDCCH по процедуре, которую мы подробно разобрали выше.
После создания канала устройство отправляет SMS в сеть, используя сообщение SMS-SUBMIT. Оно доходит на OsmoBTS, который передает его на OsmoBSC, а тот, в свою очередь, перекладывает его в OsmoMSC. SMS-центр принимает сообщение и кладет его в очередь доставки, из которой MSC будет пытаться доставить его получателю.
Теперь начинается процедура поиска абонента. Нужно определить, находится ли получатель в сети и через какой MSC/VLR можно до него достучаться. В Osmocom есть два варианта архитектуры: встроенный SMS-центр в MSC (наш случай) и доставка через GSUP. В обоих случаях сеть ожидает, пока абонент не появится, после чего устанавливает с ним соединение и после получения канала отправляется сообщение MT SMS.
Компоненты ядра Osmocom
Мы уже разобрали, чем занимается каждый компонент сети. Проблема только в том, что в стеке Osmo некоторые компоненты объединены, а другие могут называться не как в спецификации. Раньше вообще все эти блоки были объединены в один большой проект OsmoNITB (Network In The Box), но потом разработчики одумались и все же разбили его на отдельные сервисы, которые можно изучать более‑менее независимо.
www
Эта статья не замена документации, и многие тонкости были сознательно опущены. Полную документацию к каждому компоненту можно найти на сайте Osmocom.
OsmoHLR
OsmoHLR (Home Location Register) отвечает за хранение данных о клиентах. Он содержит информацию о регистрации клиентов для 2G/3G-сетей: IMSI, MSISDN и ключи для создания идентификационных векторов, о которых мы поговорим чуть позже.
Внутри используется встроенный сервер GSUP (Generic Subscriber Update Protocol), своя база SQLite для данных клиентов и два интерфейса доступа: CTRL (Control Interface), который в большинстве случаев работает как интерфейс для автоматизации и сбора метрик, и VTY (Virtual Teletype), который применяется для настройки компонента, изменения конфигурации и добавления новых клиентов.
OsmoMSC
OsmoMSC (Mobile Switching Center) — ключевой элемент сети, который отвечает за маршрутизацию почти всего трафика в сети, а также аутентификацию абонентов и связь с внешними сетями.

MSC напрямую работает c HLR и MGW для обеспечения связи между абонентами. Из HLR, как уже ранее упоминалось, берется вся информация о ключах и основные регистрационные данные вроде IMSI.
OsmoMSC поддерживает множество протоколов, но самый важный в контексте статьи — это MGCP, Media Gateway Control Protocol. MGCP используется для управления MGW. Сам MSC не занимается коммутацией RTP на низком уровне, а управляет MGW через MGCP.
Внутренняя структура MSC приведена на схеме ниже. По ней же видно, что VLR встроен в OsmoMSC.

OsmoBSC
OsmoBSC — это контроллер базовых станций в стеке Osmocom. Поддерживает он множество разных реализаций базовых станций (см. схему). Красным на рисунке отмечено то, что мы будем использовать в статье.

Продолжение доступно только участникам
Материалы из последних выпусков становятся доступны по отдельности только через два месяца после публикации. Чтобы продолжить чтение, необходимо стать участником сообщества «Xakep.ru».
Присоединяйся к сообществу «Xakep.ru»!
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
