В сетях мобильной связи возможно осуществление довольно специфичных атак. Об одной из них — раскрытии местоположения абонента в реальном времени с точностью до определения соты — пойдет речь в данной статье. Я не указываю точность в более привычных единицах измерения, т. к. размер соты не является величиной постоянной. В плотных городских застройках сота может обеспечивать покрытие порядка сотен метров, а в условиях лесов, полей и рек междугородной трассы — нескольких километров.
![](https://habrastorage.org/r/w1560/storage2/02f/3dd/a63/02f3dda637e204dd5794a2868aeaaa6e.png)
Рисунок 1 (по клику открывается в полном размере)
Для начала проведу небольшое введение в структуру сотовой сети на примере стандарта GSM. Упрощенная схема стандарта приведена на рисунке 1.
Покрытие обеспечивается базовыми станциями (Base Station, BS), каждая из которых, как правило, имеет несколько антенн, направленных в разные стороны. Антенна обеспечивает радиопокрытие соты, каждая сота имеет свой идентификатор (Cell Identity, CI). Базовые станции группируются в географические зоны (Location Area, LA). Группировка происходит чаще всего по территориальному принципу. Идентификатор такой группы называется LAC (Location Area Code). На рисунке 1 каждая базовая станция обеспечивает покрытие трех секторов.
Базовые станции подсоединяются к контроллеру базовых станций (Base Station Controller, BSC). В самом простом варианте один LAC соответствует одному BSC. Именно такое назначение LAC показано на примере (рисунок 1). Для наглядности LAC выделены разными цветами.
Территория, покрываемая одним LAC, зависит от плотности населения. В Москве, в пределах МКАД, может быть несколько десятков LAC, а в небольшом регионе центральной полосы России разделение на LAC может быть таким: один LAC покрывает областной центр, второй LAC покрывает всю остальную территорию области.
Все контроллеры BSC подключаются к коммутатору (Mobile Switching Center, MSC). По сути, MSC представляет собой обычный коммутатор голосовых телефонных вызовов с аппаратно-программным расширением для обеспечения функций мобильности абонентов. В эпоху широкого распространения IP следует напомнить, что MSC оперирует коммутацией цепей (Circuit Switched) согласно установленным в нем статичным таблицам маршрутизации на основе привычной нам телефонной нумерации.
Регистр местоположения визитных абонентов (Visited Location Register, VLR) функционально считается отдельным элементом сети, но фактически всегда интегрирована с MSC. В базе данных VLR содержится информация об абонентах, которые в данный момент находятся в зоне действия своего MSC. И раз уж тема статьи о местоположении абонента, то стоит упомянуть, что для каждого абонента в БД VLR хранится информация о текущем идентификаторе LAC, и идентификаторе той соты (CI), которая была при последнем радиоконтакте мобильного телефона с сетью. То есть, если абонент передвигается по территории покрытия одного LAC, не совершая и не принимая вызовов, в базе данных VLR информация о его местоположении не меняется. В общем случае, в сети может быть несколько узлов MSC/VLR. В примере на рисунке 1 показано два таких узла.
Еще два функциональных узла — регистр местоположения домашних абонентов (Home Location Register, HLR) и центр аутентификации (Authentication Center, AuC) — размещаются физически в едином модуле. HLR/AuC хранит профили абонентов своей сети. В профиле содержится следующая информация: телефонный номер абонента, уникальный идентификатор SIM-карты (International Mobile Subscriber Identity, IMSI), ключи для обеспечения безопасности, категория абонента (предоплатная система расчетов /постоплатная система расчетов), список разрешенных и запрещенных услуг, адрес биллинг-центра (для абонентов предоплатной системы), адрес MSC/VLR, в зоне действия которого находится абонент в настоящий момент. Этот же профиль с некоторыми изменениями копируется в VLR, когда абонент регистрируется в зоне его действия.
Шлюзовой коммутатор (Gateway MSC, GMSC) является приемной точкой для входящих вызовов. Он на основе информации, полученной из HLR, маршрутизирует вызов на тот коммутатор, в зоне действия которого находится вызываемый абонент.
В процессе установления вызова, отправки SMS и прочих транзакций, узлы связи обмениваются между собой сигнальными сообщениями. Стек протоколов, набор сообщений и их параметров в сетях телефонной (не только мобильной) связи называется Системой сигнализации №7 (Signaling System 7, SS7). Все протоколы SS7 открыты и доступны для ознакомления и изучения на сайтах таких международных организаций, как МСЭ-Т, 3GPP, GSMA. Описанная далее атака опирается на сообщения SS7.
Разумеется, данную атаку не сможет совершить любой человек с улицы. Для осуществления атаки звезды должны расположиться в правильном порядке на небосводе. А именно:
Для того чтобы описание атаки не погрязло под скучными определениями и терминами, будем придерживаться следующей легенды. Пара наших сотрудников поехала в командировку в Киев: там у них намечены переговоры с потенциальными клиентами. Судя по времени, коллеги уже должны вернуться с результатом, но они сообщают, что в процессе переговоров возникли сложности, и им придется задержаться. Теперь мы будем пеленговать одного из наших коллег и предлагаем вам отследить весь процесс по стрелочкам на рисунке 2.
![](https://habrastorage.org/r/w1560/storage2/522/8c7/bed/5228c7bed8b389e4fece4658c1488506.png)
Рисунок 2 (по клику открывается в полном размере)
1. Мобильный телефон регистрируются в сети одного из украинских мобильных операторов. В какой-то момент абонент входит в зону покрытия LAC 41800 со стороны сектора CI 22C0 и продолжает движение вплоть до сектора CI 22CF. Что же в это время происходит в сети оператора? Когда телефон оказывается в зоне покрытия LAC 41800, то инициируется процедура Location Update, обновляя в базе данных VLR значения LAC и CI. По мере движения нашего коллеги до сектора CI 22CF в базе данных VLR не происходит более никаких изменений.
2. Мы хотим узнать, на самом ли деле у наших сотрудников идут сложные переговоры. И в какой-то момент мы формируем SMS-сообщение с атрибутом Type-0 и отправляем на номер одного из коллег. Напоминаю, что по легенде он в это время находится в секторе CI 22CF.
3. У SMS-сообщения Type-0 есть другое название — SMS-пинг. Это сообщение не отображается на экране мобильного телефона и не сохраняется в списке принятых SMS. Кроме того, оно осуществляет действия, которые абонент не планировал, а именно, производит обновление атрибутов местоположения в базе данных VLR. Теперь в VLR хранится актуальное значение сектора, в котором прибывает абонент, то есть CI 22CF.
4. Мы уже начали свою активность, однако еще не получили ни байта результата. Информация о местоположении абонента хоть и обновилась, но она находится в недрах оборудования оператора, и чтобы выудить данные, мы продолжаем наши исследования. На следующем шаге формируем сигнальное сообщение sendRoutingInfoForSM, где в качестве параметра указывается мобильный номер нашего сотрудника, и отправляем это сообщение на HLR оператора.
5. В мире телекома принято доверять друг другу, особенно запросам, пришедшим по сетям SS7, и HLR оператора не является исключением из этого правила. На рисунке 3 показана выдержка из трассировки. HLR находит в своих базах данных идентификатор IMSI абонента (1) и адрес MSC/VLR (2), в зоне действия которого находится абонент с заданным номером, и, не подозревая подвоха, сообщает своему «собеседнику» эти данные. Здесь можно обратить внимание на значения некоторых цифр. Первые три цифры идентификатора IMSI обозначают код страны абонента (Mobile Country Code, MCC). Код 250 закреплен за Россией (1). Адрес коммутатора предоставляется в более привычной для нас телефонной нумерации, где 380 — международный телефонный код Украины (2).
Рисунок 3
На этом шаге можно сделать небольшую паузу. Дело в том, что в сети существуют сервисы, которые на этом останавливаются и выдают своим пользователям информацию о местоположении любого мобильного абонента с точностью до мобильного коммутатора.
![](https://habrastorage.org/r/w1560/storage2/143/d1b/99a/143d1b99a19894b293dea89e7ea06813.png)
Рисунок 4
На рисунке 4 показан фрагмент скриншота с результатами поиска того же самого человека. Тут мы видим номер абонента (1). Кроме того, сервис раскрывает идентификатор IMSI (2), который вообще-то является конфиденциальной информацией и должен храниться оператором за семью печатями. Следом нам показан номер сервис-центра, где находится абонент (3). Фактически это урезанный адрес мобильного коммутатора. В России по номеру сервис-центра можно определить регион нахождения абонента, т. к. адресация коммутаторов совпадает с региональной телефонной нумерацией. К сожалению, для украинских мобильных операторов мне не удалось найти такого соответствия.
6. Наши поиски продолжаются. Теперь мы формируем сообщение provideSubscriberInfo, где в качестве параметра задаем идентификатор IMSI, и отправляем это сообщение на адрес мобильного коммутатора. Все нужные параметры (IMSI и адрес MSC/VLR) мы получили на предыдущем шаге.
7. И опять мы сыграем на всеобщем доверии. Коммутатор воспринимает сообщение как вполне легальное и с удовольствием сообщает в ответ идентификаторы сети MCC/MNC, значение LAC и недавно обновленное значение сектора CI.
Теперь посмотрим на трассировку (рисунок 5). Все значения, нужные нам для пеленгации, получены:
![](https://habrastorage.org/r/w1560/storage2/0a6/713/1b7/0a67131b76586da65c249f93df16a969.png)
Рисунок 5
Пока это только набор цифр, из которого мы сможем узнать страну по MCC — код 255 закреплен за Украиной. Пока все сходится. Для финального выстрела открываем сервис для определения координат базовой станции, коих в сети можно найти немало (рисунок 6). И что же мы видим? Это не Киев, а Феодосия, причем сектор обслуживает не городскую черту, а морское побережье с пляжами! Теперь ясно, чем наши коллеги так долго заняты в командировке :)
![](https://habrastorage.org/r/w1560/storage2/e0c/a5f/8d2/e0ca5f8d22291299e8f33801c00c529b.png)
Рисунок 6
В качестве пользователей описанного в статье «сервиса» можно представить криминальных элементов, промышленных шпионов, частных детективов… Но остается вопрос: кто и каким образом может реализовать подобного рода атаки?
В первую очередь, такая возможность есть у технических специалистов операторов связи, причем сам оператор может находиться в любой стране мира.
Во-вторых, для реализации сервиса может быть специально создана компания с получением необходимых лицензий, закупкой оборудования и подключением к SS7 обязательно с возможностью работы протокола MAP. Денежные затраты на реализацию такого варианта в России будут исчисляться круглыми суммами и вряд ли смогут окупиться.
Третий вариант — взлом сети управления оператора и внедрение «жучка» в его существующую инфраструктуру.
А у правоохранительных органов имеются свои средства оперативно-розыскных мероприятий (СОРМ), в том числе с функцией поиска местоположения.
Автор: Сергей Пузанков, исследовательский центр Positive Research.
P. S. Хочу выразить благодарность отделу анализа безопасности сетевых устройств Positive Technologies и Вере Красковой, которая отдыхала Крыму во время наших исследований и выступила в роли пеленгуемого абонента :)
Элементы системы
![](https://habrastorage.org/storage2/02f/3dd/a63/02f3dda637e204dd5794a2868aeaaa6e.png)
Рисунок 1 (по клику открывается в полном размере)
Для начала проведу небольшое введение в структуру сотовой сети на примере стандарта GSM. Упрощенная схема стандарта приведена на рисунке 1.
Покрытие обеспечивается базовыми станциями (Base Station, BS), каждая из которых, как правило, имеет несколько антенн, направленных в разные стороны. Антенна обеспечивает радиопокрытие соты, каждая сота имеет свой идентификатор (Cell Identity, CI). Базовые станции группируются в географические зоны (Location Area, LA). Группировка происходит чаще всего по территориальному принципу. Идентификатор такой группы называется LAC (Location Area Code). На рисунке 1 каждая базовая станция обеспечивает покрытие трех секторов.
Базовые станции подсоединяются к контроллеру базовых станций (Base Station Controller, BSC). В самом простом варианте один LAC соответствует одному BSC. Именно такое назначение LAC показано на примере (рисунок 1). Для наглядности LAC выделены разными цветами.
Территория, покрываемая одним LAC, зависит от плотности населения. В Москве, в пределах МКАД, может быть несколько десятков LAC, а в небольшом регионе центральной полосы России разделение на LAC может быть таким: один LAC покрывает областной центр, второй LAC покрывает всю остальную территорию области.
Все контроллеры BSC подключаются к коммутатору (Mobile Switching Center, MSC). По сути, MSC представляет собой обычный коммутатор голосовых телефонных вызовов с аппаратно-программным расширением для обеспечения функций мобильности абонентов. В эпоху широкого распространения IP следует напомнить, что MSC оперирует коммутацией цепей (Circuit Switched) согласно установленным в нем статичным таблицам маршрутизации на основе привычной нам телефонной нумерации.
Регистр местоположения визитных абонентов (Visited Location Register, VLR) функционально считается отдельным элементом сети, но фактически всегда интегрирована с MSC. В базе данных VLR содержится информация об абонентах, которые в данный момент находятся в зоне действия своего MSC. И раз уж тема статьи о местоположении абонента, то стоит упомянуть, что для каждого абонента в БД VLR хранится информация о текущем идентификаторе LAC, и идентификаторе той соты (CI), которая была при последнем радиоконтакте мобильного телефона с сетью. То есть, если абонент передвигается по территории покрытия одного LAC, не совершая и не принимая вызовов, в базе данных VLR информация о его местоположении не меняется. В общем случае, в сети может быть несколько узлов MSC/VLR. В примере на рисунке 1 показано два таких узла.
Еще два функциональных узла — регистр местоположения домашних абонентов (Home Location Register, HLR) и центр аутентификации (Authentication Center, AuC) — размещаются физически в едином модуле. HLR/AuC хранит профили абонентов своей сети. В профиле содержится следующая информация: телефонный номер абонента, уникальный идентификатор SIM-карты (International Mobile Subscriber Identity, IMSI), ключи для обеспечения безопасности, категория абонента (предоплатная система расчетов /постоплатная система расчетов), список разрешенных и запрещенных услуг, адрес биллинг-центра (для абонентов предоплатной системы), адрес MSC/VLR, в зоне действия которого находится абонент в настоящий момент. Этот же профиль с некоторыми изменениями копируется в VLR, когда абонент регистрируется в зоне его действия.
Шлюзовой коммутатор (Gateway MSC, GMSC) является приемной точкой для входящих вызовов. Он на основе информации, полученной из HLR, маршрутизирует вызов на тот коммутатор, в зоне действия которого находится вызываемый абонент.
В процессе установления вызова, отправки SMS и прочих транзакций, узлы связи обмениваются между собой сигнальными сообщениями. Стек протоколов, набор сообщений и их параметров в сетях телефонной (не только мобильной) связи называется Системой сигнализации №7 (Signaling System 7, SS7). Все протоколы SS7 открыты и доступны для ознакомления и изучения на сайтах таких международных организаций, как МСЭ-Т, 3GPP, GSMA. Описанная далее атака опирается на сообщения SS7.
Атака
Разумеется, данную атаку не сможет совершить любой человек с улицы. Для осуществления атаки звезды должны расположиться в правильном порядке на небосводе. А именно:
- Должен быть выход в сеть сигнализации SS7.
- Есть возможность формировать любые сообщения сигнализации SS7 (для атаки потребуется протокол MAP).
- В сети жертвы нет средств фильтрации некорректных или подозрительных SS7 сообщений (порядка 90% операторов по всему миру не задумываются о такой фильтрации).
Для того чтобы описание атаки не погрязло под скучными определениями и терминами, будем придерживаться следующей легенды. Пара наших сотрудников поехала в командировку в Киев: там у них намечены переговоры с потенциальными клиентами. Судя по времени, коллеги уже должны вернуться с результатом, но они сообщают, что в процессе переговоров возникли сложности, и им придется задержаться. Теперь мы будем пеленговать одного из наших коллег и предлагаем вам отследить весь процесс по стрелочкам на рисунке 2.
![](https://habrastorage.org/storage2/522/8c7/bed/5228c7bed8b389e4fece4658c1488506.png)
Рисунок 2 (по клику открывается в полном размере)
1. Мобильный телефон регистрируются в сети одного из украинских мобильных операторов. В какой-то момент абонент входит в зону покрытия LAC 41800 со стороны сектора CI 22C0 и продолжает движение вплоть до сектора CI 22CF. Что же в это время происходит в сети оператора? Когда телефон оказывается в зоне покрытия LAC 41800, то инициируется процедура Location Update, обновляя в базе данных VLR значения LAC и CI. По мере движения нашего коллеги до сектора CI 22CF в базе данных VLR не происходит более никаких изменений.
2. Мы хотим узнать, на самом ли деле у наших сотрудников идут сложные переговоры. И в какой-то момент мы формируем SMS-сообщение с атрибутом Type-0 и отправляем на номер одного из коллег. Напоминаю, что по легенде он в это время находится в секторе CI 22CF.
3. У SMS-сообщения Type-0 есть другое название — SMS-пинг. Это сообщение не отображается на экране мобильного телефона и не сохраняется в списке принятых SMS. Кроме того, оно осуществляет действия, которые абонент не планировал, а именно, производит обновление атрибутов местоположения в базе данных VLR. Теперь в VLR хранится актуальное значение сектора, в котором прибывает абонент, то есть CI 22CF.
4. Мы уже начали свою активность, однако еще не получили ни байта результата. Информация о местоположении абонента хоть и обновилась, но она находится в недрах оборудования оператора, и чтобы выудить данные, мы продолжаем наши исследования. На следующем шаге формируем сигнальное сообщение sendRoutingInfoForSM, где в качестве параметра указывается мобильный номер нашего сотрудника, и отправляем это сообщение на HLR оператора.
5. В мире телекома принято доверять друг другу, особенно запросам, пришедшим по сетям SS7, и HLR оператора не является исключением из этого правила. На рисунке 3 показана выдержка из трассировки. HLR находит в своих базах данных идентификатор IMSI абонента (1) и адрес MSC/VLR (2), в зоне действия которого находится абонент с заданным номером, и, не подозревая подвоха, сообщает своему «собеседнику» эти данные. Здесь можно обратить внимание на значения некоторых цифр. Первые три цифры идентификатора IMSI обозначают код страны абонента (Mobile Country Code, MCC). Код 250 закреплен за Россией (1). Адрес коммутатора предоставляется в более привычной для нас телефонной нумерации, где 380 — международный телефонный код Украины (2).
![](https://habrastorage.org/storage2/fef/793/634/fef793634b5bec6ca5d8a40872e78227.png)
Рисунок 3
На этом шаге можно сделать небольшую паузу. Дело в том, что в сети существуют сервисы, которые на этом останавливаются и выдают своим пользователям информацию о местоположении любого мобильного абонента с точностью до мобильного коммутатора.
![](https://habrastorage.org/storage2/143/d1b/99a/143d1b99a19894b293dea89e7ea06813.png)
Рисунок 4
На рисунке 4 показан фрагмент скриншота с результатами поиска того же самого человека. Тут мы видим номер абонента (1). Кроме того, сервис раскрывает идентификатор IMSI (2), который вообще-то является конфиденциальной информацией и должен храниться оператором за семью печатями. Следом нам показан номер сервис-центра, где находится абонент (3). Фактически это урезанный адрес мобильного коммутатора. В России по номеру сервис-центра можно определить регион нахождения абонента, т. к. адресация коммутаторов совпадает с региональной телефонной нумерацией. К сожалению, для украинских мобильных операторов мне не удалось найти такого соответствия.
6. Наши поиски продолжаются. Теперь мы формируем сообщение provideSubscriberInfo, где в качестве параметра задаем идентификатор IMSI, и отправляем это сообщение на адрес мобильного коммутатора. Все нужные параметры (IMSI и адрес MSC/VLR) мы получили на предыдущем шаге.
7. И опять мы сыграем на всеобщем доверии. Коммутатор воспринимает сообщение как вполне легальное и с удовольствием сообщает в ответ идентификаторы сети MCC/MNC, значение LAC и недавно обновленное значение сектора CI.
Теперь посмотрим на трассировку (рисунок 5). Все значения, нужные нам для пеленгации, получены:
- MCC — код страны;
- MNC (Mobile Network Code) — код мобильного оператора;
- LAC (для дальнейшего использования нужно привести это значение в шестнадцатеричный вид: 41800 = A348h);
- CGI (Cell Global Identity) — код соты, значение сразу показано в шестнадцатеричном виде.
![](https://habrastorage.org/storage2/0a6/713/1b7/0a67131b76586da65c249f93df16a969.png)
Рисунок 5
Пока это только набор цифр, из которого мы сможем узнать страну по MCC — код 255 закреплен за Украиной. Пока все сходится. Для финального выстрела открываем сервис для определения координат базовой станции, коих в сети можно найти немало (рисунок 6). И что же мы видим? Это не Киев, а Феодосия, причем сектор обслуживает не городскую черту, а морское побережье с пляжами! Теперь ясно, чем наши коллеги так долго заняты в командировке :)
![](https://habrastorage.org/storage2/e0c/a5f/8d2/e0ca5f8d22291299e8f33801c00c529b.png)
Рисунок 6
Заключение
В качестве пользователей описанного в статье «сервиса» можно представить криминальных элементов, промышленных шпионов, частных детективов… Но остается вопрос: кто и каким образом может реализовать подобного рода атаки?
В первую очередь, такая возможность есть у технических специалистов операторов связи, причем сам оператор может находиться в любой стране мира.
Во-вторых, для реализации сервиса может быть специально создана компания с получением необходимых лицензий, закупкой оборудования и подключением к SS7 обязательно с возможностью работы протокола MAP. Денежные затраты на реализацию такого варианта в России будут исчисляться круглыми суммами и вряд ли смогут окупиться.
Третий вариант — взлом сети управления оператора и внедрение «жучка» в его существующую инфраструктуру.
А у правоохранительных органов имеются свои средства оперативно-розыскных мероприятий (СОРМ), в том числе с функцией поиска местоположения.
Автор: Сергей Пузанков, исследовательский центр Positive Research.
P. S. Хочу выразить благодарность отделу анализа безопасности сетевых устройств Positive Technologies и Вере Красковой, которая отдыхала Крыму во время наших исследований и выступила в роли пеленгуемого абонента :)