Конкурс MiTM Mobile: как ломали мобильную связь на PHDays V
22.07.2015
Хотя мы не раз публиковали исследования о возможностях прослушки мобильной связи, перехвата SMS, подмены абонентов и взлома SIM-карт, для многих читателей эти истории всё равно относятся к области некой сложной магии, которой владеют только спецслужбы. Конкурс MiTM Mobile, впервые проводившийся в этом году на PHDays, позволил любому участнику конференции убедиться, насколько легко можно проделать все вышеописанные атаки, имея в руках лишь телефон на 300 рублей с набором бесплатных хакерских программ.
Условия и технологии конкурса
«Вам в руки попал корпоративный телефон пользователя сети MiTM Mobile.
Через DarkNet вы получили информацию, которая может оказаться полезной:
1. Коды для получения публей периодически отправляются на номер главного бухгалтера корпорации — 10000.
2. Финансовый директор куда-то пропал, до него уже несколько дней никто не может дозвониться, телефон выключен, однако ему до сих пор выделяются пароли.
3. Важную информацию можно получить звонком на номер 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-карты — это байты статуса, где, например, 0x9000 означает, что команда завершилась успешно. В данном случае мы получаем 0x9124, что означает наличие 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, — и получаем наш флаг:
>>> 'D0378103012100820281028D2C04596F757220666C61673A2035306634323 865623762623163313234323231383333366435306133376239659000'.decode('hex') '\xd07\x81\x03\x01!\x00\x82\x02\x81\x02\x8d,\x04 Your 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 и проч.) особая благодарность за консультации и за предоставленное для тестирования оборудование; они делают БОЛЬШОЕ дело! Отдельное спасибо Ивану.