Практические примеры атак внутри GSM сети

в 10:37, , рубрики: calypso, gsm, mitm, osmocom, Блог компании PentestIT, информационная безопасность

Практические примеры атак внутри GSM сети - 1

В данной статье цикла про Osmocom мы рассмотрим практическую реализацию атак на абонентов GSM сетей. Будут рассмотрены атаки как с помощью голосовых вызовов и СМС так и атаки во время работы абонента с GPRS.

Для работы нам понадобится все, что я описывал ранее. Поэтому для тек, кто присоединился к нам только сейчас, рекомендую ознакомиться с материалами предыдущих статей.

Статьи цикла:

Запускаем GSM-сеть у себя дома
Анализ трафика GSM сетей в Wireshark
Добавляем GPRS в домашнюю GSM сеть

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

Подготовка

Для работы нам понадобится еще один компонент, о котором мы упоминали лишь вскользь ранее — osmo-sip-connector.

Мы подключим нашу базовую станцию на основе двух osmocombb-совместимых телефонов к IP АТС Asterisk при помощи этого компонента.

Практические примеры атак внутри GSM сети - 2

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

Установить 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

Сразу рассмотрим два варианта:

  1. Целевой абонент использует старый телефон без поддержки 3G/4G.
  2. Целевой абонент использует современный смартфон, поддерживающий 4G.

Во втором случае смартфон будет сперва искать 4G сети, затем 3G сети и только потом 2G сети. Таким образом, если вы находитесь в месте, где есть хороший сигнал от базовой станции 3G/4G домашнего оператора абонента, то он не подключится к вашей 2G базовой станции.

Чтобы решить эту проблему нужно либо создать помехи на 3G/4G частотах оператора, либо оказаться вместе с абонентом в локации, где нет покрытия 3G или 4G. Вопреки сомнениям многих людей, таким мест очень много до сих пор.

В первом же случае, когда целевой телефон не поддерживает 3G/4G все становится проще и наша базовая станция должна просто находиться в зоне досягаемости целевого телефона и иметь достаточно мощный сигнал.

MCC/MNC

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

Домашняя сеть определяется тремя параметрами:

  • MNC (Mobile Network Code)
  • MCC (Mobile Country Code)
  • Networ Name (Имя сети)

Все эти значения не являются тайной и вы можете легко узнать их даже из Википедии.
Эти параметры транслируются базовой станции в 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/

Практические примеры атак внутри GSM сети - 3

Чтобы не захватывать в свою сеть абонентов с неподходящим 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 трафиком все, что угодно.

Проще всего нам будет работать с данным участком

Практические примеры атак внутри GSM сети - 4

Напоминаю, что скорость передачи данных в 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

Практические примеры атак внутри GSM сети - 5

Мы хотим получить учетные данные от определенного сайта. Настраиваем SET.

Практические примеры атак внутри GSM сети - 6

Практические примеры атак внутри GSM сети - 7

Практические примеры атак внутри GSM сети - 8

Создаем фишинговую страницу аутентификации defcon.ru

Практические примеры атак внутри GSM сети - 9

При попытке перехода на любой сайт через GPRS сервис сети атакующего, жертва попадает на фишинговую страницу (обратите внимание на URL).

Практические примеры атак внутри GSM сети - 10

В данном случае моя сеть имеет MCC 001 и MNC 01, так что мы видим значок роуминга. В этом случае чтобы получить доступ в Интернет, жертве придется разрешить пакетные данные в роуминге, что неудобно. Поэтому для этой атаки нужно использовать MCC/MNC и имя сети оператора целевого абонента (см. ниже по тексту). В лабораторных условиях можно этого не делать.

После ввода учетных данных SET отображает логин и пароль

Практические примеры атак внутри GSM сети - 11

СМС-фишинг

Когда делают фишинговые рассылки претворяясь банками или родными, то рассылка происходит с неизвестного абоненту номера, что подозрительно. Когда абонент попадает во враждебную GSM сеть, ему можно отправить СМС с любого номера.

Для отправки СМС нужно лишь сделать следующее:

Подключиться к VTY OsmoNITB и создать абонента от имени которого будет отправлена СМС.

telnet localhost 4242
OpenBSC# en
OpenBSC# subscriber create imsi 123456789012345
OpenBSC# subscriber imsi 123456789012345 extension 89001234567

Где
123456789012345 — IMSI подконтрольно телефона, включенного в сеть атакующего.
89001234567 — Номер телефона, с которого жертва получит СМС.

Практические примеры атак внутри GSM сети - 12

И отправить СМС можно из того же VTY интерфейса OsmoNITB

OpenBSC# subscriber imsi 987654321987654 sms sender extension 890012345678 send Your bank...

Где 987654321987654 — IMSI телефона жертвы, захваченной в сеть.

Практические примеры атак внутри GSM сети - 13

Если жертва ответит на СМС, вы получите ответ на подконтрольный телефон.
Ответ вы также сможете легко получить просмотрев 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

Источник

Поделиться

* - обязательные к заполнению поля