Как стать автором
Обновить

Как Tinder (слегка) прячет ваше местоположение

Время на прочтение7 мин
Количество просмотров83K
Автор оригинала: Robert Heaton
В этом году вы со своим приятелем Стивом Стивингтоном основали стартап по отслеживанию пользователей. Бизнес основан на утечке метаданных WhatsApp, которую вы обнаружили. Вам обоим стоило бы ещё поучиться менеджменту, но всё же фирма выросла в мощную, хотя неустойчивую компанию из 65 разномастных стажёров и студентов, фрилансеров и неоплачиваемых работников на испытательном сроке. Вы недавно переехали в щегольской новый офис в отделе литературы 19-го века Общественной библиотеки Сан-Франциско, и у вас завидная репутация в сфере интернет-маркетинга.

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

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

К счастью, он заядлый пользователь Tinder. Приложение Tinder отслеживает местоположение своих пользователей, чтобы сообщить потенциальным парам, как далеко они находятся друг от друга. Это позволяет пользователям принимать разумные решения: действительно ли стоит ехать за 13 километров, чтобы встретить пару на 6 или 6,5 баллов, когда у них есть ванна, мороженое в холодильнике и работа утром. Другими словами, Tinder точно знает, куда направляется Стив. И если подобрать правильный эксплойт, то вы тоже скоро узнаете.

Чтобы определить направление поисков, вы изучили отчёты о прошлых утечках данных о местоположении пользователей Tinder. Таких было несколько. В 2013 году обнаружилось, что серверы Tinder отправляют точные координаты потенциальных совпадений в мобильное приложение. На их основе приложение вычисляло расстояние между пользователями, но не отображало координаты в интерфейсе. Однако злоумышленник мог легко перехватить собственный сетевой трафик Tinder, проверить необработанные данные и определить точное местоположение цели.


Ответ Tinder API, включая точное местоположение

Tinder попытался втихую исправить уязвимость, переложив расчёт расстояния на серверы вместо приложения. После этого сетевые сообщения, отправляемые с сервера в приложение, содержали только эти предварительно рассчитанные расстояния без фактических местоположений. Однако Tinder небрежно отправлял расстояния в виде неокруглённые чисел с 15 знаками после запятой.


Ответ Tinder API, включая точное расстояние

Эта небрежность позволила хитрым исследователям опять определить точное местоположение целей с помощью эксплойта для трилатерации. Исследователи отправляли три поддельных координаты в Tinder с разными точками местонахождения пользователя. На каждом новом месте они спрашивали у Tinder, как далеко находится цель. Затем на карте чертились три окружности с центрами в поддельных координатах и радиусами, равными полученным расстояниям. Точка пересечения — координаты цели с точностью в 30 метров.


Пример трилатерации Tinder

Команда безопасности Tinder посмотрела на этих людей, которые постоянно заставляют их работать, вздохнула и тихо исправила уязвимость. Теперь Tinder отправляет в приложение расстояния, округлённые до километров. По-прежнему можно использовать указанную процедуру трилатерации, чтобы определить координаты цели в пределах километра или около того. Но в густонаселенном городе Сан-Франциско это не даст ответа, куда же ходит подлый Стив Стивингтон.

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

Предположим, Tinder теперь вычисляет точные расстояния на серверах, округляет их до ближайшего целого числа, а затем отправляет округлённые числа на ваш телефон. Вы можете начать новую атаку так же, как с трилатерацией. Отправляем поддельные местоположения Tinder и спрашиваем, как далеко цель. Tinder может ответить «8 километров», что само по себе малополезно. Но затем можно отодвигаться на север по одному пикселю, с каждым шагом спрашивая расстояние. Сервер ответит «8 километров, 8 километров, 8 километров, 8 километров, 7 километров». Если ваше предположение о процессе округления верно, то точка, в которой изменяется ответ, соответствует точному расстоянию до цели 7,5 километров. Если повторить эту процедуру три раза и нарисовать три круга, то мы снова задействуем эксплойт трилатерации.

