Добавляем GPRS в домашнюю GSM сеть

Добавляем 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)

Max Open Source https://t.me/coursmax

Report Page