Конкурс MiTM Mobile: как ломали мобильную связь на PHDays V
Хотя мы не раз публиковали исследования о возможностях прослушки мобильной связи, перехвата SMS, подмены абонентов и взлома SIM-карт, для многих читателей эти истории всё равно относятся к области некой сложной магии, которой владеют только спецслужбы. Конкурс MiTM Mobile, впервые проводившийся в этом году на PHDays, позволил любому участнику конференции убедиться, насколько легко можно проделать все вышеописанные атаки, имея в руках лишь телефон на 300 рублей с набором бесплатных хакерских программ.
Условия и технологии конкурса
«Вам в руки попал корпоративный телефон пользователя сети MiTM Mobile.
Через DarkNet вы получили информацию, которая может оказаться полезной:
- Коды для получения публей периодически отправляются на номер главного бухгалтера корпорации — 10000.
- Финансовый директор куда-то пропал, до него уже несколько дней никто не может дозвониться, телефон выключен, однако ему до сих пор выделяются пароли.
- Важную информацию можно получить звонком на номер 2000, но там установлена авторизация по номеру звонящего. Удалось также узнать, что номер телефона личного секретаря директора — 77777, он наверняка имеет доступ. В сети есть другие номера, через которые сотрудники получают важную информацию, но, к сожалению, узнать их не удалось. И не забывайте, в корпоративной сети всегда можно наткнуться на частную информацию».
Примерно такая вводная была представлена участникам CTF в рамках конкурса MiTM Mobile, прошедшего на PHDays V.
Для конкурса мы развернули реальную инфраструктуру мобильного оператора. Она включала в себя базовую станцию, мобильные телефоны, стационарные телефоны, а также SIM-карты. Название MiTM Mobile, как нетрудно догадаться, было выбрано не случайно: хотелось подчеркнуть уязвимость нашей сети. В качестве логотипа сети выступал Kraken (ну или почти он), ломающий сотовую вышку.
Итак, с внешними атрибутами сотового оператора все ясно, теперь рассмотрим реализацию сети. В качестве «железного» решения выступал девайс с несложным названием UmTRX (сайт производителя: umtrx.org/hardware), на его основе строилась беспроводная часть сети. Непосредственно GSM-функциональность и функциональность базовой станции, а именно софтверная часть, была реализована стеком программ Osmocom/OpenBTS.
«Сердце» MiTM Mobile — UmTRX
Для простой и быстрой регистрации в сети были заказаны SIM-карты. В них были прописаны реквизиты сети MiTM Mobile, а данные «симок» были, соответственно, прописаны в сети. Для упрощения прослушивания эфира и для облегчения жизни игрокам в нашей сотовой сети было выключено шифрование (A5/0). Наряду с симками участникам были выданы телефоны Motorola C118 и кабель USB-UART (CP2102). Все это, вместе со стеком программ osmocombb, позволило участникам CTF прослушивать эфир, перехватывать SMS, предназначенные другим пользователям, а также совершать звонки в сети, подставляясь другим пользователем.
Каждая команда получила в свое распоряжение для экспериментов SIM-карту, кабель, телефон и образ виртуальной машины с собранным стеком osmocombb.
Разбор заданий
В первую очередь — немного теории:
- IMSI — International Mobile Subscriber Identity stored in SIM-card.
- MSISDN — Mobile subscriber ISDN number phone number, assigned to IMSI in operator«s infrastructure
- TMSI — Temporary Mobile Subscriber Identity randomly assigned by the network to every mobile in the area, the moment it is switched on.
IMSI — именно этот волшебный номер прописан на SIM-карте. Например, имеет вид 250–01-ХХХХХХХХХХ 250 — это код страны (Россия), 01 — код оператора (МТС), ХХХХХХХХХХ — уникальный ID. По IMSI происходит идентификация и авторизация абонента в сети оператора.
В нашем случае с SIM-картой sysmocom 901 — код страны, 70 — код оператора, 0000005625 — ID абонента внутри сети оператора (см. рисунок).
Второе, что необходимо помнить: MSISDN, номер вашего мобильного (например, +79171234567) — НЕ хранится на SIM-карте. Он хранится в базе оператора. Во время звонка базовая станция подставляет этот номер согласно таблице соответствия IMSI <--> MSISDN (в реальной сети это функция MSC/VLR). Или не подставляет (анонимный звонок).
TMSI — это временный идентификатор в 4 байта. Выделяется абоненту после авторизации.
Вооружились знаниями, продолжаем.
Запускаем стек программ osmocombb. Тут все просто. Предварительно подключаем наш кабель к компьютеру и пробрасываем его внутрь виртуалки. В виртуальной машине должно появиться устройство /dev/ttyUSB0. Далее подключаем ВЫКЛЮЧЕННЫЙ телефон к кабелю через аудиоджек.
Открываем две консоли. В первой запускаем команду:
#~/osmocom-bb-master/src/host/osmocon/osmocon -p /dev/ttyUSB0 -m c123xor -c ~/osmocom-bb-master/src/target/firmware/board/compal_e88/layer1.highram.bin
И нажимаем красную кнопку включения телефона. Этой командой мы запускаем загрузку прошивки в телефон, а также открытие сокета, через который будет идти общение наших программ с телефоном. Это так называемый layer 1 модели OSI. Реализует физическое взаимодействие с сетью.
Вот что примерно выдает в консоль layer1 после загрузки в телефон (впрочем, нас это не интересует).
Во второй консоли запускаем команду:
#~/osmocom-bb-sylvain/src/host/layer23/src/misc/ccch_scan -a 774 -i 127.0.0.1
Эта команда реализует layer 2–3 модели OSI. А именно прослушивание эфира в поисках пакетов общего управления СССH (Common Control Channel).
-a 774 — обозначает ARFCN, на котором мы вещаем. Да-да, никому не нужно искать канал, на котором работает наш оператор. Все для вас, дорогие участники :)
-i 127.0.0.1 — интерфейс, на который мы отправим наши пакеты.
И запускаем Wireshark. Он все сделает за нас, а именно соберет необходимые пакеты в SMS, распарсит TPDU/PDU-формат и покажет нам все в удобочитаемом виде.
Мы помним, что для первого задания нам нужно перехватить SMS. Для удобства просмотра в Wireshark ставим фильтр на gsm_sms-пакеты, чтобы не засорять экран.
Видим SMS, которые проходят тем временем в эфире. Поздравляем, вы выполнили первое задание! И если бы сейчас вы были на PHDays V, то в эфире вы могли бы увидеть SMS с кодом для получения публей. Трансляция кода происходила на протяжении двух дней постоянно, каждые 5 минут, даже ночью.
Для второго задания также необходимо запустить layer1 (а можно и не выключать его после прошлого раза).
Во второй консоли в качестве layer2–3 запускаем
#~/osmocom-bb-master/src/host/layer23/src/mobile/mobile -i 127.0.0.1
И тут все просто. Приложение mobile реализует функции виртуального телефона. Чтобы получить доступ к этим функциям, открываем третью консоль и запускаем:
$ telnet 127.0.0.1 4247
В консоли откроется Cisco-подобный интерфейс. Включаем расширенный режим:
OsmocomBB> enable
Далее выводим список доступных команд:
OsmocomBB# list
Интересно, а что делает команда clone? Кто бы мог подумать, она полностью оправдывает свое название! С помощью этой команды можно клонировать абонента сети. Из справки к команде видим, что в качестве аргумента она принимает TMSI. Если нам удастся узнать TMSI жертвы и подставить его в наш телефон, то мы сможем подключиться к сети вместо исходного абонента.
В течение всей конференции мы пытались отправить SMS на номер, которого не было в сети. И если бы участник догадался подставить TMSI, запрашиваемый базовой станцией, в качестве параметра команды clone, то он получил бы следующий флаг с кодом для валюты!
OsmocomBB# clone 1 5cce0f7f
А увидеть запрос базовой станции к абоненту было очень просто. Можно было посмотреть в Wireshark пакеты gsmtap с запросом Paging Requests Type 1 (запрос базовой станции при осуществлении звонка).
Или во второй консоли, где запущен mobile:
Прописываем TMSI и нам приходит SMS, предназначенная исходному абоненту.
Для третьего задания нам достаточно уже полученных знаний. Как и в предыдущем задании, необходимо выдать себя за другого абонента. Мы знаем его номер, но не знаем его TMSI. Что же делать? Все просто: достаточно лишь отправить SMS или инициировать звонок этому абоненту, а именно на номер 77777. И, как и в предыдущем примере, мы увидим запросы базовой станции к абоненту 77777. Важный момент: звонок и SMS необходимо проводить с другого телефона, иначе наша Motorola не сможет увидеть широковещательные запросы базовой станции, предназначенные целевому абоненту.
Далее прописываем TMSI в наш телефон с помощью команды clone — и совершаем звонок на заветный номер!
OsmocomBB# call 1 2000
Теперь берем в руки Motorola и слушаем код. Если участники все сделали правильно, то они услышат код. В противном случае — услышат анекдот :)
Кроме всего прочего в сети проходили смс, в которых говорилось о том, что пришло новое голосовое сообщение. Если бы участники не поленились и зашли в телефонную книгу аппарата, то они увидели бы номер голосовой почты. Позвонив по этому номеру, можно было услышать инсайдерскую информацию — данные о росте и падении курса акции MiTM Mobile.
Четвертое задание было связано не напрямую с GSM-связью, но с уязвимыми SIM-картами, которые используются для доступа в сеть. Каждой команде помимо телефона выдавалась SIM-карта с установленным на нее приложением, отображающим приглашение «Welcome to PHDays V». Для поиска уязвимых апплетов Lukas Kuzmiak и Karsten Nohl создали утилиту SIMTester. Отличительная особенностью этой утилиты — возможность работы через osmocom-телефоны. Вставляем SIM-карту в телефон, подключаем к компьютеру и запускаем поиск. Через пару минут проанализируем полученные данные:
Помимо множества приложений, разглашающих информацию, которой достаточно для брутфорса ключей, нам заботливо выделили красным цветом приложение, которое не требует для доступа никаких секретных ключей. Проанализируем его отдельно:
Последние два байта ответа SIM-карты — это байты статуса, где, например, 0×9000 означает, что команда завершилась успешно. В данном случае мы получаем 0×9124, что означает наличие 36 байт, которые хочет нам вернуть карта. Изменим немного код программы и посмотрим, что это за данные:
Декодируем и получаем:
>>> ‘D0228103012100820281028D1704596F752061726520636C6F73652C2062616420434C419000'.decode('hex')
'\xd0"\x81\x03\x01!\x00\x82\x02\x81\x02\x8d\x17\x04You are close, bad CLA\x90\x00'
Перебираем все возможные CLA и INS для инструкций, отправляемых в бинарной SMS, — и получаем наш флаг:
>>> 'D0378103012100820281028D2C04596F757220666C61673A2035306634323865623762623163313234323231383333366435306133376239659000'.decode('hex')
'\xd07\x81\x03\x01!\x00\x82\x02\x81\x02\x8d,\x04Your flag: 50f428eb7bb1c1242218336d50a37b9e\x90\x00'
Вот и все, что касается заданий.
Победители и сюрпризы конкурса
Попробовать свои силы в конкурс MiTM Mobile могли не только команды CTF, но и все посетители PHDays: желающим выдавалось все необходимое оборудование и виртуальная машина. В итоге в конкурсе участвовало более десяти человек, не считая команд CTF.
Однако единственным, кому удалось перехватить SMS уже к середине первого дня, оказался Глеб Чербов, который и стал победителем конкурса.
Три задания выполнила только команда More Smoked Leet Chicken к началу второго дня. Четвертое задание было доступно только для участников CTF, но выполнить его не удалось никому.
Посетители форума могли заметить периодическое пропадание LTE, 3G, а иногда вообще терялась сеть при приближении к зоне работы GSM-глушилок, которые выглядели так:
Некоторые получали сообщения с номера 74957440144 или от «Анонима» с текстом «SMS_from_bank» или другой «безобидный спам». Это было связано с работой сотовой сети MiTM Mobile.
А еще к исходу второго дня некоторые «везунчики» получили такое сообщение:
Эта шутка не имеет отношения к работе MiTM Mobile, но еще раз напоминает всем о соблюдении элементарных правил безопасности. Следите за своим питомцем телефоном, который неожиданным образом находит сеть Mosmetro_free там, где ee быть не может, подключается к ней, и толпища программ попадают на волю в ловушку. Некоторые из них в качестве идентификаторов используют номер мобильного телефона, который получает злоумышленник, а затем через SMS-шлюз устраивает рассылку всем «везунчикам».
P.S. Для тех, кто захочет устроить конкурс, аналогичный нашему MiTM Mobile — чуть подробнее о компонентах сети.
Сам UmTRX — это SDR (Software Defined Radio), то есть «просто радио». Все инструкции по настройке можно найти на umtrx.org или на osmocom.org. Можно упомянуть и о готовом «коробочном» решении от UmTRX — UmDESK, в нем уже все установлено. Достаточно по руководству заполнить конфиги — и начать вещать.
Готовый образ с собранным стеком osmocombb можно найти здесь: phdays.ru/ctf_mobile.7z (очень желательно иметь VMWare 11). Для экспериментов этой сборки достаточно. Симки необязательны, но нужен телефон и любой кабель USB-UART.
Телефон можно взять любой из списка: bb.osmocom.org/trac/wiki/Hardware/Phones
Кабели: bb.osmocom.org/trac/wiki/Hardware/SerialCable
И да, PL2303, FT232 можно найти практически везде. Распаять mini-jack 2,5 мм — легче легкого.
Симки и кабель можно заказать тут: shop.sysmocom.de
А именно:
USB-UART (CP2102): shop.sysmocom.de/products/cp2102–25
SIM cards: shop.sysmocom.de/t/sim-card-related/sim-cards
Телефоны можно найти на Авито, в подземном переходе или заказать в Китае: цена вопроса примерно 300 руб./шт.
Парням из Fairwaves (именно они делают UmTRX, UmDESK, UmROCKET и проч.) особая благодарность за консультации и за предоставленное для тестирования оборудование; они делают БОЛЬШОЕ дело! Отдельное спасибо Ивану.