Question:
Quelle est la différence entre l'utilisation de HSTS et une redirection 301?
Franzech Domâs
2016-07-06 03:12:36 UTC
view on stackexchange narkive permalink

Si j'ai déjà effectué une redirection 301 de toutes les pages internes HTTP vers HTTPS, pourquoi devrais-je également utiliser HSTS?

Six réponses:
Anders
2016-07-06 03:43:06 UTC
view on stackexchange narkive permalink

Regardons d'abord le scénario avec une redirection 301. La victime envoie une requête à http://example.com (comme indiqué dans les commentaires, cela peut être dû à SSLStrip ou parce que l'utilisateur vient de saisir example.com dans le champ La barre d'URL et les navigateurs utilisent par défaut HTTP). S'il n'y a pas d'attaque MitM, ils obtiennent une réponse 301 et sont redirigés vers https://example.com . Mais s'il y a un MitM, l'attaquant peut simplement choisir de ne pas envoyer le 301, mais plutôt de servir une copie (éventuellement modifiée) du site via HTTP.

Le point faible ici est qu'une connexion HTTP initiale (sans TLS) est fait, et l'attaquant peut modifier ce trafic. Cependant, si vous aviez utilisé HSTS, le navigateur saurait (en supposant que la victime a déjà visité le site) que la page devrait toujours être servie via HTTPS - aucune requête HTTP n'aurait jamais été envoyée et le navigateur enverrait simplement une demande à https://example.com . L'attaquant ne peut pas MitM la connexion TLS, donc l'attaque est empêchée.

(Le fait que les navigateurs mettent 301 réponses en cache rend cela un peu plus compliqué dans la pratique. Pour plus d'informations à ce sujet, voir bonsaiviking's great répondez ou à cette question. En bref, le 301 mis en cache peut aider un peu, mais pas tout ce que fait HSTS.)

