Супер-куки на основе HSTS отследят вас даже в приватном режиме

Автор оригинала: Dan Goodin
  • Перевод
Уже несколько лет все браузеры предлагают настройки для приватного браузинга. В приватном режиме они могут не сохранять куки, историю страниц и временные файлы. Люди, ценящие приватность, полагаются на эту возможность. Но недавно был предложен ещё один способ отследить пользователя даже и в этом случае, если тот не предпримет особых мер.

Ирония в том, что работе этой системы отслеживания способствует механизм под названием HTTP Strict Transport Security. Он нужен для того, чтобы сайты могли убедиться, что пользователь работает с их серверами только по протоколу HTTPS. Если сервер добавляет в заголовки соответствующий флаг, то по правилам HSTS все соединения с сервером должны быть зашифрованы. Таким образом пользователя защищают от различных возможных атак.

image

Сэм Гринхальх, консультант агентства RadicalResearch придумал, как превратить эту функцию, обеспечивающую безопасность, в функцию для отслеживания пользователя. Назвал он свою концепцию HSTS Super Cookies. Как и обычные куки, суперкуки отслеживают пользователя и могут идентифицировать его, если он вернётся на сайт в будущем. Одна из возможностей суперкук – они работают даже в приватном режиме. Другая – эти куки можно прочитать с других доменных имён, а не только с того, что их поставил.

Как это работает


Для одного сайта HSTS может содержать одно бинарное значение – вкл или выкл. Для обхода этого ограничения Гринхальх составляет вместе 32 сайта, складывает все их бинарные значения и хранит результат, как одно число. В результате получается возможным создать более чем два миллиарда вариантов браузеров. Для простоты десятичное число конвертируется в base36, так что 169ze7 представляет 71009647, или lm8nsf представляет 1307145327.

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

К счастью, все, кроме пользователей Safari на iPhone или iPad, могут удалить эти флаги, использующиеся для отслеживания, удалив все куки. Обычно вместе с этой операцией браузеры обнуляют и флаги HSTS. Кроме того, если вы посетили сайт, который пытается вас отследить, только в приватном режиме, то этот флаг не будет взведён.

HSTS Super Cookies – хороший пример того, как новые возможности могут превратиться в дыры в безопасности. Весь смысл HSTS в том, чтобы браузер всегда использовал HTTPS при запросах к сайтам, которые поддерживают этот протокол. Разработчики браузеров, очевидно, хотели обеспечить повышенную безопасность для их пользователей, но теперь им придётся подумать над своим решением снова.

Примечание: после публикации статьи её рассмотрели разработчики Chrome и Firefox. Первые решили ничего не менять в попытках «соблюсти баланс между приватностью и безопасностью». Вторые же, начиная с версии 34, исключили возможность переноса настроек флагов в приватный режим.
AdBlock похитил этот баннер, но баннеры не зубы — отрастут

Подробнее
Реклама

