• XSS.stack #1 – первый литературный журнал от юзеров форума

Статья Атака на GSM: UPLINK пакет Measurement Report

gliderexpert

CPU register
Забанен
Регистрация
17.02.2021
Сообщения
1 440
Решения
1
Реакции
2 336
Пожалуйста, обратите внимание, что пользователь заблокирован

Атака на UPLINK пакет Measurement Report


/* Статус материала - удалить перед прочтением. Совершенно секретно. ) */
Введение
Measurement Report - сообщение, передаваемое мобильным телефоном на частоте Uplink канала - в ответ на запросы базовой станции в SACCH канале. Сообщение содержит информацию о том, с каким уровнем абонентское устройство (телефон или модем) принимает базовую станцию, открывшую dedicated канал, а так же уровни сигналов "соседей" - БСок, которые присутствуют в neighbour list, передаваемом обслуживающей БС. Следует заметить что neighbour list может меняться, таким образом оператор может запрашивать у телефона измерения уровня сигнала любой из БС, но только в пределах своей сети, определяемой идентификатором PLMN - MCC/MNC. Данные отчеты необходимы инфраструктуре сети для регулирования мощности передатчиков, планирования handover'ов при перемещении абонентского устройства (MS) между LACами, и конечно же сливания информации в СОРМ для локализации абонента на местности. Такое же сообщение присутствует в более новых сетях поколениях 3G/4G, и там иногда даже присутствуют GPS координаты телефона.

Цель атаки: извлечь гамму генератора А5/1 для обращения регистров с линейной обратной связью в начальное состояние, соответствующее моменту окончания загрузки Kc и номера фрейма в регистры шифр.машины А5/1, для последующего извлечения ключа сессии (КС).

Характеристики сообщения

  • Идентификатор сообщения - 0x15
  • Телефон должен находится в режиме IDLE и при этом быть активен режим Dedicated Channel, т.е. БС должна производить обмен данными с абонентским устройством в целях установки режима ciphering mode или регистрации в сети.
  • Сообщение передается телефоном в UPLINK канале SACCH каждые 480мсек.
  • Сообщение передается по интерфейсу A-bis от BTS в контроллер BSC практически без изменений
  • Сообщение передается как до, так и после включения режима шифрования
Атака
Так как мы знаем что сообщение передается каждые 480мсек, т.е. раз в 102 TDMA фрейма канала SDCCH - мы можем предсказывать номера Frame Number сообщения Measurement Report, просто прибавляя к известному plaintext сообщению номера 102, 204, 306 и так далее.

При помощи сниффера записываем непрерывно все Meas Report'ы до момента возникновения сообщения Ciphering Mode Command. Выделять их можем по идентификатору типа фрейма 0x15 . Нас интересует самый последний report перед включением шифрования командой C.M.Command. Выглядит он так:
meas_no_cipher.png

Запишем номер GSM Frame Number = 347166, и зная что месседж передается с интервалом в 480мсек - вычислим номера фреймов после включения шифрования:
Код:
347166 + 102 = 347268
347166 + 204 = 347370
347166 + 306 = 347472

Предположительно, это будут те же самые фреймы Meas Report, но уже шифрованные. Поэтому, после срабатывания шифрования - пишем эти номера фреймов.
Для примера, шифрованный фрейм MeasReport (после декодирования заранее известным ключем сессии) выглядит так:
meas_ciphered.png

Как видно, номер кадра - 347370, то есть предположение по поводу кратности номеров фреймов, числу 102 - работает.
К сожалению, фрейм после включения C.M. - несколько отличается от такого же plaintext, и мы не можем получить гамму выполнив операцию XOR между этими фреймами. Но...

Оптимизация атаки
0x01
В MeasReport телефон передает свою излучаемую мощность и режим управления мощности. Биты сообщения MS power Level (значение от 0 до 15, 15 - макс мощность), и режимы FPC (Fast Power Control). Нам нужно хорошо слышать телефон, поэтому заранее, аж до момента запроса идентификаторов imsi и imei - включаем ему принудительно FPC и передаем команду своей БСкой на запрос максимального уровня мощности (15). Таким образом мы убиваем 2 проблемы. 1 - получаем хороший уровень сигнала от телефона. 2- биты power level и fpc темерь нам точно известны.

