Введение
В данном исследовании проанализирована схема работы беспроводной сети московского метрополитена с точки зрения обычного пользователя. В рамках тестирования использовался телефон на Android. Случаи, когда телефон не был ни разу авторизован в сети, рассматриваются в ограниченном формате.
Процесс подключения
При подключении к сети WI-FI происходит следующее:
Происходит первоначальная ассоциация устройства с WI-FI точкой. Затем устройство устанавливает TCP соединение c сервером Google.
Рисунок 1: установление TCP соединения
Далее телефон на Android проверяет необходимость авторизации в сети, путем отправки GET запроса на сервер Google. Если приходит ответ – авторизация не требуется, если не приходит – требуется авторизация, если происходит редирект на веб-страницу авторизации, телефон отображает ее.
Рисунок 2: проверка на необходимость авторизации
Шлюз, в свою очередь, на любой http-запрос отвечает, подменяя ответы запрашиваемого сервера на редирект к странице авторизации.
Рисунок 3: редирект на страницу авторизации
Далее мы жмем кнопку «войти в интернет». Вот сам пакет, видно, что он идет на адрес из private сегмента:
Рисунок 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 адрес, который не бывал в метро:
Рисунок 5: MAC адрес, ни разу не бывавший в метро
MAC адрес, который не оплатил интернет:
Рисунок 6: MAC не оплатил интернет
MAC адрес, который оплатил интернет, попадает на страницу с ошибкой (так как мы не внутри сети), но потом успешно автоматически перенаправляется на wi-fi.ru:
Рисунок 7: ошибка при подключении
Рисунок 8: успешное подключение
Выяснилось, что при авторизации сервер отдает на страницу тип подключаемого MAC адреса:
Рисунок 9: группы, к которым принадлежит наш MAC
В том числе видно, что если у нас в группе прописан mosmetro_premium, значит мы счастливый обладатель оплаченного интернета.
Тест
Для автоматизации поиска различных типов MAC адресов был написан скрипт на Python: https://bitbucket.org/hollow1/metro
C его помощью была найдена парочка «оплаченных» адресов:
Рисунок 10: «оплаченные» адреса
И в экспериментальных целях непосредственно в метро был подменен MAC тестового устройства на «оплаченный»:
sudo ifconfig en0 ether xx:xx:xx:xx:xx:xx
И все успешно завелось, без регистрации и смс.
Комментарии (47)
zip_zero
27.06.2016 17:06На тестовый скрипт посмотреть увы нельзя, Bit Bucket говорит, что «You do not have access to this repository».
mcleod095
27.06.2016 18:04+1Спасибо за исследование.
Но вот честно, сам бы не стал пользоваться данным гайдом. Просто потому что я лучше 20 секунд потрачу на рекламу, чем буду вот так за счет других пользоваться инетом. Тем более сумма 50р не такая и большая за интернет по московским меркам и можно самому оплатить себе интернет.theWaR_13
27.06.2016 18:13А я вот наоборот лучше включу блокировщик рекламы, чтобы максима телеком ни копейки не получила с моего подключения. Ибо все мы знаем, как они там оказались. Тогда какого фига их надо кормить, спрашивается.
TimsTims
27.06.2016 18:27+1Тогда правильнее было бы вообще отключить wifi в телефоне = вы их не кормите и карму самому себе не портите воруя интернет. Как никак они не на готовенькое пришли, а кабеля прокладывали, и делали это вполне реальные люди. Хорошо, что вообще проложили, а не забросили это дело. И как выше уже сказали, 50р — в Москве это небольшие деньги. На домашний интернет тратимся больше…
dartraiden
27.06.2016 20:36-2То есть, когда я, например, на любом веб-сайте включаю блокировщик рекламы, то это уже называется «ворую контент»? Лихо, раньше к «воровству» относили лишь пиратство, а теперь уже и блокировку рекламы. Скоро, полагаю, к воровству начнут приравнивать переключение телевизора на другой канал во время рекламной паузы.
forgotten
28.06.2016 20:22-4Самая прямая аналогия с отключателями рекламы — отказники от прививок.
Известно, что прививка несёт некоторый (пусть минимальный) риск осложнений. Отказался от прививки — не рисковал осложнениями. И до тех пор, пока вас таких умных мало — в целом, всем ок.
Но вот если процент непривитых превысит некоторую отметку — получится риск эпидемии, которая и привитых тоже заденет (пусть с меньшими рисками осложнений, но всё же).
Итого, вы чуть-чуть воруете из общей безопасности, но вам лично от этого ок.
То же и с блокираторами. Пока вас мало, всем ок. Когда вас станет больше — производителям контента придётся отказываться от обычных моделей монетизации в сторону всё более агрессивных. В сторону попандеров, пэйволлов, шок-контента, вот это всё. Хуже от этого станет всем, в том числе и тем, кто рекламу не отличал.
Поэтому да, вы в известной степени воруете, более того — лично у меня и у любого другого пользователя интернета, у которого блокировщика рекламы нет. Я лично согласен с текущими правилами игры — я потребляю контент бесплатно, но смотрю рекламу. А из-за вас умных правила меняются и бесплатного контента становится меньше. Dixi.
defaultvoice
28.06.2016 14:58Максима телеком получила контракт, потому что взяла на себя все расходы на постройку и обслуживание сети – метрополитену это не стоило ни копейки.
theWaR_13
28.06.2016 15:01Вы так думаете? А мне вот кажется, что контракт они этот получили тем же образом, как и получаются все остальные контракты, относящиеся к госструктурам. По-русски, так сказать :)
goodhoopoe
28.06.2016 15:59+1А какой смысл ждать 20 секунд? Нажимаете на главный баннер и происходит моментальная авторизация, чтобы загрузить внешний ресурс с рекламой. Все. Интернет в кармане за 1 секунду :)
Кстати 50р это только первый месяц.
Seekeer
27.06.2016 18:09А что, интернет в московском метро стал платным? Или платить надо за отсутствие рекламы?
OksikOneC
27.06.2016 18:51+1За отсутствие рекламы. Если бесплатно, то в начале нужно просмотреть рекламный ролик.
Но «счастливым» обладателем BlackBerry Torch 9800, просмотр рекламы, в формате видео, очевидно не грозит. С последней версией ОС, с последним встроенным браузером, рекламу посмотреть физически нельзя, т.к. как пишет мне браузер — у меня отсутствуют какие-то кодеки, и пропускает этот ролик. Чему я несказанно рад. Кстати иногда подмечаю, что все таки, в каких-то форматах реклама показывается, но это бывает настолько редко, что я ее всегда смотрю. Типа, вау! Реклама наконец заработала. А-ба-лдеееееть…
Кстати, «счастливые» обладатели, может быть подскажут, если какая настройка в мобильной опере, чтобы можно было авторизовываться через нее? Никак не могу побороть это, и приходится авторизовываться сначала штатным браузером, а он ужасно медленный. Бывает авторизация может занять время, достаточное для проезда между станциями.Milfgard
27.06.2016 19:31+1Да чего вы ролик-то смотрите? Ждёте первого баннера, клацаете в первую же рекламную ссылку — и вы в сети без всяких прелюдий. Как только тайтл страницы появился, можно смело закрывать вкладку и пользоваться, даже не дожидаясь загрузки.
SpyzeR
28.06.2016 19:41+1Даже проще — достаточно отключить выполнение javascript на странице авторизации и просто жать «Войти». После безо всякой рекламы произойдет авторизация
FFMolotov
28.06.2016 12:33ну почему же только " «счастливым» обладателем BlackBerry"
можно просто отключить яву, добавить доверенные сайты в исключение( ну у кого-то не много сайтов которые они посещают при поездках в метро, да и просто многие сайты начинают на порядок шустрее работать, ты же не банеры пришёл на них смотреть, а прочитать последние сводки и закрыть...) и никакой рекламы, сразу жмем войти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». Но вы ж, понимаете, в чем дело, когда аппарат перезагружается, во-первых, у меня сама физически перезагрузка аппарата занимает в среднем один перегон между станциями, во-вторых после того, как аппарат включился, появляется еще один знатный пушап «проверка безопасности» с прогресс баром, который что-то там проверяет и меееедленно так бежит. И кароче, в результате всех этих пушапов останется время на интернет — то и хорошо. Повезло.FFMolotov
30.06.2016 09:24простите, не знал о тяжелой жизни чернофонов, на андройде никаких проблем нет с сертификатами, что в хроме, что в зенбраузере всё работает, как я выше писал…
OksikOneC
01.07.2016 16:50Ну, это не самое страшное. С этим можно жить. Другое дело, что без дополнительных танцев с бубнами, вы даже запустить такие приложения — как клиент фейсбука, мессенджер опять же встроенный, — не сможете. Это запрещено политикой безопасности :) Т.е. вы аппарат купили, на нем стоит уже предустановленный софт. Вы кликаете — а он вам — запрещено. Нельзя. Понимаете? :) Затем, я умолчу вообще про хоть какое наличие стороннего софта. Штатный плеер не умеет играть из папки, а ЕДИНСТВЕННЫЙ сторонний, который умеет, выдает это за киллер фичу и требует денег. Но ладно бы, один раз заплатил и все. Нет. Как только вы изменили содержимое папки какой-то, он запускает полную переиндексацию всего содержимого. Честно говоря, я когда слышу о каких-то потугах BB что-то там выкакать из себя, хочется пожелать им удачи. И спросить — а как? Как ребята? По моей модели даже официальная тех.поддержка не дает ответа — почему по официальному пруфу я не могу скачать последнюю версию. Приходится ее держать на запасе. А особенно меня радуют челы, которые в 2016 еще покупают Torch 9800 с предвздыханием, слюнями и вот_этим_всем. Типа приобщился к легенде :) Вообщем, пост боли получился.
xi-tauw
27.06.2016 19:12+3Меня реклама в метро раздражает не своим наличием, а тем, что кто-то решил, что реклама должна быть со звуком.
Case 1:
Телефон без подключенных наушников. Простите, но в метро обычно довольно-таки шумно, чтобы расслышать что там лепечет реклама. Смысл в звуке?
Case 2:
Телефон с подключенными наушниками. Вроде правильно — теперь-то рекламу услышат. Но дело в том, что наушники люди обычно не просто так втыкают — слушают музыку, подкаст или еще что-то. Но даже если тыкнуть кнопку отключения звука в рекламе, до ее загрузки, то проигрывание исходного звука все равно прервется и надо лезть, нажимать кнопку продолжения.
Да, конечно, можно оплатить и рекламы не будет, но качество wi-fi пока далеко от отличного — на работу езжу по зеленой ветке каждый будний день. Стабильно раз в неделю попадаю на поезд, где wi-fi ловится, но не пускает даже страницу с рекламой.lnroma
27.06.2016 20:19Да зелёная ветка такая же ситуация. А в ucweb пишет что доступ запрещён потомучто рекламу нельзя крутить. или просто не хотят.
areht
27.06.2016 20:26+3Меня реклама в метро раздражает не своим наличием, а тем, что редирект не позволяет перейти на страницу, которую я запрашивал
lolipop
28.06.2016 01:31поставьте уже блокировщик(просто сразу редиректит, без рекламы), и для андроида, и для ios в наличии.
Spiritschaser
27.06.2016 22:11-2Эм… И зачем Вы это на пальцах описали? Кому надо, это и так было ясно. Кому не надо, теперь будет возможность выкатить «законопроект».
AndrewFoma
28.06.2016 00:25-3Просто наблюдение, сегодня на станции м. Савеловская в 14:02 (+-) видел странного высокого парня с телефоном, в желтых штанах от Quechua. Странность заключалась в том, что парень ехал на север, а на станции вышел и пошел на поезд на юг, причем пошел к северному входу тоннеля, уставившись в телефон. Я еще подумал — какой смысл, если бы он проехал станцию, какой смысл идти к северному входу в тоннель на южном направление, можно просто было встать в центре.
Автор, это были не вы?
rockin
28.06.2016 01:53Собственно говоря, о том, что в этой сети есть реклама при входе, узнал спустя месяцы после старта, случайно посмотрев в чужой телефон…
Блокировка в hosts рулит ;)
Но я пару раз сниффал траф и видно, что мак светится
client_mac=66-a0-f6-dd-d2-9e
вот это в частности
Защита по маку, конечно, смешно. Привет пользователям stalker middleware, что по маку доступ дают :D
Psychosynthesis
28.06.2016 02:47А нельзя ли для тех кто не может в Python аналогичный скрипт на чём-нить из мира винды?
Интересно что там происходит на уровне пакетов. Я так понимаю оно делает Get-запрос и тупо смотрит есть ли в выдаче строка? А скрипт — parse_mac чем занимается?MasMaX
28.06.2016 09:25+3В чем проблема запустить python в windows?
Psychosynthesis
28.06.2016 17:59Хз, я не интересовался… Честно говоря, питон для меня всегда был чем-то из другой среды, примерно как баш, потому я никогда не вникал в исходники и механизмы его работы.
Полагаю, нужно скачивать какой-то интерпретатор и ставить его, а у меня последнее время стойкая неприязнь ко всяким «лишним» программам в системе, которые нужны мне один-два раза.
hollow1
28.06.2016 16:23Да, примерно так все и происходит — проверяется выдача. Parse_mac — это версия без многопоточности.
Revertis
28.06.2016 09:32+7Ну ребят, ну в чём дело? Вроде гики, а разговоры о том когда и как смотреть рекламу и какие кнопки нажимать.
1. Ставим Wi-Fi в метро из Google Play — забываем о ручной авторизации.
2. Ставим OpenVPN, настраиваем до своего VPS в Европе — забываем о сниффинге и подмене трафика. Разрешаем ходить мимо него только проге из пункта 1.
3. Ставим Adguard в режиме root-прокси — забываем о рекламе, и даже о видео-рекламе в приложении YouTube (при включении HTTPS-фильтрации).
Trinion
28.06.2016 10:45Тоже перешел на автоматизированную авторизацию. Долгое время честно смотрел рекламу, но как выше заметили звук в метро рекламе вещь странная как для непосредственно смотрящего, который не разберет ничего в шуме, так и для множества окружающих. Второй тип рекламы, который воюет только за рекламные клики подстраиваясь под кнопку войти в интернет просто неприличны, ощущения что тебя считают умственно отсталым лохом. И Вишенка на торте это обрывы непосредственно подключения после которого приходится выделывать выкрутасы с переходом в авиарежим и обратно что бы попасть на страницу с рекламой, а не ошибкой.
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.
krimtsev
Отличный гайд получился!
krimtsev
Только по ссылке на скрипт пусто — https://bitbucket.org/guardyteam/metro