Конкурс MiTM Mobile: як ламали мобільний зв'язок на PHDays V



Хоча ми не раз публікували дослідження про можливості прослушки мобільного зв'язку, перехоплення 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. А саме прослуховування ефіру в пошуках пакетів загального управління СССН (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 там, де її бути не може, підключається до неї, і натовп програм потрапляють на волю у пастку. Деякі з них в якості ідентифікаторів використовують номер мобільного телефону, який отримує зловмисник, а потім через SMS-шлюз влаштовує розсилку всім «щасливцям».



P.s. Для тих, хто захоче влаштувати конкурс, аналогічний нашому MiTM Mobile – трохи докладніше про компоненти мережі.

Сам UmTRX — це SDR (Software Defined Radio), тобто «просто радіо». Всі інструкції з налаштування можна знайти на umtrx.org або на osmocom.org. Можна згадати і про готовому «коробкове» рішення від UmTRX — UmDESK, у ньому вже все встановлено. Досить по керівництву заповнити конфіги — і почати говорити.

Готовий образ із зібраним стеком osmocombb можна знайти тут: phdays.ua/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 та ін.) особлива подяку за консультації та за надане для тестування обладнання; вони роблять ВЕЛИКУ справу! Окреме спасибі Івану.

Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.