Google Photos и прямые URLs

Это будет уже третья заметка на тему прямых ссылок для фотографий из сервиса Google Photos 1 и связанного с ним сервиса Google Album Archive 2. Предыдущее вы можете прочитать здесь и здесь. Я в принципе не собирался писать ничего нового, но тема возникла как бы сама собой при анализе прямых ссылок на фото, хотя нет, она была предложена Татьяной Инарш после прочтения "Google Photos and the unguessable URL" 3.

"Google Photos and the unguessable URL":

Буквально спустя месяц после запуска сервиса Google Photos один из пользователей обнаружил факт существования прямых ссылок на свои фото, ну те самые, которые можно получить скопировав URL на полноэкранную версию своего фото в контекстном меню браузера (меню по правой кнопке мышки). И он был сильно удивлен тем, что фото доступны по ссылкам без прохождения этапа аутентификации просматривающего пользователя и авторизации его прав на просмотр. Говоря другими словами: "Почему мои приватные фотографии могут смотреть все, кто имеют прямые ссылки на них ?" - возмутился он. Информация быстро разошлась по Интернету и Google пришлось дать комментарий по этому поводу. Отдувались за всех гл. инженеры сервиса Google Photos - Aravind Krishnaswamy и Vincent Mo. Вот вольная цитата из статьи:

... то, что выглядит как уязвимость на самом деле нечто более серьезное и не такое страшное как кажется. Google использует эту технологию приватных-но-и-публичных URL во многих своих сервисах, точно так же как это делает Facebook и другие компании. Такие URL адреса не являются какой-либо дырой в безопасности, т.к. практически невозможно перехватить их и получить доступ к чужим фотографиям. В то время как, все больше и больше фото хранятся на облачных сервисах Google, Facebook или Apple, интуитивное соглашение о предоставлении к ним доступа при помощи кнопки "Share\Поделиться" и её подобных стало ассоциироваться с терминами безопасноть и публичность. Но Google Photos пошел дальше, он ломает все границы нашего понятия приватности.

Итак, почему "публичные" URL более безопасны чем кажутся? Краткий ответ - эти URL работают подобно парольной авторизации. Длинна этих ссылок более 40 символов длинной, что обеспечивает 10 в 70 степени разных комбинаций и делает проблему перебора "астрономически" сложной. Aravind Krishnaswamy утверждает, что на сегодня это непреодолимая преграда, - "Гораздо легче угадать ваш пароль, чем подобрать правильную комбинацию для ссылки". Кроме того, весь трафик шифруется по SSL протоколу, что держит в секрете от посторонних все передаваемые ссылки.

Более важно, то что ваше фото на самом деле не размещено по какой-либо ссылке до тех пор пока вы сами этого не захотели. Google Photos обычно получает фото для отображения со своих серверов по более сложному алгоритму чем какие-то ссылки, но когда пользователь нажимает правую кнопку - Google Photos обнаруживает это и формирует для него специальную ссылку. Можно сказать, что Google Photos имеет интеллектуальную реакцию на "правый клик". Сделав "правый клик" вы делаете ваше фото публичным при помощи его URL, что эквивалентно нажатию кнопки "Share\Поделиться". Google делает это процесс незаметным для вас.

Среди огромного количества фото на сервисе Google Photos, только небольшая их часть доступна при помощи публичных URL. Кроме того, Google защищен специальными следящими алгоритмами, которые обнаруживают попытки "фишинга" или перебора URL и автоматически блокируют злоумышленника. Будьте уверены, что никто не вычислит валидного URL случайным образом. Но те, кто имеют правильную ссылку могут пользоваться ей свободно, без каких-либо ограничений. Вы можете передать ссылку на ваше фото друзьям или опубликовать где-либо и она всегда будет загружать одно и тоже изображение, везде. Для Google - это важная "фича" :) ....

"Публичные ссылки и доступные по ним ресурсы вещь универсальная", - вторит Vincent Mo. "Вы можете поделиться ей в текстовом сообщении, добавить во вложение электронной почты, разместить её на своей web-страничке". Мы все привыкли к этому за более чем два десятилетия, и это общепринятая и понятная пользователям Интернета вещь. Это редчайший случай - подлинно открытая система.

Так почему же кому-то это показалось уязвимостью, а не особенностью? Когда эта информация появилась на Reddit, многие подумали что обнаружили дыру в системе безопасности Google. В основном, так получилось из-за того, что не было никаких четких сигналов о разрешении публичного доступа по такой ссылке со стороны сервиса Google Photos. Весь Интернет загажен кнопками "Поделиться этим", так что показалось странным найти в Google такую функциональность "без кнопки". Такие кнопки обычно ограничивают вас работой в конкретной социальной сети или сервисе, будь то Facebook, Flickr или даже такой универсальный сайт как Tumblr. Если вы пытаетесь поделиться фото из этих сервисов, адресат все еще ограничен использованием того же самого сервиса или более специфическими средствами как электронная почта и локальный файл.

В этом смысле публичные URL из Google Photos выглядят как пустой бланк. Они могут быть использованы везде, даже там, где вы и не предполагали. Если даже сам сервис не контролирует использование этих ссылок, кто будет этим заниматься?
Мы не привыкли к использованию таких "открытых" систем, особенно от таких гигантов как Google, на как только сервис вырастает в самостоятельную систему из социальной сети (подобно тому как Google Photos отделился от Google+), его открытость является неизбежным результатом. Удивительно, но мы должны заново учится его использовать, на сей раз без кнопок "поделиться".

