Продукты «Хакера»

  • Ежеквартальный «Хакер» #3

    Ежеквартальный «Хакер» #3

    Лучшие статьи квартала на бумаге

    2 000 ₽

    Заказать журнал
  • Годовая подписка на Xakep.ru

    Годовая подписка на Xakep.ru

    Полный доступ к статьям и архиву выпусков

    6 000 ₽ в год

    Подписаться
  • «Пентест WEB» для начинающих

    «Пентест WEB» для начинающих

    Совместный курс «Хакера» и лаборатории «Хаксет»

    7 000 ₽

    Купить курс
  • Спецвыпуск «Хакера» #4

    Спецвыпуск «Хакера» #4

    Лучшие статьи за 2021–2022 годы на бумаге

    2 000 ₽

    Заказать журнал
Соб­рав свою базовую стан­цию на YateBTS, я обна­ружил, что шиф­рование ради­ока­нала там сло­мано и это не починить. Такой резуль­тат меня не устро­ил, и я пошел по дру­гому пути. Сегод­ня покажу, как под­нять свою соту на OsmoBTS, как прог­рамми­ровать SIM-кар­ты, и заод­но гля­нем пару занят­ных штук, дос­тупных, ког­да опе­ратор — ты сам.

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

Все началось со статьи «Это база! Как под­нять свою базовую стан­цию 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-сети в каналь­ном режиме. Схе­ма силь­но упро­щена, и рас­смат­ривать будем толь­ко плос­кость поль­зовате­ля.

Схема простой 2G-сети с CS
Схе­ма прос­той 2G-сети с CS

На схе­ме изоб­ражены два або­нен­та (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 REQUEST, в котором ука­зыва­ется, что канал тре­бует­ся для LU (Location Update Request), то есть зап­роса регис­тра­ции. Сеть отве­чает на зап­рос пакетом IMMEDIATE ASSIGNMENT и выда­ет спе­циаль­ный канал для устрой­ства, который обоз­нача­ется как 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 REALLOCATION COMPLETE, ина­че потом сеть не опоз­нает або­нен­та с неак­туаль­ным 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) — клю­чевой эле­мент сети, который отве­чает за мар­шру­тиза­цию поч­ти все­го тра­фика в сети, а так­же аутен­тифика­цию або­нен­тов и связь с внеш­ними сетями.

OsmoMSC в сети Osmo
OsmoMSC в сети Osmo

MSC нап­рямую работа­ет c HLR и MGW для обес­печения свя­зи меж­ду або­нен­тами. Из HLR, как уже ранее упо­мина­лось, берет­ся вся информа­ция о клю­чах и основные регис­тра­цион­ные дан­ные вро­де IMSI.

OsmoMSC под­держи­вает мно­жес­тво про­токо­лов, но самый важ­ный в кон­тек­сте статьи — это MGCP, Media Gateway Control Protocol. MGCP исполь­зует­ся для управле­ния MGW. Сам MSC не занима­ется ком­мутаци­ей RTP на низ­ком уров­не, а управля­ет MGW через MGCP.

Внут­ренняя струк­тура MSC при­веде­на на схе­ме ниже. По ней же вид­но, что VLR встро­ен в OsmoMSC.

Внутреннее устройство OsmoMSC
Внут­реннее устрой­ство OsmoMSC

OsmoBSC

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

Поддерживаемые модули OsmoBSC
Под­держи­ваемые модули OsmoBSC

Продолжение доступно только участникам

Материалы из последних выпусков становятся доступны по отдельности только через два месяца после публикации. Чтобы продолжить чтение, необходимо стать участником сообщества «Xakep.ru».

Присоединяйся к сообществу «Xakep.ru»!

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

  • Подпишись на наc в Telegram!

    Только важные новости и лучшие статьи

    Подписаться

  • Подписаться
    Уведомить о
    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии