• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

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

    Запись на курс до 25 апреля. Получить промодоступ ...

Статья Миниатюрная сотовая станция на базе LimeSDR Mini и Orange Pi Zero

Добрейший вечерочек. Хотел бы обратить ваше внимание на насущную тему сотового фрикинга и того, каким он может стать в будущем (уже стал?). Лично для меня "Атака с помощью карманной сотовой станции" звучит из ряда вон по киберпанковски. Но современные одноплатники вкупе с SDR позволяют создавать миниатюрные сотовые станции всех поколений (2g/ 3g/ 4g), телевизионные вышки, электронные отмычки и много чего ещё.

Я же в этом треде хочу рассказать о сборке мини-сотовой станции 2G на базе LimeSDR-Mini и Orange Pi Zero. Почему не 3G и не 4G? Потому что мы не сможем подключиться к такой сети без собственной запрограмированной сим-карты. Защита в сетях последнего поколения требует, что бы в телефоне была симка с криптографическим ключом именно от этой сети. А так как сейчас на руках у меня не оказалось ни пустых симок, ни программатора, то придётся отложить эту затею на лучшие дни.

26339


Disclaimer

Для начала условимся, что все мы с вами любим лучшее в мире государство, в котором сейчас находимся, и чтим его законы. Вещание на gsm-частотах регулируется законом. Все тесты проводились вдали от города, где-то на марсианском поле. Все хакерские атаки выдуманы, а автор не понимает о чём говорит и вообще сел за компьютер в первые в жизни. По сему случаю ни я, ни форум, и никто другой кроме вас не несёт ответственности за ваши деяния.

Возможности

Что же может сделать гипотетический хакер с маленькой 2G станцией в 2019 году?
Во-первых, все мы знаем, что в поездах и метро нет связи. В такой ситуации телефоны очень охотно "приклеятся" к фейковой базовой станции. Если гипотетический хакер будет симулировать сотовую станцию гипотетического оператора MegaTron, то к нему подключаться все жертвы с сотовым оператором MegaTron, находящиеся примерно в пределах одного вагона (Не проверял дальность, в пределах двухэтажного дома работало везде). Далее начинается веселье с подделыванием номеров банка, ussd-запросы или "flash SMS"... Полный картбланш на фишинг. Можно даже попытаться взломать телефон бинарной смс.

Во-вторых, огромная часть IOT-устройств использует 2G. Это выгодно, так как 2G очень энергоэффективен, а таким устройствам не нужен быстрый интернет.
В благоприятных обстоятельствах (слабый сигнал от вышки) хакер может подключить IOT-устройство к фейковой станции и захватить нам ним контроль. Многие светофоры, банкоматы и прочие критические структуры сейчас подключаются к сети именно через 2G.

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

Hardware

выбран не случайно. Сейчас это самый компактный и дешёвый SDR с очень хорошими характеристиками (приёмо-передатчик LMS7002) и большим сообществом. Она позволит сделать всё то, ради чего вы хотели приобрести SDR.

26344


Orange Pi Zero на данный момент является одним из самых маленьких и дешёвых одноплатников в мире. Я взял его в силу компактности, низкого энергопотребления и малой цены, хотя любой другой одноплатник тоже подойдёт. В качестве памяти используется microsd-карта smartbuy класса 10 на 32 гигабайта.

26347


Охлаждение

Allwinner H2+ очень горячая штучка, нагревается вплоть до 70 градусов и выше. При том, что процессор падает в тротлинг (сброс частот) ещё после 60-ти. При этом он перестаёт успевать обрабатывать данные от трансивера, и базовая станция вырубается. Охлаждение в нашей ситуации необходимо . Я прикрепил медный радиатор от Raspberry с термопастой, но и это не спасает на долго. Самым простым и эффективным решением будет кулер 5х5 см на всю плату + радиатор.

26351


Следите за тем, что бы температура процессора не превышала 60 градусов, иначе трансивер перестаёт работать

Подключить кулер можно прямо к плате: один провод на 5 вольт, другой на GND


26389


Питание

Сама апельсинка питается от 5-ти вольт и требует не больше 1 Ампера, однако 1 Ампера НЕ хватает для работы OPI Zero с Lime mini, нужно как минимум 1.5 А (проверено на практике). Я использую повербанк Xiaomi на 5000 mAh, 5 вольт, 2 Ампера: полёт нормальный.

О компактности

Мне удалось уместить всю конструкцию в коробке от старого смартфона 13х7х4.5 см, хотя можно взять повербанк и вентилятор потоньше и уместиться в 2.5 - 3 см высоты.

26891

26886


26887
26888


26890

Software

В качестве OS хорошо подходит Armbian, я использую на базе Ubuntu Bionic, хотя Armbian Stretch тоже подойдёт. Запись образа на карту с помощью линукс сводится к форматированию в fat32 (Gparted), отмонтированию и записи с помощью dd:
Код:
umount /dev/mmcblk0p1
dd if=/path/to/armbian.img of=/dev/mmcblk0 status=progress
После записи вставляем карту в апельсинку, подключаем её к роутеру через ethernet и включаем питание (на момент установки хватит тока от USB-порта). Первый запуск может идти несколько минут, т.к. происходит настройка sd-карты. Далее, узнав ip апельсинки в роутере, подключаемся к ней по ssh. Стандартный пароль рута - 1234

После запуска можно обновить системуapt update && apt dist-upgrade -y && reboot
С помощью команды armbian-config настройте точку доступа через встроенный вайфай-адаптер. Через него по ssh будет происходить запуск и управление базовой станцией, когда всё будет готово.

Настало время собрать софт для мобильной станции. В этой статье я буду использовать Osmocom. Хотя в OpenBTS намного больше функционала (бинарные смс, ussd-notify и прочее), её довольно трудно собрать под armbian. Может в другой раз.

Всё, что связано с трансивером (LimeSuite, libosmocore, osmo-trx), соберём из исходников, остальное скачаем из оффициального репозитория osmocom.
LimeSuite
Код:
# Зависимости
apt install git g++ cmake libsqlite3-dev libi2c-dev libusb-1.0-0-dev
git clone https://github.com/myriadrf/LimeSuite.git
cd LimeSuite
mkdir builddir && cd builddir
cmake ../
make
make install
ldconfig
cd ../
sh LimeSuite/udev-rules/install.sh
cd ../
libosmocore
Код:
apt install libtool pkg-config libtalloc-dev libgnutls28-dev
git clone git://git.osmocom.org/libosmocore
cd libosmocore
autoreconf -fi
./configure
make
make install
ldconfig
cd ../
osmo-trx-lms
Код:
apt install libfftw3-dev
git clone git://git.osmocom.org/osmo-trx
cd osmo-trx
autoreconf -fi
./configure --without-uhd --with-lms
make
make install
ldconfig
cd ../
Осталось получить и . OsmoNITB (network in the box) реализует всю внутреннюю часть мобильной сети (MSC, HLR, SMSC и прочее), OpenBTS соединяет трансивер (в нашем случае osmo-trx-lms с limesdr mini) вместе с OsmoNITB.
Подключаем репозитории Osmocom
Код:
wget http://download.opensuse.org/repositories/network:/osmocom:/latest/Raspbian_9.0/Release.key
sha256sum Release.key
apt-key add Release.key
rm Release.key
echo "deb http://download.opensuse.org/repositories/network:/osmocom:/latest/Raspbian_9.0/ ./" > /etc/apt/sources.list.d/osmocom-latest.list
apt update
Устанавливаем
Код:
apt install osmocom-nitb osmo-bts-trx telnet
systemctl disable osmo-bts-trx.service
systemctl disable osmo-nitb.service
26388


Конфигурация