Комментарии 34

    +10
      +1
      Повтор, конечно, но спасибо за напоминание. Много искал название этой техники.
        0
        Еще бы понять, как защититься. По мне, так приватный режим должен быть приватным, разве нет — а тут прямой обход!
          0
          geektimes.ru/post/244065/
          Большая часть пользователей может чувствовать себя спокойно: очистка куки в Chrome, Firefox и Opera означает и удаление данных HSTS.

          Но это справедливо не для всех браузеров. У исследователей вызвало опасение поведение Safari, популярного браузера всех устройств Apple: флаги HSTS пользователю не только не удалить, они даже синхронизируются с iCloud, навечно сохраняя отпечаток.
            0
            Так если посещать сайт только в приватном режиме, HSTS работает в рамках этой приватной сессии. Достаточно закрыть все приватные окна, открыть одно заново, и первый запрос снова будет HTTP.
              0
              Никак. HSTS Это компромисс между безопасностью (передаваемых данных) и отслеживания. Удалять куки не стоит, вы, тем самым, обнуляете усилия разработчиков по защите вашего соединения. Без HSTS любой MITM может легко перехватывать ваши данные на многих сайтах. Альтернатива HSTS — закодированный список сайтов в браузере, поддерживающих HTTPS. Но это не очень масштабируемый подход.
                0
                Альтернатива — DNSSEC и DANE, но кто бы его ещё внедрил в браузеры…

                (TLD уже поддерживают, вы можете легко сделать DNSSEC-enabled зону в .ru, .com, .net и так далее, даже в.рф)
                  0
                  Есть плагин DNSSEC/TLSA Validator.
                  Кроме того, патчи к Firefox можно найти в соответствующем баге.
                    0
                    Хотя, к сожалению, в последнее время Mozilla делает много «политических» решений и не хочет добавлять поддержку DNSSEC/DANE, равно как и поддержку WebP, несмотря на наличие патчей и большого количества пользователей, желающих проверить их.
                      0
                      Конечно есть. Но не заставишь же всех его ставить.
                        0
                        [удалено]
                  +1
                  Не понятна позиция хрома. Приватность важнее HSTS.
                    +7
                    Да важнее, но не для тех кто делает деньги на отслеживании пользователей для тагетированой рекламы.
                      0
                      Ну для себя лично могли бы реализовать приватное апи работающее только для доменов гугла. А так не пойдет.
                        0
                        это будет ещё хуже, т.к. это «закладка»
                      0
                      Может они сами давно используют эту возможность ;)
                      +1
                      Странно, в Safari 7.1 на iOS не работает. Даже в обычном режиме не сохраняется значение.
                        0
                        Для одного сайта HSTS может содержать одно бинарное значение – вкл или выкл. Для обхода этого ограничения Гринхальх составляет вместе 32 сайта, складывает все их бинарные значения и хранит результат, как одно число. В результате получается возможным создать более чем два миллиарда вариантов браузеров

                        Уточняющие вопросы: как может один сайт задать HSTS для оставшихся 31? Разве не нужно посетить все 32 сайта для того чтобы они оставили каждый свой флаг?
                          +3
                          Видимо, напихать на страничку 31 невидимых картинок или ссылок на js/css не видится проблемой ни для кого :-)
                          +1
                          Очень странно, но Firefox 36.0.1 на OS X — не воспроизводится. Т.е. каждый раз, когда я захожу на эту страницу в приватном режиме, мне выдают новый id, и он ни разу не совпал с id, выданным в обычном режиме.
                          • НЛО прилетело и опубликовало эту надпись здесь
                              0
                              Это примечание появилось позже моего комментария, и давать на него ссылку, сопровождая ссылку минусом, как минимум неуместно. Более того, в статье нет ни слова о том, что предмет обсуждения давно протух и имел место многие месяцы назад.
                            +1
                            Или на сайте хакера ошибка, или Эппл решил проблему — у меня на айфоне всегда новый ID.
                              0
                              «скрипт проверяет ваши установки HSTS для разных сайтов и высчитывает идентификатор»
                              «исключили возможность переноса настроек флагов в приватный режим»

                              А разве проблема еще и не в том, что есть доступ к флагу HSTS другого сайта?
                                0
                                А пояснить минус можно?
                                И вы точно вопрос поняли? Я как бы не утверждал, что «исключение возможности переноса» решает эту проблему. Я про другое вопрос задал.
                                  0
                                  Поправка: Я как бы не утверждал, что «исключение возможности переноса» НЕ решает эту проблему.
                                  Спасибо за минус в карму, вы мне очень помогли.
                                  Правда было бы лучше услышать ответ на вопрос.
                                    0
                                    Минус не мой, но отвечу: как такового доступа к флагу HSTS у других сайтов нет.
                                    Там подключается js скрипт, по http он одно выдает, по https другое.
                                    Т.е. подключая http ://.../script.js при установленном HSTS браузер загрузит htts://.../script.js и мы это узнаем.
                                    Так что это особенность «by design».
                                      –1
                                      А тогда о каких 32 сайтах идет речь?

                                      «Для одного сайта HSTS может содержать одно бинарное значение – вкл или выкл. Для обхода этого ограничения Гринхальх составляет вместе 32 сайта...»
                                      и
                                      «скрипт проверяет ваши установки HSTS для разных сайтов и высчитывает идентификатор»

                                      Мне кажется именно в этом и проблема. Изначально, при разработке HSTS, подумали что одним битом не возможно идентифицировать пользователя, поэтому это будет гарантировать приватность.
                                      И «придумка» Гринхальха именно в том, что он составляет вместе значения от 32 сайтов, и получает уже 2^31 (2147483648) возможных идентификаторов.

                                      Разве нет?
                                        0
                                        Про это и статья.
                                          –2
                                          Вы меня запутали )
                                          Так есть все-таки доступ к флагу другого сайта или нет?
                                          Получается ведь что есть?
                                            –1
                                            Да, есть by design, но в неявном виде. Нельзя просто взять и получить HSTS-флаг любого произвольного сайта — нужно, чтобы сайт в явном виде говорил, через какой транспорт он был загружен — через HTTP или HTTPS. Узнать это с точки зрения контент-скрипта невозможно.
                                    +1
                                    Доступ в примере есть, т.к. эти 32 сайта контролируюся злоумышленником. На 32 случайных сайтах из интернета это сделать нельзя.
                                      0
                                      Почитал более разжеванные статьи, стало понятнее.
                                      Фишка не в этом. Я изначально понимал, что эти 32 сайта могут быть и своими. Фишка в первом заходе не в приватном режиме и идентификация абсолютно обычной кукой. Без этого все разваливается.

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

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

                                      Собственно меня смутил заголовок. Он не корректный. Если я буду пользоваться исключительно приватным режимом эти «суперкуки» ничего отследить не смогут.

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

                                Самое читаемое