То есть, в идеале, любой человек может спокойно собирать базу всех пассажиров метро, у кого какой номер (и марка) телефона, пол, семейное положение, род занятий, где живёт, где работает, в какую возрастную группу входит и так далее. Замечательно!
Займет это довольно таки мучительно долго, но в принципе легко распараллелить нагрузку на несколько usb-wifi карт, одной собирая маки и другими их проверяя. Если бы я нашел всё же способ представится под любым маком, то статья бы уже назвывалась "«Watch Dogs: Москва», или приложение для самых быстрых знакомств". Ну и был бы не скрипт, а полноценное Android-приложение.
Ну так их можно брутфорсом генерировать. Там ведь кусок мака это код производителя. Можно прикинуть сколько их там будет… Ну штук 20 для начала. А остальные биты перебирать.
Прямо вот так:
1. Поставил новый сгенерированный мак
2. Подключился к сети
3. Стянул JSON
4. Записал в мини-базу типа sqlite, например
5. goto 1

Это можно делать с любого рутованного телефона, не вынимая из кармана. Только powerbank подключить желательно :)

Есть одим маленький нюанс у брутфорса — в лучшем случае слив информации (переключение/запрос) занимает полсекунды. Всего вариантов 2^8^6 на одного вендора, ну и соответственно 2^8^5 секунд на перебор. когда я вбил эти цифры в калькулятор он выдал мне улыбающуюся рожицу

Не успел добавить в предыдущий коммент

image


Короче говоря, лучшим вариантом будет скорее сидение на пересадках рода библиотеки, и соберать там действительно релевантные маки.

У меня получилось 2^24 = 194 дня (на одного вендора) если за секунду подключиться и слить JSON.
Мак ведь 6 байт занимает, 3 байта код вендора, а три байта код устройства.
Распараллелить скачивание JSON'ов и проблема решена.
Плюс, конечно, можно и маки собирать, чтобы ускорить их «проверку».
Моя ошибка, посчитал 6 символов как 6 байт, да.
Всё равно я стою на своем, что таким образом всё, что мы получим — высокую нагрузку на сеть и 99% неиспользованных маков. Плюс не факт, что уязвимость столько продержится.
Вы забываете о том, что телефоны от надкусанного яблока при каждом подключении к сети меняют свой мак, код вендора тот же, а оставшаяся часть меняется. Вроде как самсунги тоже на такое перешли, не знаю точно. Таким образом, при снифе данных может получиться хорошая такая каша из большого количества маков на одного человека, или несколько человек на одном маке, или всё вместе.
Не знал об этом. А есть спецификации, где это поведение описано?
Не сталкивался с таким. Может это на совсем «последних» яблоках? Пятерка и iPad Pro с одним и тем же всегда подключаются.
Как минимум, с iOs 8, новость была ещё в 14м году. geektimes.ru/post/243599

Меняют не при подключении, а при сканировании и только для неизвестных сетей. Когда автоматом подключаются к известной — показывают честный MAC. Можно на тот же MT_FREE их ловить, ведь нам как раз нужны те, кто им пользуется.

то есть им нельзя пользоваться если вайфай сеть пускает по маку?..

как то странновато…
При подключении к известной сети используется честный MAC.
а подменить «известную» ежели?
это был ответ на вопрос про фильтрацию по MAC :)
Если подменить известную, тут надо посмотреть как ios проверяет известность по имени или по mac точки. Хотя если заморочиться то и MAC точки можно сменить…
Я думаю логичным вариантом будет перебирать MAC адреса PCT Айфонов последних 3 поколений.
В условиях обслуживания MT_FREE наверняка же есть что-то про то, что вы разрешаете передавать свои персданные третьим лицам? Ну вот — просто эти третьи лица не обязательно рекламодатели, а могут быть хоть кто.
Круто, попробую посмотреть что-нибудь о себе.
Можешь просто запустить функцию `current_userdata` из скрипта — она вытаскивает данные.
Интересно, какая полнота у этой всей юзердаты и откуда конкретно она берётся. Ясно, что home_station и work_station довольно легко отклассифицировать просто по истории перемещений, а откуда берётся family_status или occupation, например?
Два мака появляются и исчезают часто одновременно? Значит, состоят в отношениях или женаты.
Один из регулярных пунктов назначения находится около какого-нибудь большого вуза, а второй около общежитий, и время суток примерно совпадает? Значит студент. В 8.00-10.00 каждый день едет «туда», а в 17.00-19.00 «обратно»? Скорее всего, работающий. И т.д.
Cлишком сложно и слишком примерно. У них подключены же аналитические сервисы, наверняка могут получить такую инфу от них
скорее всего по истории переходов по страницам из соц. сетей тянут инфу
В соц. сетях сейчас обычно все по HTTPS, поэтому «со стороны» без MitM подсмотреть, по каким страницам ходит пользователь не так-то просто.
Разве что только если явно сотрудничать с ресурсами в целях сбора данных.
Я помню, при регистрации указывал всякие личные данные, пол, интересы, возможно и статус. Видимо оттуда и берутся.
Берем самые распространенные вендоры чипов в телефонах, опа — первые 6 байт есть. Понеслась дальше.
Для этого и есть oui.txt — там содержатся зарегестрированные в IEEE вендоры телефонов вместе с их первыми шестью байтами. Или ты имеешь в виду брутом пройтись по всем остальным шести байтам?
Товарищи #поибэ

А расскажите пожалуйста, что пытаются выцепить из трафика скрипт-киддисы с сетью MT_FREE_ в метро? Вроде всё важное в https давно. Или ssl stripping и т.д.?
MAC адрес мальца ниже чем SSL/TLS.

en.wikipedia.org/wiki/OSI_model
Помимо рекламы, эта страничка отдает один интересный json, который содержит кучу интересной информации о текущем подключенном пользователе.

Есть идеи как этот json посмотреть с телефона? Вроде в хроме мобильном нет инструментов разработчика?

Там всё равно работает view-source, насколько я помню. Вбей мануально в адресную строку view-source:http://auth.wi-fi.ru/auth.

Ну, кстати да, спасибо. Странно что они это из меню убрали.
offtopic
И так как метро — штука хоть и удобная, но зачастую долгая, бесплатной сетью пользуются практически все.

Не знаю как все, но после того, как MT_FREE начали сбрасывать коннект чуть ли не каждые пять минут, чтобы показать свою рекламу снова, пришлось от них отказаться; благо, почти везде (по крайней мере, где я бываю) в метро работает сотовой интернет, где-то лучше, где-то хуже.

Честно скажу, что su -c "ifconfig hw ether {один из интересных маков с premium: true}" после включения wi-fi модуля работает лучше практически любого решения, т.к особо нет вариантов защититься от смены мака.
Но таких интересных маков скорее всего нет на моей странице vk.

Честно скажу, что советовать пользоваться deprecated-утилитами плохо.

ip link set eth0 address 02:01:02:03:04:08
Не знал, что он устарел – спасибо, исправлю скрипт!
Вы, видимо еще не устанавливали свежий debian 9 (который вышел еще в прошлом году). В его release notes было даже в явном виде указано, что ifconfig вообще теперь по-умолчанию выпилен из системы. По факту, статус deprecated ifconfig получил еще лет 5 назад, все это время людям говорили что надо с него уходить…

5.3.9. net-tools will be deprecated in favor of iproute2

The net-tools package is no longer part of new installations by default, since its priority has been lowered from important to optional. Users are instead advised to use the modern iproute2 toolset (which has been part of new installs for several releases already).
AdBlock+ на FF тоже решает проблему с рекламой. И пока без банов.
В последние пару недель с ним стали бороться — периодически на телефон прилетает дневной бан.
Подтверждаю. Прилетал бан на сутки. Приложение снес, но AdBlock оставил. Рекламы нет, подключение к сети происходит быстро. Удобство «Wi-Fi в метро» в том, что пока к платформе подходит поезд, софтина уже законнектилась сама.

Значит у некрасивой нельзя. Ура!

Судя по скрину с примером там вообще одни мужчины.
Чтобы людям было чуточку интереснее, я добавлю сюда небольшой файл с мак-адресами. На нем вы можете проверить работу скрипта.
Из МаксимаТелеком уведомили в ЛС, что уязвимость устранена. Кто-нибудь в метро?

Злосчастный json на месте

Но телефона в нем больше нет, что уже радует. Теперь нам не удасться узнать, как позвонить красотке, но у нас всё ещё есть возможность узнать, что она предпочтет на день рождения и где её можно поджидать.
Насколько я понял, они заменили номер телефона на его хэш.
они заменили номер телефона на его хэш

При известном алгоритме и отсутствии соли номер определить теоретически несложно.

А алгоритм можно попробовать определить используя свой номер (и полученный хеш от него).
Жаль, что за такой big bounty уведомление пришло в ЛС, а не на номер 900 и, минимум, с четырьмя нулями.
Подписку хоть подарили?..
Я не думаю, что сейчас им до подписок, честно говоря. Да и зачем?
За уязвимости принято благодарить не только спасибой…
То есть, красоток вы боитесь, а ст.ст. 137,272 УК РФ нет?
Ну как вам сказать
image
Какие-то ребята делают сервис Wi-Fi в метро, монетизируют его и при этом, считай, распространяют ПД пользователя из-за собственного слабоумия? Разве как раз таким штраф/статья не полагается?))

Сегодня пробовал в метро, вместо телефона теперь хеш:
"msisdn":"f5618b8ef6e2c7cde6f674da5e6d485329aa026607175a624b8aee7b9a0de97e"

Насколько можно судить, это SHA256.

Теперь телефоны красоток можно майнить
Интересно, солёный ли. Иначе можно вполне себе быстро брутить при хорошем железе)
Только что попробовал, 100К телефонов за 4 минуты, проц i5 2.67 GHz, загружено было только одно ядро на 13%. Можно легко сделать заранее небольшие таблицы хэш-телефон, и потом по ним искать. Или на впс где-нибудь рест-сервисом оформить. Размер данных на 100К записей — 7.7 Мб
Для номеров телефонов иметь такие таблицы смысла, имхо, нет. Hashcat может брутить SHA256 с очень большой скоростью, даже на моем слабом ноутбуке скорость около 115 миллионов хешей в секунду.
Спасибо за инфу! А то я по-дилетантски скрипт на баше наваял…
Было бы удивительно, если бы не посолили :) проверил выше представленный хеш по маске 7(\d{10}) — нет результатов.
Не тот хэш смотрите.
Поле «uid» — md5(номер телефона).
Причем БЕЗ соли.
Соответственно загоняете в онлайн радужную таблицу, например — www.md5online.org
И вуаля телефон ваш, задача усложнилась на посещение одного сайта.
Проверил на нескольких юзерах и своем телефоне.
У MaximaTelecom высококлассные спецы)
Напридумывают всякого, солить еще зачем-то
Ох как интересно. в поле uid и раньше лежал md5 телефон без соли. При этом еще присутствовал в открытом виде.
Теперь в msisdn видимо с солью sha256
Но uid они решили не менять…
А чего раньше времени думать. Вот хабр умный, он подумает, они прочитают и посолят.
Следят за здоровьем — меньше соли, везде (но жизнь заставляет, судя по upd).
> «family_status»: «not married»
> «occupation»: «student»

Эм, я чего-то не понимаю, откуда у провайдера данные по семейному положению и роду занятий? Пользователь их вносит при авторизации наряду с ФИО или телефоном? Какой в этом смысл, ФЗ126 же требует только паспортные данные/телефон?
Смысл в персонализированной рекламе. Вопрос только зачем эта инфа шлется пользователю при подключении?
Могут и просто по косвенным признакам/статистике передвижений насобирать. Опять же, через социалки можно много чего о человеке узнать.

Если married то можно любую околопристойнойную рекламу показывать, а её у них навалом.

Хм, а от запроса скриптом с другого сайта там защита-то есть? То есть вместо собирания кучи мак-адресов просто засовываем в популярный сайт скрипт, сопоставляющий пользователя с его данными из московского вайфая… Рекламщики такой инфе порадуются…
Да ну что вы, какие глупости. Как же тогда на популярном сайте премиум контент втюхивать?

Этому Same Origin Policy должна помешать

Ей только браузеры обязательно следуют, а на сервере нужно самому защиту писать. Из вроде как надёжных способов вспоминается только проверка по IP-адресам (диапазон + запрет на прокси).
на сервере нужно самому защиту писать

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

Раньше тырил куки от контакта, одноклассников, fb и кучи других сайтов через DroidSheep. Можно было узнать не только номер красотки, но и почитать ее переписку ))) Сейчас большинство сайтов ввели защиту от этого.
Я честно не ожидал, что за четыре часа, которые пройдут, вы сможете просто взять и прошерстив эти данные, найти снова телефон. Сейчас иду в метро, проверять/менять пост. Спасибо за инфу, Antxak!
А если сделать свой hotspot с ssid MT_FREE и хорошим уровнем сигнала, сделать перенаправление на страничку похожую на auth.wi-fi.ru, и попросить девушку ввести свой телефон. Может и получится.
Сколько геморроя для того, чтобы просто поговорить с девушкой, стоящей напротив :)
А если едут четыре красивых и все с WiFi, с одной начнёшь говорить, а с тремя остальными шанс упущен.