Создадим отдельную папку, где будут все конфиги программ
Код:
mkdir configs && cd configs
touch openbsc.cfg
touch osmo-bts.cfg
touch osmo-trx.cfg
Код:
!
! OpenBSC configuration saved from vty
!   !
password foo
!
line vty
no login
!
e1_input
e1_line 0 driver ipa
network
network country code 313
mobile network code 37
short name Codeby
long name Codeby
auth policy accept-all
location updating reject cause 13
encryption a5 0
neci 1
rrlp mode none
mm info 1
handover 0
handover window rxlev averaging 10
handover window rxqual averaging 1
handover window rxlev neighbor averaging 10
handover power budget interval 6
handover power budget hysteresis 3
handover maximum distance 9999
bts 0
  type sysmobts
  band GSM900
  cell_identity 0
  location_area_code 1
  training_sequence_code 7
  base_station_id_code 63
  ms max power 15
  cell reselection hysteresis 4
  rxlev access min 0
  channel allocator ascending
  rach tx integer 9
  rach max transmission 7
  ip.access unit_id 1801 0
  oml ip.access stream_id 255 line 0
  gprs mode none
  trx 0
   rf_locked 0
   arfcn 100
   nominal power 23
   max_power_red 20
   rsl e1 tei 0
   timeslot 0
    phys_chan_config CCCH+SDCCH4
   timeslot 1
    phys_chan_config SDCCH8
   timeslot 2
    phys_chan_config TCH/F
   timeslot 3
    phys_chan_config TCH/F
   timeslot 4
    phys_chan_config TCH/F
   timeslot 5
    phys_chan_config TCH/F
   timeslot 6
    phys_chan_config TCH/F
   timeslot 7
    phys_chan_config TCH/F
Код:
!
! OsmoBTS configuration example
!!
!
log stderr
  logging color 1
  logging timestamp 0
  logging level rsl notice
  logging level oml notice
  logging level rll notice
  logging level rr notice
  logging level loop debug
  logging level meas debug
  logging level pag error
  logging level l1c error
  logging level l1p error
  logging level dsp error
  logging level abis error

!
line vty
no login
!
phy 0
instance 0
  osmotrx rx-gain 40
  osmotrx tx-attenuation 50
osmotrx ip local 127.0.0.1
osmotrx ip remote 127.0.0.1
no osmotrx timing-advance-loop
bts 0
oml remote-ip 127.0.0.1
ipa unit-id 1801 0
gsmtap-sapi pdtch
gsmtap-sapi ccch
band 900
trx 0
  phy 0 instance 0
Код:
log stderr
logging filter all 1
logging color 1
logging print category 1
logging timestamp 1
logging print file basename
logging level set-all info
!
line vty
no login
!
trx
bind-ip 127.0.0.1
remote-ip 127.0.0.1
base-port 5700
egprs disable
tx-sps 4
rx-sps 4
rt-prio 18
chan 0
  tx-path BAND1
  rx-path LNAW
network country code и mobile network code отвечают за MCC и MNC соответственно.
long name - название, которое будет отображаться в мобильнике после регистрации в сети.
Этими значениями чаще всего оперируют плохие ребята, когда делают фейковые базовые станции.

Запуск

Время тестировать! Отключаем питание, вставляем Limesdr в usb, подключаем повербанк. Подсоединяемся к точке доступа, которую раздаёт апельсинка и конектимся к ssh. Удобно то, что можно управлять всем как с ноутбука, так и с телефона (ssh-client, termux).

Что бы не открывать 3 терминала для osmo-nitb, osmo-trx-lms и osmo-bts-trx, лучше использовать такой скрипт:
Код:
#!/bin/sh
sysctl -w kernel.sched_rt_runtime_us=-1
cd /root/configs

osmo-nitb &
NITB=$!

chrt -rr 99 osmo-trx-lms &
TRX=$!
sleep 5

osmo-bts-trx &
BTS=$!

wait $NITB $BTS $TRX
Код:
chmod +x start_bts.sh
./start_bts.sh
Запускать osmo-trx-lms нужно именно таким образом. Так мы выдаёт трансиверу максимальный приоритет (приоритет реального времени). Если запускать трансивер обычным способом, то процессор Апельсинки не всегда будет успевать обрабатывать его запросы, вследствие чего базовая станция проработает всего несколько минут и отключится. Так же я крайне рекомендую открыть htop во втором окне, что бы следить за показаниями температуры. Если она превышает 60 градусов, то нужно задуматься над лучшим охлаждением. С 60+ градусов на Allwinner H2+ у меня базовая станция работала не более двух минут.

26380


После запуска можно попробовать найти сеть с любого телефона (настройки > симкарты > операторы). Сеть будет отображаться как MCC + MNC. Например, если в конфиге network country code = 313, mobile network code = 37, то имя будет 31337

26382


MCC 001 и MNC 01 зарезервированы для тестовых сетей. На некоторых телефонах сеть с такими MNC-MCC может отображаться как "Test PLMN"

26383


После подключения в сеть двух и более телефонов между ними можно делать звонки и смс-ки. Присвоенный номер телефона можно узнать, набрав *#100#, а сменить номер можно в CLI OpenBSC telnet localhost 4242
Код:
OpenBSC> enable
OpenBSC# subscriber extension 46082 extension 31337
Здесь же можно отправлять смс на телефон прямо с компьютера, но сначала нужно создать виртуального пользователя с номером
Код:
# Создаём пользователя с imsi 111111
OpenBSC# subscriber create imsi 111111
# Меняем номер
OpenBSC# subscriber imsi 111111 extension 101
# Отправляем сообщение на номер 31337 с номера 101
OpenBSC# subscriber extension 31337 sms sender extension 101 send Hello from Codeby
26385


Конфиги и полезные скрипты на гитхабе: DrLafa/osmo-nitb-scripts
 

Dr.Lafa

Green Team
30.12.2016
507
1 049
BIT
0
буду признателен, если подскажите на какие девайсы стоит обратить внимание?
На один из девайсов я делал детальный обзор. По мне так это лучший вариант в силу своей цены и возможностей
 
  • Нравится
Реакции: ded_perded
D

ded_perded

На один из девайсов я делал детальный обзор. По мне так это лучший вариант в силу своей цены и возможностей
Уже ознакомился, спасибо !
 
S

SerjLime

Автору спасибо! Все работает!

немного только не понял, там Lime надо калибровать?
 

Diversant

Member
19.03.2019
5
0
BIT
0
Есть спецы кто сможет помочью в настройке BladeRf x 115 . Впринципе все работает по настройкам есть некоторые нюансы в которых не могу разобраться , готов заплатить человеку кто сможет помочью настроить все правильно и получить результат который мены интересует . А точнее при поднятии фейковый соты что бы все мобильные которые присоеденяись получали автоматически заданное мне смс . Все работает когда я поднимаю свою тестовую соту и при подсоединении мобила автоматом получает приветственное смс бла бла бла но когда я подставляю вековые настройки точнее сменяю МНЦ и МЦЦ того не получается , что я делаю не так или что нужно сделать что бы все получалось на поддельной соте и мобила получала приветственное смс как на моей поднятой соте ... Все это выше описанное я тестирую с YateBTS сейчас пытаюсь разобраться с ОпенБТС так как сама система намного серьезней на сколько я понимаю но могу ошибаться . Так вот прошу откликнутся людей кто реально в этом шарит и сможет помочью мне разобраться, готов поделится своими начатками , и дабы не отнимать время я готов заглотить кто сможет помочью решить мою проблему ... моя телега @ministerstvodel ili Jaber Diversant@xmpp.jp С уважением и наилучшими пожеланиями ...
 

winmakshv

One Level
22.04.2019
2
1
BIT
0
Какова примерная дальность сигнала?
По конфигурации из статьи я не смог достичь видимости станции дальше чем на 30см от GSM (3dbi) антенны. Не подскажете в чем может быть проблема?
 

Dr.Lafa

Green Team
30.12.2016
507
1 049
BIT
0
Какова примерная дальность сигнала?
По конфигурации из статьи я не смог достичь видимости станции дальше чем на 30см от GSM (3dbi) антенны. Не подскажете в чем может быть проблема?
Не смог затестировать дальше квартиры, в ней ловит на любом расстоянии.
Попробуйте настроить по этому мануалу, скорее всего что-то с конфигами DrLafa/osmo-nitb-scripts
 

