...

понедельник, 23 сентября 2013 г.

[recovery mode] Получение телефонного номера пользователя Facebook полным перебором

Около месяца назад я наткнулся на форму приглашения друзей через почту и/или номер мобильного телефона (который в добровольно-принудительном порядке требуют при регистрации). Я не долго думаю вставил в форму 1500 случайных номеров, по 500 в каждом формате (89*********, +79*********, 9*********). Поле «Сообщение» оставил пустым. На следующее утро меня ждал сюрприз: пара десятков новых диалогов, в которых я начинал разговор с сообщения «Optional message». Не долго думая я отправил отчет через форму на Facebook. Но после недельного ожидания и повторного отчета мне пришёл ответ: «This is not a bug. It's a core Facebook feature.».



Что мы имеем




  • В России 52 кода мобильных операторов, зато Украина имеет только 16, а у Белоруссии их всего 4.

  • После каждого кода идет семизначный номер. То есть 10 000 000 возможных комбинаций.

  • По разным, неподтвержденным, данным в России как минимум 7 миллионов пользователей Facebook, у Украины 2.5 миллиона, а у Белоруссии более 400 тысяч.

  • Итого 520 / 7 ≈ 74 номеров на пользователя в России, 160 / 2.5 = 64 в/на Украине и 40 / 0.4 = 100 в Белоруссии.




Таким образом выгодней всего подбирать номера телефонов украинцев.
Алгоритм действий



Для начала необходимо сгенерировать все возможные номера. Возьмем 16 кодов и для каждого подставим числа от 0 до 10 миллионов. Так как плотность пользователей на один номер телефона достаточна высока, то можно смело делить список на группы по 50 номеров. В итоге мы получим 160 000 000 / 50 = 3 200 000 блоков.

Запрос на сервер Facebook занимает в среднем до 200 мс (зависит от канала). Таким образом один клиент может генерировать в один поток 5 запросов в секунду. 3.2М / 5 / 60сек / 60мин ≈ 177.7 часов, что есть чуть дольше недели. Удвоение потоков и/или клиентов будет сокращать временные затраты вдвое.

Поиск совпадений достаточно прост:


  • Отправить запрос (приглашение) через форму одному блоку номеров, указав в сообщении случайную последовательность букв (возможно хэш блока).

  • После отправки запроса Facebook в течении нескольких часов пройдется по списку и отправит запросы в друзья тем, кто уже есть на Facebook, а также уведомит их отправив личное сообщение с указанным хэшем. Плюс Facebook в том, что пока пользователь не добавил в друзья (и если стоят базовые настройки приватности), то отправленное сообщение попадет в папку «Другие», а пользователь не получит уведомления.

  • Нам достаточно проверить диалоги клиента и сравнить хэш из сообщения с сохраненными хэшами.

  • В случае совпадения, блок можно разбить на меньшие куски и повторить запрос.




Из явных недостатков: кол-во запросов и сообщений слишком велико чтобы Facebook не заметил подвоха. Это легко решается дополнительными аккаунтами и прокси серверами. Также пользователь может понять что его номер кто-то использовал в форме приглашения: он получит приглашение в друзья и сообщение. Это можно решить моментальной отменой приглашения (уведомление на почту пользователь все-же получит) или добавлением пользователя в черный список сразу после нахождения номера.

Из плюсов: по дефолту у всех совершеннолетних пользователей включена возможность найти их по номеру телефона (можно отключить в настройках приватности) и обычно привязанный номер также подключен к онлайн банкам, киви, WebMoney кошелькам и т.д.

P.S. Для защиты, в настройках приватности можно выбрать тех кто сможет искать вас по адресу электронной почты и номеру телефона.


This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at fivefilters.org/content-only/faq.php#publishers. Five Filters recommends:



Комментариев нет:

Отправить комментарий