На основе это статьи мы видим, что выдвигаются следующие тезисы:

  • Публичные и постоянные URL ссылки существуют, Google Photos формирует их всякий раз как только вы делаете "правый клик".
  • Эти URL ссылки безопасны, их длинна является гарантией от случайного её обнаружение. Кроме того, работает система безопасности идентифицирующая злоумышленника по перебору или попыткам подбора ссылки и блокирующая его.
  • Случайно наткнутся на ссылку или угадать её невозможно, тем более что все валидные ссылки защищены SSL протоколом - Google Photos использует https для передачи данных, по http он не работае.
  • Такие ссылки нечто уникальное для Google и он считает это своей фиче.

Ну что, же рассмотрим их ...

"Прямые URLs"

Публичные и постоянные URL ссылки существуют, Google Photos формирует их всякий раз как только вы делаете "правый клик".

Это же просто замечательно, то что мы гадали, расспрашивали на форумах - свершилось! Они существуют - прямые URL ссылки. Вызывает удивление способ их получения. Никакой интерфейсной подсказки, ни справки в разделе помощи - ничего. Складывается впечатление, что нас никто уведомлять о такой возможности и не собирался. Дотошные пользователи нашли это сами, на свою голову. И т.к. то, что нигде не опубликовано официально, а статья в третьих источниках со ссылкой на непонятные суждения работников Google - не в счет, может в любой момент исчезнуть или поменять свою функциональность до неузнаваемости. Короче - все на свой страх и риск и использовать в критических местах, наверно, не стоит.
Да, никакой реакции на "правый клик" в веб-приложении Google Photos не существует. Понятно, что это было образное выражение, но как именно работает механизм Google Photos я пока не понимаю. На деле, при анализе HTML страниц Google Photos, видно что очень часто, когда приложение запрашивает фотографию из сервера, для неё (для фотографии) генерируется новая ссылка! К примеру, в недавней статье я рассказывал про параметры ссылок в Google Photos и приводил примеры на основе фотографии: Так вот, на момент написания статьи, она доступна через две других совершенно разных ссылки:

Ссылка 1: https://lh3.googleusercontent.com/2p3klEcp...

Ссылка 2: https://lh3.googleusercontent.com/r4K7or0JW... (через 24 часа уже не работает)

Часть из этих ссылок, как например предыдущая ссылка №2, через некоторое время "перестанут существовать", т.е. сборщик мусора от Google занесет их в список свободных, а часть, отобранные по непонятному мне правилу - останутся рабочими.

Эти URL ссылки безопасны, их длинна является гарантией от случайного её обнаружение. Кроме того, работает система безопасности идентифицирующая злоумышленника по перебору или попыткам подбора ссылки и блокирующая его.

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

Случайно наткнутся на ссылку или угадать её невозможно, тем более что все валидные ссылки защищены SSL протоколом - Google Photos использует https для передачи данных, по http он не работае.

А вот тут у меня большой вопрос - разве в Google не знают, что передавать в URL запросе среди параметров критическую информацию нельзя! Нельзя даже если этот запрос защищен протоколом HTTPS (комбинация SSL\TLS + HTTP). А сложный 40-ка символьный идентификатор фотографии и является самой критически важной информацией в этой ссылке. Как утверждается в статье - "её паспорт". Хуже того, в Google Photos это идентификатор сам по себе является пропуском к просмотру фотографии, т.е. если вы его знаете (в Google считают, что перехватить его невозможно), тогда вы можете просмотреть это фото, даже если это фото приватное! Да, да, да - у всех ваших приватных фото есть эти URL ссылки, и если их перехватить, то в течении некоторого времени, злоумышленник их может просматривать! Так почему же хранить в URL ссылке приватную информацию нельзя, даже если она HTTPS? Да потому что все эти ссылки проходят через два небезопасных места:

  • история в браузере и плугины в браузере (как например всем известный AdBlock Plus)
  • скрипты определения прокси для ссылки - PAC скрипты.

Браузеры ломаются очень просто, существует куча методик даже без взламывания самого кода браузера. Поэтому, все что хранится в истории может уплыть в неизвестном направлении когда угодно. И даже если вы очень аккуратный пользователь, вы все-равно не защищены от разгильдяйства со стороны вашего провайдера, т.к. совсем недавно был опубликован метод взлома и получения всех HTTPS ссылок на основе PAC уязвимости 4.

Такие ссылки нечто уникальное для Google и он считает это своей фиче.

Ну что тут сказать, Яндекс.Фотки и Flickr имеют прямые ссылки на ваши публичные фото и это не считается чем-то крутым и выделяющимся на фоне конкурентов.

Дополнение

Совсем недавно Леонид Кузнецов обнаружил, что прямые ссылки на ваши фото помещенные в какой-либо альбом живут очень долго (возможно бесконечно долго). При этом не имеет никакого значения альбом приватный или публичный, ссылка даже на фото из приватного альбома живет крайне долго и позволяет кому угодно, кто её знает, просматривать фото. Сам материал можно прочесть - тут. Я проверил, и действительно - вот фото из ПРИВАТНОГО альбома. В Google Album Arhive в свойствах этого фото написано, что доступно оно только мне: Видите фото!? А не должны... оно приватное.

Итоги

Какие тут могут быть итоги, одни вопросы - и все к Google.

Ссылки по теме:

profile for 23W on Stack Exchange, a network of free, community-driven Q&A sites Google+