winmakshv

One Level
22.04.2019
2
1
BIT
0
Сборка с гитхаба при запуске жалуется на отсутствие osmo-nitb.service, где можно найти данный файлик (возможно не правильно понял, и это сервис)?
Собирал все на Ubuntu 16 32bit
python3 main.py -c config.json
[*] Checking for SDR device..
[+] Found device: * [LimeSDR Mini, media=USB 3.0, module=FT601, addr=24607:1027, serial=*************]

cp: cannot stat '/root/osmo-nitb-scripts/configs/osmo-nitb.service': No such file or directory
kernel.sched_rt_runtime_us = -1
[+] starting osmo-nitb.service ...
[+] starting osmo-trx-lms.service ...
 
  • Нравится
Реакции: Dr.Lafa

Dr.Lafa

Green Team
30.12.2016
507
1 049
BIT
0
Сборка с гитхаба при запуске жалуется на отсутствие osmo-nitb.service, где можно найти данный файлик (возможно не правильно понял, и это сервис)?
Собирал все на Ubuntu 16 32bit
python3 main.py -c config.json
[*] Checking for SDR device..
[+] Found device: * [LimeSDR Mini, media=USB 3.0, module=FT601, addr=24607:1027, serial=*************]

cp: cannot stat '/root/osmo-nitb-scripts/configs/osmo-nitb.service': No such file or directory
kernel.sched_rt_runtime_us = -1
[+] starting osmo-nitb.service ...
[+] starting osmo-trx-lms.service ...
Поправил путь до файла. Моя ошибка
 
Последнее редактирование:

Alex333

Green Team
26.05.2019
14
2
BIT
0
пробую поднять этот проект на rpi zero v.1.3...не выходит, с консоли все... бесконечно выскакивают строки... работаю через ваш скрипт.... отдельно осмо-нитб и осмо-бтс нормально запускаются... вероятно, это слабость малинки? или может я в конфигах затупил. отмечу, что осмокомбб получился на моторолках... все норм... а вот тут не пойму. смотрел по ттх - rpi 0 arm6 - orange - arm7... выбрал малину из-за того, что стабильнее... подскажите. в чем проблема, на ваш взгляд?
 

Dr.Lafa

Green Team
30.12.2016
507
1 049
BIT
0
пробую поднять этот проект на rpi zero v.1.3...не выходит, с консоли все... бесконечно выскакивают строки... работаю через ваш скрипт.... отдельно осмо-нитб и осмо-бтс нормально запускаются... вероятно, это слабость малинки? или может я в конфигах затупил. отмечу, что осмокомбб получился на моторолках... все норм... а вот тут не пойму. смотрел по ттх - rpi 0 arm6 - orange - arm7... выбрал малину из-за того, что стабильнее... подскажите. в чем проблема, на ваш взгляд?
У самого такая же проблема на rpi zero. Вероятнее всего одноядерный процессор малинки не успевает обрабатывать данные с osmo-trx-lms
 

Alex333

Green Team
26.05.2019
14
2
BIT
0
Доброго времени суток! У меня теперь orange pi PC. Может ли эта версия уступать нулевой версии? У меня ошибки по поводу потери пакетов.. "dropped packets", "Tranceiver stopped", "Closing LMS device"... В чем может быть проблема? Заранее, спасибо.
 

Alex333

Green Team
26.05.2019
14
2
BIT
0
Есть момент один... htop показывает, что 4 частоты под 480 МГц... Повышать нужно самостоятельно? Подскажите, пожалуйста.

Исправил: с частотами все нормально, изменились... потом проверил... температура 32 градуса
 
Последнее редактирование:

Pavelectric

One Level
21.09.2019
4
1
BIT
0
Замечательная статья, спасибо.
Следующий вопрос наверно логичный - как объединить несколько станция?
Ведь "производитель" показал вот такую вещь:
LimeSDR_Mini_Raspberry_Pi_BTS_Stacked.jpg

