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

    Особенности реализации HTTPS позволяют различать конкретного пользователя


    Уже на протяжении многих лет во всех основных браузерах присутствует особенность, благодаря которой любой владелец веб-сайта может следить за посетителем. Есть немалая доля иронии в том, что эксплуатируемая при этом функция призвана обеспечивать безопасность.

    На проблему недавно обратил внимание консультант по программному обеспечению британской фирмы RadicalResearch. На самом деле Сэм Гринхал открыл Америку: описание этой уязвимости протокола появилось в самом черновике HSTS (см. пункт 14.9 Creative Manipulation of HSTS Policy Store).

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

    Механизм называется HTTP Strict Transport Security, и он очень важен для обеспечения надёжного соединения между пользователем и сервером.

    После установки специального флага в заголовке браузер пользователя всегда будет запрашивать зашифрованную HTTPS-версию сайта. Это защищает пользователей от прослушивания: злоумышленник между узлами сети не сможет подсунуть доступные для перехвата HTTP-версии страниц.

    Данные, что у конкретного домена был установленный флаг HSTS, сохраняются в браузере пользователя, это логическая переменная (true/false). Это не куки-файлы, а информация о безопасности, поэтому браузеры относятся к ней иначе. Флаги HSTS может быть трудно удалить.

    Концепт под названием HSTS Super Cookies использует эти данные для определения пользователя так, как это делают обычные куки. Сайт будет «узнавать» пользователя, если тот уже посещал ресурс. При этом читать HSTS Super Cookies можно с любого доменного имени.

    HSTS сохраняет только бинарные значения — либо он включён, либо нет. Поэтому Гринхалу пришлось специальным образом настроить 32 домена, этого объёма хватает для хранения информации о более, чем двух миллиардах пользователей. Для улучшения восприятия число переводится в base36: вместо 71009647 пользователь видит 169ze7, 1307145327 — lm8nsf и так далее.

    C HSTS Super Cookies можно ознакомиться на странице проекта.

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

    Большая часть пользователей может чувствовать себя спокойно: очистка куки в Chrome, Firefox и Opera означает и удаление данных HSTS.

    Но это справедливо не для всех браузеров. У исследователей вызвало опасение поведение Safari, популярного браузера всех устройств Apple: флаги HSTS пользователю не только не удалить, они даже синхронизируются с iCloud, навечно сохраняя отпечаток.

    В последней версии браузера Firefox 34.0.5 появилась некоторая защита от этой потенциальной угрозы приватности: в режиме инкогнито значения HSTS установить не получится. Гринхал заявил, что в 33 версии под Windows HSTS Super Cookies ещё работает.

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

    Суперкуки не работают в Internet Explorer: в нём пока нет поддержки HSTS, хотя её собираются добавить.

    Когда HTTP Strict Transport Security создавался, о проблеме задумывались. Но было принято решение о том, что очень важно предотвращать атаки с понижением уровня безопасности, пусть и приходится идти на компромисс и оставлять возможность следить за пользователем посредством этих «отпечатков».

    Особых причин для беспокойства нет, и без HSTS следить за поведением пользователя проще, чем кажется. Как демонстрирует EFF, есть множество других способов выделять пользователя на фоне остальных без использования данных куки: конфигурация наших компьютеров (операционка, языковой пакет, разрешение и глубина цвета экрана, системные шрифты, часовая зона) и браузеров (язык, установленные расширения, плагины, версия) чаще всего достаточно уникальна для этих целей.
    • +42
    • 23,5k
    • 5
    Поделиться публикацией

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

      +2
      Мне иногда кажется, что в наше время чтобы скрыться от всех больших братьев уже и смерть не выход.
        +2
        Очень часто для посещения HTTPS-сайтов использую приватный режим, чтобы браузер не запоминал заголовок HSTS, всё-таки не зря!
          +16
          Мне кажется, надо пояснить, как именно происходит считывание метки.
          При загрузке страницы осуществляется 32 запроса средствами JS на предварительно настроенные поддомены по протоколу HTTP. Те поддомены, для которых установлен флаг HSTS, запрашиваются через HTTPS.



          Указанные поддомены возвращают ответ
          window['hsts']._['1'](false);
          
          для HTTP
          и
          window['hsts']._['1'](true);
          
          для HTTPS.

          После чего средствами JS происходит окончательная сборка метки.

            +1
            После картинки стало понятнее, но остался вопрос. В статье говорится о:
            При этом читать HSTS Super Cookies можно с любого доменного имени.

            Но на деле сайт сам должен сообщить, через какой протокол он загрузился, т.е.
            window['hsts']._['1'](false);
            window['hsts']._['1'](true);

            Получается всё таки не с любого, а только со своих.
              +1
              Видимо, имелось в виду, что соблюдение same origin policy необязательно. Т.е. я со своего сайта vasyapupkin.com точно так же смогу прочитать вашу HSTS-метку, обратившись к оригинальному сайту через <script src="http://b-hsts-lab.radicalresearch.co.uk/hsts/get?cb=window['hsts']._['c']">

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

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