Предлагаю сегодня поговорить о скрытой и неизведанной области — GSM-связи. Почему же неизведанной, спросите вы? Ведь все носят в кармане сотовый телефон, чуть ли не дошкольники ходят с ними, а базовые станции висят на каждом столбе? Увы, обыватель считает, что всё просто и прозрачно: совершает звонки, посылает СМС. И редко задумывается над процессами, которые обеспечивают все эти действия. В этом статье я попробую показать, что GSM-связь — с одной стороны весьма непрозрачная тема, а с другой — прорва уязвимостей. Если конкретнее – то поговорим о так называемых IMSI-ловушках (или IMSI-catchers).
Введение
Начнём издалека, а именно с того, что GSM-связь очень плохо поддаётся изучению. Нельзя просто так взять © и поэкспериментировать с мобильной связью. Хотите соорудить девайс и подключиться к сети, анализировать протокол? Облом — коммуникационные процессоры не имеют нужного API и тем более открытого кода. По сути — это чёрные ящики за семью замками. Максимум, что они “выставляют” наружу — примитивный интерфейс на основе AT-команд. Хотя, если быть точным, то иногда немного больше – но об этом позже.
Поднять свой сервер свою базовую станцию? Это долго, дорого и за вами могут приехать. Существуют замечательные проекты, такие как OpenBTS и SDR (software defined radio), но не обольщайтесь. Во-первых, полноценная сотовая сеть состоит из множества компонентов, а во-вторых — необходимое железо неприлично дорогое. Вот такая несправедливость.
Не хотите ли прикупить OpenBTS development kit (сетей 2.5G) фирмы Range Networks за $3300?
Ettus выпускает такие гик-девайсы для экспериментов в сотовых сетях вплоть до 6 ГГц. Цена около $4000.
IMSI-ловушки. Что это?
Но вернёмся к теме статьи. IMSI-ловушки — это мобильные ложные базовые станции, которые спецслужбы включают при различных обстоятельствах в разных местах. Мобильные телефоны “цепляются” к этим станциям, которые фактически выступают в роле Man-in-the-middle. В результате мы имеем перехват разговоров, СМС и интернет-трафика. Факты использования таких устройств засекречены. В Германии, например, в 2002 году был принят закон, разрешающий спецслужбам применять такие устройства, однако не обошлось без бурных общественных дебатов. А где-то и до дебатов не доходит. Однако косвенные доказательства есть. Как правило, ловушки включаются в местах народных волнений, либо вокруг объектов, представляющих высокую государственную важность. Часто IMSI-идентификаторы особо интересных личностей заносятся в список фильтрации, и далее работают только с телефонами конкретных людей.
А теперь познакомимся с IMSI-ловушками поподробнее. Для начала классифицируем их поведение. Оно может поддерживать 2 режима — активный и пассивный. В активном ловушка выступает в роли базовой станции. В пассивном — мониторит канал и другие базовые станции. Наиболее интересен, конечно же, активный режим. Опишем его функции.
Прикидываемся базовой станцией
Согласно алгоритму GSM, сотовый телефон обычно выбирает станцию с наиболее сильным сигналом. Это разумно — можно снизить мощность передатчика и сэкономить батарейку. Таким образом ловушка “забирает” телефоны на себя. Далее она запрашивает с телефона его…
- IMSI: Interntaion Mobile Subscriber Identifier — фактически это уникальный номер SIM-карты;
- IMEI: Interntaion Mobile Equipment Identifier — уникальный номер аппарата.
Это происходит в рамках стандартных протоколов GSM-стека. Итак, мы вышли на конкретного человека.
IMSI-ловушка “StingRay” известной фирмы Harris
Нарушение связи
Возможно оставить абонента без связи: сначала “захватить” на себя, а потом оборвать, и так до бесконечности. А можно выдавать мусор или заведомо некорректные пакеты.
Перехват разговоров
Самое вкусное. Здесь все не так просто, однако проще чем могло бы быть.
Как известно, в GSM предусмотрели защиту от несанкционированного съёма информации. Существует несколько режимов:
- А5/0 — фактически это plain text, шифрования нет;
- А5/1 — первый вариант с потоковым шифром, который сейчас уже не считается достаточно стойким;
- А5/2 — экспортный вариант А5/1 с намеренно заниженной стойкостью. Куда уж ниже?!
- А5/3 — достаточно стойкий вариант, возникший с приходом 3G.
Как показал известный хакер Harald Welte, вся схема защиты в GSM местами зиждется на популярном принципе Security through obscurity и содержит фундаментальные уязвимости. При этом столпы GSM-индустрии годами игнорируют эти факты — всех всё устраивает.
Как это происходит
Опишем алгоритм, как ловушка вклинивается в эту систему.
Сразу отметим, что если оператор изначально везде применяет А5/2, то задача становится тривиальной — этот шифр вскрывается в реальном времени. Но операторы не совсем идиоты, поэтому они используют А5/1. Базовая станция анонсирует этот протокол и телефон на него “соглашается”, все довольны.
Все шифры А5 работают на ключе, который хранится как у оператора, так и на SIM-карте. Он уникален для каждого абонента и за его сохранность отвечает крипточип SIM-карты. Из этого следует, что ловушка по отношению к оригинальной базовой станции “прикидывается” абонентским устройством на алгоритме А5/1, а для реального телефона “прикидывается” базовой станцией на алгоритме А5/2, который вскрывается на лету. Таким образом, ловушка извлекает секретный ключ абонента и реконструирует сессию с базовой станцией. Дело сделано. Как узнать, что ваш телефон переключился на слабый шифр? Обычно никак: индустрия сотовой связи заботится о людях — меньше знаешь, крепче спишь. Однако в природе все же встречаются отдельные модели телефонов, которые как-то сигнализируют, и это не смартфоны. Где-то появляется иконка, а где-то незаметная строка утекает в лог, однако это обычно связано с переходом на А5/0. В любом случае, все это скорее исключения из правил.
Противодействие
Естественно, борцы против Большого Брата не оставляют это дело без внимания.
Так появился проект SnoopSnitch — это программа для Android, помогающая в обнаружении IMSI-ловушек в повседневной жизни. Принцип её работы заключается в регулярном сборе статистики об окружающих базовых станциях: их характеристиках и местоположении. В случае обнаружения отклонения от привычной картины программа выдаёт предупреждение. Тут же можно загрузить свои данные на сервер — там формируется глобальная база знаний обо всех базовых станциях мира.
К сожалению, программа недоступна для большинства телефонов. Это связано с особенностью её работы. Как уже было отмечено, в GSM-отрасли любые технические детали старательно вымарываются, но кое-что просачивается. Baseband-процессоры Qualcomm имеют специальный диагностический интерфейс (программный), через который возможно информирование о разных событиях из жизни сотовой связи. В лучших традициях жанра, этот интерфейс недоступен обычным Android-приложениям, однако он все же доступен при наличии root. Если у вас телефон на чипсете Qualcomm, то, возможно, вам повезло. Познакомимся с интерфейсом поподробнее.
Для начала выкачаем ядро для Qualcomm. Оно называется msm — по одноимённой серии Qualcomm SoC.
igor@igoryan:~$ git clone https://android.googlesource.com/kernel/msm
Клонирование в «msm»…
remote: Sending approximately 1.01 GiB ...
remote: Counting objects: 71639, done
remote: Finding sources: 100% (8333/8333)
remote: Total 3952476 (delta 3262538), reused 3952419 (delta 3262538)
Получение объектов: 100% (3952476/3952476), 1.01 GiB | 4.24 MiB/s, готово.
Определение изменений: 100% (3262538/3262538), готово.
Проверка соединения… готово.
Выберем какую-нибудь ветку:
igor@igoryan:~/msm$ git checkout android-msm-shamu-3.10-lollipop-release
Распаковка файлов: 100% (45604/45604), готово.
Ветка android-msm-shamu-3.10-lollipop-release отслеживает внешнюю ветку android-msm-shamu-3.10-lollipop-release из origin.
Переключено на новую ветку «android-msm-shamu-3.10-lollipop-release»
Вот где живет заветный драйвер:
igor@igoryan:~/msm$ cd drivers/char/diag/
Читаем настроечный файл ядра Kconfig:
config DIAG_CHAR
tristate "char driver interface and diag forwarding to/from modem"
default m
depends on USB_G_ANDROID || USB_FUNCTION_DIAG || USB_QCOM_MAEMO
depends on ARCH_MSM
help
Char driver interface for diag user space and diag-forwarding to modem ARM and back.
This enables diagchar for maemo usb gadget or android usb gadget based on config selected.
endmenu
Как видим, драйвер позволяет общаться с модемом в двунаправленном режиме: слать некие команды и получать некую инфу. В мире user space драйвер себя обнаруживает как устройство /dev/diag_char. Беглое изучение исходного кода показывает, что драйвер предоставляет только транспорт произвольных данных, и не содержит никаких зацепок на само содержание данных. Всё что он делает, это определяет некий примитивный формат пакета: старт-байт, данные, стоп-байт, CRC. Как всё предсказуемо!
Анализ данных от диагностического интерфейса
Ребята из SnoopSnitch умудрились отреверсить сами полезные данные и на основе их строится анализ. Вот какие параметры они принимают к сведению.
MCC/MNC
Mobile Country Code — код страны. Для России это 250. К нему добавляются 2 цифры, идентифицирующие оператора, и получается полноценный код MNC (Mobile Network Code). Список всех MNC можно посмотреть здесь: mcclist.com/mobile-network-codes-country-codes.asp
LAC
Location Area Code — некий код географической зоны, которая обслуживается одним контроллером базовых станцией (BSC). Когда происходит входящий вызов, то оповещение одновременно получают все базовые станции данной зоны.
Cell ID
Идентификатор соты, т.е. базовой станции.
Longitude, Latitude
Долгота и широта базовой станции.
ARFCN
Absolute radio-frequency channel number — идентификатор, однозначно определяющий пару частот, используемых для приёма и передачи. Например, за диапазоном GSM 1800 закреплены номера 512 — 885. При этом частота передачи вычисляется по формуле 1710.2 + 0.2·(n−512), а частота приёма = частота передачи + 95.
Собственно, события, связанные с сетью:
Location Update
Когда телефон переходит из одной Location Area на другую, он посылает станциям это сообщение. Также он его посылает и периодически.
Сообщения PAGING
PAGING — это процесс нахождения конкретного абонента для передачи ему SMS-сообщения или звонка. Если приходит SMS, то программа регистрирует адрес центра SMS (SMSC) и тип сообщения: обычное, Silent или Binary.
А теперь опишем непосредственно критерии, на основе которых программа находит ловушки.
1. Сменился LAC или Cell ID, при том что частота осталась неизменной. Действительно, часто ловушка занимает существующую частоту, при этом предоставляя более сильный сигнал, чем оригинальная станция. Но эта метрика весьма ненадёжна. Во-первых, телефон может находиться в зоне действия двух станции из разных LAC, и просто перескочить с одной на другую, оставаясь на одинаковом канале. Во-вторых, сам оператор может дать команду какой-то станции на переход к другому LAC.
2. LAC текущей станции отличается от LAC окружающих станций. Задача ловушки — добиться Location Update от телефона, так как только в этом случае она может “стянуть” с него нужную информацию. Поэтому она анонсирует другой LAC, предоставляя более сильный сигнал. Но есть подводный камень — легальные фемто-соты могут также иметь другой LAC: зависит от настроек соты, оператора и погоды на Марсе.
3. При неизменной паре Cell ID — LAC изменился номер канала. Ловушка часто маскируется под неиспользованную частоту уже существующей базовой станции.
4. LAC содержит единственную станцию. Как уже сказано в п. 2, обычно стремятся инициировать Location Update. Проще всего этого добиться, подняв псевдо-вышку с отличным от всех LAC и самым сильным сигналом. Подводный камень: в местах с плохим покрытием (обычно за городом) часто бывает, что телефон “видит” только одну станцию, и здесь уже бессмысленно гадать.
5. Станция не сообщает информации о своих соседских станциях, хотя это должно происходить в условиях плотного покрытия. Ловушка не анонсирует другие станции, чтобы у телефона “не было соблазна” на них переключиться. А иногда хитрят: анонсируют несуществующие частоты либо существующих, либо несуществующих соседних станций.
6. Анонсирование заведомо завышенного CRO (Channel Reselection Offset). Это один из параметров, который влияет на алгоритм выбора телефоном наилучшей базовой станции.
7. Отключение шифрования, при том что оно ранее было на той же паре LAC/Cell. Ловушка может переключить телефон с А5/3 на А5/0, тем самым выключив шифрование вообще, либо на слабый алгоритм А5/2.
8. Сообщение CIPHER MODE COMPLETE не содержит IMEISV. Тут надо подробнее пояснить весь процесс аутентификации и шифрования в GSM. Подключение к GSM-сети состоит из трех этапов: аутентификация, выработка ключа шифрования и выбор режима шифрования.
1. Аутентификация
На SIM-карте абонента хранится 128-битный ключ — Subscriber Authentication Key. Точно такой же хранится у оператора. Так как SIM-карта формально принадлежит оператору, а сам ключ хранится защищённым образом, то это считается надёжным.
Шаги:
- станция генерит случайное 128-битное число и посылает его абоненту;
- обе стороны подают на вход алогритма А3 это число и общий ключ, получают 32-битное число SRES (от Signed Response);
- абонент отправляет ответ с этим числом, а станция сравнивает со своим; если всё сошлось, то абонент аутентифицирован.
Кстати, подтверждение подлинности самой станции не предусмотрено. Случайно ли?..
2. Выработка ключа шифрования
Здесь процедура идентичная, за исключением того, что случайное число и ключ подаются на вход алгоритма А8, а результатом является 64-битный ключ симметричного шифрования А5.
Выбор режим шифрования
Станция посылает телефону команду CIPHER MODE SELECT, сообщая требуемый режим шифрования: А5/0, А5/1, А5/2 или А5/3. Однако в этом сообщении есть ещё флаг REQUEST_IMEISV, означающий, что телефон должен сообщить в ответном сообщении CIPHER MODE COMPLETE свой уникальный идентификатор, причём это сообщение уже зашифровано на ранее согласованном ключе. По умолчанию флаг всегда ставится. Однако ловушка может не передавать этот флаг, в результате сообщение CIPHER MODE COMPLETE будет содержать предсказуемую статическую информацию. После этого производится стандартная атака по известному открытому тексту (known plain text attack), и ключ вскрывается. Итак, критерий №8 отлавливает отсутствие данного флага. Ещё есть дополнительный признак — долгое ожидание подтверждения получения станцией CIPHER MODE COMPLETE. Действительно, вскрытие ключа требует времени.
9. После Location Update идёт стандартный запрос абоненту на идентификационную информацию (IMEI, IMSI), а дальше станция отвергает телефон, заставляя делать новый Location Update. Всё это — признак ловушки, работающей в режиме сбора информации.
10. Если станция анонсирует другой режим шифрования, отличный от обычного для данной местности или оператора, то это либо ловушка, либо оператор недоглядел, либо аппаратный сбой, либо так задумано. Но в расчёт принимается.
11. Слишком маленький интервал регулярного Location Update. Телефон обязан периодически посылать Location Update — даже если он не мигрирует с одной соты на другую. А значение периода приходит со станции. Стандартное значение — 1-4 часа. Но ловушка может распространять заведомо маленькие тайм-ауты, чтобы более оперативно “цеплять” телефоны.
12. Произошёл Paging, за которым не последовало ни SMS, ни разговора. Это типичная проверка, находится ли “жертва” в зоне покрытия в конкретный момент времени.
13. Установлен канал данных (Traffic Channel, или TCH), но не последовало ни SMS, ни разговора. Либо он последовал, но спустя необычно долгое время. Согласно протоколу, после установления этого канала телефон непрерывно шлёт пустые подтверждения, пока канал не закроется. Эти подтверждения могут использоваться ловушкой для более точного позиционирования телефона.
14. Подозрительный список соседних станций (Neighboring Cells). Каждая станция передает подключённому к ней телефону список окружающих станций. Но если это ловушка, то она будет отсутствовать в этих списках – в отличие от других, легитимных, станций.
15. Разбиение на большое количество групп (Paging Group). Каждая станция объединяет все подключенные телефоны в группы. Это нужно для оптимизации ресурсов. Когда происходит входящий звонок, все телефоны данной группы получают оповещение на соответствующем логическом канале. Когда ложная станция хочет вернуть абонента в родную сотовую сеть, она посылает некорректные данные на канале той группы, в которую входит абонент. В результате все члены группы начнут процедуру Cell Reselection. Чтобы затронуть как можно меньше абонентов, ложная станция делает их маленькими, а количество групп будет большим, что и является признаком работы ловушки.
Как мы видим, существует множество критериев, каждый из которых по отдельности не является 100%-ной гарантией обнаружения ловушек. Вместо этого предлагается вероятностная оценка.
Заключение
Данной статьёй я хотел пробудить интерес к стандарту GSM, который используют около ⅘ мобильных пользователей мира. Как мы убедились, в основе безопасности GSM лежит не столько криптографическая стойкость, сколько высокий “входной билет” в эту область. Здесь главенствуют производители телекоммуникационного оборудования и операторы, а обсуждения уязвимостей редко выходят за рамки хакерских конференций. К счастью, с приходом нового стандарта UMTS защищённость была повышена. Вот главные новшества:
- Взаимная аутентификация для защиты от ложных базовых станций;
- Защита целостности управляющих команд;
- Шифрование распространяется не только на участок “телефон — базовая станция”, но и на каналы внутри серверной части;
- Более сильное шифрование (128 бит против 64 бит в GSM);
Но и хакеры тоже не дремлют. Будем ждать новых уязвимостей в сетях 3G и 4G!
Полезные ссылки
- www.youtube.com/watch?v=JyTb5mJOYLo
- www.sans.org/reading-room/whitepapers/telephone/gsm-standard-an-overview-security-317
- opensource.srlabs.de/projects/snoopsnitch
- github.com/CellularPrivacy/Android-IMSI-Catcher-Detector/wiki
- www.ettus.com
- www.globalresearch.ca/new-hi-tech-police-surveillance-the-stingray-cell-phone-spying-device
- arxiv.org/abs/1510.07563
Автор: Код Безопасности