Введение


В данном исследовании проанализирована схема работы беспроводной сети московского метрополитена с точки зрения обычного пользователя. В рамках тестирования использовался телефон на Android. Случаи, когда телефон не был ни разу авторизован в сети, рассматриваются в ограниченном формате.

Процесс подключения


При подключении к сети WI-FI происходит следующее:

Происходит первоначальная ассоциация устройства с WI-FI точкой. Затем устройство устанавливает TCP соединение c сервером Google.

image
Рисунок 1: установление TCP соединения

Далее телефон на Android проверяет необходимость авторизации в сети, путем отправки GET запроса на сервер Google. Если приходит ответ – авторизация не требуется, если не приходит – требуется авторизация, если происходит редирект на веб-страницу авторизации, телефон отображает ее.

image
Рисунок 2: проверка на необходимость авторизации

Шлюз, в свою очередь, на любой http-запрос отвечает, подменяя ответы запрашиваемого сервера на редирект к странице авторизации.

image
image
Рисунок 3: редирект на страницу авторизации

Далее мы жмем кнопку «войти в интернет». Вот сам пакет, видно, что он идет на адрес из private сегмента:

image
Рисунок 4: пакет с запросом на авторизацию wi-fi.ru

А сам запрос выглядит следующим образом:

GET / HTTP/1.1
Host: wi-fi.ru
Connection: keep-alive
Cache-Control: max-age=0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Linux; Android 5.1.1; HUAWEI MT7-L09 Build/HuaweiMT7-L09) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.83 Mobile Safari/537.36
Referer: https://login.wi-fi.ru/am/UI/Login?org=mac&service=coa&client_mac=66-a0-f6-dd-d2-9e&ForceAuth=true
Accept-Encoding: gzip, deflate, sdch
Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4
Cookie: adfoxUserID=19:154848341; _ym_uid=1449217853212630314; _ym_isad=1; device_type=mobile; surf_prev_url=undefined; surf_curr_url=http://wi-fi.ru/; crtg_rta=; _mtp=0:ijk1njsr:69XJtN~ZNVIaYHb4OT3NHAOjPvLS50k4; _ga=GA1.2.1994719851.1449217854; amlbcookie=01; t=AQIC5wM2LY4SfcxCV1htnKzHF3mtmXJCDcvGniOTgqxvUMc.*AAJTSQACMDIAAlNLABQtNTkwNDE0MjY2MjYxNzMzMzgwOAACUzEAAjAx*
If-None-Match: W/"74f5335bcd0524bfcd031469fc9c52e5"

Анализ


Видно, что в качестве параметра в том числе передается MAC адрес нашего устройства. Это наводит на мысль, что мак адрес является идентификатором, и именно по нему сеть понимает, оплачен у нас интернет или нет. Нужно отметить, что адреса login.wi-fi.ru и wi-fi.ru доступны в том числе и из публичного интернета. Это позволяет нам проверить любой MAC адрес на его статус. Выглядит это следующим образом:

MAC адрес, который не бывал в метро:

image
Рисунок 5: MAC адрес, ни разу не бывавший в метро

MAC адрес, который не оплатил интернет:

image
Рисунок 6: MAC не оплатил интернет

MAC адрес, который оплатил интернет, попадает на страницу с ошибкой (так как мы не внутри сети), но потом успешно автоматически перенаправляется на wi-fi.ru:

image
Рисунок 7: ошибка при подключении

image
Рисунок 8: успешное подключение

Выяснилось, что при авторизации сервер отдает на страницу тип подключаемого MAC адреса:

image
Рисунок 9: группы, к которым принадлежит наш MAC

В том числе видно, что если у нас в группе прописан mosmetro_premium, значит мы счастливый обладатель оплаченного интернета.

Тест


Для автоматизации поиска различных типов MAC адресов был написан скрипт на Python: https://bitbucket.org/hollow1/metro

