HTTP Strict Transport Security ( HSTS ) — это механизм политики, который помогает защищать веб-сайты от атак типа «человек посередине», таких как атаки с понижением версии протокола [1] и перехват файлов cookie . Он позволяет веб-серверам объявлять, что веб-браузеры (или другие соответствующие пользовательские агенты ) должны автоматически взаимодействовать с ним, используя только соединения HTTPS , которые обеспечивают безопасность транспортного уровня (TLS/SSL), в отличие от небезопасного HTTP, используемого отдельно. HSTS — это протокол отслеживания стандартов IETF , указанный в RFC 6797.
Политика HSTS передается сервером пользовательскому агенту через поле заголовка ответа HTTP с именем Strict-Transport-Security
. Политика HSTS определяет период времени, в течение которого пользовательский агент должен получать доступ к серверу только безопасным способом. [2] : §5.2 Веб-сайты, использующие HSTS, часто не принимают открытый текст HTTP, либо отклоняя соединения по HTTP, либо систематически перенаправляя пользователей на HTTPS (хотя это не требуется спецификацией). Следствием этого является то, что пользовательский агент, не способный выполнять TLS, не сможет подключиться к сайту.
Защита применяется только после того, как пользователь посетил сайт хотя бы один раз, полагаясь на принцип « доверия при первом использовании ». Принцип работы этой защиты заключается в том, что когда пользователь вводит или выбирает HTTP (не HTTPS) URL-адрес сайта, клиент, такой как веб-браузер, автоматически обновляется до HTTPS без отправки HTTP-запроса, тем самым предотвращая любую HTTP-атаку типа «человек посередине».
Спецификация HSTS была опубликована как RFC 6797 19 ноября 2012 года после одобрения IESG 2 октября 2012 года для публикации в качестве предлагаемого стандарта RFC . [3] Первоначально авторы представили его как интернет-проект 17 июня 2010 года. После преобразования в интернет-проект название спецификации было изменено с «Strict Transport Security» (STS) на «HTTP Strict Transport Security», поскольку спецификация применяется только к HTTP . [4] Поле заголовка ответа HTTP, определенное в спецификации HSTS, однако по-прежнему называется «Strict-Transport-Security».
Последняя так называемая «версия сообщества» спецификации, тогда называвшейся «STS», была опубликована 18 декабря 2009 года с изменениями, основанными на отзывах сообщества. [5]
Первоначальный проект спецификации, разработанный Джеффом Ходжесом из PayPal , Колином Джексоном и Адамом Бартом, был опубликован 18 сентября 2009 года. [6]
Спецификация HSTS основана на оригинальной работе Джексона и Барта, описанной в их статье «ForceHTTPS: Защита высокозащищенных веб-сайтов от сетевых атак». [7]
Кроме того, HSTS является реализацией одного из аспектов общей концепции улучшения веб-безопасности, выдвинутой Джеффом Ходжесом и Энди Стейнгрублом в их статье 2010 года « Необходимость последовательной структуры(-ий) политики веб-безопасности» . [8]
Сервер реализует политику HSTS, предоставляя заголовок по соединению HTTPS (заголовки HSTS по HTTP игнорируются). [1] Например, сервер может отправить заголовок таким образом, чтобы будущие запросы к домену на следующий год (максимальный возраст указывается в секундах; 31 536 000 равно одному невисокосному году) использовали только HTTPS: Strict-Transport-Security: max-age=31536000
.
Когда веб-приложение выдает политику HSTS агентам пользователей, соответствующие агенты пользователей ведут себя следующим образом: [2] : §5
http://example.com/some/page/
будут изменены на https://example.com/some/page/
перед доступом к серверу).Политика HSTS помогает защитить пользователей веб-приложений от некоторых пассивных ( подслушивание ) и активных сетевых атак . [2] : §2.4 Злоумышленник , использующий метод «человек посередине», имеет значительно меньшие возможности перехвата запросов и ответов между пользователем и сервером веб-приложений, пока в браузере пользователя действует политика HSTS для этого веб-приложения.
Самая важная уязвимость безопасности, которую может исправить HSTS, — это атаки типа «человек посередине» с удалением SSL , впервые публично представленные Мокси Марлинспайком в его докладе BlackHat Federal 2009 года «Новые приемы для победы над SSL на практике». [9] [10] Атака с удалением SSL (и TLS ) работает путем прозрачного преобразования защищенного соединения HTTPS в обычное соединение HTTP. Пользователь может видеть, что соединение небезопасно, но, что особенно важно, нет способа узнать, должно ли соединение быть безопасным. Во время выступления Марлинспайка многие веб-сайты не использовали TLS/SSL, поэтому не было способа узнать (без предварительного знания), было ли использование простого HTTP следствием атаки или просто потому, что веб-сайт не реализовал TLS/SSL. Кроме того, во время процесса понижения версии пользователю не выдаются предупреждения, что делает атаку довольно незаметной для всех, кроме самых бдительных. Инструмент sslstrip Марлинспайка полностью автоматизирует атаку. [ необходима ссылка ]
HSTS решает эту проблему [2] : §2.4 , информируя браузер о том, что соединения с сайтом должны всегда использовать TLS/SSL. Заголовок HSTS может быть удален злоумышленником, если это первый визит пользователя. Google Chrome , Mozilla Firefox , Internet Explorer и Microsoft Edge пытаются ограничить эту проблему, включая «предварительно загруженный» список сайтов HSTS. [11] [12] [13] К сожалению, это решение не может масштабироваться для включения всех веб-сайтов в Интернете. См. ограничения ниже.
HSTS также может помочь предотвратить кражу учетных данных для входа на сайт на основе cookie-файлов с помощью широко распространенных инструментов, таких как Firesheep . [14]
Поскольку HSTS ограничен по времени, он чувствителен к атакам, включающим сдвиг времени компьютера жертвы, например, с использованием ложных пакетов NTP . [15]
Первоначальный запрос остается незащищенным от активных атак, если он использует небезопасный протокол, такой как простой HTTP, или если URI для первоначального запроса был получен по незащищенному каналу . [2] : §14.6 То же самое относится к первому запросу после периода активности, указанного в объявленной политике HSTS max-age
(сайты должны устанавливать период в несколько дней или месяцев в зависимости от активности и поведения пользователя). Google Chrome , Mozilla Firefox и Internet Explorer / Microsoft Edge решают это ограничение, реализуя «предварительно загруженный список HSTS», который представляет собой список, содержащий известные сайты, поддерживающие HSTS. [16] [11] [12] [13] Этот список распространяется вместе с браузером, поэтому он также использует HTTPS для первоначального запроса к перечисленным сайтам. Как упоминалось ранее, эти предварительно загруженные списки не могут масштабироваться для покрытия всего Интернета. Потенциальное решение может быть достигнуто путем использования записей DNS для объявления политики HSTS и безопасного доступа к ним через DNSSEC , опционально с отпечатками пальцев сертификатов для обеспечения действительности (что требует запуска проверяющего преобразователя для предотвращения проблем последней мили ). [17]
Джунад Али отметил, что HSTS неэффективен против использования поддельных доменов; используя атаки на основе DNS, злоумышленник может перехватывать трафик с искусственного домена, которого нет в списке предварительной загрузки HSTS [18], это может быть сделано с помощью атак с подменой DNS [19] или просто доменного имени, которое обманчиво напоминает настоящее доменное имя, например www.example.org вместо www.example.com .
Даже с предварительно загруженным списком HSTS, HSTS не может предотвратить продвинутые атаки против самого TLS, такие как атаки BEAST или CRIME, представленные Джулиано Риццо и Тай Дуонгом. Атаки против самого TLS ортогональны принудительному применению политики HSTS. Он также не может защитить от атак на сервер — если кто-то его скомпрометирует, он с радостью будет обслуживать любой контент через TLS.
См. RFC 6797 для обсуждения общих вопросов безопасности HSTS.
HSTS может использоваться для почти неизгладимой маркировки браузеров посетителей с помощью восстанавливаемых идентификационных данных ( supercookies ), которые могут сохраняться в режимах конфиденциальности браузера « инкогнито » и вне их. Создавая веб-страницу, которая делает несколько HTTP-запросов к выбранным доменам, например, если используются двадцать запросов браузера к двадцати различным доменам, теоретически можно различить более миллиона посетителей (2 20 ) из-за результирующих запросов, поступающих через HTTP и HTTPS; последний представляет собой ранее записанные двоичные «биты», установленные ранее через заголовки HSTS. [20]
В зависимости от фактического развертывания существуют определенные угрозы (например, атаки с внедрением файлов cookie), которых можно избежать, следуя передовым практикам.
includeSubDomains
. [2] : §6.1.2