HSTS
HSTS (HTTP Strict Transport Security) — механизм политики веб-безопасности, предназначенный для защиты веб-сайтов от атак понижения протокола[1] и атак захвата сессии. Веб-серверы с помощью данного механизма указывают веб-браузерам, что запросы к ним должны выполняться только через HTTPS. Это позволяет пользователям получить доступ к сайту через HTTPS, который обеспечивает защиту с помощью TLS/SSL, вместо незащищённого HTTP. HSTS является протоколом стандарта IETF, подробно описанным в RFC 6797.
Политика HSTS передаётся с веб-сервера в заголовке ответа HTTPS под названием Strict-Transport-Security[1]. Политика HSTS указывает браузеру, в течение какого времени сервер должен быть доступен только по HTTPS. Сайты с HSTS либо отклоняют соединения по HTTP, либо систематически перенаправляют пользователей на HTTPS, не принимая открытый HTTP (однако это не строгое требование спецификации). В результате браузеры, не поддерживающие TLS/SSL, не смогут подключиться к такому сайту.
История спецификации
Спецификация HSTS была одобрена как предлагаемый стандарт IETF 2 октября 2012 года и официально опубликована 19 ноября 2012 года как RFC 6797[2]. Авторы впервые представили спецификацию как черновик 17 июня 2010 года. После преобразования в черновик название было изменено с «Strict Transport Security» («STS») на «HTTP Strict Transport Security», чтобы подчеркнуть её применимость только к HTTP[3]. Однако наименование заголовка ответа осталось как «Strict-Transport-Security».
«Общедоступная версия» спецификации, пересмотренная с учётом обратной связи сообщества, была опубликована 18 декабря 2009 года под именем «STS»[4].
Оригинальный черновик спецификации, подготовленный Джеффом Ходжесом из PayPal, Коллином Джексоном и Адамом Бартом, был опубликован 18 сентября 2009 года[5].
Спецификация HSTS основана на работах Джексона и Барта, изложенных в статье «ForceHTTPS: Protecting High-Security Web Sites from Network Attacks» («Защита веб-сайтов высокой безопасности от сетевых атак»)[6].
Кроме того, HSTS стал шагом на пути реализации общей концепции повышения веб-безопасности, изложенной Джеффом Ходжесом и Энди Стейнгрюбелем в статье 2010 года «The Need for Coherent Web Security Policy Framework(s)»[7].
Общий обзор механизма HSTS
Сервер реализует политику HSTS, отправляя заголовок ответа только по HTTPS (заголовки HSTS, полученные по HTTP, игнорируются)[1]. Например, сервер может отправить следующий заголовок, чтобы браузеры использовали только HTTPS для домена в течение года (max-age указывается в секундах: 31 536 000 секунд = 365 дней): Strict-Transport-Security: max-age=31536000.
Когда веб-приложение оповещает пользовательские агенты о включении HSTS, совместимые браузеры ведут себя следующим образом (согласно RFC 6797)[8]:
- Необеспеченные соединения с сайтом должны автоматически перенаправляться на защищённые (например,
http://example.com/some/page/меняется наhttps://example.com/some/page/до запроса к серверу). - Если установить защищённое соединение не удаётся (например, TLS-сертификат сервера ненадёжный), браузер должен разорвать соединение и не предоставлять пользователю возможность проигнорировать это.
Политика HSTS помогает защитить пользователей веб-приложений от ряда пассивных (прослушивание) и активных сетевых атак[9]. Если в браузере для определённого сайта действует политика HSTS, злоумышленник, применяющий атаку «человек посередине» (MITM), теряет возможность эффективно перехватывать трафик.
Применимость
Одним из наиболее опасных уязвимостей, которые позволяет устранить HSTS, является атака SSL Stripping, впервые представленная Мокси Марлинспайком в 2009 году на конференции BlackHat Federal («New Tricks For Defeating SSL In Practice»)[10]. Атака SSL/TLS Stripping заключается в прозрачном преобразовании защищённой (HTTPS) связи в незашифрованную (HTTP), при этом пользователь может не заметить проблему, а определить, должен ли сайт использовать защищённое соединение, зачастую невозможно. Поскольку многие сайты вовсе не поддерживают TLS/SSL, зачастую невозможно отличить результат атаки от обычной работы сайта. Дополнительно, при атаке пользователю не показывается никаких предупреждений, что делает атаку эффективной практически против всех пользователей.
HSTS устраняет эту проблему[9] путём указания браузеру всегда использовать TLS/SSL для соединения с сайтом. Однако, если это первый визит пользователя, злоумышленник всё ещё может удалить HSTS-заголовок. Для смягчения этой проблемы в Google Chrome, Mozilla Firefox, Internet Explorer и Microsoft Edge используется «предзагруженный список», содержащий сайты с поддержкой HSTS[11][12][13]. Однако этот подход не масштабируется для покрытия всех сайтов в Интернете.
HSTS также может предотвращать атаки с похищением cookie, осуществляемые с помощью таких инструментов, как Firesheep[14].
Так как действие HSTS ограничено во времени, оно уязвимо для атак с изменением времени на компьютере жертвы, например, с помощью поддельных пакетов NTP[15].
Ограничения
Если первый запрос к сайту осуществляется по незащищённому HTTP или через небезопасный URI, то он не защищён от атак активного злоумышленника[16]. То же верно для первого запроса после истечения срока действия политики HSTS, определённого в max-age (его стоит подбирать исходя из специфики сайта). Для борьбы с этим основными браузерами (Google Chrome, Mozilla Firefox, Internet Explorer/Microsoft Edge) используется «список предзагрузки HSTS» — он распространяется в составе браузера и включает сайты, поддерживающие HSTS[11][12][13][17]. Однако этот механизм неспособен покрыть весь Интернет. Одно из возможных решений — распространение политики HSTS через DNS (например, с использованием DNSSEC для аутентификации записей)[18].
Джунаде Али указал, что HSTS бессилен против «фальшивых» доменных имён: используя атаки на DNS, злоумышленник может предоставить трафик с недействительного домена, не попавшего в предзагруженный список HSTS[19], что возможно как с помощью DNS спуфинга[20], так и через регистрацию домена, схожего с настоящим (например, «www.example.com» вместо «www.example.org»).
Даже наличие «предзагруженного списка HSTS» не позволяет защититься от сложных атак на TLS, таких как BEAST и CRIME[21], а также от атак на сам сервер: если злоумышленник получит доступ к серверу, он сможет отдавать вредоносный контент через TLS.
Детализированный разбор аспектов безопасности HSTS приведён в RFC 6797.
Проблемы конфиденциальности
HSTS может использоваться для метки браузеров, в том числе и в «приватном» режиме, путём хранения так называемых «суперкуки». Осуществляя обращения к нескольким заранее заданным доменам, сайт может установить идентификаторы, позволяющие определить до миллиона разных пользователей (220)[22].
Поддержка браузеров
- Chromium и Google Chrome начиная с версии 4.0.211.0[23][24]
- Firefox начиная с версии 4[1]; Mozilla реализовала предзагрузку HSTS с версии Firefox 17[12]
- Opera начиная с версии 12[25]
- Safari на OS X Mavericks (версия 10.9, конец 2013 года)
- Internet Explorer 11 на Windows 8.1 и Windows 7 (после установки KB 3058515 в обновлении Windows в июне 2015 года)[26]
- Microsoft Edge и Internet Explorer 11 на Windows 10[27][28]
- BlackBerry 10 (BlackBerry OS 10.3.3 и новее) и встроенный WebView, для которых реализована интеграция списков поддерживаемых HSTS-сайтов.
Важные аспекты внедрения
В зависимости от применяемой конфигурации при внедрении HSTS необходимо учитывать ряд вопросов (например, защищённость от атак внедрения cookie):
- HSTS следует объявлять для корневого домена (например, для
https://example.comвместе сincludeSubDomains), чтобы политика распространялась и на поддомены, напримерhttps://sub.example.com. Пример заголовка:Strict-Transport-Security: max-age=16070400; includeSubDomains[29]. - Для предотвращения атак с инъекцией cookie через поддомен, сервер
https://www.example.comдолжен также обеспечивать установку HSTS дляhttps://example.comи, например, при обработке запросов с поддоменов делать дополнительный запрос к ресурсу корневого домена[30].
Примечания
- ↑ 1 2 3 4 Strict-Transport-Security (англ.). MDN Web Docs. Mozilla. Дата обращения: 18 июня 2024. Архивировано 20 марта 2020 года.
- ↑ [websec] Protocol Action: 'HTTP Strict Transport Security (HSTS)' to Proposed Standard (draft-ietf-websec-strict-transport-sec-14.txt) (2 октября 2012). Дата обращения: 18 июня 2024. Архивировано 29 января 2017 года.
- ↑ Re: [HASMAT] "STS" moniker (was: IETF BoF @IETF-78 Maastricht: HASMAT...) (30 июня 2010). Дата обращения: 18 июня 2024. Архивировано 2 февраля 2017 года.
- ↑ Strict Transport Security -06 (18 декабря 2009). Дата обращения: 18 июня 2024. Архивировано 21 февраля 2017 года.
- ↑ Strict Transport Security -05 (18 сентября 2009). Дата обращения: 18 июня 2024. Архивировано 24 февраля 2020 года.
- ↑ ForceHTTPS: Protecting High-Security Web Site from Network Attacks (апрель 2008). Дата обращения: 18 июня 2024. Архивировано 28 февраля 2020 года.
- ↑ The Need for Coherent Web Security Policy Framework(s) (29 октября 2010). Дата обращения: 18 июня 2024. Архивировано 14 августа 2017 года.
- ↑ Section 5. HSTS Mechanism Overview. RFC 6797. IETF (ноябрь 2012). Дата обращения: 18 июня 2024. Архивировано 26 февраля 2020 года.
- ↑ 1 2 2.3. Threat Model. RFC 6797. IETF (ноябрь 2012). Дата обращения: 18 июня 2024. Архивировано 26 февраля 2020 года.
- ↑ “New Tricks For Defeating SSL In Practice” (PDF). Архивировано из оригинала (PDF) 2014-12-30. Дата обращения 2024-06-18. Используется устаревший параметр
|url-status=(справка) - ↑ 1 2 Strict Transport Security. The Chromium Projects (8 июля 2010). Дата обращения: 18 июня 2024. Архивировано 1 сентября 2019 года.
- ↑ 1 2 3 Preloading HSTS. Mozilla Security Blog (1 ноября 2012). Дата обращения: 18 июня 2024. Архивировано 24 февраля 2020 года.
- ↑ 1 2 HTTP Strict Transport Security comes to Internet Explorer (16 февраля 2015). Дата обращения: 18 июня 2024. Архивировано 15 ноября 2015 года.
- ↑ Firesheep and HSTS (HTTP Strict Transport Security) (31 октября 2010). Дата обращения: 18 июня 2024. Архивировано 23 июня 2016 года.
- ↑ Bypassing HTTP Strict Transport Security (17 октября 2014). Дата обращения: 18 июня 2024. Архивировано 22 октября 2014 года.
- ↑ Section 14.6. Bootstrap MITM Vulnerability. RFC 6797. IETF (ноябрь 2012). Дата обращения: 18 июня 2024. Архивировано 26 февраля 2020 года.
- ↑ Chromium HSTS Preloaded list. cs.chromium.org. Дата обращения: 18 июня 2024. Архивировано 18 февраля 2020 года.
- ↑ HTTP Strict Transport Security (11 сентября 2011). Дата обращения: 18 июня 2024. Архивировано 26 апреля 2019 года.
- ↑ Performing & Preventing SSL Stripping: A Plain-English Primer. Cloudflare Blog (20 октября 2017). Дата обращения: 18 июня 2024. Архивировано 14 декабря 2019 года.
- ↑ 2017 SSDSE : [англ.]. — 2017. — ISBN 978-1-5386-1593-5.
- ↑ RFC 6797.
- ↑ The HSTS super cookie forcing you to choose: "privacy or security?". sophos.com. Дата обращения: 18 июня 2024. Архивировано 11 февраля 2020 года.
- ↑ Strict Transport Security - The Chromium Projects (17 ноября 2010). Дата обращения: 18 июня 2024. Архивировано 20 марта 2020 года.
- ↑ fyi: Strict Transport Security specification (18 сентября 2009). Дата обращения: 18 июня 2024. Архивировано 29 февраля 2020 года.
- ↑ Web specifications support in Opera Presto 2.10 (23 апреля 2012). Дата обращения: 18 июня 2024. Архивировано 20 июня 2018 года.
- ↑ HTTP Strict Transport Security comes to Internet Explorer 11 on Windows 8.1 and Windows 7. windows.com. Дата обращения: 18 июня 2024. Архивировано 27 ноября 2019 года.
- ↑ Internet Explorer Web Platform Status and Roadmap. Дата обращения: 18 июня 2024. Архивировано 29 июня 2015 года.
- ↑ Project Spartan and the Windows 10 January Preview Build - IEBlog. Дата обращения: 18 июня 2024. Архивировано 29 ноября 2019 года.
- ↑ HTTP Strict Transport Security (HSTS) 6.1.2. ietf.org. Дата обращения: 18 июня 2024. Архивировано 22 июля 2019 года.
- ↑ RFC 6797 - HTTP Strict Transport Security (HSTS). IETF Tools. Дата обращения: 18 июня 2024. Архивировано 28 мая 2019 года.
Ссылки
- Состояние внедрения HSTS: исследование и типичные ошибки HSTS Deployment Survey: Pitfalls and Common Patterns (англ.). Дата обращения: 18 июня 2024. Архивировано 7 октября 2016 года.
- Security Now 262: Strict Transport Security Security Now 262: Strict Transport Security (англ.). Дата обращения: 18 июня 2024. Архивировано 1 августа 2020 года.
- Онлайн-тестирование HSTS и Public Key Pinning Public-Key-Pins test (англ.). Дата обращения: 18 июня 2024. Архивировано 8 ноября 2014 года.
- Отправка HSTS для предзагрузки в Chrome, Firefox, Safari, IE 11 и Edge HSTS Preload Submission (англ.). Дата обращения: 18 июня 2024. Архивировано 13 марта 2020 года.
- Предзагруженный список Chromium HSTS Chromium HSTS Preloaded list (англ.). Дата обращения: 18 июня 2024. Архивировано 18 февраля 2020 года.
- Описание Strict-Transport-Security на MDN Web Docs Strict-Transport-Security (англ.). Дата обращения: 18 июня 2024. Архивировано 20 марта 2020 года.