C его помощью была найдена парочка «оплаченных» адресов:

image
Рисунок 10: «оплаченные» адреса

И в экспериментальных целях непосредственно в метро был подменен MAC тестового устройства на «оплаченный»:

sudo ifconfig en0 ether xx:xx:xx:xx:xx:xx

И все успешно завелось, без регистрации и смс.
Поделиться с друзьями
-->

Комментарии (47)


  1. krimtsev
    27.06.2016 17:00
    +1

    Отличный гайд получился!


    1. krimtsev
      27.06.2016 17:07

      Только по ссылке на скрипт пусто — https://bitbucket.org/guardyteam/metro


  1. zip_zero
    27.06.2016 17:06

    На тестовый скрипт посмотреть увы нельзя, Bit Bucket говорит, что «You do not have access to this repository».


  1. hollow1
    27.06.2016 17:17
    +1

    Прошу прощения, перенос репозиторий. Спасибо за комментарии!


  1. KirillMB
    27.06.2016 17:25

    Репозиторий приватный.
    Так задумывалось или уже успели попросить?


    1. HabrDev
      27.06.2016 18:12
      +1

      Да нет, публичный


  1. mcleod095
    27.06.2016 18:04
    +1

    Спасибо за исследование.
    Но вот честно, сам бы не стал пользоваться данным гайдом. Просто потому что я лучше 20 секунд потрачу на рекламу, чем буду вот так за счет других пользоваться инетом. Тем более сумма 50р не такая и большая за интернет по московским меркам и можно самому оплатить себе интернет.


    1. theWaR_13
      27.06.2016 18:13

      А я вот наоборот лучше включу блокировщик рекламы, чтобы максима телеком ни копейки не получила с моего подключения. Ибо все мы знаем, как они там оказались. Тогда какого фига их надо кормить, спрашивается.


      1. TimsTims
        27.06.2016 18:27
        +1

        Тогда правильнее было бы вообще отключить wifi в телефоне = вы их не кормите и карму самому себе не портите воруя интернет. Как никак они не на готовенькое пришли, а кабеля прокладывали, и делали это вполне реальные люди. Хорошо, что вообще проложили, а не забросили это дело. И как выше уже сказали, 50р — в Москве это небольшие деньги. На домашний интернет тратимся больше…


        1. dartraiden
          27.06.2016 20:36
          -2

          То есть, когда я, например, на любом веб-сайте включаю блокировщик рекламы, то это уже называется «ворую контент»? Лихо, раньше к «воровству» относили лишь пиратство, а теперь уже и блокировку рекламы. Скоро, полагаю, к воровству начнут приравнивать переключение телевизора на другой канал во время рекламной паузы.


          1. StjarnornasFred
            27.06.2016 21:08
            +3

            Да тише ты! Это ведь идея…


          1. forgotten
            28.06.2016 20:22
            -4

            Самая прямая аналогия с отключателями рекламы — отказники от прививок.

            Известно, что прививка несёт некоторый (пусть минимальный) риск осложнений. Отказался от прививки — не рисковал осложнениями. И до тех пор, пока вас таких умных мало — в целом, всем ок.

            Но вот если процент непривитых превысит некоторую отметку — получится риск эпидемии, которая и привитых тоже заденет (пусть с меньшими рисками осложнений, но всё же).

            Итого, вы чуть-чуть воруете из общей безопасности, но вам лично от этого ок.

            То же и с блокираторами. Пока вас мало, всем ок. Когда вас станет больше — производителям контента придётся отказываться от обычных моделей монетизации в сторону всё более агрессивных. В сторону попандеров, пэйволлов, шок-контента, вот это всё. Хуже от этого станет всем, в том числе и тем, кто рекламу не отличал.

            Поэтому да, вы в известной степени воруете, более того — лично у меня и у любого другого пользователя интернета, у которого блокировщика рекламы нет. Я лично согласен с текущими правилами игры — я потребляю контент бесплатно, но смотрю рекламу. А из-за вас умных правила меняются и бесплатного контента становится меньше. Dixi.


            1. Adnako
              06.07.2016 07:11
              -1

              -4, жадные дети негодуют.


      1. defaultvoice
        28.06.2016 14:58

        Максима телеком получила контракт, потому что взяла на себя все расходы на постройку и обслуживание сети – метрополитену это не стоило ни копейки.


        1. theWaR_13
          28.06.2016 15:01

          Вы так думаете? А мне вот кажется, что контракт они этот получили тем же образом, как и получаются все остальные контракты, относящиеся к госструктурам. По-русски, так сказать :)


    1. goodhoopoe
      28.06.2016 15:59
      +1

      А какой смысл ждать 20 секунд? Нажимаете на главный баннер и происходит моментальная авторизация, чтобы загрузить внешний ресурс с рекламой. Все. Интернет в кармане за 1 секунду :)
      Кстати 50р это только первый месяц.


  1. Seekeer
    27.06.2016 18:09

    А что, интернет в московском метро стал платным? Или платить надо за отсутствие рекламы?


    1. mcleod095
      27.06.2016 18:22

      Именно за отсутствие рекламы


    1. OksikOneC
      27.06.2016 18:51
      +1

      За отсутствие рекламы. Если бесплатно, то в начале нужно просмотреть рекламный ролик.

      Но «счастливым» обладателем BlackBerry Torch 9800, просмотр рекламы, в формате видео, очевидно не грозит. С последней версией ОС, с последним встроенным браузером, рекламу посмотреть физически нельзя, т.к. как пишет мне браузер — у меня отсутствуют какие-то кодеки, и пропускает этот ролик. Чему я несказанно рад. Кстати иногда подмечаю, что все таки, в каких-то форматах реклама показывается, но это бывает настолько редко, что я ее всегда смотрю. Типа, вау! Реклама наконец заработала. А-ба-лдеееееть…

      Кстати, «счастливые» обладатели, может быть подскажут, если какая настройка в мобильной опере, чтобы можно было авторизовываться через нее? Никак не могу побороть это, и приходится авторизовываться сначала штатным браузером, а он ужасно медленный. Бывает авторизация может занять время, достаточное для проезда между станциями.


      1. Milfgard
        27.06.2016 19:31
        +1

        Да чего вы ролик-то смотрите? Ждёте первого баннера, клацаете в первую же рекламную ссылку — и вы в сети без всяких прелюдий. Как только тайтл страницы появился, можно смело закрывать вкладку и пользоваться, даже не дожидаясь загрузки.


        1. navion
          28.06.2016 13:10
          +1

          Это не всегда работает, как и обход рекламы тампонов в Dirty App.


        1. SpyzeR
          28.06.2016 19:41
          +1

          Даже проще — достаточно отключить выполнение javascript на странице авторизации и просто жать «Войти». После безо всякой рекламы произойдет авторизация


      1. FFMolotov
        28.06.2016 12:33

        ну почему же только " «счастливым» обладателем BlackBerry"
        можно просто отключить яву, добавить доверенные сайты в исключение( ну у кого-то не много сайтов которые они посещают при поездках в метро, да и просто многие сайты начинают на порядок шустрее работать, ты же не банеры пришёл на них смотреть, а прочитать последние сводки и закрыть...) и никакой рекламы, сразу жмем войти


        1. OksikOneC
          29.06.2016 21:40

          >>сразу жмем войти
          Если вы «счастливый» обладатель BlackBerry Torch 9800, то у вас не получится все равно как-то существенно ускорить процесс авторизации, т.к. после «войти» лезут любимые пушапы, в которых вам сообщат о том, что «вы пытаетесь открыть безопасное соединение, но сертификат сервера является ненадежным». Вы нажимаете продолжить (если вы нажмете на кнопку Достоверный сертификат — все равно в следующий раз пушап возникнет снова). Затем во-время загрузки, булькает еще один пушап с сообщением «сведения об ошибке сертификата сервера. Ненадежный сертификат. Не удалось определить происхождение сертификата. Данное действие запрещено администратором», вы нажимаете еще раз продолжить. Третий пушап до словно не приведу, но что-то вроде — вы открываете сертификат с именем wi-fi.ru, а сам сертификат содержит 1.1.1.1. Вы нажимаете ок, и далее это произвольно может крутануться еще один круг. Бывает что до 4-ех раз доходят эти круги с сертификатами. Именно поэтому, не получается, как пишет Milfgard, просто кликнуть по рекламной ссылке и не дождаться загрузки. Сначала нужно прощелкать эту свитоплятину с сертификатами. Причем если на вход в wi-fi.ru я знаю что максимум может пройти 4-е круга, то сколько таких кругов пройдет по пруфу на рекламную страничку может прояснить только натурный эксперимент. Я как-то в начале их ставил, один раз я проехал весь маршрут, но так и не мог прощелкать пушапы с сертификатами до конца :) Поэтому, кажется, я пока обрел единственный безболезненный способ авторизации: кнопка войти -> дощелкиваем пушапы до конца и сразу жмем ежевичную кнопку, там фокусируемся на кнопку «Стоп». Как только появляется заголовок, надо успеть нажать на эту кнопку, т.к. потом эта кнопка, я извиняюсь, фризится практически до конца загрузки страницы. Но тут есть интрига — пока страница wi-fi.ru догрузиться до конца на Torch 9800, браузер может вылететь с ошибками. А вы в курсе, что если он вылетает с ошибками, то нельзя просто так взять и перезагрузить его? Да, и тут мы плавно подходим к тому, что если штатный браузер у нас вылетел, то пора перезагружать аппарат… Но если все таки, мы авторизовались и успели остопиться на главной wi-fi, то далее браузер закрываем, открываем оперу. В ней, в крайней версии, есть одна очень знатная бага — если вы переключились на язык ввода, отличный от английского, то я навскидку даю 70% на то, что опера прокрашится уже с какой-то ошибкой java, поднятой очередным пушапом откуда-то из потрохов всего_этого. А вы в курсе, что если опера покрашилась, то единственный 100% способ вернуть ее к жизни, это перезагрузить аппарат. Вообще, если продолжать эту тему «счастливчиков», то мне кажется именно с этого аппарата пошла фраза «7 бед — 1 reset». Но вы ж, понимаете, в чем дело, когда аппарат перезагружается, во-первых, у меня сама физически перезагрузка аппарата занимает в среднем один перегон между станциями, во-вторых после того, как аппарат включился, появляется еще один знатный пушап «проверка безопасности» с прогресс баром, который что-то там проверяет и меееедленно так бежит. И кароче, в результате всех этих пушапов останется время на интернет — то и хорошо. Повезло.


          1. FFMolotov
            30.06.2016 09:24

            простите, не знал о тяжелой жизни чернофонов, на андройде никаких проблем нет с сертификатами, что в хроме, что в зенбраузере всё работает, как я выше писал…


            1. OksikOneC
              01.07.2016 16:50

              Ну, это не самое страшное. С этим можно жить. Другое дело, что без дополнительных танцев с бубнами, вы даже запустить такие приложения — как клиент фейсбука, мессенджер опять же встроенный, — не сможете. Это запрещено политикой безопасности :) Т.е. вы аппарат купили, на нем стоит уже предустановленный софт. Вы кликаете — а он вам — запрещено. Нельзя. Понимаете? :) Затем, я умолчу вообще про хоть какое наличие стороннего софта. Штатный плеер не умеет играть из папки, а ЕДИНСТВЕННЫЙ сторонний, который умеет, выдает это за киллер фичу и требует денег. Но ладно бы, один раз заплатил и все. Нет. Как только вы изменили содержимое папки какой-то, он запускает полную переиндексацию всего содержимого. Честно говоря, я когда слышу о каких-то потугах BB что-то там выкакать из себя, хочется пожелать им удачи. И спросить — а как? Как ребята? По моей модели даже официальная тех.поддержка не дает ответа — почему по официальному пруфу я не могу скачать последнюю версию. Приходится ее держать на запасе. А особенно меня радуют челы, которые в 2016 еще покупают Torch 9800 с предвздыханием, слюнями и вот_этим_всем. Типа приобщился к легенде :) Вообщем, пост боли получился.


  1. xi-tauw
    27.06.2016 19:12
    +3

    Меня реклама в метро раздражает не своим наличием, а тем, что кто-то решил, что реклама должна быть со звуком.
    Case 1:
    Телефон без подключенных наушников. Простите, но в метро обычно довольно-таки шумно, чтобы расслышать что там лепечет реклама. Смысл в звуке?
    Case 2:
    Телефон с подключенными наушниками. Вроде правильно — теперь-то рекламу услышат. Но дело в том, что наушники люди обычно не просто так втыкают — слушают музыку, подкаст или еще что-то. Но даже если тыкнуть кнопку отключения звука в рекламе, до ее загрузки, то проигрывание исходного звука все равно прервется и надо лезть, нажимать кнопку продолжения.
    Да, конечно, можно оплатить и рекламы не будет, но качество wi-fi пока далеко от отличного — на работу езжу по зеленой ветке каждый будний день. Стабильно раз в неделю попадаю на поезд, где wi-fi ловится, но не пускает даже страницу с рекламой.


    1. lnroma
      27.06.2016 20:19

      Да зелёная ветка такая же ситуация. А в ucweb пишет что доступ запрещён потомучто рекламу нельзя крутить. или просто не хотят.


    1. areht
      27.06.2016 20:26
      +3

      Меня реклама в метро раздражает не своим наличием, а тем, что редирект не позволяет перейти на страницу, которую я запрашивал


    1. lolipop
      28.06.2016 01:31

      поставьте уже блокировщик(просто сразу редиректит, без рекламы), и для андроида, и для ios в наличии.


  1. Spiritschaser
    27.06.2016 22:11
    -2

    Эм… И зачем Вы это на пальцах описали? Кому надо, это и так было ясно. Кому не надо, теперь будет возможность выкатить «законопроект».


  1. nlykl
    27.06.2016 23:53

    В браузере без JS никакой рекламы нет, но на кнопку входа нажимать нужно.


  1. AndrewFoma
    28.06.2016 00:25
    -3

    Просто наблюдение, сегодня на станции м. Савеловская в 14:02 (+-) видел странного высокого парня с телефоном, в желтых штанах от Quechua. Странность заключалась в том, что парень ехал на север, а на станции вышел и пошел на поезд на юг, причем пошел к северному входу тоннеля, уставившись в телефон. Я еще подумал — какой смысл, если бы он проехал станцию, какой смысл идти к северному входу в тоннель на южном направление, можно просто было встать в центре.
    Автор, это были не вы?


    1. hollow1
      28.06.2016 12:31

      Нет :) Для сбора данных для анализа достаточно всего несколько минут внутри вагона чтобы записать трафик.


      1. lolipop
        28.06.2016 13:29

        да зачем записывать, сгенерил список маков, просканил 65535 маков, из них оплаченными оказались 5.


        1. hollow1
          28.06.2016 14:16

          Это да. Я говорю о том, как понять процесс аутентификации.
          В скрипте есть многопоточность, можно очень быстро перебрать кучу маков.


          1. lolipop
            28.06.2016 15:02

            я воспользовался форком на asyncio из пулл-реквестов, он побыстрее.


  1. rockin
    28.06.2016 01:53

    Собственно говоря, о том, что в этой сети есть реклама при входе, узнал спустя месяцы после старта, случайно посмотрев в чужой телефон…

    Блокировка в hosts рулит ;)

    Но я пару раз сниффал траф и видно, что мак светится
    client_mac=66-a0-f6-dd-d2-9e
    вот это в частности

    Защита по маку, конечно, смешно. Привет пользователям stalker middleware, что по маку доступ дают :D


  1. Psychosynthesis
    28.06.2016 02:47

    А нельзя ли для тех кто не может в Python аналогичный скрипт на чём-нить из мира винды?

    Интересно что там происходит на уровне пакетов. Я так понимаю оно делает Get-запрос и тупо смотрит есть ли в выдаче строка? А скрипт — parse_mac чем занимается?


    1. MasMaX
      28.06.2016 09:25
      +3

      В чем проблема запустить python в windows?


      1. Psychosynthesis
        28.06.2016 17:59

        Хз, я не интересовался… Честно говоря, питон для меня всегда был чем-то из другой среды, примерно как баш, потому я никогда не вникал в исходники и механизмы его работы.

        Полагаю, нужно скачивать какой-то интерпретатор и ставить его, а у меня последнее время стойкая неприязнь ко всяким «лишним» программам в системе, которые нужны мне один-два раза.


        1. mickvav
          02.07.2016 00:02

          Путём в другой мир идёшь ты, юный падаван!


          1. Psychosynthesis
            02.07.2016 01:56

            Не пойму, это в хорошем или плохом смысле вообще?


    1. hollow1
      28.06.2016 16:23

      Да, примерно так все и происходит — проверяется выдача. Parse_mac — это версия без многопоточности.


  1. Revertis
    28.06.2016 09:32
    +7

    Ну ребят, ну в чём дело? Вроде гики, а разговоры о том когда и как смотреть рекламу и какие кнопки нажимать.
    1. Ставим Wi-Fi в метро из Google Play — забываем о ручной авторизации.
    2. Ставим OpenVPN, настраиваем до своего VPS в Европе — забываем о сниффинге и подмене трафика. Разрешаем ходить мимо него только проге из пункта 1.
    3. Ставим Adguard в режиме root-прокси — забываем о рекламе, и даже о видео-рекламе в приложении YouTube (при включении HTTPS-фильтрации).


  1. Trinion
    28.06.2016 10:45

    Тоже перешел на автоматизированную авторизацию. Долгое время честно смотрел рекламу, но как выше заметили звук в метро рекламе вещь странная как для непосредственно смотрящего, который не разберет ничего в шуме, так и для множества окружающих. Второй тип рекламы, который воюет только за рекламные клики подстраиваясь под кнопку войти в интернет просто неприличны, ощущения что тебя считают умственно отсталым лохом. И Вишенка на торте это обрывы непосредственно подключения после которого приходится выделывать выкрутасы с переходом в авиарежим и обратно что бы попасть на страницу с рекламой, а не ошибкой.


  1. p0z
    29.06.2016 13:41

    Похоже, что есть (или когда-то были) альтернативные способы авторизации. Вот, что есть — OpenAM, при вводе учетных данных ошибки:
    http://login.wi-fi.ru/am/UI/Login?realm=agent
    http://login.wi-fi.ru/am/UI/Login?realm=app
    http://login.wi-fi.ru/am/UI/Login?realm=ip
    http://login.wi-fi.ru/am/UI/Login?realm=rif
    http://login.wi-fi.ru/am/UI/Login?realm=sso
    http://login.wi-fi.ru/am/UI/Login?realm=test
    http://login.wi-fi.ru/am/UI/Login?realm=web1*
    http://login.wi-fi.ru/am/UI/Login?realm=web2*
    Редирект на основную версию (не интересно):
    http://login.wi-fi.ru/am/UI/Login?realm=mac
    http://login.wi-fi.ru/am/UI/Login?realm=msisdn

    И, кстати, сайт доступен по HTTP.