- PVSM.RU - https://www.pvsm.ru -
Про HSTS на Хабре уже писали [1], этот механизм включен в генераторе конфигов [2] для веб-серверов от Mozilla. Написать этот пост я решил за один день столкнувшись с недоступность сразу двух крупных сайтов из-за HSTS.
TL;DR: Тщательно проверяйте работу сайта по TLS перед включением HSTS, особенно если это большой портал с кучей субдоменов.
HSTS (HTTP Strict Transport Security) — это механизм защиты от даунгрейд-атак на TLS, указывающий браузеру всегда использовать TLS для сайтов с соответствующими политиками. Стандарт описан в RFC6797 [3], а политики бывают двух видов:
Политика применяется из HTTP-заголовка Strict-Transport-Security при первом заходе на сайт по HTTPS, в нём указан срок действия и применимость к субдоменам:
Strict-Transport-Security: max-age=15768000; includeSubDomains;
Статические политики захардкожены в браузер и для некоторых сайтов включает привязку к вышестоящему CA, выпустевшему сертификат (например: google.com, paypal.com или torproject.org). Причем она может действовать только [4] когда сайт открыт через TLS, разрешая незащищённое соединение, но блокируя MitM с подменой сертификата.
Список из Chromium [5] используют все популярные браузер (Firefox, Safari и IE 11+Edge) и любой желающий может отправить заявку [6] на добавление после соответствующей настройки. Веб-сервер также должен отдавать заголовок со сроком действия от двух лет и ключевым словом preload в конце:
Strict-Transport-Security: max-age=63072000; includeSubDomains; preload
На днях коллеги пожаловались на недоступность некоторых разделов сайта 1С (dist.1c.ru и partweb.1c.ru). Поддержка уверяла что всё работает, у меня проблема не воспроизводилась и даже у коллег сайты открылись из всех браузеров, кроме основного Chrome. Тот выдал ERR_CONNECTION_TIMED_OUT спустя 20 секунд и почему-то настойчиво подставлял HTTPS в URL, даже если адрес был написан полностью с HTTP.
Решение пришло почти сразу, так как недавно упоминали [7] HSTS в контексте корпоративного MitM. Гуглёж по ключевому слову первой ссылкой подсказал, что посмотреть кэш политик можно в chrome://net-internals/#hsts и догадка подтвердилась:
Политика включала все субдомены, хотя многие из них были доступны только на 80 порту без TLS.
После её удаления нужные разделы стали открываться, по дате получения (в формате unix time) в истории браузера нашли страницу с неверными настройками и отправили багрепорт в 1С.
Вторым сайтом оказался ask.mcdonalds.ru, который открывался первый раз, однако Chrome всё равно показал предупреждение с уже знакомой четырёхбуквенной аббревиатурой и без привычной кнопки Proceed to (unsafe):
Ошибка говорит о несоответствии имени сертификата, окончании срока действия или его отзыве, а показ кнопки для открытия сайта прямо запрещён [8] в RFC. При этом политика для mcdonalds.ru оказалась статической, которую нельзя удалить из chrome://net-internals/#hsts.
Обойти такую заглушку в Chrome можно набрав badidea (предыдущим было danger) или запустив браузер с ключом --ignore-certificate-errors.
В Firefox надо нажать «Forge About This Site» напротив сайта в истории, открыть about:config и создать новый Integer с именем «test.currentTimeOffsetSeconds» и значением 11491200, а затем открыть сайт в новой вкладке.
Не включайте потенциально опасные функции без понимания принципов их работы. Оценку «A» в тесте [9] от SSL Labs вы получите и без HSTS, а включить его можно после проверки всего функционала через TLS. Со статическим листом в браузере пути назад уже не будет, поэтому лучше сразу приобрести сертификат с wildcard.
Chrome и Firefox поддерживают дополнительный механизм защиты: HTTP Public Key Pinning (HPKP), позволяющий [10] привязать хэш сертификата и отправлять уведомление владельцу, если браузеру попадётся сертификат от публичного CA для его домена с другим хэшем. Он помог раскрыть несколько инциденов [11] с публичными CA, но на практике используется очень редко [12] из-за высокой цены ошибки.
Автор: navion
Источник [13]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/chrome/237763
Ссылки в тексте:
[1] писали: https://habrahabr.ru/search/?q=%5BHSTS%5D&target_type=posts
[2] генераторе конфигов: https://mozilla.github.io/server-side-tls/ssl-config-generator/
[3] RFC6797: https://tools.ietf.org/html/rfc6797
[4] только: http://security.stackexchange.com/a/140193
[5] Chromium: https://chromium.googlesource.com/chromium/src/net/+/master/http/transport_security_state_static.json
[6] отправить заявку: https://hstspreload.org/
[7] упоминали: https://habrahabr.ru/company/cbs/blog/318592/
[8] прямо запрещён: http://security.stackexchange.com/a/111463
[9] тесте: https://www.ssllabs.com/ssltest/
[10] позволяющий: https://developers.google.com/web/updates/2015/09/HPKP-reporting-with-chrome-46
[11] несколько инциденов: https://git.cryto.net/joepie91/ca-incidents
[12] очень редко: https://blog.qualys.com/ssllabs/2016/09/06/is-http-public-key-pinning-dead
[13] Источник: https://habrahabr.ru/post/320164/?utm_source=habrahabr&utm_medium=rss&utm_campaign=best
Нажмите здесь для печати.