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.
:~$ git clone
Клонирование в «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), готово.
Проверка соединения… готово.
Выберем какую-нибудь ветку:
:~/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»
Вот где живет заветный драйвер:
:~/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), а частота приёма = частота передачи + 9
Все носят в кармане сотовый телефон, чуть ли не дошкольники ходят с ними, а базовые станции висят на каждом столбе. Обыватель считает, что всё просто и прозрачно: совершает звонки, посылает СМС. И редко задумывается над процессами, которые обеспечивают все эти действия.
В этой статье показано, что 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.
:~$ git clone
Клонирование в «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), готово.
Проверка соединения… готово.
Выберем какую-нибудь ветку:
:~/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»
Вот где живет заветный драйвер:
:~/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), а частота приёма = частота передачи + 9