В данной статье цикла про Osmocom мы рассмотрим практическую реализацию атак на абонентов GSM сетей. Будут рассмотрены атаки как с помощью голосовых вызовов и СМС так и атаки во время работы абонента с GPRS.
Для работы нам понадобится все, что я описывал ранее. Поэтому для тек, кто присоединился к нам только сейчас, рекомендую ознакомиться с материалами предыдущих статей.
Статьи цикла:
Запускаем GSM-сеть у себя дома
Анализ трафика GSM сетей в Wireshark
Добавляем GPRS в домашнюю GSM сеть
Практические примеры атак внутри 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,
С помощью OsmoNITB можно отправлять бинарные СМС через SMPP интерфейс.
Спасибо axilirator за информацию!
Перенаправление и запись голосовых вызовов
Если жертва попытается позвонить на номер, с которого пришла смс (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 позволяет выполнять слежку за абонентом.
Активировать RRLP можно так
telnet localhost 4242
en
conf t
network
rrlp mode РЕЖИМ
write file
end
Запросы и ответы можно видеть в Wireshark. В данном случае мой телефон вернул Not Supported на RRLP запрос
Спасибо axilirator за информацию.
Существуют и другие атаки, которым подвержены абоненты 2G сетей и большинство сотовых телефонов до сих пор поддерживает GSM. Чтобы не стать жертвой подобного рода атак, будьте внимательны при получении подозрительных звонков, CMC или при сёрфинге с мобильного телефона, а так же обращайте внимание на значки 3G/LTE, которые обычно указывают на то, с сетью какого поколения вы в данный момент работаете.
Комментарии (30)
antgorka Автор
03.08.2017 14:23+1В вашей личной сети Вы в праве регистрировать абонентов как вам заблагорассудится, без каких либо ключей.
eov
03.08.2017 14:49Не люблю WiKi, но лень искать что-то еще.
В статье Безопасность GSM пишут буквально вот это:
разверниVLR, в котором регистрируется абонент, отправляет запрос в AuC домашней сети абонента, в ответ на который AuC присылает набор триплетов, каждый из которых содержит RAND, SRES и ключ шифрования Kc. RAND является случайным числом, SRES вычисляется в AuC алгоритмом A3 на основе секретного ключа Ki и RAND, а Kc является ключом шифрования радиоинтерфейса и вычисляется алгоритмом A8 на основе Ki и RAND. Эти триплеты в дальнейшем будут использованы VLR для установления подлинности и шифрования. Таким образом, все вычисления с использованием ключа Ki происходят внутри AuC, на стороне сети и внутри SIM, на стороне абонента, что исключает утечку Ki и перехват злоумышленником. В современном оборудовании связи, ключи Ki прогружаются в AuC в зашифрованном виде и это исключает доступ к ключам даже со стороны технического персонала оператора.
ArtyomAsadchy
03.08.2017 15:24Ki используется для аутентификации абонента в сети. Никто не мешает отказаться от аутентификации или же (как это сделано в OpenBTS) использовать алгоритм, не завязанный на данный ключ.
eov
03.08.2017 15:39+1Вынужден согласиться. Действительно, в 3GPP для 2G оставлена "дыра" в виде отказа от аутентификации.
antgorka Автор
03.08.2017 15:27+2Иногда почитать вики недостаточно, чтобы понимать как что-то работает.
В GSM сети, сеть решает, пустить абонента к себе или нет, а не абонент. И если сеть решит, что Ki ей не нужен, то любой абонент сможет в ней зарегистрироваться.
Изучите предыдущие статьи и статьи axilirator, если Вас интересует GSM.
imbasoft
03.08.2017 20:08Есть ряд вопросов:
1. Насколько реально на стороне абонента не допустить / обнаружить подключение к подобной мошеннической сети?
2. Есть ли доступное оборудование + ПО для формирования подложных 3G/4G сетей? Насколько реально провести атаку на современные сети?
3. Пробовали ли отправлять динамическое SMS (это когда содержимое нового SMS замешает содержимое старого SMS не создавая нового сообщения) на подключаемый телефон?antgorka Автор
03.08.2017 21:45- Можно обнаружить, если есть root, используя специальное ПО, например SnoopSnitch или другие подобные приложения.
- Оборудование для 3G/4G значительно дороже и атаки там уже другие. Безопасность 3G/4G значительно выше по спецификации, но исследования идут полным ходом и уже найдены некоторые векторы атак.
- Не пробовал, но был бы признателен за ссылку на подобные исследования
imbasoft
04.08.2017 10:01Не пробовал, но был бы признателен за ссылку на подобные исследования
Я так понимаю это фича GSM сетей. Впервые с ней столкнулся когда внедрял Radius-сервер с авторизацией через SMS — Secur Access от Secure Envoy. В нем есть демо период, когда SMS можно отправлять через буржуйского оператора сотовой связи, так вот этот оператор позволял делать динамические SMS. Сам думал что такое невозможно пока своими глазами не увидел.
Еще вопрос к вашему исследованию, насколько реально проключить атакуемого абонента через ложную базовую станцию к реальной сотовой сети? Чтобы он в сети был и ему могли дозвонится, отправить SMS и тдantgorka Автор
04.08.2017 10:22Т.е. как я понял, можно отправить СМС, которая "поправит" уже сохраненную смс в телефоне или как?
При подключении абонента к ложной сети нужно отдельно говорить про входящие и исходящие.
Можно подключить через тот же Астериск абонента к внешней сети, но звонить он при этом будет не со своего имени, в общем случае. Если же мы говорим о входящих, то мы не можем аутентифицироваться в коммерческой сети без знания Ki.
Однако существуют уязвимости в сети SS7, которые позволяют влиять на ход вызова. Так что нужно учитывать еще и этот вектор.
imbasoft
04.08.2017 10:26Т.е. как я понял, можно отправить СМС, которая «поправит» уже сохраненную смс в телефоне или как?
Да, в точку.
Barabek
03.08.2017 21:27Почему на дисплее нет замочка, указывающего на отсутствия шифрования?
antgorka Автор
03.08.2017 21:38Я знаю только несколько телефонов 10 летней давности, на которых подобные замочки есть. Мой современный смартфон такой полезной функции не имеет :)
vistar
03.08.2017 22:03На всех моих Сименсах такой замочек был.
А однажды я заметил, что шифрование выключено. Позвонил оператору, узнать в чём дело — они извинились, сказали о технических проблемах на оборудовании, но потом из новостей я узнал, что в город приезжал кто-то из президентов.
AslanKurbanov
04.08.2017 12:48Жуть. Если возможна подмена абонента, то рушиться вся система заточенная на смс-проверки, типа мобильного банка и тд. Как вариант из телефона тонкий клиент сделать, а дома некий телефонный сервер поставить с файерволом-типа «база» и связь пускать через него. А в сервере вторая симкарта-основная. Както так…
Гдето в США был такой случай: рядом с банком стоял микроавтобус-перехватчик, нашпигованный оборудованием. В моей практике имеется поучительный опыт посещения ТЦ Белая дача, где я с ноута выходил в Инет, по приезду домой на компе была вирусня.antgorka Автор
04.08.2017 13:06Да, сейчас уже постепенно отказываются от двухфакторной аутентификации на основе СМС
reagent
04.08.2017 16:28Насколько сложно реализовать схему при которой поднимается базовая станция и она служит «прокси» между телефоном «жертвы» и реальной базовой оператора? С возможностью «инжектирования своих действий» (осуществление и получение звонков, смс, интернет браузинг от имени «жертвы»)?
antgorka Автор
04.08.2017 16:35Вот хорошая статья про ISMI-кетчеры.
Есть способы, для 2G они вполне понятны, для 3G в связке с атакой через SS7 тоже можно что-то сделать, для 4G возможно может помочь последний StingRay, но он вряд ли продается в соседнем магазине :)
Если целью злоумышленника будет абонент 2G то это более-менее реально сделать за вменяемые деньги, я думаю, но имейте в виду, что такие действия незаконны и нарушают сразу десяток законов.
reagent
04.08.2017 16:46Спасибо, буду изучать.
Для 3G в связке с ОКС-7 видел подобные реализации, это не столь интересно. Для 2G видел видео подобного для тестовой сети без шифрования, для шифрованных пока не видел подобного.
Если это делать в «своей тестовой сети» в «клетке фарадея», то такие действия не будут иметь незаконного характера.
Barabek
04.08.2017 19:53Вашу исходящую активность в 2G — звонки, СМС перехватить можно, пустив их вовне через SMPP и SIP. А так же интернет можно зарулить к себе (как рассказано в этой статье). Входящие звонки и СМС — нет, т.к. фейковая бс не сможет принять ваш трафик — он шифруется вашими ключами (Кс)
reagent
04.08.2017 22:23Я с Вами согласен, что обычными методами этого не сделать (все логично: для исходящей активности используются внешние каналы связи (смпп, сип, интернет), а входящие в таком случае уходят «в никуда», поскольку опсос думает, что абонент вне сети покрытия).
Но, говорят, есть некая хитрая схема на моторолах и похожих железках, которая работает немного нестандартно и позволяет делать описанное мной, в публичном доступе я видел только обрывки информации о ней с минимумом деталей. Похожую схему было реализовано мошенниками для увода денег в абонентов, которых словили в Москве около 5 лет назад (на хабре была публикация об этом).
eov
Может я что-то не понял, но как предполагается обеспечить регистрацию без знания ключиков c SIM карты?
Amistad
Несколько лет назад в новостях показывали, как менты отследили микроавтобус, в котором была аппаратура для отправки SMS на платные номера с ваших телефонов. Автобус приезжал в людное место и делал свои черные дела.
Неважно как, важно что любой (при наличии желания и денег) может повторить этот трюк.
reagent
там похожая схема была, но она не так тривиальна в реализации