Внимание к мелочам рождает совершенство,
а вот совершенство уже не мелочь.
Микеланджело Буонарроти
C 2012 года администраторам веб-ресурсов стала доступна новая технология HTTP Strict Transport Security (HSTS) — механизм, активирующий форсированное защищённое соединение по HTTPS. Данная политика безопасности позволяет сразу же устанавливать безопасное соединение, вместо использования HTTP. Механизм использует особый заголовок HTTP Strict-Transport-Security, для переключения пользователя, зашедшего по HTTP, на HTTPS-сервер [1].
HSTS направлен на закрытие следующих уязвимостей к атакам:
Включается данная технология проще простого, необходимо возвращать пользователю HTTP-заголовок «Strict-Transport-Security» в тот момент, когда он заходит на сайт по HTTPS:
expireTime
Время в секундах, на которое браузер должен запомнить, что данный сайт должен посещаться исключительно по HTTPS. includeSubdomains (опционально)
Если указать этот необязательный параметр, правила так же применятся ко всем поддоменам.
Механизм HTTP Strict Transport Security позволяет веб-сайту проинформировать браузер, что тот не должен использовать HTTP и, вместо этого, автоматически со своей стороны преобразовывать все HTTP-запросы в HTTPS.
Например, вы подключаетесь к открытой точке доступа Wi-Fi в публичном месте и открываете ДБО своего любимого банка, чтобы проверить баланс и совершить пару платежей. К несчастью, используемая вами точка доступа на самом-то деле — ноутбук злоумышленника, перехватывающего ваши HTTP-запросы и перенаправляющего вас вместо оригинального сайта банка на страничку-клон. Ваши данные попадают прямо ему в руки.
HSTS решает данную проблему. Если вы хоть раз успешно подключились к веб-сайту банка по HTTPS, использующему «Strict Transport Security», браузер автоматически начнет использовать HTTS для всех запросов. Это предотвратит возможность атак «man-in-the-middle» вышеописанного типа.
Когда истечет указанный в заголовке «Strict-Transport-Security» таймаут, следующая попытка загрузить сайт по HTTP произойдет в обычном режиме и автоматическое перенаправление на HTTPS не осуществится.
Всякий раз при получении заголовка «Strict-Transport-Security», браузер обновляет таймаут, т.е. сайты имеют возможность обновлять данную информацию и не допустить истечения таймаута (или наоборот, по каким-либо причинам его уменьшить).
Имейте ввиду, что директива «max-age» представлена в секундах. 31536000 секунд (12 месяцев) в примерах ниже м.б. изменены в зависимости от того, как долго администратор веб-сервера предполагает использовать сайт исключительно по HTTPS. Рекомендовано устанавливать значение «max-age» довольно большим вроде 31536000 (12 мес.) или 63072000 (24 мес.). [3]
а вот совершенство уже не мелочь.
Микеланджело Буонарроти
C 2012 года администраторам веб-ресурсов стала доступна новая технология HTTP Strict Transport Security (HSTS) — механизм, активирующий форсированное защищённое соединение по HTTPS. Данная политика безопасности позволяет сразу же устанавливать безопасное соединение, вместо использования HTTP. Механизм использует особый заголовок HTTP Strict-Transport-Security, для переключения пользователя, зашедшего по HTTP, на HTTPS-сервер [1].
HSTS направлен на закрытие следующих уязвимостей к атакам:
Пользователь помещает в закладки или набирает в адресной строке http://example.com/ и становится жертвой атаки «man-in-the-middle» | HSTS автоматически преобразует HTTP-запросы в HTTPS для целевого домена |
Веб-приложение, предполагаемое к использованию строго по HTTPS, по небрежности содержит HTTP-ссылки или отдает контент по HTTP | HSTS автоматически преобразует HTTP-запросы в HTTPS для целевого домена |
Атакующий «man-in-the-middle» пытается перехватить трафик жертвы используя поддельный сертификат в надежде, что пользователь не обратит внимания на сообщение о невалидном сертификате | HSTS не даст пользователю пройти дальше сообщения о проблемах с сертификатом |
Strict-Transport-Security: max-age=expireTime [; includeSubdomains]
expireTime
Время в секундах, на которое браузер должен запомнить, что данный сайт должен посещаться исключительно по HTTPS. includeSubdomains (опционально)
Если указать этот необязательный параметр, правила так же применятся ко всем поддоменам.
Что это дает
В случае, если веб-сайт принимает соединения по HTTP и перенаправляет их на HTTPS, пользователь вполне может обратиться к незашифрованной версии сайта до перенаправления если, к примеру, он наберет в адресной строке http://example.com/ или, еще проще, example.com. Это открывает потенциальную возможность проведения атаки «man-in-the-middle», в которой HTTP-перенаправление вместо оригинальной зашифрованной страницы отправит пользователя прямиком на сайт злоумышленника.Механизм HTTP Strict Transport Security позволяет веб-сайту проинформировать браузер, что тот не должен использовать HTTP и, вместо этого, автоматически со своей стороны преобразовывать все HTTP-запросы в HTTPS.
Например, вы подключаетесь к открытой точке доступа Wi-Fi в публичном месте и открываете ДБО своего любимого банка, чтобы проверить баланс и совершить пару платежей. К несчастью, используемая вами точка доступа на самом-то деле — ноутбук злоумышленника, перехватывающего ваши HTTP-запросы и перенаправляющего вас вместо оригинального сайта банка на страничку-клон. Ваши данные попадают прямо ему в руки.
HSTS решает данную проблему. Если вы хоть раз успешно подключились к веб-сайту банка по HTTPS, использующему «Strict Transport Security», браузер автоматически начнет использовать HTTS для всех запросов. Это предотвратит возможность атак «man-in-the-middle» вышеописанного типа.
Как поступает браузер
Первый раз когда сайт посещается по HTTPS и возвращает заголовок «Strict Transport Security», браузер запоминает указанную информацию и все дальнейшие попытки доступа к сайту по HTTP будут автоматически преобразовываться в HTTPS.Когда истечет указанный в заголовке «Strict-Transport-Security» таймаут, следующая попытка загрузить сайт по HTTP произойдет в обычном режиме и автоматическое перенаправление на HTTPS не осуществится.
Всякий раз при получении заголовка «Strict-Transport-Security», браузер обновляет таймаут, т.е. сайты имеют возможность обновлять данную информацию и не допустить истечения таймаута (или наоборот, по каким-либо причинам его уменьшить).
Кстати: заголовок «Strict-Transport-Security» игнорируется браузером в случае подключения по HTTP, так как атакующий может перехватить HTTP-соединение и подменить заголовок. Браузер поймет, что сайт HTTPS-совместим и должным образом обработает заголовок «Strict-Transport-Security» в том случае, если доступ к сайту происходит по HTTPS без ошибок с сертификатами.
Поддержка браузерами
- Chromium и Google Chrome с версий 4.0.211.0
- Firefox с версии 4 [2]; с Firefox 17, Mozilla внедрила список веб-сайтов, поддерживающих HSTS.
- Opera с версии 12
- Safari из комплекта OS X Mavericks
Детали реализации
Заголовки «Strict-Transport-Security» должны передаваться только по HTTPS. Клиенты не должны обрабатывать HSTS заголовки, присланные, не в HTTPS-ответах или по HTTPS с невалидными, неверно настроенными сертификатами. Следующие отрывки конфигурации должны находиться внутри контекста SSL и примеры кода предполагаются исключительно в контексте HTTPS ответов.Имейте ввиду, что директива «max-age» представлена в секундах. 31536000 секунд (12 месяцев) в примерах ниже м.б. изменены в зависимости от того, как долго администратор веб-сервера предполагает использовать сайт исключительно по HTTPS. Рекомендовано устанавливать значение «max-age» довольно большим вроде 31536000 (12 мес.) или 63072000 (24 мес.). [3]
Реализация в Apache
# подгружаем модуль (на примере RHEL/CentOS) LoadModule headers_module modules/mod_headers.so <VirtualHost 10.0.0.1:443> # Use HTTP Strict Transport Security to force client to use secure connections only Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains" </VirtualHost>
Реализация в Nginx
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains";
Предопределенные HSTS сайты
Существует промежуток в котором пользователь со свежеустановленным браузером и сборошенными настройками оказывается уязвим. По этой причине Chrome и Firefox поддерживают список «предопреденных» HSTS ресурсов. Следующие домены настроены использовать HSTS «из коробки»:- Paypal
- Torproject
- passport.yandex.ru
Для самостоятельного изучения:
- ru.wikipedia.org: HSTS
- developer.mozilla.org: HTTP Strict Transport Security
- en.wikipedia.org: HTTP Strict Transport Security
- dev.chromium.org: HTTP Strict Transport Security
- www.owasp.org: Top 10 2010-A9-Insufficient Transport Layer Protection
- security.stackexchange.com: How can a web application protect IE users when this browser doesn't support HSTS?
- habrahabr.ru: Все на https, безопасно и дешево
- habrahabr.ru: На пути к созданию безопасного веб-ресурса. Часть 1 — серверное ПО