HTTP Public Key Pinning ( HPKP ) es un mecanismo de seguridad de Internet ahora obsoleto que se entrega a través de un encabezado HTTP que permite que los sitios web HTTPS resistan la suplantación de identidad por parte de atacantes que utilizan certificados digitales mal emitidos o fraudulentos . [1] Un servidor lo utiliza para entregar al cliente (por ejemplo, un navegador web ) un conjunto de hashes de claves públicas que deben aparecer en la cadena de certificados de conexiones futuras al mismo nombre de dominio .
Por ejemplo, los atacantes pueden comprometer una autoridad de certificación y luego emitir certificados incorrectamente para un origen web . Para combatir este riesgo, el servidor web HTTPS proporciona una lista de hashes de claves públicas “ancladas” válidas para un tiempo determinado; en conexiones posteriores, durante ese tiempo de validez, los clientes esperan que el servidor utilice una o más de esas claves públicas en su cadena de certificados. Si no es así, se muestra un mensaje de error, que el usuario no puede (fácilmente) pasar por alto.
La técnica no fija certificados, sino hashes de clave pública . Esto significa que se puede usar el par de claves para obtener un certificado de cualquier autoridad de certificación, cuando se tiene acceso a la clave privada. Además, el usuario puede anclar claves públicas de certificados raíz o intermedios (creados por las autoridades de certificación), restringiendo el sitio a los certificados emitidos por dicha autoridad de certificación.
Debido a la complejidad del mecanismo de HPKP y la posibilidad de un mal uso accidental, los navegadores dejaron de utilizar y eliminaron el soporte de HPKP en favor de la transparencia del certificado y su Expect-CT
encabezado. [2] [3] La autorización de la autoridad de certificación también se puede utilizar para restringir qué autoridades de certificación pueden emitir certificados para un dominio en particular, reduciendo así la posibilidad de errores de emisión de certificados. [4]
Mecanismo
El servidor comunica la política HPKP al agente de usuario a través de un campo de encabezado de respuesta HTTP denominado Public-Key-Pins
(o Public-Key-Pins-Report-Only
solo para fines de informes).
La política HPKP especifica hashes de la información de clave pública del sujeto de uno de los certificados en la cadena de certificados de clave pública X.509 auténtica del sitio web (y al menos una clave de respaldo) en las pin-sha256
directivas, y un período de tiempo durante el cual el agente de usuario debe hacer cumplir fijación de clave pública en la max-age
directiva, directiva opcional includeSubDomains
para incluir todos los subdominios (del dominio que envió el encabezado) en la política de fijación y report-uri
directiva opcional con URL donde enviar informes de infracción de fijación. Al menos una de las claves públicas de los certificados en la cadena de certificados debe coincidir con una clave pública fijada para que el agente de usuario considere válida la cadena.
En el momento de la publicación, RFC 7469 solo permitía el algoritmo hash SHA-256 . (El Apéndice A de RFC 7469 menciona algunas herramientas y argumentos requeridos que se pueden usar para producir hashes para las políticas HPKP).
Un operador de sitio web puede optar por anclar la clave pública del certificado raíz de una autoridad de certificación raíz en particular, permitiendo que solo esa autoridad de certificación (y todas las autoridades intermedias firmadas por su clave) emitan certificados válidos para el dominio del sitio web, y / o anclar el clave (s) de uno o más certificados emisores intermedios, o para anclar la clave pública de la entidad final.
Se debe anclar al menos una clave de respaldo, en caso de que sea necesario reemplazar la clave anclada actual. El HPKP no es válido sin esta clave de respaldo (una clave de respaldo se define como una clave pública que no está presente en la cadena de certificados actual). [5]
HPKP está estandarizado en RFC 7469. [1] Amplía la fijación de certificados estáticos , que codifica hash de clave pública de sitios web o servicios conocidos dentro de navegadores web y aplicaciones. [6]
La mayoría de los navegadores deshabilitan la fijación de cadenas de certificados con certificados raíz privados para habilitar varios escáneres de inspección de contenido corporativo [7] y herramientas de depuración web (como mitmproxy o Fiddler ). El estándar RFC 7469 recomienda deshabilitar los informes de violación de pines para certificados raíz "definidos por el usuario", donde es "aceptable" que el navegador deshabilite la validación de pines. [8]
Reportando
Si el agente de usuario realiza la validación de PIN y no encuentra una huella digital SPKI válida en la cadena de certificados servida, PUBLICARÁ un informe de violación con formato JSON al host especificado en la directiva report-uri que contiene detalles de la violación. Este URI se puede entregar a través de HTTP o HTTPS ; sin embargo, el agente de usuario no puede enviar informes de infracción de HPKP a un URI de HTTPS en el mismo dominio que el dominio para el que informa la infracción. Los anfitriones pueden usar HTTP para el report-uri
, usar un dominio alternativo o usar un servicio de informes. [9]
Algunos navegadores también admiten el Public-Key-Pins-Report-Only
, que solo activa este informe sin mostrar un error al usuario.
Crítica y declive
Durante su máxima adaptación, se informó que HPKP fue utilizado por 3500 de los 1 millón de sitios de Internet principales, una cifra que se redujo a 650 a fines de 2019. [4]
Las críticas y la preocupación giraban en torno a escenarios de errores humanos o maliciosos conocidos como HPKP Suicide and Ransom PKP. [10] En tales escenarios, el propietario de un sitio web tendría su capacidad para publicar nuevos contenidos en su dominio seriamente obstaculizada al perder el acceso a sus propias claves o al tener nuevas claves anunciadas por un atacante malintencionado.
Soporte y obsolescencia del navegador
Navegador | Versión agregada | Versión obsoleta | Versión eliminada | Notas |
---|---|---|---|---|
Google Chrome | ? [11] | 67 [12] | 72 [13] | |
Ópera | ? [11] | ? | 60 [11] | |
Firefox | 35 [11] | 72 [14] | 72 [14] | Se puede habilitar estableciendo el indicador security.cert_pinning.hpkp.enabled en true . [15] |
explorador de Internet | N / A [16] | N / A | N / A | |
Microsoft Edge | N / A [16] | N / A | N / A | |
Safari | N / A | N / A | N / A |
Ver también
- Compromiso de la autoridad de certificación
- Transparencia del certificado
- Seguridad de transporte estricta HTTP
- Lista de campos de encabezado HTTP
- Autorización de la autoridad de certificación de DNS
- Extensión de fijación de clave pública para HTTP (HPKP) en MDN Web Docs
Referencias
- ^ a b Evans, Chris; Palmer, Chris; Sleevi, Ryan (abril de 2015). Extensión de fijación de clave pública para HTTP . IETF . doi : 10.17487 / RFC7469 . ISSN 2070-1721 . RFC 7469 .
- ^ Leyden, John. "RIP HPKP: Google abandona la fijación de claves públicas" . El registro . Consultado el 18 de diciembre de 2018 .
- ^ Tung, Liam. "Google: Chrome se está alejando de la fijación de claves públicas, y este es el motivo" . ZDNet . Consultado el 18 de diciembre de 2018 .
- ^ a b "HPKP ya no existe" . Scott Helme. 2020-01-20 . Consultado el 30 de enero de 2020 .
- ^ "Acerca de la fijación de claves públicas" . noncombatant.org . Consultado el 7 de mayo de 2015 .
- ^ "Fijación de certificados y claves públicas - OWASP" . www.owasp.org . Consultado el 7 de mayo de 2015 .
- ^ "Preguntas frecuentes sobre seguridad: los proyectos de Chromium" . www.chromium.org . Consultado el 7 de julio de 2015 .
- ^ "RFC 7469 - Extensión de fijación de clave pública para HTTP" . tools.ietf.org . Consultado el 7 de julio de 2015 .
- ^ "Informe de infracción de HPKP" . Scott Helme.
- ^ "Usar funciones de seguridad para hacer cosas malas" . Scott Helme. 2016-08-15 . Consultado el 30 de enero de 2020 .
- ^ a b c d "Fijación de claves públicas HTTP (HPKP)" . Red de desarrolladores de Mozilla . Consultado el 27 de mayo de 2017 .
- ^ "Desactivaciones y eliminaciones en Chrome 67" . Desarrolladores de Google .
- ^ "Eliminar la fijación de claves públicas basadas en HTTP - Estado de la plataforma Chrome" . www.chromestatus.com . Consultado el 18 de noviembre de 2019 .
- ^ a b "La fijación de claves públicas HTTP ya no es compatible" . Compatibilidad con el sitio de Firefox . 14 de noviembre de 2019. Archivado desde el original el 29 de mayo de 2020 . Consultado el 19 de febrero de 2020 .
- ^ "mozilla-central: conjunto de cambios 501812: d791bfa31f08ec478b2ef6ca4f89b3a8849d723b" . hg.mozilla.org . Consultado el 18 de noviembre de 2019 .
- ^ a b "Se está considerando el estado de la extensión de fijación de clave pública para HTTP en Microsoft Edge" . Desarrollo de Microsoft Edge . Archivado desde el original el 20 de diciembre de 2016 . Consultado el 21 de septiembre de 2018 .