Может получится отличная альтернатива существующим сотам.
Конечно есть описание, но вот ЖИВОЕ исполнение всегда приятней читать.
 
  • Нравится
Реакции: Dr.Lafa

Dr.Lafa

Green Team
30.12.2016
507
1 049
BIT
0
Замечательная статья, спасибо.
Следующий вопрос наверно логичный - как объединить несколько станция?
Ведь "производитель" показал вот такую вещь:
Посмотреть вложение 33317

Может получится отличная альтернатива существующим сотам.
Конечно есть описание, но вот ЖИВОЕ исполнение всегда приятней читать.
Osmocom позволяет побъединить несколько сотовых станций в одну сотовую сеть. Нужно соединить все соты в одну локальную сеть и покопаться на сайте osmocom и конфигурациях. У меня на руках 1 lime mini, по этому затестировать в живую не получится
 

Alex333

Green Team
26.05.2019
14
2
BIT
0
Osmocom позволяет побъединить несколько сотовых станций в одну сотовую сеть. Нужно соединить все соты в одну локальную сеть и покопаться на сайте osmocom и конфигурациях. У меня на руках 1 lime mini, по этому затестировать в живую не получится
Dr.Lafa, ответьте, пожалуйста, на комментарий выше...
 

Pavelectric

One Level
21.09.2019
4
1
BIT
0
В общем пока так...

root@odroid:~# ./start_bts.sh
kernel.sched_rt_runtime_us = -1
There is no such command.
Error occurred during reading the below line:
logging filter all 1

Failed to open config file: 'osmo-trx.cfg'
There is no such command.
Error occurred during reading the below line:
no login

<0005> bsc_init.c:551 Failed to parse the config file: 'openbsc.cfg'
Reading config failed. Exiting.
((*))
|
/ \ OsmoBTS
There is no such command.
Error occurred during reading the below line:
no login

Failed to parse the config file: 'osmo-bts.cfg'
root@odroid:~#

В инструкции по установке, опубликованной тут есть ошибки, но вроде не сильно страшные. Видимо синтаксис с защитой "от школьника". Это правильно )
Но вот у меня ошибка на этапе запуска...
Есть у кого мысли? Что я не так сделал?
 

Dr.Lafa

Green Team
30.12.2016
507
1 049
BIT
0
В инструкции по установке, опубликованной тут есть ошибки, но вроде не сильно страшные. Видимо синтаксис с защитой "от школьника". Это правильно )
Но вот у меня ошибка на этапе запуска...
Есть у кого мысли? Что я не так сделал?
Защиты нет, при копировании конфигов они могут неправильно парситься. Пробуйте запускать все программы по отдельности и смотреть выводы об ошибках. Посмотрите конфиги здесь DrLafa/osmo-nitb-scripts

Есть момент один... htop показывает, что 4 частоты под 480 МГц... Повышать нужно самостоятельно? Подскажите, пожалуйста.

Исправил: с частотами все нормально, изменились... потом проверил... температура 32 градуса
Не знаю, я не работал с этим компьютером.

Доброго времени суток! У меня теперь orange pi PC. Может ли эта версия уступать нулевой версии? У меня ошибки по поводу потери пакетов.. "dropped packets", "Tranceiver stopped", "Closing LMS device"... В чем может быть проблема? Заранее, спасибо.
Вообще в последнее время у LimeSuite какие-то проблемы под arm. Новые ветки проекта у меня не собираются под orange pi zero, соответственно работает только на обычном ноутбуке. Протестирую на raspberry pi 4, как только появится такая возможность
 

Pavelectric

One Level
21.09.2019
4
1
BIT
0
Протестирую на raspberry pi 4,
У меня не получилось собрать на ARM64... armhf собирается, но заставить работать не получается пока нормально.
Теперь ругань на telnet, вернее отсутствие подхвата 4241 порта в локале. Но руками я захожу туда.
Будем пробовать на витруале c x64.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!