С развитием мобильных сетей развивается и мобильный интернет. Все
привыкли к обычному интернету: витая пара, Ethernet, TCP/IP. А что же
скрывает в себе интернет мобильный? Попробуем выяснить! В нашем
исследовании мы коснемся общих принципов работы мобильного интернета,
рассмотрим поближе GPRS Tunneling Protocol, поговорим о GRX-сети и
обсудим некоторые практические подходы к безопасности мобильной пакетной
сети.
Как каждый из нас подключается к мобильному интернету? В принципе,
необходимо знать только три параметра: APN, логин и пароль. APN — это
точка доступа, через которую абонент может подключиться к необходимой
ему услуге (WAP, MMS, Internet); у наших операторов она обычно выглядит
как internet.<operator-name>.ru. Логин и пароль обычно простые:
internet — internet или вроде того.
Теперь, когда мы знаем необходимые параметры, мы можем подключаться к
мобильному интернету! Как же происходит эта загадочная процедура?
Происходит она в два этапа:
GPRS Attach,
PDP Context Activation.
Рассмотрим подробнее каждый из них.
GPRS Attach
В процедуре GPRS Attach телефон начинает «общаться» с пакетной сетью
оператора. Происходит аутентификация и авторизация пользовательского
оборудования по следующим параметрам:
IMSI (International Mobile Subscriber Identity, индивидуальный номер абонента) — для идентификации
абонента;
ключи, хранящаяся на SIM-карте – для аутентификации абонента;
проверка доступных абоненту сервисов (Internet, MMS, WAP) по записи в базе абонентов
.
Может также проверяться IMEI (International Mobile Equipment Identity —
международный идентификатор мобильного оборудования). Этот идентификатор
может использоваться для проверки по спискам краденого оборудования, и
если конкретный IMEI находится в списке украденных, то в доступе к сети
может быть отказано, либо даже сообщено «куда следует» :)
После успешного завершения процедуры GPRS Attach начинается процедура
PDP (Packet Data Protocol) Context Activation. Чтобы разобраться в этой
процедуре, отвлечемся и определим некоторые понятия.
SGSN (Serving GPRS Support Node, узел обслуживания абонентов GPRS) —
устройство, реализующее основные функции обработки пакетных данных в
мобильной сети.
GGSN (GPRS Gateway Service Node, шлюзовой узел GPRS) — устройство,
обеспечивающее передачу данных из сети оператора во внешние сети
(например, в интернет). По сути может быть обычным маршрутизатором с
поддержкой некоторых специфических функций.
GTP (GPRS Tunneling Protocol) — стек протоколов, используемый в GPRS-, UMTS- и LTE-сетях.
Итак, PDP Context Activation (схема сильно упрощена).
Что же происходит при реализации этой схемы?
Телефон отправляет запрос активации контекста на SGSN, в котором, в числе прочего, присутствуют логин, пароль и APN.
SGSN, получив APN, пытается разрешить его на внутреннем DNS-сервере.
Сервер разрешает предоставленный APN и возвращает адрес отвечающего за
данный APN GGSN.
По этому адресу SGSN отсылает запрос на создание PDP-контекста.
GGSN проверяет на RADIUS-сервере предоставленные логин и пароль.
Затем получает IP-адрес для нашего телефона.
И всю необходимую для активации PDP-контекста информацию передает обратно на SGSN.
SGSN завершает процедуру активации, отсылая на телефон данные, необходимые для установления соединения.
По сути процедура PDP Context Activation это создание туннеля между
телефоном и шлюзом в операторской сети. И вот мы уже можем заходить на
любимые сайты и читать почту.
Роуминг
Немедленно возникает вопрос: как же это все работает в роуминге?
Оказывается, что существует специальная сеть: GRX (Global Roaming
Exchange) — сеть для обмена пакетными данными роуминговых абонентов
мобильных сетей. Через нее и «бегает» весь наш трафик. Примерно вот так:
Успешно доехав в теплые края, мы решили скачать любимый сериал.
Включили телефон, начали подключаться к интернету (отправляем логин,
пароль, APN).
Зарубежный SGSN пытается разрешить предоставленный нами APN на своем DNS-сервере.
DNS-сервер, не найдя у себя подобных записей, обращается к корневому DNS-серверу, который находится в GRX-сети.
Корневой DNS-сервер направляет запрос к DNS-серверу в сети нашего родного оператора.
Тот в свою очередь отвечает ему адресом нашего GGSN.
Корневой DNS сообщает этот адрес DNS-серверу зарубежного оператора.
Который в свою очередь сообщает этот адрес зарубежному SGSN.
SGSN, зная адрес GGSN, направляет ему запрос на активацию PDP-контекста.
GGSN, если соблюдены все условия (есть деньги на счету, указаны
верные логин и пароль и т. д.), присылает подтверждение, SGSN его
принимает и пересылает нашему телефону подтверждение на доступ в
интернет.
Что же мы видим? Видим мы, что пакеты с нашим любимым сериалом бегут
через полмира от нашего оператора к оператору в теплой стране. Бегут они
по специальной сети, завернутые в протокол GTP. И все переговоры между
спецжелезками операторов ведутся по тому же GTP.
И тут приходит идея: а не попробовать ли нам сообразить нечто подобное в
лабораторных условиях? Построить свои SGSN и GGSN. А ну как придем к
невероятным открытиям?
SGSN + GGSN
После длительных поисков выяснилось следующее.
Существует ПО специального назначения, реализующее некоторые функции
SGSN. Выглядит оно как скрипт под Linux, который способен эмулировать
все необходимые процедуры (GPRS Attach и PDP Context Activation) и
выдать в итоге готовый интерфейс для выхода в интернет, как будто бы мы
воткнули 3G-модем. Узнав об этом, мы немедленно кинулись искать
устройство, готовое взвалить на свои плечи функции GGSN. Оказалось, что
популярный маршрутизатор Cisco 7200 вполне подходит.
После недолгих манипуляций, настроек и тестов нас ждал успех.
Стенд легко поднимал туннели, через которые был «виден» самый настоящий
интернет. Мы тут же принялись смотреть, какие же пакеты ходят между
нашими могучими SGSN и GGSN. Похожи ли они на настоящие? С замиранием
сердца открываем дамп — и таки да! пакеты как настоящие.
Аналогичные пакеты могут ходить в GRX-сети, и их вполне может подслушать
злобный хакер. Что же он там увидит? Попробуем разузнать.
Вопросы безопасности
Протокол GTP бывает нескольких типов: GTP-U используется для
непосредственной упаковки и передачи пользовательских данных, GTP-C для
управления сессиями (именно с его помощью осуществляется процедура PDP
Context Activation и прочие служебные процедуры); существует еще GTP’
(GTP Prime) — он используется для передачи биллинговой информации. GTP
не поддерживает аутентификацию пиров и шифрование, работает поверх UDP.
Что во всем этом интересного? Интересно тут практически все!
Возьмем GTP-U и посмотрим, как выглядит туннель с пользовательскими
данными. Туннели разделены параметром TEID (Tunnel Endpoint
Identificator).
При дальнейшем изучении выяснилось, что при желании поле с TEID можно
подменить, а отправив пакет с подмененным идентификатором туннеля можно
неожиданно для себя вломиться в чужую сессию.
А вот GTP-C. С удивлением обнаружив отсутствие какой-либо аутентификации
или намеков на шифрование передаваемых данных, можно попробовать не
только послушать, но и, извините, что-нибудь послать. Например «левые»
запросы на установление или разрыв сессии.
Попробуем таким образом наметить векторы возможных атак и рассмотрим их поближе.
Вот, например, атака DNS flood. Злоумышленник отправляет большое
количество запросов на разрешение APN нашего оператора. Все эти пакеты
будут бомбардировать бедный операторский DNS, который не выдержит накала
и вообще откажется передавать адрес GGSN кому-либо, вызывая глобальный
DoS для абонентов.
Или злоумышленник начнет отправлять собственноручно сформированные
запросы на создание PDP-контекста. GGSN, увидев такой напор, вполне
может и задуматься, а то и вовсе зависнуть. Что опять же приведет к
отказу в обслуживании абонентов.
А что, если попробовать вместо запросов на создание отправлять запросы на разрыв сессии?
Например, вот так:
Злобный хакер, подставляя адрес зарубежного SGSN, будет отсылать запросы
на разрыв соединения. GGSN, подумав, что абонент докачал свой любимый
сериал и хочет завершить интернет-сессию, удаляет у себя этот туннель,
разрывая соединение.
Набросав несколько векторов, обратим свой взор на реальные объекты,
чтобы все это «потрогать». Наберем запрос «GGSN» в shodan. Вот кусок
выданных результатов.
Все это смахивает на реальные GGSN, выставленные в интернет.
Или попробуем написать скрипт, посылающий запросы GTP-echo, да и пустить
его гулять по интернету: вдруг кто откликнется. И откликающиеся
находятся:
Иногда даже с открытым telnet.
В стандарте нового поколения под кодовым именем LTE все так же
используется протокол GTP, а посему все вышеописанное актуально и будет
актуальным в обозримом будущем.
На сегодня все. До новых встреч!
Хочу выразить благодарность отделу анализа безопасности сетевых
устройств Positive Technologies за помощь в подготовке материала.
Знаете ли Вы, что спецификация - это документ, описывающий соглашение между разработчиками и пользователями. Разработчик берется написать модуль, а пользователь соглашается не полагаться на знания о том, как именно этот модуль реализован, т.е. не предполагать ничего такого, что не было бы указано в спецификации. Такое соглашение позволяет разделить анализ реализации от собственно использования программы. Спецификации дают возможность создавать логические основы, позволяющие успешно "разделять и властвовать".