Автор: Илья Сафронов, Positive Research
С развитием мобильных сетей развивается и мобильный интернет. Все
привыкли к обычному интернету: витая пара, 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, а посему все вышеописанное актуально и
будет актуальным в обозримом будущем.
На сегодня все. До новых встреч!
http://www.securitylab.ru/analytics/442850.php