Il serait intéressant de mentionner que `sslstrip` aide à exploiter exactement ce type d'attaques.
Les navigateurs populaires (au moins [Firefox] (https://blog.mozilla.org/security/2012/11/01/preloading-hsts/) et Chrome) préchargent les listes d'hôtes HSTS depuis au moins 2012, donc doiventvisiter la page en premier ne devrait être nécessaire que sur les nouveaux sites (et celui qui bloque toute indexation).
@l0b0 Vous n'êtes préchargé que si vous (a) définissez l'indicateur de préchargement, et (b) postulez.Une minorité de sites HSTS sont préchargés, donc pour la plupart des sites, vous devez le visiter.
Ce qui distingue le plus le 301 du HSTS est précisément le préchargement.Avec lui, il n'y a pas besoin d'une première connexion non sécurisée.Sans cela, les deux sont également vulnérables à sslstrip (HSTS a besoin d'un sslstrip plus "personnalisé", mais c'est néanmoins possible).La suppression du cache peut également être un facteur (peut-être que 301 est oublié mais HSTS ne l'est pas?).
@ValmikyArquissandas Je ne suis pas d'accord.La majorité des sites HSTS n'utilisent pas de préchargement, et ils obtiennent de toute façon un avantage significatif.Contrairement aux publications HSTS, un 301 n'est pas garanti d'être mis en cache pendant une période prolongée, il ne couvre qu'une page spécifique et non un domaine complet, et il est perdu si l'utilisateur purge le cache.
Pour reformuler @SandeepY:, l'attaque MitM la plus simple qui puisse être effectuée est de prétendre que le site Web ne prend pas en charge HTTPS et de garder la session non chiffrée sur
@Anders: vous avez évidemment raison, et ma réponse est fausse.Je ne sais pas comment j'ai oublié que 301 agit sur une seule page, et non sur le domaine - j'ai dû les mélanger.
Le préchargement est une opération primitive.Vous devez précharger pendant un an ou plus, et "être conscient que l'inclusion dans la liste de préchargement ne peut pas être facilement annulée", selon l'outil d'enregistrement.Par conséquent, s'il y a TOUTE chance d'une erreur, il est prudent de NE PAS précharger, au moins pendant un certain temps.Pendant ce temps, votre site Web est largement ouvert aux attaques MiTM à chaque première demande de chaque visiteur (pour trouver l'en-tête HSTS).Le problème est que la redirection déclenche un nouvel accès complet.Puisqu'il n'y a pas d'indicateur de zone DNS pour dire que https est pris en charge, il n'y a pas de bonne solution.HSTS échoue.
@DavidSpector Vous vous trompez, comme cela vous a été signalé dans votre réponse (incorrecte) à cette question et dans votre autre question.
bonsaiviking
2016-07-06 05:05:30 UTC
view on stackexchange narkive permalink

HTTP Strict Transport Security (HSTS) est conçu pour la sécurité. HTTP 301 déplacé de manière permanente est utilisé pour la redirection d'URL.

La redirection 301 est un élément important du déploiement d'un site Web HTTPS. Dans le cadre du protocole HTTP, il est pris en charge par plus de navigateurs que HSTS. Il sert de moyen principal pour mettre à niveau une connexion en texte brut vers HTTPS, mettre à jour les index de recherche et éviter la pourriture des liens.

Dans de nombreux cas, ces deux méthodes ont la même faiblesse: la requête initiale lorsque l'utilisateur tape "example.com" dans son navigateur, il est envoyé en clair. Si cette demande initiale est faite sur un réseau hostile avec un homme du milieu actif (MITM), la réponse peut être interceptée et la connexion ne sera pas mise à niveau vers une connexion sécurisée.

Cependant, Il existe de nombreuses raisons pour lesquelles HSTS est important et une grande amélioration de la sécurité par rapport à une redirection 301 standard:

  • HSTS couvre l'ensemble du domaine. Une redirection 301 ne couvre qu'un URI spécifique chemin. Si un utilisateur est redirigé vers example.com/ , une demande ultérieure à example.com/somepage utilisera toujours HTTP au départ, et devra être redirigée. Un site utilisant HSTS ne nécessite qu'une seule demande pour couvrir l'intégralité du site.
  • HSTS fonctionne même avec une connexion HTTPS initiale. Une redirection 301 mappe uniquement un URI en texte brut à un HTTPS, donc visiter le HTTPS ne confère directement aucune protection aux visites ultérieures.
  • HSTS utilise un cache distinct avec un délai d'expiration distinct. Le cache 301 est souvent lié au cache de requêtes du navigateur, conçu pour les performances. Si vous ne visitez pas une page pendant un certain temps, elle sera probablement effacée du cache pour favoriser les sites les plus fréquemment visités. Il peut même y avoir un âge maximum pour ce cache qui est de quelques semaines ou mois. Un correctif courant pour «le site ne fonctionne pas» est de dire à l'utilisateur «effacez votre cache». Tous ces éléments exposeraient à nouveau l'utilisateur à la menace MITM. Les délais d'expiration HSTS sont généralement de l'ordre de plusieurs mois à plusieurs années, et le cache est généralement séparé, il ne peut donc pas être effacé facilement ou accidentellement.
  • HSTS peut être préchargé dans un navigateur par le fabricant. Google le fait avec son navigateur Chrome en fonction des en-têtes découverts lors de l'exploration Web et soumis directement à leur programme. Pour les sites préchargés, le navigateur n'aura jamais besoin de visiter en texte clair en premier lieu; il peut toujours être supposé être uniquement HTTPS.
Un "cache séparé" qui doit encore être purgé lorsque l'utilisateur demande l'anonymat, donc toujours une solution à moitié sauvegardée
CBHacking
2016-07-06 09:29:10 UTC
view on stackexchange narkive permalink

Tout d'abord, certains anciens navigateurs ne prennent pas en charge HSTS, vous devez donc toujours rediriger HTTP vers HTTPS, définir l'indicateur secure sur tous les cookies, etc. Maintenant, cela dit. .

En plus des bonnes raisons énumérées ci-dessus, puisque vaincre les attaques de type SSLStrip est l'un des principaux objectifs de HSTS, il existe une autre attaque contre laquelle HSTS protège, mais pas les simples redirections.

Disons qu'un site est entièrement visité sur HTTPS. L'utilisateur est très prudent et ne demande ce site que via HTTPS. Aucune redirection nécessaire. Il n'y a pas de HSTS, mais il n'y a pas non plus de liens vers le site via HTTP non sécurisé, donc tout le trafic avec le site est crypté.

Cependant, supposons que le site présente une vulnérabilité de sécurité où il reflète un cookie spécifique (si présent) dans la page sans échapper correctement (XSS à base de cookies, rare mais à peine inouï). L'attaquant ne peut pas réellement lire (et encore moins modifier) ​​le trafic HTTPS, mais il souhaite vraiment accéder à la session de l'utilisateur sur ce site HTTPS. Ainsi, ils attendent que l'utilisateur visite un autre site via HTTP, et modifient la réponse de ce site pour inclure une requête invisible (peut-être un script src) vers http: // site sécurisé. com / (votre site HTTPS uniquement, mais via HTTP à la place). Que se passe-t-il ensuite:

  • Si le site a une politique HSTS active dans le navigateur, le navigateur réécrit automatiquement la demande comme https://securesite.com/ et l'attaquant ne peut lire ou modifier aucun trafic.
  • Si l'attaquant ne falsifie pas mais que le site n'a pas de HSTS, alors la requête est envoyée, obtient un 301 à https: / /securesite.com/ , et la requête est à nouveau envoyée via HTTPS.
    • Cependant, tous les cookies de securesite.com mais sans l'indicateur secure seront inclus avec cette demande initiale non sécurisée. L'attaquant peut les lire même simplement via une écoute passive à ce stade. C'est mauvais (et c'est une raison pour laquelle les cookies sensibles doivent toujours avoir l'indicateur secure même si le site ne devrait jamais être accédé via une connexion non sécurisée).
  • Si tous les cookies sont sécurisés , cela rend cette attaque inutile. L'attaquant devra à nouveau trafiquer. Ils peuvent falsifier ou modifier la réponse à la demande non sécurisée. Dans ce cas particulier, l'attaquant ajouterait un en-tête Set-Cookie à la réponse, plaçant un cookie dans le navigateur de l'utilisateur qui sera envoyé lors de futures requêtes à securesite.com, via HTTP ou HTTPS.

Avec l'hypothèse d'un vecteur XSS basé sur les cookies (ou toute autre chose où une attaque de plantation de cookies peut nuire), l'attaquant a réussi à attaquer un site avec lequel l'utilisateur a été très prudent pour accéder uniquement via HTTPS , simplement parce qu'il n'utilisait pas HSTS et avait une vulnérabilité qui serait impossible à exploiter sans une connexion non sécurisée.

Concernant les anciens navigateurs.Il est controversé si un * site * a ou n'a pas besoin d'un 301. Je suppose que c'est plutôt en fin de compte * les utilisateurs * qui sont responsables de taper le préfixe `https:` s'ils insistent pour utiliser un navigateur non pris en charge.C'est une décision commerciale si vous voulez sacrifier la sécurité et le confort de cette base d'utilisateurs.
Attendez, comment et où est-ce controversé?** Si vous utilisez HSTS, vous devez * absolument * inclure également la redirection 3xx! ** Vous ne pouvez même pas envoyer un en-tête HSTS via HTTP (au moins, aucun client conforme ne le respectera, pour de bonnes raisons), nipouvez-vous précharger HSTS si vous répondez via HTTP avec autre chose qu'une redirection.Partout où toute cette question est même légèrement pertinente, l'utilisation de la redirection est obligatoire.
La redirection n'est pas vraiment nécessaire pour les nouveaux navigateurs, mais recommandée pour la simplicité et pour les navigateurs qui ne prennent pas en charge HSTS.Tout ce qui est nécessaire pour activer HSTS est une seule ressource chargée via HTTPS qui inclut l'en-tête.Cela peut être aussi simple qu'une référence URL absolue (par exemple `` '').
@SilverlightFox: Cela entraînera toujours le chargement de la page racine elle-même via HTTP lors de cette demande initiale, ce qui peut révéler un contenu utilisateur et entraîner une mauvaise expérience utilisateur (ce qui peut faire penser à l'utilisateur que le site fonctionne entièrement via HTTP).Cela rendra également votre site inéligible pour la liste de préchargement HSTS (exigence n ° 2 sur https://hstspreload.appspot.com/)
SilverlightFox
2016-07-06 21:10:52 UTC
view on stackexchange narkive permalink

La chose essentielle à noter est que la politique de même origine pour les cookies est plus laxiste que la politique de même origine ailleurs. Autrement dit, il n'y a pas un seul canal sécurisé pour les cookies, ils ont la même origine:

  Client ---- Simple HTTP ---- > ServerClient -------- -HTTPS ---- Serveur >  

Bien sûr, le drapeau sécurisé peut être défini afin qu'une valeur de cookie puisse être définie pour ne transférer que via HTTPS.

par exemple p>

Set-Cookie: foo = bar; secure

  Client --> HTTP (pas de cookies) --> ServerClient --> HTTPS (Cookie: foo = bar) --> Server  

Cependant, il n'y a aucun moyen pour le serveur de savoir si un cookie a été défini avec le drapeau sécurisé.

par exemple sur HTTP simple

Set-Cookie: foo = bar

  Client --> HTTPS (Cookie: foo = bar) --> Server 

Le serveur sera dans cette situation:

Fry

Donc, bien que les cookies définis par le serveur sur HTTPS ne sont pas détectables, un MITM peut injecter ses propres valeurs dans une session «sécurisée». Ceci est vrai même si vous n'avez pas de service HTTP simple:

  Client ---- HTTP ordinaire ---- > Aucun serviceClient --------- HTTPS ---- Serveur >  

... car un MITM peut toujours générer une simple requête HTTP vers votre domaine et injecter le cookie:

  Client ---- Plain HTTP ---- > MITM --> Pas de serviceClient --------- HTTPS ------------- Serveur >  

Cela peut entraîner des attaques si votre site présente des vulnérabilités qui ne pourraient autrement pas être exploitées:

Aussi comme ci-dessus, les attaques de style ssltrip peuvent être effectuées sans HSTS. sslstrip repose dans une certaine mesure sur le fait que l'utilisateur ne remarque pas qu'il n'y a pas de HTTPS.

Voir également cette réponse.

dhaupin
2016-07-06 20:04:02 UTC
view on stackexchange narkive permalink

HSTS utilise une redirection 307 côté client en bac à sable, donc il n'atteint même pas le serveur tant qu'il n'est pas en mode https explicite. Une redirection 301, d'autre part, est côté serveur, prend des ressources, du temps à compléter, etc. En outre, une 301 empile votre nombre de redirection [chaînée], qui est généralement attribuée à la dilution du référencement.

Donc HSTS est généralement le meilleur choix en raison de sa nature côté client + bac à sable. Mais, il y a un «danger» à cela avec un TTL très long sur le cache. Lorsqu'un SSL expire ou si vous souhaitez revenir en arrière, les utilisateurs du mode http seront verrouillés. Cela est dû au fait que le TTL HSTS mis en cache est / ne recherchera que https, mais les navigateurs ne verront aucun site avec un certificat expiré. Alors ne le laissez jamais expirer ou changer de mode sans régler le temps de cache HSTS sur 0 dans les semaines (ou mois) précédant le changement :) Vous n'avez pas à vous en soucier avec 301 car ce n'est pas le navigateur qui prend la décision de rediriger ou non - les utilisateurs ne seront pas verrouillés si vous effectuez le changement côté serveur.

Les navigateurs mettent en cache 301 réponses, vous pouvez donc rechercher les utilisateurs avec celles-ci si vous désactivez HTTPS:
Il est vrai que le HSTS lui-même est sécurisé.Mais si l'utilisateur accède avec http et que le site n'est pas préchargé, il n'y a aucun moyen de découvrir l'en-tête HSTS sans redirection de http vers https.En d'autres termes, une fois qu'une requête http est effectuée, MiTM est possible.L'astuce consiste à éviter de faire TOUTE requête http, sauf si le lien dans un ancien, le site Web est pour un appareil électroménager, etc. Une solution consiste à ajouter une nouvelle fonctionnalité aux enregistrements de la zone DNS pour dire, "ce domaine prend en charge https".
@DavidSpector Pour la énième fois, "et le site n'est pas préchargé" Alors préchargez alors.
@DavidSpector HSTS est un mécanisme d'application de sauvegarde côté client.Ce n'est pas un remplacement pour les mécanismes au niveau du serveur ... c'est un ajout.Si votre serveur / application / site est configuré pour appliquer le mode `https` toujours et partout, il ne servira jamais une requête` http` pour commencer.Vous pouvez le faire directement au niveau nginx / apache.Un visiteur ne pourrait jamais accéder à une page `http`, une session non sécurisée ne serait jamais générée, des cookies non sécurisés ne seraient pas utilisés, etc.il, par-dire.
@JosephSible-ReinstateMonica il est utile d'ajouter cet indicateur à coup sûr, mais la liste de préchargement dans les navigateurs est toujours utilisée.Donc, si vous avez l'indicateur, mais que votre domaine ne figure pas sur cette liste, il ne sera pas préchargé.Vous pouvez soumettre votre domaine ici: https://hstspreload.org/.Je ne sais pas si ni combien de temps il faut pour être ajouté :)
@dhaupin Non, HSTS est le mécanisme principal.Rien de ce que fait le serveur ne peut réellement appliquer HTTPS, car sslstrip peut simplement annuler tout ce qu'il fait à moins que le client ne sache utiliser HTTPS depuis le début (ce qui est exactement le but de HSTS).Et rien dans mon commentaire ne suggérait que l'en-tête était suffisant;Je voulais aussi l'ajouter à la liste.
@JosephSible-ReinstateMonica https: // github.com / LeonardoNve / sslstrip2 - apparemment aucun `https` n'est sûr, alors quel est l'intérêt de l'utiliser;) Je plaisante.Les cas d'utilisation sont limités et 99,9999% des utilisateurs bénéficieront des deux modes.
@dhaupin [Cet outil ne fonctionne pas réellement] (https://security.stackexchange.com/a/91096/127145).
@JosephSible-ReinstateMonica Haha je t'entends.Un tas d'autres non plus, mais le fait est que HSTS sera falsifié et injecté à un moment donné.Je suis tout à fait à ce sujet, mais HSTS est un proto faible pris en charge par les modes d'application (IMO), les en-têtes peuvent être ignorés / supprimés, il y a maintenant un milliard de vecteurs en plus.Je suis en fait d'accord avec les threads ci-dessus pour un indicateur de zone, mais encore une fois, cela pourrait également être ignoré / intercepté / supprimé.Bonne année homme, nous pourrions continuer pendant des siècles à ce sujet.
Le but du préchargement est que vous devenez immunisé contre toutes ces altérations en faisant cela.
@JosephSible-ReinstateMonica ...... vous avez oublié de mentionner, toutes ces altérations du trafic * navigateur *.Mais cela nous ramène à mon commentaire sur la façon dont vous devez être accepté dans la liste de préchargement.Pensez-vous qu'ils vont ajouter chaque petit site sur les filets?Vous devez être assez gros pour entrer dans cette liste, sinon ils distribuent un fichier texte de 5 + Go rempli de BS.J'ai essayé à quelques reprises de figurer sur cette liste pour certains domaines assez importants ... des années plus tard, toujours pas là.`preload` n'affecte pas comme 99,9999% des sites.Vous évoquez cependant de bons points.
@dhaupin Je soupçonne alors que quelque chose n'allait pas avec votre configuration TLS.Ils laisseront entrer chaque petit site.
Laissez-nous [continuer cette discussion dans le chat] (https://chat.stackexchange.com/rooms/102751/discussion-between-dhaupin-and-joseph-sible-reinstate-monica).
David Spector
2019-12-28 01:36:28 UTC
view on stackexchange narkive permalink

Puisque HSTS nécessite toujours une redirection la première fois que chaque utilisateur visite votre site Web (à moins que nous ne soyons si sûrs de l'absence d'erreurs qu'un préchargement irréversible via l'enregistrement peut être osé), c'est une question piège. Il n'y a essentiellement aucune différence entre l'utilisation de l'en-tête HSTS et l'utilisation d'un en-tête de redirection.

La seule bonne solution à laquelle je puisse penser est d'ajouter un type d'enregistrement ou un indicateur à chaque enregistrement de zone DNS pour spécifier "ce domaine prend en charge HTTPS ". Ensuite, il n'y a pas besoin de HSTS ou de redirection. Le navigateur sait déjà que https est pris en charge (à partir de sa recherche DNS), il peut donc (à moins d'être annulé par l'utilisateur) réécrire le http de l'utilisateur en https avant même d'envoyer la première requête au serveur distant.

Ceci est une erreur.Une redirection 301 affecte uniquement l'URL spécifique sur laquelle vous l'avez frappée, mais HSTS affecte l'ensemble du domaine.Et vous rendez également le son de préchargement bien pire qu'il ne l'est en réalité.
Ce n'est pas une "question piège".Vous n'avez pas correctement représenté ce qui se passe dans le HSTS.De plus, la question vient du côté serveur.Vous proposez un protocole entièrement nouveau.
HTTPS Everywhere (https://www.eff.org/https-everywhere) fait ce que vous voulez côté client.


Ce Q&R a été automatiquement traduit de la langue anglaise.Le contenu original est disponible sur stackexchange, que nous remercions pour la licence cc by-sa 3.0 sous laquelle il est distribué.
Loading...