А так автоматизация процесса, главное чтобы старушки с WiFi не попались, или не дай ТНБ, ушлые старички.

Да, после некоторого раздумья, наверное с автоматизацией лучше повременить.
Ровно поэтому я с ними и не говорю. И никакого геморроя!
Ставь +1, если как я ни разу в жизни не заходил в публичную Wi-Fi сеть,
требующую ввести телефон.

А использовать для этого специальную отдельную сим карту?

Если у кого-то нет доступа к московскому метро — я скачал wget -rом auth.wi-fi.ru и auth.wi-fi.ru/auth для своего mac-адреса. Телефон — 79017980642.

В authorizat.bundle.js есть что-то похожее на расшифровку вещей из UPD4.
homeStationId:window.userData["104c52d70d"],jobStationId:window.userData.f4befe4ab6

Короче говоря, мне не особо удалось расшифровать данные, но зашифрованы только перечисляемые типы — т.е те, которые возможно все сохранить в виде списка ключ-значение на сервере. Между всеми клиентами они одинаковы, так что в принципе возможно сделать статистический анализ и найти что и что значит.
Ну либо сравнить со старыми данными.
> curl --retry 3 -s -b .ck -c .ck 'https://auth.wi-fi.ru/auth?segment=metro' > /dev/null 2>&1
> -b .ck

Интересно, кука с названием ".ck" и без значения, которая в хедере https запроса будет выглядеть как «Set-Cookie: .ck=», это специально такая закладка в скрипте чтоб майору легко вычислять хабра юзера собирающего приватные данные?

p.s.
кто не понял, вот ман на курл:

-b, --cookie <name=data>
(HTTP) Pass the data to the HTTP server as a cookie. It is sup‐
posedly the data previously received from the server in a «Set-
Cookie:» line. The data should be in the format «NAME1=VALUE1;
NAME2=VALUE2».
Хотя проверил на практике, поскольку нет знака равно (-b .ck=), то насамом деле curl просто игнорирует опцию -b и не отсылает куку без значения

Это для проставления кук от сервера, без неё сервер скажет, что у нас печеньки отключены. И она открывает файл .ck.


If no '=' symbol is used in the argument, it is instead treated as a filename to read previously stored cookie from.

С номером телефона всё понятно (через него идёт авторизация), но объясните, пожалуйста, немосквичу, откуда у них данные по полу и возрасту?
Рынок bigdata этим сейчас и ценен. По каждому пользователю можно составить его цифровой профиль, основываясь на запросах, интересах и поведении. Имея такой профиль, его можно с высокой вероятностью отыскать в следующий раз, не спрашивая информации о нём.

UPD: Добавил в gist маппинги для некоторых кусков данных, так как мне надоело ждать их ответ на то, что данные легко поддаются статистическому анализу.

5777de2cd9          age                 
7ef6265d            4500                
0ae09acd            3544                
c40467ec            1217                
00f0d9de            1824                
fd5a4e2f            2534 
3d2e2a0d80          profit             
785d323e            low                 
85ebdc3d            high                
b8a058b4            medium 
cb19ed6f70          occupation     
1d049b46            student             
78051d61            unemployed          
4294e679            housewife
5e97672e80          family_status              
b2ccc4af            not married         
d858a4ad            active search       
7dce1b03            married
получив печеньки, можно получать данные из любой сети
Мне кажется, что Максима, вместо благодарности, занесла на обеление Беспощадному пиарщику в ТГ. Ох, не надо так, девочки!
Простите, продолжаю наблюдение. Еще и Кремлевскому мамковеду занесли. Удивительные люди, конечно.
Ну наконец-то и контрольный выстрел — подключился агрегатор телеграма всея руси Караульный.

cab404, я считаю, это успех.
kk, найс
Вообще в конечном итоге, если гипотетический собиратель юзал загрузку не инфы о юзере с генерирующейся на сервере страницы, а просто хапал печеньку и позже скачивал инфу из дома по ней (обнаружил, что так можно уже чуть позже, на третьем апдейте где-то), то скорость так сурово возрастает засчет того, что не приходится качать страничку на медленном соединении. Плюс опять же, атака крайне легко распределяется по куче wi-fi карт, как где-то выше уже говорили.
Только полноправные пользователи могут оставлять комментарии.
Войдите, пожалуйста.