Добавляем GPRS в домашнюю GSM сеть
Max Open SourceТретья статья из цикла покажет как исследовать работу пакетных данных в сетях GSM при помощи Osmocom. Другими словами мы будем раздавать интернет с ноутбука абонентам нашей домашней сети на основе двух osmocombb-совместимых телефонов и анализировать TCP/IP трафик.

Подготовка
Для работы вам понадобится сеть и описание из цикла статьей.
Запускаем GSM-сеть у себя дома
Анализ трафика GSM сетей в Wireshark
Для тех, кто еще не начинал строить инфраструктуру для домашней сети, я предлагаю не собирать все компоненты osmocom вручную, а попробовать установить уже готовые nightly builds пакеты. Они доступны для дистрибутивов Debian и Ubuntu. Репозитории указаны по ссылке выше. Теоретически установка таким методом должна проходить проще и без особых проблем, но сам я этого делать не пробовал.
Теория
Для начала определимся, что нам нужно изменить в нашей домашней сети, чтобы добавить поддержку GPRS.
Весь процесс описан в инструкции на официальном сайте, которая вполне актуальна.
По ссылке вы найдете следующую схему:

Разберем по порядку.
PDCH — это Packet Data Channel. Для передачи пакетных данных должен использоваться особый тип логического канала. До сих пор мы использовали TCH/H для обслуживания голосовых вызовов. Нам потребуется заменить TCH/H на PDCH. Мы потеряем возможность звонить, но зато нам не понадобиться докупать еще телефоны.
nanoBTS — мы будем использовать OsmoBTS в связке с двумя osmocombb-совместимыми телефонами для создания базовой станции, как и делали раньше.
osmo-nitb — Здесь потребуется минимальная конфигурация для активации GPRS сервиса, а так же придется пересобрать osmo-nitb с поддержкой osmo-sgsn.
osmo-sgsn — Serving GPRS Support Node. По сути ядро GPRS сети, аналог MSC для голосовых вызовов.
Скопирую из Википедии список функций:
- контроль доставки пакетов данных пользователям;
- взаимодействие с реестром собственных абонентов сети HLR или аутентификация (проверка разрешения на запрос пользователями услуги); механизм совпадает с механизмом аутентификации в GSM;
- мониторинг находящихся в режиме online пользователей;
- преобразование кадров GSM в форматы, используемые протоколами TCP/IP глобальной компьютерной сети Internet;
- регистрация или «прикрепление» (attachment) абонентов, вновь «появившихся» в зоне действия сети;
- шифрование данных; алгоритм шифрования в технологии GPRS (GEA1, GEA2, GEA3) отличаются от алгоритмов шифрования в GSM (A5/1, A5/2, A5/3), но разработаны на их основе;
- сбор поступающей биллинговой информации, пересылка её в главный офис и т. п.
ggsn — GPRS Gateway Support Node. Данный узел стоит на границе между GPRS Core network (GTP) и Интернетом. Легко собирается и подключается к остальным модулям osmocom.
На данной схеме пропущен еще один компонент PCU — Packet Control Unit.
PCU выполняет некоторые функции BSC, но только для пакетных данных. Для его реализации будет использован osmo-pcu.
На схеме ниже PCU присутствует:

Модифицируем сеть
Напоминаю, что мои конфигурационные файлы хранятся в /root/.osmocom. Как и в первой статье они будут прикреплены в конце. Прежде чем использовать конфигурационные файлы, нужно ввести корректные IP адреса вместо ВИРТУАЛЬНЫЙ_IP и ОСНОВНОЙ_IP, а так же GSM900 или DCS1800 вместо ДИАПАЗОН и номер ARFCN вместо КАНАЛ.
Предполагается, что все компоненты будут работать на одном устройстве, так что нам потребуется создать виртуальный интерфейс для сетевого адаптера. IP адреса для GGSN и SGSN должны отличаться. Моя домашняя сеть 192.168.1.0/24, IP адрес моего основного Wi-Fi интерфейса 192.168.1.37 и IP адрес 192.168.1.250 не занят, так что я задаю его как виртуальный.
ifconfig wlan0:0 192.168.1.250
Так же вам потребуется разрешить транзитные пакеты и настроить NAT, так как мы будем «раздавать» Интернет всем абонентам сети. (Сеть 192.168.0.0/24 менять не нужно, она будет закреплена за интерфейсом tun0, который появится при запуске всех компонентов GPRS инфраструктуры).
echo 1 > /proc/sys/net/ipv4/ip_forward iptables -A POSTROUTING -s 192.168.0.0/24 -t nat -o wlan0 -j MASQUERADE
Понятно, что такая конфигурация не переживет перезагрузки, но есть способы, которые легко ищутся в поисковике, чтобы закрепить эти настройки.
Устанавливаем osmo-pcu
git clone git://git.osmocom.org/osmo-pcu.git cd osmo-pcu autoreconf -i ./configure make make install cd .. ldconfig osmo-pcu -h
Конфигурируем osmo-nitb
Запускаем osmo-nitb, подключаемся к VTY и выполняем команды.
telnet 127.0.0.1 4242 en conf t network bts 0 gprs mode gprs gprs routing area 0 gprs cell bvci 2 gprs nsei 101 gprs nsvc 0 nsvci 101 gprs nsvc 0 local udp port 23000 gprs nsvc 0 remote udp port 23000 gprs nsvc 0 remote ip 192.168.1.250 trx 0 timeslot 1 phys_chan_config pdch end write file
Останавливаем osmo-nitb.
Устанавливаем ggsn
git clone git://git.osmocom.org/openggsn.git cd openggsn autoreconf -i ./configure make make install ldconfig
Устанавливаем osmo-sgsn
Установите зависимости и пересоберите osmo-nitb чтобы включить поддержку osmo-sgsn.
apt-get install libc-ares-dev
cd openbsc/openbsc/ make clean autoreconf -fi ./configure make make install ldconfig cd ../.. ggsn -h osmo-sgsn -h
Настраиваем osmo-sgsn
cd /root/.osmocom touch osmo_sgsn.cfg osmo-sgsn telnet localhost 4245 en conf t sgsn gtp local-ip 192.168.1.250 ggsn 0 remote-ip 192.168.1.37 ggsn 0 gtp-version 1 auth-policy accept-all end conf t ns encapsulation udp local-ip 192.168.1.250 encapsulation udp local-port 23000 encapsulation framerelay-gre enabled 0 end write file exit
Настраиваем ggsn
cd /root/.osmocom touch ggsn.conf vi ggsn.conf #TAG: listen # Specifies the local IP address to listen to listen 192.168.1.37 # TAG: dynip # Dynamic IP address pool. # Used for allocation of dynamic IP address when address is not given # by HLR. # If this option is not given then the net option is used as a substitute. # dynip 192.168.254.0/24 # TAG: pcodns1/pcodns2 # Protocol configuration option domain name system server 1 & 2. pcodns1 8.8.8.8 pcodns2 8.8.4.4
Настраиваем osmo-pcu
cd /root/.osmocom touch osmo-pcu.conf osmo-pcu -c /root/.osmocom/osmo-pcu.conf telnet localhost 4240 en conf t pcu flow-control-interval 10 cs 2 alloc-algorithm dynamic alpha 0 gamma 0 write file exit
Возможные проблемы
Говорят, что могут быть проблемы с DNS трафиком, тогда рекомендуется добавить еще одно правило в iptables. У меня таких проблем не возникало.
iptables -t nat -I PREROUTING -i tun0 -p udp --dport 53 -j DNAT --to-dest 8.8.8.8
Так же убедитесь, что у вашего устройства добавлена хотя бы одна APN точка доступа в настройках GPRS, иначе телефон может вовсе не пытаться получить GPRS сервис от оператора.
Запуск
Запускаем osmo-nitb
cd /root/.osmocom osmo-nitb -s -c /root/.osmocom/open-bsc.cfg -l /root/.osmocom/hlr.sqlite3 -P -C --debug=DSQL:DLSMS:DRLL:DCC:DMM:DRR:DMSC:DHO:DGPRS:DNS:DLLC:DCTRL
Запускаем ggsn
cd /root/.osmocom ggsn -c /root/.osmocom/ggsn.conf -f -d
Запускаем sgsn
cd /root/.osmocom osmo-sgsn -c /root/.osmocom/osmo_sgsn.cfg -d DRLL:DCC:DMM:DRR:DNM:DMSC:DHO:DGPRS:DNS:DLLC:DCTRL
Запускаем трансиверы и osmo-bts
cd /root/osmocom/trx/src host/osmocon/osmocon -m c123xor -p /dev/ttyUSB0 -s /tmp/osmocom_l2 -c target/firmware/board/compal_e88/trx.highram.bin -r 99 cd /root/osmocom/trx/src host/osmocon/osmocon -m c123xor -p /dev/ttyUSB1 -s /tmp/osmocom_l2.2 -c target/firmware/board/compal_e88/trx.highram.bin -r 99 cd /root/osmocom/trx/src/host/layer23/src/transceiver/ ./transceiver -a SCH_КАНАЛ -2 -r 99 cd /root/.osmocom osmo-bts-trx --debug DRSL:DOML:DLAPDM -r 99
Вместо SCH_КАНАЛ нужно как и раньше задать ARFCN где располагается beacon channel коммерческой базовой станции с устойчивым сигналом.
Запускаем osmo-pcu
cd /root/.osmocom osmo-pcu -c /root/.osmocom/osmo-pcu.conf
Вы должны увидеть в консоли osmo-pcu нечто подобное

А в консоли osmo-nitb это

Обратите внимание, что при работе в такой сети ваш телефон считает, что он в роуминге и пакетные данные в роуминге часто отключены. Поэтому ничего работать не будет, если вы не разрешите GPRS в роуминге в настройках своего телефона.
Теперь, при подключении к сети вы должны увидеть подобные записи в консоли с osmo-pcu

И запись об авторизации в консоли osmo-sgsn

А при активации GRPS сервиса в телефоне вы увидите, что передача данных началась

Обратите внимание на тот факт, что скорость передачи данных в GPRS очень низкая, в то же время современные телефоны при получении доступа к сети тут же начинают процесс проверки обновлений, почты, новостей. Все ваши приложения начинают обновлять свои данные. Это может привести к тому, что вам будет затруднительно открыть что-то в браузере, так как, помимо низкой пропускной способности, могут происходить потери пакетов.
Вы можете исправить положение ограничив доступ на машине, которая раздает Интеренет для подсети 192.168.0.0/24 (tun0), оставив доступными только некоторые ресурсы.
Анализ трафика в Wireshark
Чтобы wireshark автоматически разбирал GPRS трафик, нужно в настройках протокола GPRS-NS добавить порт 23000.

Подключившись к сети, я буду прослушивать интерфейс wlan0 и изучать трафик.

Мы видим GSM пакеты (обратите внимание на ASCII представление данных. Видно, что это HTTP запрос)
Здесь можно найти так же классический TCP/IP трафик, например HTTP или DNS запросы. Можно использовать фильтр gprs-ns. Обратите внимание на вложенность TCP/IP протоколов в GSM протоколы.
DNS
HTTP
Естественно, нам доступен и классический TCP/IP трафик, который уже идет непосредственно от wlan0 в Интернет
И на это этапе мы получаем полный контроль над трафиком и можем провести полный спектр MitM атак против абонентов нашей GSM сети.
В случае создания фейковой базовой станции, подключившийся абонент становится недоступен для звонков извне и в стандартной конфигурации сам не может больше позвонить кому-то из своей телефонной книги, но зато у него будет доступен Интернет и высока вероятность, что он попытается им воспользоваться. Здесь он и может быть атакован злоумышленником.
В следующей статье мы рассмотрим практические примеры атак на абонентов GSM сети, подключившихся к поддельной базовой станции.
Конфигурационные файлы
ggsn.conf! open-bsc.cfg osmo_sgsn.cfg! osmo-bts.cfg! osmo-pcu.conf!
( https://telegra.ph/Konfiguracionnye-fajly-07-14 )
ggsn.conf! open-bsc.cfg osmo_sgsn.cfg! osmo-bts.cfg! osmo-pcu.conf!

Наш канал собрал самые свежие и актуальных обучающих курсы, книги, soft, идеальная навигация по курсам в два клика и прямая ссылка на любой курс. Нет регистраций. Нет оплаты.
С вами администрация канала Max Open Source (@coursmax)