Но под этой глянцевой и сомнительной внешностью скрывается гниль. Вы подозреваете, что ваш хороший друг, соучредитель и со-исполнительный директор Стив Стивингтон строит козни против вас. Он всё время выбегает из библиотеки в странное время и где-то пропадает часами напролёт. Когда вы спрашиваете, куда он идет, он строит странную гримасу, которую вероятно считает злорадной ухмылкой — и говорит не беспокоиться. Вы несколько раз поручали библиотекаршам проследить за ним, но все они ужасны в полевой работе.
Вы достаточно давно живёте в Кремниевой долине — и знаете, какие беспощадные злодейства происходят, когда на карту поставлена большая сумма денег и пользовательских данных. Вероятно, Стив Стивингтон пытается убедить инвесторов вытеснить вас из бизнеса. Вы думаете, что Питер Тиль вас поддержит, но насчёт Тёти Марты сказать сложно. Так что нужно выяснить, куда ходит Стив.
К счастью, он заядлый пользователь 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)
questor
23.07.2018 12:06Обычно в статьях про взлом больше технических деталей, чем лирики. Но мне понравилась история, следил с интересом
поженятся ли они в концекинет ли кофаундер рассказчика.
hippohood
23.07.2018 13:28+1Надо еще хакнуть его браслет с шагомером. Там дыра на дыре. И отслеживать координаты в Тиндере по времени. Если отследить время и примерную точку входа в целевой квадрат и пройденное расстояние, то конечный пункт можно выяснить с большой долей вероятности. Предполагая что этот один и известных адресов
Fragster
23.07.2018 13:53Получается, что через эти закругления можно вычислить местоположение жертвы с точностью ~1/3 мили
Cheater
23.07.2018 14:00Кто такой Уилсон?
dunaldo
23.07.2018 15:31+1Сейчас так популярны резкие смены профессий, почему бы и нет…
mind_switcher
23.07.2018 20:43Можно не заморачиваться и просто подождать пока Амазон допилит свою систему распознавания лиц. осталось вроде не так долго, тут была уже статья)
Manlok
23.07.2018 20:43+1Улыбнул стиль повествования, частенько на такой натыкаюсь. Какой-то комедийно-гиперболизированный что ли, но я не силён в терминах. У него случайно нет своего названия?
0o0
23.07.2018 21:25"Пока Уилсон вышел в туалет, одалживаете его телефон для тестирования — вы знаете, что он использует Tinder, а код разблокировки виден по следу пальца на экране."
Больше программа на букву Т, которая в этом рекламном тексте встречается аж 39 раз, не нужна.
snnrman
24.07.2018 02:26+2Реклама одному из самых популярных дейтиновых приложений на хабре несомненно очень необходима.
Cheater
24.07.2018 08:44Он же с Уилсоном это проворачивает, а не со Стивингтоном. У CEO так просто телефон не стрельнуть.:)
Хотя уничтожать телефон при том что Уилсон прекрасно знает, кому его давал, — это эээ самонадеянно…mayorovp
24.07.2018 11:02Уилсон не знает что с его телефоном что-то проворачивают. Он просто потерял телефон :-)
MniLL
24.07.2018 10:54Я в свое время пробовал так по трем точкам вычислить координаты юзера тиндера, обнаружил, что мало того, что есть КД на изменение собственных координат, так еще и расстояние до юзера считается примерно, +- пара км.
Автор статьи уверен в своем методе, али просто решил хайпануть?
shurik2533
26.07.2018 13:37Ах. Я так начал встречаться со своей девушкой, полтора года назад разъезжая на машине по городу с картой и циркулем. Но в тот день я не нашел её даже примерно. Оказалось, что в это время она перемещалась. Я рассказал ей о своих попытках и мы договорились поиграть. Она уедет в подмосковный городок, а я попытаюсь её найти.
zuborg