Яндекс.трафик. Ты Идешь Туда?

В последний В статье была затронута тема информационной безопасности такой крупной компании, как Google. Пришло время посмотреть в сторону отечественного производителя, а именно Яндекса и его картографического сервиса.

С чего все началось.

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

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

Кроме того, все современные навигаторы учитывают эти факторы при планировании маршрута.

Что ж, попробуем повлиять на дорожную ситуацию, хотя бы виртуально.



Яндекс.
</p><p>
Трафик.
</p><p>
 Ты идешь туда?

Мы будем играть карточками от Яндекса.

Для начала давайте разберемся, как вообще работает система.

Все просто: мобильные пользователи устанавливают приложение и отправляют данные с координатами, направлением и скоростью на уютный сервер Яндекса, где полученные данные агрегируются, после чего рисуется карта.

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

Чем больше людей (устройств) отправляют статистику, тем точнее данные.

Более подробно о том, как работает система, пишет автор.

Яндекс .

Читая описания работы системы, пытливый ум непременно должен заинтересоваться следующей фразой: «Все данные обезличены, то есть не содержат никакой информации о пользователе или его автомобиле».

Ну-ну-ну, если данные анонимизированы, то почему бы нам не попробовать стать той группой пользователей, которые отправляют данные, например, с той скоростью, которая нам нужна, чтобы менялась информация о пробках на дорогах в выбранном направлении ? ( http://en.wikipedia.org/wiki/Spoofing_attack ) Итак, у нас есть телефон с ОС Android на борту, приложение " яндекс карты "и нюхать" Акула ".

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

Соглашаемся отправлять данные о дорожной ситуации, запускаем сниффер и ездим по городу, собирая пакеты (сетевые, естественно).

Для начала попробуем поставить какую-нибудь отметку о дорожной ситуации, например:

Яндекс.
</p><p>
Трафик.
</p><p>
 Ты идешь туда?

ловим посылку:

   

GET /userpoi/addpointЭuuid=a61d46553953fc3e346dae59d852c950&catidx=2&lat=59.985712&lon=30.350740&utf&comment=bla%20bla&packetid=2936036690 HTTP/1.1 Host: mobile-partners.maps.yandex.net

uuid – параметр идентификатора пользователя catidx – категория тега lat;lon – координаты, где ставится отметка комментарий - комментарий packageid – идентификатор пакета Как и ожидалось, вы можете изменить uuid случайным образом.

Теги были успешно размещены.

Изменение packageid также не дало никакого эффекта.

Играя с разными значениями (координатами и типом тега) и повторно отправляя пакеты, можно быстро затруднить просмотр карты:

Яндекс.
</p><p>
Трафик.
</p><p>
 Ты идешь туда?

Но это все ребячество, где данные о пробках? Вам не придется долго ждать, в глаза сразу бросается следующий пакет:

POST /ymm_collect/2.x/Эuuid=a61d46553953fc3e346dae59d852c950&packetid=2052426273&compressed=1&oauth_token= HTTP/1.1 Content-Type: multipart/form-data; boundary=edge_here Host: mobile-partners.maps.yandex.net --edge_here Content-Disposition: form-data; name="data" Content-Type: application/gzip .

m.[.

.

E.(/.

4.C1. .

/m.l.Y;G.i.'.

4.}.

>.

3.[.

:.

E.1i.d![)x.?.

'.

k.a<.

0.=o.*w.[.

F.H.J)c.)ot^.

z#oq.x. .

i.

uuid — привычный параметр-идентификатор, значение которого можно произвольно менять.

packageid – как следует из названия, это идентификатор пакета.

Это также его контрольная сумма.

Полезная нагрузка POST-запроса — это не что иное, как gzip, внутри которого вы можете увидеть что-то вроде:

<Эxml version="1.0" encoding="utf8" ?><traffic_collect><point lat="59.946379" lon="30.329207" avg_speed="2" direction="180" time="23052011:194509" /></traffic_collect>

Именно то, что мы ищем: текущее местоположение, направление, скорость и время.

Пробуем играть со значениями в xml, меняя направление, положение, скорость и время => пакеты не принимаются сервером.

Очевидно, что контрольные суммы не сходятся.

Выход один: узнать, как сгенерировать packageid. О том, как получить исходники Android-приложения, уже много говорилось.

сказал , поэтому не будем на этом останавливаться.



Яндекс.
</p><p>
Трафик.
</p><p>
 Ты идешь туда?

Великолепный.

Исходный код есть, осталось разобраться, как он работает. И это работало следующим образом: 1) xml с сжатыми данными 2) полученный gzip был побайтно извлечен с помощью uuid 3) CRC32 рассчитывался по полученному результату 4) итоговым результатом стал заветный packageid Мы знаем, как генерируются контрольные суммы — теперь ничто не мешает нам написать скрипт, который будет отправлять данные с нашими координатами и скоростью на серверы Яндекса.

Мы тестируем.



Яндекс.
</p><p>
Трафик.
</p><p>
 Ты идешь туда?

Все работает нормально: на улице появилась несуществующая пробка.

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

! Этот и многие другие доклады по информационной безопасности можно услышать на ежемесячных собраниях.

Российская группа Defcon которые проходят в Санкт-Петербурге.

Приходите, там всегда интересно.

Такие вот дела.

Ах да, информацию об этом баге оперативно предоставили ребятам из Я, которые очень быстро все рассказали.

Отличная работа.

Предлагаю не расстраиваться, ведь есть еще Гугл и Нокиа с их пробками! Ну и для особо любопытных код скрипта для подмены Яндекс.

Трафика: http://pastebin.com/9y4hmFX9 Большое спасибо нткт за вашу помощь и с прошедшим днем рождения! До встречи на дорогах.

Теги: #информационная безопасность #Яндекс #цифровая безопасность #цифровая безопасность #пробки #dsecrg #dsecrg #dsecrg #dsecrg #лень и любопытство

Вместе с данным постом часто просматривают: