Что такое HPKP?

HPKP - это устаревший заголовок ответа веб-безопасности, аббревиатура расшифровывается как HTTP Public Key Pins. Он был предназначен для предотвращения того, чтобы скомпрометированный или мошеннический центр сертификации выпустил общедоступный, но контролируемый хакерами HTTPS-сертификат для веб-сайта. В этом случае хакеры смогут расшифровать любой перехваченный HTTPS-трафик на зараженный веб-сайт.

Совет: Заголовки веб-ответов - это части метаданных, которые сервер включает в себя при ответе на запросы. Небольшая их часть называется заголовками безопасности, поскольку они включают и настраивают различные функции безопасности.

Инфраструктура сертификатов HTTPS

Инфраструктура сертификатов, на которой построен HTTPS, основана на сети доверия. Ряд компаний действуют как центры сертификации (CA), которые публикуют один или несколько корневых сертификатов. Набор корневых сертификатов включен во все устройства в хранилище доверенных сертификатов. Когда веб-сайт запрашивает собственный сертификат HTTPS от центра сертификации, он подписывается корневым сертификатом. Когда ваш компьютер видит сертификат HTTPS, он проверяет подпись. Если сертификат подписан корневым сертификатом, которому он доверяет, ваш компьютер также доверяет сертификату HTTPS.

Совет: ЦС также может иметь промежуточные сертификаты, подписанные корневым сертификатом. Эти промежуточные сертификаты также можно использовать для подписания сертификатов HTTPS для веб-сайтов.

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

Что сделала HPKP?

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

HPKP был разработан для защиты от такой возможности. Он позволяет веб-сайтам указывать эксклюзивный список сертификатов, которым можно доверять для веб-сайта, в процессе, называемом закреплением. Можно было закрепить корневой или промежуточный сертификат, что по сути позволило одному ЦС выдавать сертификаты для веб-сайта. Также можно было закрепить сертификат самого веб-сайта, не позволяя даже правильному центру сертификации выдать другой действительный сертификат.

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

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

Если сертификат HTTPS, предоставленный браузеру веб-сайтом, не соответствует одному из закрепленных сертификаты, тогда браузер должен отклонить его и предотвратить обход сертификата пользователем. сообщение об ошибке.

Структура ХПКП

Заголовок HPKP состоит из трех обязательных частей и двух необязательных. Заголовок должен иметь название «Public-Key-Pins», следующие два или более сертификата должны иметь хэш SHA256 в кодировке base64, закрепленный в формате «pin-sha256 =».”’. Последняя обязательная часть - это «максимальный возраст», который представляет собой счет в секундах, в течение которого браузер должен применять ограничения.

Совет: SHA256 - это алгоритм хеширования, используемый HPKP. Base64 - это набор символов из 64 символов: 0-9, a-z, A-Z и специальные символы «+» и «/». Знак «=» используется для дополнения двух последних символов, если это необходимо.

Необязательные параметры: includeSubDomains и report-uri. «IncludeSubDomains указывает браузеру применить защиту HPKP к любому поддомену текущего веб-сайта на время таймера« max-age ». Report-uri - это функция, которая позволяет указать веб-сайт, на который можно отправлять отчеты об ошибках, и предназначена для помощи в выявлении и решении проблем.

Есть второй вариант заголовка, озаглавленный «Public-Key-Pins-Report-Only». Все то же самое, однако, если обнаружена ошибка, не предпринимается никаких действий, кроме возврата сообщения об ошибке в браузер и в «report-uri», если он настроен. Вариант «Только отчет» был разработан для обеспечения возможности полномасштабного тестирования заголовка перед развертыванием, при котором ошибки не вызывают проблем у пользователей.

Проблемы с HPKP

HPKP не рекомендуется использовать по двум основным причинам. Было два способа, которыми заголовок мог вызвать серьезные проблемы для веб-сайта, использующего его, они назывались HPKP Suicide и Ransom PKP.

HPKP Suicide - это проблема, при которой законные владельцы веб-сайта теряют доступ ко всем закрепленным ключам. Это могло произойти в результате случайного удаления, взлома, вирусов, повреждения данных или по многим другим причинам. Из-за сложности правильной реализации HPKP и особенно его обновления во время ротации сертификатов относительно легко сделать ошибку конфигурации. Однако с HPKP, если вы ошибетесь, все недавние посетители вашего веб-сайта не смогут получить доступ к вашему веб-сайту на время таймера «max-age». Сайт smashingmagazine.com разместил статья подробно описал свой опыт решения именно этой проблемы, из-за которой большинство посетителей отключили сайт на четыре дня до того, как было развернуто исправление.

PKP с выкупом - это теоретическая атака, при которой хакер получает доступ к веб-серверу, затем крадет все доверенные сертификаты и ключи, а затем требует выкуп за их возвращение. При нормальной настройке вы могли бы просто сгенерировать новые ключи и сертификаты, а также восстановить и запустить веб-сайт менее чем за час. Однако при включенном HPKP эти ключи закреплены, и если вы не можете предоставить закрепленный сертификат пользователям, они не смогут получить доступ к веб-сайту в течение времени таймера «max-age». В зависимости от конфигурации и наличия резервных копий решить эту проблему может быть невозможно.

С обеими этими проблемами новые пользователи смогут получить доступ к веб-сайту в обычном режиме, как и раньше. никогда не видели старый заголовок HPKP, инструктирующий их браузер доверять только теперь отсутствующим сертификаты. Однако все недавние посетители, такие как постоянные клиенты и читатели, должны будут ждать в течение всего времени, установленного таймером «max-age».

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