• 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
 

GlowFisch

Green Team
26.01.2019
75
82
BIT
0
Открывается большой вектор аттак. В планах повторить... А теперь давайте подумаем как организовать защиту от этого?
 
  • Нравится
Реакции: albert_gateev

Debug

Red Team
07.07.2017
217
445
BIT
0
Я просто скажу - очень классная статья).
 

Dr.Lafa

Green Team
30.12.2016
507
1 049
BIT
0
Открывается большой вектор аттак. В планах повторить... А теперь давайте подумаем как организовать защиту от этого?
В реальных условиях только использовать 3g/4g и ставить режим полёта в метро. Есть годный SnoopSnitch, но он работает на очень небольшом количестве устройств
 

Хлебушек

Green Team
19.11.2018
52
50
BIT
0
Данная атака возможна только при отсутствии связи? Я имею ввиду, что мощности сигнала не хватит, чтобы в обычных условиях трубка переключилась на нашу БС.
 
  • Нравится
Реакции: GlowFisch

GlowFisch

Green Team
26.01.2019
75
82
BIT
0
Данная атака возможна только при отсутствии связи? Я имею ввиду, что мощности сигнала не хватит, чтобы в обычных условиях трубка переключилась на нашу БС.
В теории, имхо, телефон будет подключаться к вышке, которая ближе... На практике - ждем ответ ТС.
 

Dr.Lafa

Green Team
30.12.2016
507
1 049
BIT
0
Данная атака возможна только при отсутствии связи? Я имею ввиду, что мощности сигнала не хватит, чтобы в обычных условиях трубка переключилась на нашу БС.
В теории, имхо, телефон будет подключаться к вышке, которая ближе... На практике - ждем ответ ТС.
На практике отсутствие связи - идеальный вариант для атакующего.
Если есть связь, то как минимум нужно, что бы "жертвы" использовали 2G. Станция атакующего должна быть мощнее, а так же на стороне пользователя должна сработать Location Update Procedure, интервалы которого задаются основной BTS. Если я не ошибаюсь, спровоцировать Location Update невозможно, пока пользователь не находится в нашей сети. Надеюсь знающие поправят
 
U

utrom

А дальше? Астериск, транки, подмена номера, подхват на лету MCC / MNC... Хотя бы ту инфу что на Дефконе пару годов назад была переведите, как двигаясь за целью подхват делать.... Баян, но с Лимоньчиком, девайс действительно шикарный.

Половина устройств в этом путинском обоссаном совке еще по радио вещает.:D

И эти мрази вместо достойного апгрейда и развития сетей пилят бабки.

Прошу простить меня цветная элита форума:poop:
 
Последнее редактирование модератором:
  • Нравится
Реакции: Хлебушек

Хлебушек

Green Team
19.11.2018
52
50
BIT
0
Половина устройств в этом путинском обоссаном совке еще по радио вещает.:D
Можно примеры? Очень интересно с чем можно поиграться)
Главное, чтобы бубенцы не открутили потом :D:rolleyes:
Если есть связь, то как минимум нужно, что бы "жертвы" использовали 2G.
На сколько я понимаю, проблема решается глушением 3G и выше. Было бы интересно посмотреть на примеры реализации...
Станция атакующего должна быть мощнее
Что для этого необходимо?
 

Wish Master

New member
15.02.2019
4
0
BIT
5
А можете на основе bladeRF статью написать? или тыкнуть куда надо(можно на английском). Можно в личку
 

Triton

Grey Team
01.10.2016
178
98
BIT
0
Глушить 3G/4G, чтобы устройство подключилось к 2G. Не?
 
Мы в соцсетях:

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