Добрейший вечерочек. Хотел бы обратить ваше внимание на насущную тему сотового фрикинга и того, каким он может стать в будущем (уже стал?). Лично для меня "Атака с помощью карманной сотовой станции" звучит из ряда вон по киберпанковски. Но современные одноплатники вкупе с SDR позволяют создавать миниатюрные сотовые станции всех поколений (2g/ 3g/ 4g), телевизионные вышки, электронные отмычки и много чего ещё.
Я же в этом треде хочу рассказать о сборке мини-сотовой станции 2G на базе LimeSDR-Mini и Orange Pi Zero. Почему не 3G и не 4G? Потому что мы не сможем подключиться к такой сети без собственной запрограмированной сим-карты. Защита в сетях последнего поколения требует, что бы в телефоне была симка с криптографическим ключом именно от этой сети. А так как сейчас на руках у меня не оказалось ни пустых симок, ни программатора, то придётся отложить эту затею на лучшие дни.
Disclaimer
Для начала условимся, что все мы с вами любим лучшее в мире государство, в котором сейчас находимся, и чтим его законы. Вещание на gsm-частотах регулируется законом. Все тесты проводились вдали от города, где-то на марсианском поле. Все хакерские атаки выдуманы, а автор не понимает о чём говорит и вообще сел за компьютер в первые в жизни. По сему случаю ни я, ни форум, и никто другой кроме вас не несёт ответственности за ваши деяния.
Возможности
Что же может сделать гипотетический хакер с маленькой 2G станцией в 2019 году?
Во-первых, все мы знаем, что в поездах и метро нет связи. В такой ситуации телефоны очень охотно "приклеятся" к фейковой базовой станции. Если гипотетический хакер будет симулировать сотовую станцию гипотетического оператора MegaTron, то к нему подключаться все жертвы с сотовым оператором MegaTron, находящиеся примерно в пределах одного вагона (Не проверял дальность, в пределах двухэтажного дома работало везде). Далее начинается веселье с подделыванием номеров банка, ussd-запросы или "flash SMS"... Полный картбланш на фишинг. Можно даже попытаться взломать телефон бинарной смс.
Во-вторых, огромная часть IOT-устройств использует 2G. Это выгодно, так как 2G очень энергоэффективен, а таким устройствам не нужен быстрый интернет.
В благоприятных обстоятельствах (слабый сигнал от вышки) хакер может подключить IOT-устройство к фейковой станции и захватить нам ним контроль. Многие светофоры, банкоматы и прочие критические структуры сейчас подключаются к сети именно через 2G.
В любом случае, если вы не супер-злодей, и не собираетесь использовать железки во имя сатаны, довольно круто осознавать, что весь функционал огромной сотовой сети можно уместить в такое маленькое портативное устройство.
Hardware
Orange Pi Zero на данный момент является одним из самых маленьких и дешёвых одноплатников в мире. Я взял его в силу компактности, низкого энергопотребления и малой цены, хотя любой другой одноплатник тоже подойдёт. В качестве памяти используется microsd-карта smartbuy класса 10 на 32 гигабайта.
Охлаждение
Allwinner H2+ очень горячая штучка, нагревается вплоть до 70 градусов и выше. При том, что процессор падает в тротлинг (сброс частот) ещё после 60-ти. При этом он перестаёт успевать обрабатывать данные от трансивера, и базовая станция вырубается. Охлаждение в нашей ситуации необходимо . Я прикрепил медный радиатор от Raspberry с термопастой, но и это не спасает на долго. Самым простым и эффективным решением будет кулер 5х5 см на всю плату + радиатор.
Следите за тем, что бы температура процессора не превышала 60 градусов, иначе трансивер перестаёт работать
Подключить кулер можно прямо к плате: один провод на 5 вольт, другой на GND
Питание
Сама апельсинка питается от 5-ти вольт и требует не больше 1 Ампера, однако 1 Ампера НЕ хватает для работы OPI Zero с Lime mini, нужно как минимум 1.5 А (проверено на практике). Я использую повербанк Xiaomi на 5000 mAh, 5 вольт, 2 Ампера: полёт нормальный.
О компактности
Мне удалось уместить всю конструкцию в коробке от старого смартфона 13х7х4.5 см, хотя можно взять повербанк и вентилятор потоньше и уместиться в 2.5 - 3 см высоты.
Software
В качестве OS хорошо подходит Armbian, я использую на базе Ubuntu Bionic, хотя Armbian Stretch тоже подойдёт. Запись образа на карту с помощью линукс сводится к форматированию в fat32 (Gparted), отмонтированию и записи с помощью dd:
После записи вставляем карту в апельсинку, подключаем её к роутеру через ethernet и включаем питание (на момент установки хватит тока от USB-порта). Первый запуск может идти несколько минут, т.к. происходит настройка sd-карты. Далее, узнав ip апельсинки в роутере, подключаемся к ней по ssh. Стандартный пароль рута - 1234
После запуска можно обновить систему
С помощью команды
Настало время собрать софт для мобильной станции. В этой статье я буду использовать Osmocom. Хотя в OpenBTS намного больше функционала (бинарные смс, ussd-notify и прочее), её довольно трудно собрать под armbian. Может в другой раз.
Всё, что связано с трансивером (LimeSuite, libosmocore, osmo-trx), соберём из исходников, остальное скачаем из оффициального репозитория osmocom.
LimeSuite
libosmocore
osmo-trx-lms
Осталось получить
Подключаем репозитории Osmocom
Устанавливаем
Конфигурация
Создадим отдельную папку, где будут все конфиги программ
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, лучше использовать такой скрипт:
Запускать osmo-trx-lms нужно именно таким образом. Так мы выдаёт трансиверу максимальный приоритет (приоритет реального времени). Если запускать трансивер обычным способом, то процессор Апельсинки не всегда будет успевать обрабатывать его запросы, вследствие чего базовая станция проработает всего несколько минут и отключится. Так же я крайне рекомендую открыть htop во втором окне, что бы следить за показаниями температуры. Если она превышает 60 градусов, то нужно задуматься над лучшим охлаждением. С 60+ градусов на Allwinner H2+ у меня базовая станция работала не более двух минут.
После запуска можно попробовать найти сеть с любого телефона (настройки > симкарты > операторы). Сеть будет отображаться как MCC + MNC. Например, если в конфиге network country code = 313, mobile network code = 37, то имя будет 31337
MCC 001 и MNC 01 зарезервированы для тестовых сетей. На некоторых телефонах сеть с такими MNC-MCC может отображаться как "Test PLMN"
После подключения в сеть двух и более телефонов между ними можно делать звонки и смс-ки. Присвоенный номер телефона можно узнать, набрав *#100#, а сменить номер можно в CLI OpenBSC
Здесь же можно отправлять смс на телефон прямо с компьютера, но сначала нужно создать виртуального пользователя с номером
Конфиги и полезные скрипты на гитхабе: DrLafa/osmo-nitb-scripts
Я же в этом треде хочу рассказать о сборке мини-сотовой станции 2G на базе LimeSDR-Mini и Orange Pi Zero. Почему не 3G и не 4G? Потому что мы не сможем подключиться к такой сети без собственной запрограмированной сим-карты. Защита в сетях последнего поколения требует, что бы в телефоне была симка с криптографическим ключом именно от этой сети. А так как сейчас на руках у меня не оказалось ни пустых симок, ни программатора, то придётся отложить эту затею на лучшие дни.
Disclaimer
Для начала условимся, что все мы с вами любим лучшее в мире государство, в котором сейчас находимся, и чтим его законы. Вещание на gsm-частотах регулируется законом. Все тесты проводились вдали от города, где-то на марсианском поле. Все хакерские атаки выдуманы, а автор не понимает о чём говорит и вообще сел за компьютер в первые в жизни. По сему случаю ни я, ни форум, и никто другой кроме вас не несёт ответственности за ваши деяния.
Возможности
Что же может сделать гипотетический хакер с маленькой 2G станцией в 2019 году?
Во-первых, все мы знаем, что в поездах и метро нет связи. В такой ситуации телефоны очень охотно "приклеятся" к фейковой базовой станции. Если гипотетический хакер будет симулировать сотовую станцию гипотетического оператора MegaTron, то к нему подключаться все жертвы с сотовым оператором MegaTron, находящиеся примерно в пределах одного вагона (Не проверял дальность, в пределах двухэтажного дома работало везде). Далее начинается веселье с подделыванием номеров банка, ussd-запросы или "flash SMS"... Полный картбланш на фишинг. Можно даже попытаться взломать телефон бинарной смс.
Во-вторых, огромная часть IOT-устройств использует 2G. Это выгодно, так как 2G очень энергоэффективен, а таким устройствам не нужен быстрый интернет.
В благоприятных обстоятельствах (слабый сигнал от вышки) хакер может подключить IOT-устройство к фейковой станции и захватить нам ним контроль. Многие светофоры, банкоматы и прочие критические структуры сейчас подключаются к сети именно через 2G.
В любом случае, если вы не супер-злодей, и не собираетесь использовать железки во имя сатаны, довольно круто осознавать, что весь функционал огромной сотовой сети можно уместить в такое маленькое портативное устройство.
Hardware
Ссылка скрыта от гостей
выбран не случайно. Сейчас это самый компактный и дешёвый SDR с очень хорошими характеристиками (приёмо-передатчик LMS7002) и большим сообществом. Она позволит сделать всё то, ради чего вы хотели приобрести SDR.Orange Pi Zero на данный момент является одним из самых маленьких и дешёвых одноплатников в мире. Я взял его в силу компактности, низкого энергопотребления и малой цены, хотя любой другой одноплатник тоже подойдёт. В качестве памяти используется microsd-карта smartbuy класса 10 на 32 гигабайта.
Охлаждение
Allwinner H2+ очень горячая штучка, нагревается вплоть до 70 градусов и выше. При том, что процессор падает в тротлинг (сброс частот) ещё после 60-ти. При этом он перестаёт успевать обрабатывать данные от трансивера, и базовая станция вырубается. Охлаждение в нашей ситуации необходимо . Я прикрепил медный радиатор от Raspberry с термопастой, но и это не спасает на долго. Самым простым и эффективным решением будет кулер 5х5 см на всю плату + радиатор.
Следите за тем, что бы температура процессора не превышала 60 градусов, иначе трансивер перестаёт работать
Подключить кулер можно прямо к плате: один провод на 5 вольт, другой на GND
Питание
Сама апельсинка питается от 5-ти вольт и требует не больше 1 Ампера, однако 1 Ампера НЕ хватает для работы OPI Zero с Lime mini, нужно как минимум 1.5 А (проверено на практике). Я использую повербанк Xiaomi на 5000 mAh, 5 вольт, 2 Ампера: полёт нормальный.
О компактности
Мне удалось уместить всю конструкцию в коробке от старого смартфона 13х7х4.5 см, хотя можно взять повербанк и вентилятор потоньше и уместиться в 2.5 - 3 см высоты.
Software
В качестве OS хорошо подходит Armbian, я использую на базе Ubuntu Bionic, хотя Armbian Stretch тоже подойдёт. Запись образа на карту с помощью линукс сводится к форматированию в fat32 (Gparted), отмонтированию и записи с помощью dd:
Код:
umount /dev/mmcblk0p1
dd if=/path/to/armbian.img of=/dev/mmcblk0 status=progress
После запуска можно обновить систему
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 ../
Код:
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 ../
Код:
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
Конфигурация
Создадим отдельную папку, где будут все конфиги программ
Код:
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
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
После запуска можно попробовать найти сеть с любого телефона (настройки > симкарты > операторы). Сеть будет отображаться как MCC + MNC. Например, если в конфиге network country code = 313, mobile network code = 37, то имя будет 31337
MCC 001 и MNC 01 зарезервированы для тестовых сетей. На некоторых телефонах сеть с такими MNC-MCC может отображаться как "Test PLMN"
После подключения в сеть двух и более телефонов между ними можно делать звонки и смс-ки. Присвоенный номер телефона можно узнать, набрав *#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
Конфиги и полезные скрипты на гитхабе: DrLafa/osmo-nitb-scripts