Переходим к активным действиям. Пока Уилсон вышел в туалет, одалживаете его телефон для тестирования — вы знаете, что он использует Tinder, а код разблокировки виден по следу пальца на экране. Говорите своим неоплачиваемым стажёрам на испытательным сроке, чтобы не звали вас к телефону и ничего не говорили Уилсону — и спешите в укромный и безлюдный уголок своего офиса в отделе художественной литературы для старшего школьного возраста. Там открываете Tinder на обоих телефонах. Продолжаете свайпить, пока не получится совпадение, а затем пишете короткий скрипт на Python с помощью pynder для спуфинга вызовов Tinder API. Размещаете Уилсона посередине залива Сан-Франциско, а затем пытаетесь определить его координаты, изменяя своё местоположение пиксель за пикселем для поиска точки, когда расстояние между вами изменится с одного округлённого числа на другое.

Но что-то не так. Наступил вечер, прошло время ужина, а вы ещё не нашли Уилсона. Вы вроде подбираетесь близко, но недостаточно. Круги иногда мучительно близки к пересечению, но обычно не дают осмысленного ответа, где находится Уилсон. Вы начинаете отчаиваться. Прямо в эту секунду Стив Стивингтон может подписать новый контракт с Питером Тилем и Тётей Мартой. Возможно, он уже обновил страницу вашей компании на LinkedIn, переименовал вас в «советника», «помощника» или «бывшего генерального директора». Библиотека закрывается — и вы переезжаете в кладовку. Уилсон продолжает звонить, но стажёры на испытательном сроке вас не сдают. Проскакивает даже мимолётная мысль дать им работу.



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

На втором часу ночи всё становится ясно.


Размещение отметок на карте на основе расстояний Tinder

Теперь Tinder настолько ревностно блюдёт приватность пользователей, что разрывает скучные скрепы обычной геометрии. Он отказался от Евклида. Ему не нужна формула гаверсинусов. Вместо этого при расчёте расстояния между совпадениями Tinder использует две инновации.

Во-первых, и это самое главное, он делит город на квадраты примерно 1×1 милю. При вычислении расстояния местоположение цели привязывается к центру текущего квадрата сетки. Затем вычисляется и возвращается приблизительное расстояние между вами и этим привязанным местоположением.


Tinder привязывает местоположения пользователей к сетке

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



Но Tinder, похоже, использует наложение концентрических квадратов со странными закруглениями на углах при удалении от цели.



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

Привязка сетки — ключевое нововведение в подходе Tinder. Это означает, что Tinder всегда будет возвращать одинаковое расстояние, если цель находится в любом месте в пределах заданного квадрата сетки. Ваш трилатерационный эксплойт не сработает. И если Tinder правильно реализовал привязку сетки, то никакой чисто дистанционный эксплойт никогда не сработает. Нет никакого способа найти местоположение цели с большей точностью, чем границы одного из квадратов сетки (примерно) 1×1 милю. Даже такая грубая слежка может заставить задуматься пользователей Tinder. Но на самом деле это вполне разумное поведение для приложения, главная функция которого — говорить незнакомым людям, где примерно вы находитесь.

Вы действительно не знаете, почему Tinder применяет такой странный слой квадратов с закруглёнными углами. Пока местоположения пользователей привязаны к сетке, Tinder мог бы использовать нормальное евклидово расстояние, не рискуя конфиденциальностью. Возможно, просто новая метрика быстрее вычисляется, а несмотря на заветы Гордона Мура, компьютеры пока ограничены. Тем не менее, всё это приводит к выводу, что Tinder безопасен — в этом очень узком аспекте — а вы облажались.

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

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

Когда засыпаете ночью, в голову лезут мысли, что происходит с координатной сеткой Tinder на Северном полюсе…

Ваш код из этой статьи опубликован на Github. Пожалуйста, сообщите себе, если возникнут какие-то вопросы или обнаружите ошибки.
Теги:
Хабы:
Всего голосов 136: ↑133 и ↓3+130
Комментарии22

Публикации

Истории

Работа

Ближайшие события