Есть нюанс - телефон на режиме мощности 15 очень быстро высаживает батарею. Это следует учитывать. Обычно владелец телефона сам заботится о том чтобы держать свой "жучек" в работоспособном и заряженном состоянии. При атаках ночью - телефон как правило подключен к зарядному устройству, тоже не проблема. Но если владелец находится вдали от цивилизации - мы рискуем посадить батарею телефона, и лишиться возможности коннекта с ним.

0x02 Телефон передает измеренную дистанцию до базовой станции . Биты Actual Timing Advance. Но, со стороны базовой станции - есть возможность сформировать такой пакет измерения TA, что телефон будет думать что дистанция всегда равна TA=0 или TA=1. Т.е. мы уменьшили пространство вариантов с 255 бит до 2.

0x03 Телефон измеряет уровни сигналов только до тех станций, которые перечислены в списке neighbour list , передаваемом базовой станцией в сообщениях SIB5, SIB6. Если мы передаем пустой список соседей - то убиваем 2 проблемы. Первое - телефон не захочет соскакивать на другую базу с нашей, т.к. он теперь просто не знает про их существование. Второй положительный момент - последние 13 байт сообщения meas report теперь равны нулю (и это не 2b паддинги, т.е. телефон их не имеет право рандомизировать, тут именно чистый эталонный 0x00!!!) . А так же еще 3 бита стали известными - NO-NCELL-M приняли значение 0 0 0.

0x04 RXLEV-FULL-SERVING-CELL и SUB-SERVING-CELL. Тут все плохо. Это уровень сигнала с которым телефон слышит нашу БСку. Нужно обеспечить ему стабильный сигнал, и надеяться на то что за 480 миллисекунд этот уровень сигнала не поменяется больше чем на 3...5децибелл (требует уточнения, надо глянуть стандарт - какая там градация в этом сообщении). В общем, усилитель на 20-50вт, направленная антенна и почти всегда это сообщение не вызывает проблем. Полезно оценивать насколько скачет уровень сигнала используя предыдущие measreportы . Если сильно скачет, то нужно подойти к цели поближе или выкрутить мощность передатчиков на полную.

0х05 BER - процент ошибок в обмене с БСкой. Опять же, см. пункт 4- тут такие же принципы. Но, если мы не можем обеспечить хорошее качество сигнала для мобильного устройства, тут есть полезный прием - искажаем сигнал выдаваемый кодером Витерби, для сообщения C.M.Command таким образом чтобы BER стал максимальным - сообщение проходит со 2-3 попытки и теперь мы знаем что BER стал равен максимально возможному значению.

0x06 Гипотеза от //вырезано цензурой - интервал сообщения (102, 204 или 306) - можно померить перед включением шифрования непосредственно для того baseband процессора мобильного устройства, с которым в настоящий момент времени установлена связь. Данное значение следует использовать для предсказания где будет находиться следующий ciphertext фрейм, что в 3 раза уменьшает сложность атаки. Гипотеза требует проверки.

Другие возможности использования этого фрейма в целях причинения добра владельцу абонентского устройства
1. Манипулируя мощностью телефона, можно упрощать задачу пеленгации. Когда мы далеко от цели - используем максимальный уровень 15 (1вт мощности). По мере приближения к цели с локатором (переносное устройство, показывающее уровень сигнала и иногда направление на телефон цели) - уменьшаем мощность его передатчика, улучшая таким образом точность пеленгации.

2. Мы можем использовать 2..3 шт своих базовых станций с известным уровнем сигнала, разнеся их в пространстве и соединив в единую сеть на уровне BSC/A-bis (например по wifi). Отправляем ARFCNы этих БСок в SIB5 и таргет шлет нам их уровни сигнала в meas report'е. Таким образом, сидя на одном месте - мы можем наблюдать за передвижениями цели, анализируя изменения уровеня сигнала БСок которое оно принимает.

3. В целях анонимности - при использовании своего опенсорс телефона, мы можем формировать для оператора любой произвольный Meas.Report и заставлять оператора думать что мы находимся в другом месте (но не сильно далеко, т.к. БСки тоже имеют свойство анализировать уровень сигнала от телефона).

4. ГИПОТЕЗА от //null Возможно, если в список соседей добавить "чужую" вышку - например если sim-карта у цели - Мегафон, а ARFCN вышки в списке соседей принадлежит Билайну - ВОЗМОЖНО, телефон измерит ее уровень сигнала но при этом не сможет сделать реселект на нее т.к. имеет место быть "чужой" plmn. Если это так, то можно увеличить точность локализации абонента на местности - вышек много и их координаты известны. Надо проверять.

Самый простой метод извлечения гаммы из MeasReport


0b01
БСкой включаем телефону FPC, на 15 уровень мощности передатчика

0b10 Пишем 3 пары plaintext + ciphertext руководствуясь гипотезой "+102"

0b11 Примерно таким методом генерируем 16 возможных вариантов пакета
C:
//эта функция генерирует возможные ciphertext фреймы на основе
//последней plaintext строки (перед включением ciphering mode command) meas report

//тут мы перебираем варианты связанные с разным error rate
//(8шт и первым байтом в строке 0х05, 0х45 и т.д.)
//после этого КАЖДЫЙ из фреймов нужно будет разложить на
//бурсты и сделать xor каждого из бурстов с нужным plaintext бурстом
//так мы получим несколько десятков вариантов криптографической гаммы,
//которые можно будет передать в дешифратор
//возможно еще нужно посмотреть в сторону изменения уровня сигнала и т.п.


//обратите внимание что для наглядности процесса, каждый бит записан
//в отдельный элемент массива из char'ов.

static char guess_frame[16][23];
void gen_cipherframe(char *xp)
{
 static unsigned char tmp_string[23]; //временная строка в которую копируем string_etalon[23];


 //копируем данные в локальную временную переменную
 char n=23;
 while(n){
  n--;
  tmp_string[n]=xp[n];
 }

//9 байт массива - это текущее значение байт еррор!
// байт еррор записывается ввиде .111 111.
//бит .......0 является частью байта в котором указаны есть ли соседи БСки!

static unsigned char error_byte[8] = {0b00000000,
0b00010010,
0b00100100,
0b00110110,
0b01001000,
0b01011010,
0b01101100,
0b01111110}; //варианты байт для значения BYTE ERROR RATE. Всего семь

n=8;
    while(n)
    {
    n--;
    memcpy(guess_frame[n],tmp_string,sizeof(char)*23); //скопировали образец в выходной массив
    guess_frame[n][9]|=error_byte[n]; //поменяли 9 элемент на сгенерированный нами
    guess_frame[n][0]=0b01001111;
    }



n=8;
    while(n)
    {
    n--;
    memcpy(guess_frame[n+8],tmp_string,sizeof(char)*23); //скопировали образец в выходной массив
    guess_frame[n+8][9]|=error_byte[n]; //поменяли 9 элемент на сгенерированный нами
    guess_frame[n+8][0]=0b00001111;
    }
}


То есть, для каждого из meas report мы получаем 16 вариантов. Раскладываем их на BURSTы - получаем 4*16 = 64 вариант. А так как вариантов +102 у нас три, то всего на дешифратор отправляется 64*3 = 192 строки. Из этих строк нам нужно восстановить начальное состояние генератора шифра А5/1, что в итоге даст возможность определить ключ сессии, использованный для генерации гаммы.
Устройство для обращения функции А5/1, собранное на ПЛИС - решает эту задачу практически в масштабе реального времени. Но, про создание такого устройства - как нибудь в другой раз )

Вопросы - как обычно, в паблик, предложения по сотрудничеству - в личку :)

Литература

1. Спецификация GSM 05.08 version 8.5.0 Release 1999 . Раздел 8 -Radio Link Measurements, включая главу 8.4 .
2. Документация фирмы Agilent (Keysight)
3. GSM Frame Structure
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Вы имеете ввиду рандомизацию padding-бит со стороны оператора?
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Во-первых, эта задача не имеет практического смысла - т.к. подавляющее большинство телефонов будут работать на стандарте шифрования а5/3, а там другая атака.

Если говорить об оставшихся 0.1% телефонов которые висят на стандарте 2g / a5.1 - то
1)рандомизация паддингов кореллирует с IMEI телефона. Они не столь случайны какими кажутся.
2)их можно перебрать простым брутфорсом. Комбинаций не много
3)Можно использовать известный кусок сообщения sib5 или ciphering mode complete - функцию кодера Витерби можно обратить и выделить нужные 64 бит ciphertext'a, для которого нам известен plaintext. Опенсорсные утилиты которые раскладывают фрейм на бурсты делать этого не умеют (при изменении любого бита все 4 бурста получаются с мусором), но на самом деле там все просто.
 
Учитывая наличие рандомизации padding-битов в современных сетях, такой дешифратор должен обладать высокой вычислительной мощностью и как результат он дорогостоящий.
но:
их можно перебрать простым брутфорсом. Комбинаций не много
???
 
Пожалуйста, обратите внимание, что пользователь заблокирован
При помощи платы с несколькими fpga это делается. Очень дорого, но оно того стоит.
 
3. В целях анонимности - при использовании своего опенсорс телефона, мы можем формировать для оператора любой произвольный Meas.Report и заставлять оператора думать что мы находимся в другом месте (но не сильно далеко, т.к. БСки тоже имеют свойство анализировать уровень сигнала от телефона).

вы таким образом не обманите оператора связи, поскольку телефон сидит на вполне конкретном канале, имеет вполне конкретную задержку сигнала и оператор телефон будет видет как облупленный, там где он и находится, с точностью которая доступна оператору связи. Поможет сделать то что вы написали режим посадки телефон на определенный канал, как сделано у нас в телефоне. Телефон видит один канал и только один канал видит телефон, никаких триангуляций.
Так что править мешуре не имеет никакого смысла, мы умеем ее править, но не делали то что вы пишите.

Второй положительный момент - последние 13 байт сообщения meas report теперь равны нулю (и это не 2b паддинги, т.е. телефон их не имеет право рандомизировать, тут именно чистый эталонный 0x00!!!)
0Х00 прекрасно рандомизируются, оператору комплекса не поможет никакой расчетчик на плисах ...............вот тут изменение мешуре да, оправдано в смысле анонимности :)
 
При помощи платы с несколькими fpga это делается. Очень дорого, но оно того стоит.
а точно стОит? вы же пишите что на А5.1 сидит "0.1% телефонов которые висят на стандарте 2g / a5.1 " :) На самом деле мы собираем андроидом статискику 5.3 и 5.1, по МТС так почти ровно 50 на 50 ...............согласитесь это не 0.1%
Сделать работающий дешифратор подавляющему большинству читателей форума не реально, а тем более на плисах, да ещё на нескольких на плате............нет смысла об этом рассуждать. К тому же даже один из лучших дешифраторов мешуре обрабатывает порядка 1-2 секунды, при самых терпеливых операторах порядка 4 секунд, согласитесь на режим реального времени это совсем не тянет. А это как раз вариант "нескольких" плис :)
 
Последнее редактирование:
1)рандомизация паддингов кореллирует с IMEI телефона. Они не столь случайны какими кажутся.
у вас есть алгоритм расчета? или просто так подумалось? Знаю что в билайне кореляция была у тимси но с имси
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Поможет сделать то что вы написали режим посадки телефон на определенный канал, как сделано у нас в телефоне.

Очень странно, что Ваш телефон, который настолько хорошо продается - что не требует рекламы в каждой теме про GSM - не умеет рандомизировать (увеличивать) ТА. Я удивлен.
 
я вот откровенно не понимаю при чем тут наши продажи, (откуда вы знаете как и что продается, опять показалось?). И реклама, подавляющее большинство кто на форуме, в принципе не знает о каком телефоне речь, не было ни ссылок ни названия, ни перекрестных ссылок на обьявление о продаже, при чем тут реклама? я просто ссылаюсь на собственный опыт, не просто типа мне так показалось, а на реально работающее изделие свойства которого можно проверить и увидеть результат их работы. Например, я в МТС на их карте (был раньше у них такой сервис, сейчас не знаю) наблюдал как меняю свое место положение в зависимости от того на какой канал установлю телефон. Нет триангуляции и меня по карте бросало в другой конец района :)
не умеет рандомизировать (увеличивать) ТА.
раз не умеет значит решили что это не нужно, вот даже в мыслях не держал вас удивлять
Статья реально хорошая, вы достаточно быстро разобрались с Мешуре. Но читатели форума кому тема интересна не могут проверить ваши рекомендации, а там есть принципиальные неточности, на которые вы не отреагировали переводя разговор в "сам дурак".
Та же рандомизация не только мешуре но и других команд, сделали, проверили в реальной работе, нет конфликта с оператором, всё прекрасно работает, а вот оператор комплекса нервно курит в сторонке, Кс ему больше недоступен в принципе, с любым дешифратором. Да, можно написать про такой функционал глядя мечтательно в потолок, а можно со сылкой на проверенное рабочее устройство, второе более информативно и по делу.
И кстати про кореляцию, с ИМЭЙ оператор ничего не корелирует, просто с ним он не работает, а вот с ИМСИ точно делает кореляцию того что кажется случайным.
Что касается 0.1 процента то могу сделать статистику 5.1.и 5.3 ........... и это по Москве, есть операторы и места где 5.3 просто не используется, и 5.1 по прежнему актуален. Люди реально будут думать что 5.1 уже закончился в пассивном варианте. Потому что мало кто собирал статистику этого дела.
 
Последнее редактирование:
Пожалуйста, обратите внимание, что пользователь заблокирован
Сделать работающий дешифратор подавляющему большинству читателей форума не реально
читатели форума кому тема интересна не могут проверить ваши рекомендации, а там есть принципиальные неточности

Этот форум существует примерно с 2003-2005 года, его читает огромное количество грамотных людей, многие из них делают вещи значительно более сложные чем дешифратор а5/1, я бы не стал так недооценивать.
Неточности - конечно есть, статья на форуме - это не источник академических знаний, а изложение точки зрения автора + упрощения, чтобы сделать материал более доступным для новичков.

неточности, на которые вы не отреагировали переводя разговор в "сам дурак".

К сожалению не всегда имею время "реагировать", у меня настолько много самых разных хобби кроме форума, что приходится иногда чем-то жертвовать )

И кстати про кореляцию, с ИМЭЙ оператор ничего не корелирует,

Вы не так поняли - я не про рандомные биты которые оператор шлет в SIB5 и т.п., а про те которые телефон добавляет в хвост сообщения c.m.complete (старые телефоны вообще не рандомизировали его).
Имеется взаимосвязь этих бит в хвосте сообщения c.m. complete, с конкретным IMEI телефона. Оператор тут вообще никаким боком, это делает baseband телефона, т.к. ответ c.m.complete формирует телефон.
Алгоритм генерации этих бит и его связь с конкретным экземпляром чипа -для Qualcom'а известен (их исходники сливали пару раз).
Зная что телефон на Qualcom'е, зная его IMEI - можно с высокой вероятностью правильно генерировать хвост сообщения c.m.complete, т.е. получить plaintext образец этого сообщения.

Другой вопрос зачем это делать, если существуют алгоритмы дешифровки 5/1, базирующиеся на ciphertext-only атаке, им "чистый" образец сообщения не нужен.

Что касается 0.1 процента то могу сделать статистику 5.1.и 5.3 ........... и это по Москве, есть операторы и места где 5.3 просто не используется, и 5.1 по прежнему актуален.

Я не готов на форуме документально опровергать или подтверждать вашу точку зрения, единственный способ это сделать - выложить логи со снифера или BTS. Это является сбором, обработкой персональных данных пользователей в РФ - следствие - нарушение правил форума, пункт i.3
 
Последнее редактирование:
Вы не так поняли - я не про рандомные биты которые оператор шлет в SIB5 и т.п., а про те которые телефон добавляет в хвост сообщения c.m.complete (старые телефоны вообще не рандомизировали его).
Имеется взаимосвязь этих бит в хвосте сообщения c.m. complete, с конкретным IMEI телефона. Оператор тут вообще никаким боком, это делает baseband телефона, т.к. ответ c.m.complete формирует телефон.
да, в этом случае использование ИМЭЙ конечно более чем уместно ..............
нарушение правил форума, пункт i.3
не будем ничего нарушать но кому реально интересно может сам проверить какая ситуация со статистикой в его месте жительства, это не сложно сделать с помощью осмокома
 
Пожалуйста, обратите внимание, что пользователь заблокирован
не будем ничего нарушать но кому реально интересно может сам проверить какая ситуация со статистикой в его месте жительства, это не сложно сделать с помощью осмокома

Самый правильный способ. К тому же от локации сильно может зависеть наличие той же самой рандомизации, особенностей rekeying'а / смены cksn, и прочих неприятных штук.
В общих чертах кстати информация есть тут https://gsmmap.org/ , забавный документ от января 2022 года
https://gsmmap.org/assets/pdfs/gsmmap.org-country_report-Russian_Federation-2022-01.pdf
Некоторые их выводы весьма спорны, особенно про "Impersonation (2G)", но все очень похоже на то что МТС "зашевелился" касаемо а5/0 именно после выхода этого документа.
 
очень похоже на то что МТС "зашевелился" касаемо а5/0 именно после выхода этого документа.
может быть и так и я зря гнал на человека по этому поводу :) могло просто совпасть............
 
кстати вы не сталкивались с таким? ...... изучая мешуре для рандомизации видел что мешуре нулевая идет уже в закрытой части, правда только самой первой, либо после чиперен команд до комплита, либо даже после комплита, далее шли заполненные, т.е. бери из открытой и пресказание будет полным. Думал что может быть она идет всё таки открытой ещё, после чиперен, посмотрил, нет, реально уже закрытая.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
кстати вы не сталкивались с таким? ...... изучая мешуре для рандомизации видел что мешуре нулевая идет уже в закрытой части, правда только самой первой, либо после чиперен команд до комплита, либо даже после комплита, далее шли заполненные,

Как только тлф получает C.M.Command - весь трафик от него передается в шифрованном виде, это прописано в стандарте.
Соответственно, первая Meas Report после команды сети C.M.Command - будет шифрованной.

Не очень понимаю что Вы имеете ввиду под словом "нулевая", объясните пожалуйста.

т.е. бери из открытой и пресказание будет полным. Думал что может быть она идет всё таки открытой ещё, после чиперен, посмотрил, нет, реально уже закрытая.

Вообще Meas Report неприятно тем, что оно сильно разное у разных телефонов. У меня есть наверно где-то десяток "тестовых" смартфонов разных марок, и у всех поведение касаемо этого сообщения немного разное. Основное отличие - самый первый байт (в строке из 23 байт, самый левый), не помню уже за что он отвечает, надо справочник глянуть. Вот он 100% у разных телефонов бывает разным.
Возможно, количество вариантов (особенно касаемо EPC), можно уменьшить вдумчиво проанализировав классмарк телефона и его имей (понять что это за агрегат и применить к нему известные алгоритмы). Но в целом и так вроде не много получилось, всего 16 вариантов.

Кстати, помните наш давний спор касаемо rekeying у Mega? Он там таки есть, но хитрый - при входящей СМС (и звонках) используется всегда допустим cksn = 1, а при исходящих, оно хочет cksn=2 и соответственно шлет новый rand.
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх