В этом году вы со своим приятелем Стивом Стивингтоном основали стартап по отслеживанию пользователей. Бизнес основан на утечке метаданных 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. Пожалуйста, сообщите себе, если возникнут какие-то вопросы или обнаружите ошибки.

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


  1. zuborg
    23.07.2018 10:05

    Когда вы засыпаете ночью, в голову лезут мысли, что, возможно, есть все-таки какой-то способ хакнуть эту защиту. А что, если кто-то использует для этого именно вас?! Возможно, вы всего лишь выдуманный персонаж фантастической истории, опубликованной с целью собрать побольше комментариев с описанием возможностей взлома… Хмм...


  1. questor
    23.07.2018 12:06

    Обычно в статьях про взлом больше технических деталей, чем лирики. Но мне понравилась история, следил с интересом поженятся ли они в конце кинет ли кофаундер рассказчика.


  1. hdfan2
    23.07.2018 12:43

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


    1. ApeCoder
      24.07.2018 09:01

      Все должно было закончиться терморектальным криптоанализом, но нет…


  1. hippohood
    23.07.2018 13:28
    +1

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


  1. Fragster
    23.07.2018 13:53

    Получается, что через эти закругления можно вычислить местоположение жертвы с точностью ~1/3 мили



    1. mayorovp
      23.07.2018 14:18

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


      1. Fragster
        23.07.2018 14:31

        Согласен, затупил немного.


  1. Cheater
    23.07.2018 14:00

    Кто такой Уилсон?


    1. dunaldo
      23.07.2018 15:31
      +1

      Сейчас так популярны резкие смены профессий, почему бы и нет…

      Заголовок спойлера
      image


      1. ganqqwerty
        23.07.2018 19:58

        Хаус гад, шреднул его телефон


  1. mind_switcher
    23.07.2018 20:43

    Можно не заморачиваться и просто подождать пока Амазон допилит свою систему распознавания лиц. осталось вроде не так долго, тут была уже статья)


    1. hzs
      24.07.2018 08:47

      Сбербанк с VisionLabs уже реализовали.


  1. Manlok
    23.07.2018 20:43
    +1

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


  1. 0o0
    23.07.2018 21:25

    "Пока Уилсон вышел в туалет, одалживаете его телефон для тестирования — вы знаете, что он использует Tinder, а код разблокировки виден по следу пальца на экране."


    Больше программа на букву Т, которая в этом рекламном тексте встречается аж 39 раз, не нужна.


    1. snnrman
      24.07.2018 02:26
      +2

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


    1. Cheater
      24.07.2018 08:44

      Он же с Уилсоном это проворачивает, а не со Стивингтоном. У CEO так просто телефон не стрельнуть.:)

      Хотя уничтожать телефон при том что Уилсон прекрасно знает, кому его давал, — это эээ самонадеянно…


      1. mayorovp
        24.07.2018 11:02

        Уилсон не знает что с его телефоном что-то проворачивают. Он просто потерял телефон :-)


  1. MniLL
    24.07.2018 10:54

    Я в свое время пробовал так по трем точкам вычислить координаты юзера тиндера, обнаружил, что мало того, что есть КД на изменение собственных координат, так еще и расстояние до юзера считается примерно, +- пара км.

    Автор статьи уверен в своем методе, али просто решил хайпануть?


  1. MShevchenko
    25.07.2018 13:23

    Манхэттенское расстояние. Нет. Не слышал. ;-)


  1. shurik2533
    26.07.2018 13:37

    Ах. Я так начал встречаться со своей девушкой, полтора года назад разъезжая на машине по городу с картой и циркулем. Но в тот день я не нашел её даже примерно. Оказалось, что в это время она перемещалась. Я рассказал ей о своих попытках и мы договорились поиграть. Она уедет в подмосковный городок, а я попытаюсь её найти.