Хотя мы не раз публиковали исследования о возможностях прослушки мобильной связи, перехвата 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, — и получаем наш флаг:



>>> '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 и проч.) особая благодарность за консультации и за предоставленное для тестирования оборудование; они делают БОЛЬШОЕ дело! Отдельное спасибо Ивану.

Комментарии (12)


  1. xvilka
    24.06.2015 12:54

    Да, статья отличная! Равно как и конкурс, как и всё, что связано с OscmocomBB. Грусто только, что большинство современных радиомодемов и радиопрошивок в телефонах защищены лишь отсутствием какой-либо информации по ним. И, к примеру, защищенность основной системы смартфона никак не влияет на безопасность, если есть пути для обмена информацией с радиомодемом, например, в виде shared memory, и т.д.


  1. Bo0oM
    24.06.2015 12:57
    +1

    Некоторые из них в качестве идентификаторов используют номер мобильного телефона, который получает злоумышленник, а затем через SMS-шлюз устраивает рассылку всем «везунчикам».


    А как можно объяснить это?


    1. ptsecurity Автор
      24.06.2015 14:19
      +1

      У нас в статье коротко описан процесс совершения атаки: была установлена фейковая точка wi-fi MosMetro_Free, те кто подключается к этой сети в метро и не отключили wifi на телефоне, автоматически соединились с фейковой точкой. При этом whatsapp (или другое приложение) попытался подключиться к своему серверу, используя в качестве логина номер мобильного телефона, указанный при регистрации, передается он в открытом виде, таким образом «злоумышленники» могли собрать номера телефонов, находящихся на PHDays. После этого рассылка сообщений через обычный SMS-шлюз — уже дело техники.

      Особенность картинки, указанной по вашей ссылке, заключается в том, что телефон там «неуязвимый», т.е. без wifiи без whatsapp, и вопрос — каким образом его хакнули в таком случае

      Ответ – SIM-карта (номер телефона) на который зарегистрирован аккаунт приложения (whatsapp) стоит в этом «неуязвимом» телефоне, а телефон с приложением и wifi– другой, его то и поймали на фейковый MosMetro_Free


      1. Bo0oM
        24.06.2015 14:31

        Хм, похоже на правду. Спасибо)


  1. ssh1
    24.06.2015 15:34
    +2

    Можете ли посоветовать с чего стоит начать изучение osmocombb в реальном мире, без своей базовой станции? Как я понимаю шифрование везде включено, и соответственно ничего из вышеописанного работать не будет.
    Допустим я хочу перехватить свои же смс приходящие на телефон лежащий на столе. Как я понимаю, нужно использовать kraken для дешифровки? Как быть с прыжками по частоте?


    1. axilirator
      24.06.2015 16:17
      +1

      Существует особая ветка проекта OsmocomBB, упор которой делается на сниффинг. В одном из ее приложений, ccch_scan, реализована возможность «следования за частотами абонета». Передаете ей ARFCN сети, TMSI абонента, и Frequency Hopping Вам не помешает. Kraken позволит Вам извлечь сессионный ключ, которым был зашифрован трафик. Для декодирования предназначена утилита burst_decode из репозитория osmocom-bb-raw.

      Успехов!


      1. ssh1
        24.06.2015 17:08

        Спасибо, становится уже понятней.
        Цель та же, перехватить SMS, приходящее на телефон лежащий на том же столе.
        Попробую описать вопросы, которые пока не ясны:
        1.Фильтры на телефоне перепаивают для перехвата канала от телефона к БС? Без этого можно обойтись на первых этапах, когда всё рядом?
        2.Как найти ARFCN сети в которой работает телефон? Как я понимаю каждому оператору соответствует по 1 ARFCN?
        3.Ищем TMSI отправляя SMS и смотрим в логах. Можно ли как-то автоматизировать?
        4.Начинаем писать трафик ccch_scan…? Как именно? В файл?
        5.Пытаемся дешифровать его. Где посмотреть хоть какой-то пример по этой теме?


        1. Alexko
          24.06.2015 18:03

          У оператора может быть несколько каналов в каждом диапазоне. Вот пример: www.netmonitor.ru/channels


        1. axilirator
          24.06.2015 18:45
          +1

          1. Да, фильтры, предлагаемые, sysmocom, позволяют снифить и Uplink и Downlink. Для сниффинга СМС замена не требуется, абоненту оно приходит на диапазоне Downlink.
          2. Сканировать эфир на различных ARFCN, например, с помощью нескольких телефонов, и искать там TMSI абонента, пока он не сменился :) Воспользуйтесь программой cell_log, и Вы увидите, что у одного оператора может быть целая куча каналов.
          3. На презентациях прмелькивали скрипты на Python. Если повезет — можно их найти. Если нет, написать самому, вчитавшись в спецификации GSM.
          4. ccch_scan из ветки burst_ind пишет все burst'ы в текущую директорию — дальнейшая работа выполняется с ними.
          5. Читаем презентации, дипломные работы. Например, Wideband GSM Sniffing [27C3].


  1. geran_utran
    24.06.2015 16:23

    В реальной сети конечно все это не сработает.
    Мало того что шифрование в коммерческой сети всегда включено, так еще никто не будет никогда фиксировать телефон на конкретной частоте, запрещать ему HO, фиксировать значения мощности для сигнальных каналов, оставлять поля c незначащей информацией, без рандомизации.
    Нам демонстрировали попытки взлома коммерческой сети, в теории выглядит реализуемо, но на практике, для работы с целевой симкой (а не с тестовой), почти не реализуемо.
    А с точки зрения анализа трэйсов и понимания логики работы сети мероприятие и правда очень познавательное. :)


    1. ptsecurity Автор
      25.06.2015 13:38
      +1

      Вызов принят :)


      1. geran_utran
        25.06.2015 13:47

        При реализации вызова, будьте внимательны и осторожны. Все-таки это уголовно-наказуемое деяние. :)