Identification des clients sur les sites sans mots de passe et cookies: application pour standard

image

Cher habrozhitel! Chers experts! Je prĂ©sente pour votre Ă©valuation un nouveau concept d'identification des utilisateurs sur les sites Web qui, je l'espĂšre, deviendra avec votre aide un standard Internet ouvert, amĂ©liorant un peu ce monde Internet. Il s'agit d'une version provisoire du protocole d'authentification sans mot de passe, conçue comme un article gratuit. Et si l'idĂ©e sous-jacente reçoit une Ă©valuation positive de votre part, cher lecteur, je continuerai Ă  la publier sur reddit.com et rfc-editor.org. Et j'espĂšre que je pourrai intĂ©resser les dĂ©veloppeurs des principaux navigateurs Ă  sa mise en Ɠuvre. Par consĂ©quent, j'attends de vous des critiques constructives.

Attention: beaucoup de texte.


La question est donc. Est-il possible d'identifier sans ambiguïté les visiteurs du site sans divulguer leurs données personnelles et le suivi entre les différents sites? Est-il possible, en résolvant un tel problÚme, d'abandonner complÚtement la forme d'autorisation la plus primitive par login / mot de passe et d'utiliser cookie / localStorage?

D'une part, les sites doivent reconnaĂźtre un client afin, par exemple, de «restaurer» leurs paramĂštres, panier de produits, publicitĂ©s, articles, etc. D'autre part, les visiteurs souhaitent rester aussi anonymes que possible, sans rĂ©vĂ©ler leurs donnĂ©es personnelles, et empĂȘcher les sites tiers de les suivre. Et ces derniers peuvent le faire en Ă©changeant entre eux les donnĂ©es collectĂ©es.

Cela ressemble à une tùche pour s'assurer que les loups sont pleins et que les moutons sont en sécurité. Est-ce réel?

Dans une certaine mesure, je pense - vraiment.

Table des matiĂšres


1 concept d'authentification sans mot de passe
1.1 Clés et jetons au lieu de connexions et mots de passe
1.2 Structure des jetons
1.3 En-tĂȘtes de protocole HTTP
1.4 Comment les clients identifient-ils les sites?
1.4.2 Comment savoir si un site prend en charge ce protocole?
1.5 Comment les clients autorisent-ils les sites?
1.6 Comment mettre en place une identification client fiable?
1.7 Autorisation sur le site vue par l'utilisateur
1.8 Comment une clé de site change-t-elle?
1.9 Comment l’autorisation interdomaines est-elle mise en Ɠuvre?
1.10 Comment implémenter l'authentification inter-domaines?
1.11 Mobilité du compte

2 Description technique du protocole
2.0 Algorithme de génération de clés de domaine
2.1 l'algorithme de calcul du jeton source
2.2 Algorithme de protection des jetons pendant le transfert
2.3 Procédure d'échange de sel entre le navigateur et le serveur
2.4 RĂšgles pour la formation du champ Contexte
2.5 RÚgles de définition des champs expéditeur et destinataire
2.6 Détails sur les tables de définition de contexte
2.7 Scénarios de protocole
2.8 Traitement des jetons sur le serveur
2.9 Authentification interdomaine

3 Recommandations de sécurité
3.1 Protection des informations clés contre les accÚs non autorisés
3.2 À propos des mots de passe en tant que clĂ©s de domaine
3.3 Risques de perdre / compromettre des clés et de les minimiser

4 Attaques contre le régime d'autorisation
4.1 Suivi des utilisateurs
4.2 Attaque XSS
4.3 Attaque CSRF
4.4 Suivi Ă  l'aide de l'authentification unique
4.5 Compromis clé pour l'authentification unique
4.6 Compromission de jetons pendant le transfert
4.7 Piratage d'un site Web et compromission de jetons

Conclusion


Quel est le problĂšme avec les mots de passe?
Oui, ce n’est pas le cas. Ils peuvent ĂȘtre perdus. Ils peuvent ĂȘtre volĂ©s. Il faut s'en souvenir. Quoi qu'il en soit, pourquoi suis-je obligĂ© de remplir une forme d'inscription et de trouver un autre mot de passe pour voir la mĂ©tĂ©o ou tĂ©lĂ©charger ce fichier? Enfin, les mots de passe sont lĂ©gĂšrement infĂ©rieurs Ă  beaucoup. Combien de sites vous aimez, autant de mots de passe. Et par consĂ©quent, beaucoup utilisent un seul mot de passe sur tous les sites. Quelqu'un utilise un algorithme dĂ©licat pour s'en souvenir. Ou un gestionnaire de mots de passe. Ou, bĂȘtement, un cahier. Ou prĂ©fĂšre l'authentification entre domaines: vous vous connectez une seule fois sur un seul site, et c'est tout! Oui, pas tous. C'est si le site le prend en charge.
Toutes ces approches présentent des inconvénients.
Utilisez un mot de passe sur diffĂ©rents sites - Moveton. Ce que deux personnes savent, le cochon le sait aussi. Tous les sites (mĂȘme grands et rĂ©putĂ©s) ne respectent pas honnĂȘtement les rĂšgles de sĂ©curitĂ© pour le stockage de vos mots de passe. Certains sites stockent les mots de passe sous forme ouverte, tandis que d'autres pensent que le stockage des hachages de mot de passe les protĂšge dĂ©jĂ  suffisamment. En consĂ©quence, des fuites de mots de passe et d'autres donnĂ©es personnelles des clients se produisent rĂ©guliĂšrement.
Avec le gestionnaire de mots de passe, c'est déjà mieux. Certes, personne ne vous garantit qu'il ne fusionne pas vos mots de passe quelque part. Et allez trouver un gestionnaire qui peut synchroniser vos comptes sur tous les appareils (netbook domestique, téléphone, ordinateur de travail). Je n'exclus pas que cela existe.
Mais en tout cas, l'idĂ©e elle-mĂȘme: inscrivez-vous d'abord sur notre site Web (en mĂȘme temps, envoyez un e-mail, mobile, donnez du sang pour analyse), puis inventez / mĂ©morisez votre nom d'utilisateur et votre mot de passe et soyez assez gentil pour vous en souvenir, mais gardez-les secrets - approche, je vous le dis, so-so. Et pas un seul gestionnaire de mots de passe ne le rĂ©soudra. Mais cela rĂ©sout le SSO .
C'est juste de la malchance: si vous perdez le mot de passe du site SSO et l'oubliez, ou s'il vous a Ă©tĂ© volĂ© ... Vous perdez l'accĂšs Ă  tous vos sites Ă  la fois ou vous le donnez volontairement Ă  quiconque et il n'est pas clair avec quelles intentions. Ne stockez pas tous les Ɠufs dans le mĂȘme panier!
Et ce n'est pas un fait que le site SSO est fiable. Ou ne stocke pas vos mots de passe en texte clair. Ou ne les fusionne pas du tout volontairement, et offre également à d'autres la possibilité de vous suivre entre les sites. Eh bien, vous obtenez le point.
Par consĂ©quent: login + mot de passe = evil. Et tout le mal dans le monde devrait ĂȘtre bu sĂ©rieusement et pendant longtemps. Et un cookie aussi. Avec ses crocodiles de session PHPSESSIONID, JSESSIONID et leurs analogues.

Et que faire?
Vous devez d'abord considérer des situations typiques, à partir desquelles il sera clair: pourquoi les sites veulent-ils se souvenir de leurs clients et est-ce vraiment nécessaire pour eux?
  1. Blog personnel "Vasya Pupkina", dans lequel, par exemple, les commentaires sont autorisés. L'inscription n'est nécessaire que pour se protéger des bots, procéder à des votes gratuits, compter les «likes» et autres «meow-meow» et attribuer une note aux commentateurs. C'est-à-dire Ici , la fonctionnalité de suivi est nécessaire exclusivement par le site , et seulement dans une faible mesure - par l'utilisateur (s'il apprécie sa note «commentateur» sur ce site).
  2. Sites de rĂ©seaux sociaux et autres locuteurs Internet (ICQ, skype - lĂ  aussi). L'inscription est nĂ©cessaire pour implĂ©menter le contenu nommĂ© (auteur), pour identifier les visiteurs les uns des autres. C'est-Ă -dire Ici , la fonctionnalitĂ© d'identification est plus largement nĂ©cessaire par les utilisateurs eux-mĂȘmes . Bien que les sites de rĂ©seaux sociaux soient les premiers dans la liste des "pĂ©cheurs", ils collectent les informations les plus complĂštes sur les visiteurs et se souviennent de vous sĂ©rieusement et longtemps. On ne sait donc pas encore qui a le plus besoin d'ĂȘtre identifiĂ©.
  3. Site d'entreprise avec contenu fermé. L'enregistrement ou l'autorisation ici est nécessaire principalement pour restreindre l'accÚs au contenu. Toutes sortes de: écoles en ligne, bibliothÚques, sites privés non publics, etc. Ici , la fonctionnalité d'autorisation est plus largement nécessaire par le site . En rÚgle générale, aucun formulaire d'inscription n'est ouvert. Les informations d'identification sont partagées via d'autres canaux.
  4. Une boutique en ligne et une autre plate-forme similaire vendant des articles, des services ou du contenu. J'inclurai également des sites d'annonces classées payantes / gratuites. L'inscription est principalement nécessaire pour stocker l'historique des commandes des clients, et pour qu'il puisse suivre leur statut actuel, stocker leurs préférences (favoris); afin de formuler des offres personnelles au client en fonction de l'historique d'achat et des préférences. Ici , la fonctionnalité d'identification est également nécessaire pour le client et le magasin . Mais plus, bien sûr, au magasin. Vapeur, vapeur et vapeur.
  5. Tous les comptes personnels des utilisateurs des services Internet: e-mail, services publics, Sberbank-online, mĂ©gaphone-online, bureaux de fournisseurs, CMS des hĂ©bergeurs, etc. Ici , l'utilisateur lui-mĂȘme est principalement intĂ©ressĂ© par une identification correcte et fiable . AprĂšs tout, il gĂšre des informations importantes pour lui-mĂȘme, ce qui dans certaines situations a des consĂ©quences juridiques et financiĂšres. Ça ne sent pas comme l'anonymat. Elle est nuisible ici.
  6. Routeurs, consoles de gestion, versions Web de la gestion de quelque chose sur votre réseau domestique ou d'entreprise.


Il est clair que dans différentes situations, il peut y avoir différents risques. Dans certains cas, une identification incorrecte, la perte de données d'authentification, voire le vol / falsification de celles-ci, n'entraßnera aucune conséquence significative pour le site ou pour l'utilisateur. Dans d'autres, ce sera juste désagréable (j'ai perdu du karma sur Habré - "c'est un désastre ...") ou conduira à des désagréments (je ne peux pas me laisser aller à Yula, voir mes annonces; j'ai profilé l'accÚs à mes projets sur github, - okay nouveau compte, projets fork). TroisiÚmement, elle peut entraßner des conséquences juridiques et financiÚres. Par conséquent, il faut supposer que le régime d'autorisation proposé n'est pas une «solution miracle» pour tous les cas, en particulier «nu». Lorsque des informations sensibles sont gérées, il convient d'utiliser d'autres méthodes d'identification et d'authentification ou leur combinaison (authentification à deux facteurs, cryptographie à clé asymétrique, 3D-secure, eToken, OTP-Token, etc.).

Oh bien. Quel est votre savoir traditionnel?

Qu'offre le nouveau protocole?
Du point de vue de l'utilisateur final:
  1. Le site doit se souvenir et reconnaĂźtre le visiteur sans aucune contribution de l'utilisateur; le site devrait vous reconnaĂźtre Ă  la fois au sein de la session et entre les diffĂ©rentes sessions. Pas de cookies, mots de passe ou inscriptions. Dans le mĂȘme temps, diffĂ©rents sites ne devraient pas ĂȘtre en mesure d' identifier de maniĂšre unique le mĂȘme visiteur, Ă©tant en mesure de suivre leur activitĂ© sur ces sites et sur d'autres. C'est-Ă -dire les sites ne devraient pas ĂȘtre en mesure de regrouper les informations pour leurs visiteurs.
  2. L'utilisateur doit pouvoir « oublier n'importe quel site » à tout moment; et le site oubliera l'utilisateur. Il devrait y avoir la possibilité d'accorder des droits au site pour se souvenir du client à l'initiative du client (sans popup obsessionnel). L'utilisateur doit pouvoir migrer en toute sécurité son identité virtuelle entre différents appareils et navigateurs (s'il en a besoin) afin d'avoir une seule autorisation sur ses sites favoris.


Je vois. Et quels bonus les développeurs de sites devraient-ils en retirer?
  1. Une procédure d'identification plus simple: il n'est pas nécessaire de créer pour la milliÚme fois la prochaine forme de connexion, déconnexion, enregistrement, modification et récupération de mot de passe. Il suffit d'activer le module de support de protocole pour votre framework préféré, implémenté sur la base du standard.
  2. Il n'est pas nĂ©cessaire qu'un concepteur dessine un formulaire de connexion et rĂ©flĂ©chisse Ă  l'endroit oĂč le cacher sur un petit Ă©cran mobile. Le protocole rend les formulaires inutiles. Eh bien, sauf que le formulaire d'inscription. OĂč est-il alors sans eux? HĂ©las.


Enfin:
  1. Le protocole d'authentification doit ĂȘtre unifiĂ© et standardisĂ©; VĂ©rifiĂ© par des experts en sĂ©curitĂ© ApprouvĂ© et recommandĂ© par les comitĂ©s de normalisation Web. En consĂ©quence, la possibilitĂ© de commettre des erreurs classiques de la part des webmasters lors du dĂ©veloppement de formulaires de connexion / dĂ©connexion standard, de la modification / rĂ©cupĂ©ration de mots de passe (transmission de mots de passe sous forme claire, utilisation incorrecte du hachage, stockage de mots de passe ou hachages «non salĂ©s» dans la base de donnĂ©es, dĂ©tournement de mots de passe utilisateur lorsque site de piratage).
  2. L'autorisation doit ĂȘtre fiable dans une certaine mesure (protĂ©gĂ©e contre la falsification, l'accĂšs non autorisĂ©, avec une authentification garantie); Ne crĂ©ez pas de nouvelles vulnĂ©rabilitĂ©s sur les pages Web et les navigateurs; si possible, rĂ©duisez les risques d'attaques rĂ©seau connues dĂšs le dĂ©part. Eh bien, ou du moins une rĂ©duction significative des risques d'une mise en Ɠuvre rĂ©ussie.


Sur la base de ces exigences, nous nous tournons vers le plus intéressant: la conception d'un nouveau protocole.


1 concept d'authentification sans mot de passe



1.1 Clés et jetons au lieu de connexions et mots de passe


Pour chaque domaine, y compris les enfants, le navigateur client génÚre aléatoirement une clé unique de 256 bits $ K $ . Cette clé n'est jamais transmise. Reste constant dans la session de l'utilisateur. Chaque nouvelle session crée une nouvelle clé.
Basé sur une clé $ K $ le navigateur génÚre un jeton 256 bits * à l'aide d'un algorithme spécial $ T $ pour identifier l'utilisateur avec un domaine spécifique. Jeton d'identification $ T $ l'utilisateur (ci-aprÚs simplement appelé le jeton) remplace les cookies de session comme PHPSESSIONID et JSESSIONID.
ClĂ© $ K $ peut ĂȘtre " corrigĂ© " par l'utilisateur. La fixation de la clĂ© permettra Ă  l'utilisateur de rester autorisĂ© sur le site pour une durĂ©e illimitĂ©e dans diffĂ©rentes sessions de navigateur et de retourner l'autorisation prĂ©cĂ©demment existante. Il s'agit d' un analogue de la fonction «se souvenir de moi» .
Lorsque la validation est annulée, le navigateur «oubliera» cette clé et recommencera à générer une clé aléatoire pour ce domaine pour chaque nouvelle session (à partir de la session actuelle), ce qui est analogue à la «sortie» de l'utilisateur du site. La sortie est instantanée, ne nécessitant pas de rechargement de page.
L'utilisateur peut créer une clé permanente pour le domaine . La clé permanente, ainsi que la clé fixe, permettra à l'utilisateur de retourner l'autorisation précédente. En fait, cette clé devient un remplacement pour la connexion login-mot de passe.
L'utilisateur a la possibilité de contrÎler quand le navigateur du domaine utilisera une clé constante et quand - aléatoire. Il s'agit d' un analogue de la fonction de connexion / déconnexion . Le concept est présenté dans les captures d'écran ci-dessous .
Les méthodes de génération de clés de domaine persistantes assurent la mobilité des comptes d'utilisateurs entre différents appareils. Le protocole définit les éléments suivants:
  • gĂ©nĂ©ration d'une clĂ© de domaine basĂ©e sur une clĂ© principale d'utilisateur
  • formation individuelle d'une clĂ© de domaine sur la base d'un capteur biologique de nombre alĂ©atoire
  • importation de clĂ©s existantes Ă  partir d'un fichier de clĂ©s Ă  partir d'un autre appareil


1.2 Structure des jetons


Le jeton est une structure de 256 bits, représentée sous la forme d'une chaßne hexadécimale:
84bc3da1b3e33a18e8d5e1bdd7a18d7a166d77ac1b46a1ec38aa35ab7e628ab5
piĂšce d'identificationpartie d'authentification

La partie d'identification du jeton (les 128 bits les plus élevés) est similaire à la connexion. Par cette séquence de bits, le serveur peut identifier de maniÚre unique l'utilisateur.
La partie d'authentification du jeton (les 128 bits inférieurs) est similaire au mot de passe. Cette séquence de bits aide le serveur à valider le jeton.
Les rÚgles de validation des jetons sont décrites ci-dessous .

1.3 En-tĂȘtes de protocole HTTP


En-tĂȘtes utilisĂ©s par le client:

CSI-Token : <Token> est utilisé pour envoyer un jeton au serveur
CSI-Token : <Token1>; Changed-To <Token2> est utilisé pour changer le jeton actuel:
  • lors de l'autorisation sur une clĂ© permanente,
  • lors de l'enregistrement d'une clĂ© permanente,
  • lors du changement de la clĂ© permanente.

CSI-Token : <Token> Permanent est utilisé lors de la fixation de la clé aléatoire actuelle par l'utilisateur.
CSI-Token : <Token> La déconnexion est utilisée pour mettre fin prématurément à la session en cours.

En-tĂȘtes utilisĂ©s par le serveur:
Support CSI: oui indique au client que le serveur prend en charge le protocole d'autorisation CSI.
CSI-Token-Action: le succÚs est utilisé pour informer le navigateur de l'acceptation d'un nouveau jeton d'utilisateur (clé de changement).
CSI-Token-Action: abandonner annule la procédure de changement des jetons (retour au jeton précédent).
CSI-Token-Action: l'enregistrement indique au navigateur que le nouveau jeton d'utilisateur est toujours en cours d'enregistrement.
CSI-Token-Action: erreur de vérification de jeton cÎté serveur non valide .

Enfin
CSI-Salt est envoyé à la fois par le navigateur et le serveur lors de l'échange du «sel» utilisé pour protéger le jeton (partie authentification). Voir ci-dessous pour plus de détails.

1.4 Comment les clients identifient-ils les sites?


Un site peut utiliser un jeton pour identifier un visiteur du site. Dans le mĂȘme temps, le schĂ©ma de gĂ©nĂ©ration de jetons et leur capacitĂ© de 256 bits garantissent des jetons uniques pour chaque paire: domaine utilisateur. Un autre domaine verra un autre jeton utilisateur. MĂȘme s'il est exĂ©cutĂ© dans le contexte du site cible (via IFRAME, IMG, LINK, SCRIPT). De plus, un algorithme spĂ©cial de gĂ©nĂ©ration de jetons protĂšge les utilisateurs contre les attaques XSS et SRF et rend impossible le suivi d'un utilisateur Ă  son insu. Mais en mĂȘme temps, la technologie SSO reste possible avec sa permission et son identification inter-domaines.
Le token est transmis dans l'en-tĂȘte HTTP CSI-Token avec chaque requĂȘte vers n'importe quelle ressource de domaine (page, document, image, script, style, police, fichier, requĂȘte ajax, ...):

Le jeton est recalculĂ© Ă  chaque requĂȘte HTTP (S) : page, image, requĂȘte ajax.
Afin d'optimiser les calculs, la mise en cache des jetons par le navigateur est autorisée, mais uniquement pour la durée de la session et uniquement si les conditions de satisfaction de la demande restent inchangées.
Comme indiquĂ© ci-dessus, le jeton peut remplacer les cookies de session tels que PHPSESSIONID et JSESSIONID. La seule diffĂ©rence est que si le site gĂ©nĂ©rait prĂ©cĂ©demment un identifiant permettant au visiteur de suivre un utilisateur spĂ©cifique entre ses diffĂ©rentes demandes (aprĂšs tout, des milliers de demandes d'utilisateurs diffĂ©rents arrivent sur le site en mĂȘme temps), le client lui-mĂȘme remplit dĂ©sormais cette fonction.
Une telle identification est tout à fait suffisante pour vous permettre de faire des achats dans la boutique en ligne, de faire de la publicité sur des sites appropriés, d'écrire sur des forums, sur des réseaux sociaux, sur Wikipedia ou sur des articles Habré.
Oui, l'utilisateur reste anonyme pour le site. Mais il peut s'agir d'un «familier» anonyme du site. Et le serveur peut enregistrer le jeton d'un tel utilisateur de son cĂŽtĂ©, ainsi que ses donnĂ©es (compte personnel avec achats, prĂ©fĂ©rences, karma, brioches, likes et autres bonus). Mais seulement pour garder sous condition l'achĂšvement de tout processus commercial: achat, soumission de l'annonce, etc. Les conditions sont dĂ©terminĂ©es par le site lui-mĂȘme.
Comme vous pouvez le voir, le protocole est aussi simple que possible pour les sites qui n'ont pas besoin de vous inscrire avant de vous donner la possibilité de prendre des mesures. Mais ceux qui en ont besoin auront un peu plus de mal. Mais plus à ce sujet ci-dessous.

1.4.2 Comment savoir si un site prend en charge ce protocole?


Le site doit transmettre le CSI-Support: oui http-header dans la section Response Headers de sa réponse:

En voyant un tel titre, le navigateur informera discrÚtement l'utilisateur qu'il peut se sauver sur le site. Par exemple, le symbole clé dans la barre d'adresse:

Un clic sur une clé, par exemple, créera une clé pour le domaine www.youtube.com :

La formation d'une nouvelle clé ne conduit pas à son utilisation automatique.

La clĂ© permanente ne commence Ă  ĂȘtre utilisĂ©e que lorsqu'elle est activĂ©e par l'utilisateur.

1.5 Comment les clients autorisent-ils les sites?


Il est important de comprendre que le jeton ne rend pas encore l'utilisateur autorisĂ© sur un site particulier - seulement reconnaissable. Mais, comme cela a dĂ©jĂ  Ă©tĂ© dit, vous n'ĂȘtes pour l'instant qu'une «personne anonyme» reconnaissable.
Si le site doit vous associer personnellement votre token, hĂ©las, l'inscription sur un tel site ne peut ĂȘtre Ă©vitĂ©e. Mais dans le protocole proposĂ©, cela est rendu un peu plus facile.
Il est important que les dĂ©veloppeurs le comprennent: la plupart des sites n'ont pas besoin de questionnaire. Évitez de forcer les visiteurs Ă  s'inscrire. Dans la plupart des situations typiques, vous pouvez exĂ©cuter un processus mĂ©tier sans collecter de visiteurs PD.

Remplir des formulaires d'inscription fastidieux «avec ou sans» est désagréable. Mais avec le nouveau protocole, il n'est plus nécessaire de trouver un autre identifiant et mot de passe. Seul le bouton Confirmer et me sauver:

Bien sûr, vous devrez d'abord créer une clé permanente pour le site. Mais il s'agit de quelques clics de souris.
Et, bien sûr, il vous sera demandé de confirmer votre téléphone ou votre adresse postale. Mais cela dépend déjà du site.
AprĂšs une autorisation rĂ©ussie, le serveur, via un en-tĂȘte HTTP spĂ©cial, CSI-Token-Action informera le navigateur qu'il a acceptĂ© la nouvelle clĂ©. Plus de dĂ©tails au chapitre II .

1.6 Comment mettre en place une identification client fiable?


Dans les situations plus graves (compte personnel du fournisseur, hĂ©bergement, banque), une authentification Ă  deux facteurs doit et peut ĂȘtre effectuĂ©e, et la preuve de la possession du jeton peut ĂȘtre effectuĂ©e par le biais d'une prĂ©-inscription et d'une confirmation d'identitĂ© par d'autres moyens: par e-mail, SMS ou mĂȘme en fixant le jeton de l'utilisateur sur papier. (Oui, oui. Les certificats sont enregistrĂ©s sur papier, pourquoi pas des jetons).

1.7 Autorisation sur le site vue par l'utilisateur


Le navigateur informe l'utilisateur que le site prend en charge l'autorisation CSI via l'icĂŽne de verrouillage dans la barre d'adresse. Si vous effectuez certaines actions sur le site, vous pouvez demander au site de se souvenir de vous. A partir de ce moment, le serveur reconnaĂźtra l'utilisateur mĂȘme entre diffĂ©rentes sessions:

Dans l'illustration
, . , , , . , . . . , , , . . .

Au lieu de fixer la clé, l'utilisateur peut créer une clé permanente pour le site et s'y inscrire. Illustration animée:

Dans l'illustration
. . . .
, « ». .

Et lorsque l'utilisateur dispose d'une clé permanente pour le site et que cette clé y est enregistrée, le processus de connexion est grandement simplifié:

Dans l'illustration
. , . , «». , .

La plus grande puissance du protocole se manifeste lorsque l'utilisateur crée une clé pour le site en fonction de la clé principale. Dans ce cas, le problÚme de votre identification sur des sites sur d'autres appareils est facilement résolu . L'animation suivante le démontre. Il est supposé que vous avez déjà distribué votre clé principale une fois entre vos appareils / navigateurs:

Dans l'illustration
. -. . ( ).

Pour les sites avec une autorisation à deux facteurs, la «reconnaissance» peut ressembler à ceci:

Dans l'illustration
. . . ; . .

La sortie est encore plus facile. Cliquez sur "DĂ©connexion" dans le navigateur et c'est tout:

Le navigateur envoie une demande au site (sur n'importe quelle page) avec la mĂ©thode HEAD, dans laquelle il envoie l'en-tĂȘte CSI-Token <>; DĂ©connexion.

Le serveur, voyant un tel en-tĂȘte, se dĂ©connecte. S'il s'agissait d'une clĂ© fixe, le site supprime toutes les informations sur l'utilisateur (plus qu'une telle clĂ© n'apparaĂźtra jamais). S'il s'agissait d'une clĂ© permanente, interrompt simplement la session.
Toute autre activité du site transforme l'utilisateur en un anonymat inconnu du site: rechargement de la page, tentative de demande ajax, téléchargement d'un fichier, etc. - Le navigateur enverra un jeton généré déjà sur la base d'une clé aléatoire.
Vous pouvez gérer les clés dans le gestionnaire de clés: modifier la clé permanente, exporter la clé permanente dans un fichier, importer à partir d'un fichier à partir d'un autre appareil. Configurez la «sortie automatique» aprÚs avoir fermé un onglet ou un navigateur. Définissez la durée d'une clé fixe.


1.8 Comment une clé de site change-t-elle?


Le remplacement de la clé permanente du site revient techniquement à passer d'une clé aléatoire à une clé permanente. Ceci est décrit plus en détail au chapitre II .
En cas de modification de la clĂ© permanente du site, le navigateur notifie au site la modification correspondante du jeton, en envoyant un en - tĂȘte CSI-Token avec la clĂ© Changed-To Ă  chaque demande suivante :

Le site doit traiter correctement une telle demande. Et, si un jeton utilisateur donnĂ© est stockĂ© dans sa base de donnĂ©es, il doit effectuer un remplacement appropriĂ©. Dans le mĂȘme temps, le site devrait rĂ©pondre au navigateur au sujet du changement rĂ©ussi du jeton de son cĂŽtĂ©. Il le fait dans l'en-tĂȘte Response Headers avec le paramĂštre: CSI-Token-Action: succĂšs , indiquant le jeton appliquĂ©.
Le site a le droit de rejeter une tentative de modification du jeton (par exemple, s'il n'y en avait pas dans sa base de données ou s'il ne les enregistre pas du tout) avec le paramÚtre CSI-Token-Action: abandonné.
Jusqu'Ă  ce que le navigateur reçoive l'en-tĂȘte CSI-Token-Action, il ajoutera la clĂ© Changed-To Ă  chaque demande de jeton CSI du site.
Il s'agit d' un analogue du «changement de mot de passe» de l'utilisateur.

1.9 Comment l’autorisation interdomaines est-elle mise en Ɠuvre?


L'autorisation classique entre domaines utilisant la technologie SSO présente de nombreux avantages pour l'utilisateur. Vous n'avez pas besoin de vous souvenir d'un tas de mots de passe provenant d'un tas de sites. Il n'est pas nécessaire de s'inscrire et de remplir les formulaires mornes. Certains serveurs d'autorisation demandent quels droits accorder au site qui a demandé l'authentification unique.
Mais il y a aussi des inconvénients. Vous dépendez du fournisseur SSO. Si le serveur SSO ne fonctionne pas, vous n'obtiendrez pas le site cible. Si vous perdez votre mot de passe ou votre compte est volé - vous perdez l'accÚs à tous les sites à la fois.
Pour les développeurs web, les choses sont un peu plus compliquées. Depuis le début, vous devez enregistrer votre site sur le serveur d'autorisation, obtenir les clés, apprendre à travailler avec le protocole ( SAML , OAuth , etc.) et les bibliothÚques correspondantes, assurez-vous que la clé n'expire pas, que le serveur d'autorisation ne bloque pas votre site pour vos raisons et etc. Il s'agit d'une redevance pour le fait que vous n'avez pas besoin de conserver des comptes d'utilisateurs, de faire des formulaires d'inscription, de vous connecter, etc. La vérité augmente le coût de la maintenance (sous forme de réparation de pannes soudaines). Encore une fois, si le serveur est soudainement indisponible pour le site, alors hélas.
Ce schéma d'autorisation rend SSO un peu plus sûr et l'autorisation pour tous les participants est plus facile. La sécurité sera discutée ci-dessous dans la section "Compromis clé pour l'authentification unique".

Jetez un Ɠil au site S, qui prend en charge l'authentification unique de Google. Supposons que vous ayez un compte Google. Pour vous connecter, vous cliquez sur le lien "Se connecter avec Google", qui ouvrira l'onglet d'autorisation Google. Le navigateur vous indiquera que vous avez une clĂ© pour Google. Et Google vous dira quels droits S. demande.
Si vous ĂȘtes d'accord, cliquez sur "Connexion" dans le gestionnaire de clĂ©s. La page se rechargera. Google recevra dĂ©jĂ  son jeton valide, vous reconnaĂźtra et vous autorisera. Et avec une demande inter-serveur, il informera le Site S de vos informations de compte conformĂ©ment aux champs demandĂ©s.
La page rechargée contiendra un bouton «Suivant» qui vous ramÚnera au site cible.

Dans l'illustration
Il donnera un exemple de cet algorithme lors de son inscription sur www.youtube.com Ă  l' aide d'une autorisation interdomaine via accounts.google.com.

Le site S peut décider de sauvegarder ou non des données vous concernant dans sa base de données. Cette question dépasse le cadre du régime d'autorisation proposé. Mais en outre, lorsque nous examinerons les risques de perdre la clé pour SSO, le site est recommandé de conserver le jeton et l'identifiant utilisateur de SSO de son cÎté, et l'utilisateur est recommandé de créer une clé permanente pour S.
VulnĂ©rabilitĂ©: AprĂšs une telle autorisation, les sites S1, S2, S3, ... (oĂč vous vous ĂȘtes connectĂ© via Google) pourront vous reconnaĂźtre (par l'identifiant qui vous a Ă©tĂ© attribuĂ© par Google) et, par consĂ©quent, suivre votre activitĂ©.

Option de protection: ne fonctionne pas simultanĂ©ment sur les sites si vous vous ĂȘtes inscrit via le SSO du mĂȘme fournisseur. Si possible, dĂ©connectez-vous du serveur d'autorisation immĂ©diatement aprĂšs la fin de l'autorisation («sortie automatique» pour le domaine).


1.10 Comment implémenter l'authentification inter-domaines?


Tout cela, bien sûr, est bon. Alors que le travail est effectué sur un seul navigateur - tout va bien. Mais qu'en est-il des réalités modernes lorsqu'une personne a deux téléphones portables, un ordinateur de travail et plusieurs navigateurs dessus, un ordinateur personnel et un autre ordinateur portable? Plus une tablette commune pour la femme / les enfants.
Nous devrons en quelque sorte résoudre le problÚme du transfert des clés de domaine entre les navigateurs et les appareils. Et aussi résoudre le problÚme de leur synchronisation correcte.
L'un des mécanismes pour résoudre ce problÚme consiste à calculer diverses clés de domaine sur la base d'une clé principale commune sans possibilité de récupération inverse de la clé principale à partir d'une clé de domaine connue.
AprĂšs avoir crĂ©Ă© une clĂ© personnelle K pour le domaine D en utilisant une clĂ© principale M sur un appareil, un utilisateur peut crĂ©er la mĂȘme clĂ© K pour le domaine D et sur n'importe quel autre en utilisant la mĂȘme clĂ© principale M et un seul algorithme. Plus prĂ©cisĂ©ment, cela se fera non pas par l'utilisateur, mais par son navigateur. Avec cette approche, il suffit Ă  l'utilisateur de rĂ©partir sa clĂ© principale entre tous les navigateurs utilisĂ©s par lui et il "transfĂšre toutes ses clĂ©s" de domaines Ă  la fois. Effectue en mĂȘme temps des sauvegardes de cette maniĂšre.
Confort d'utilisation maximal. Mais aussi le risque maximum en cas de compromission de la clĂ© principale. Par consĂ©quent, ces derniers doivent ĂȘtre protĂ©gĂ©s en consĂ©quence. Les risques de perte ou de compromission de la clĂ© principale et les moyens de minimiser ces risques sont dĂ©crits dans le chapitre «3 Recommandations de sĂ©curité» .
L'utilisation d'une seule clĂ© principale pour gĂ©nĂ©rer toutes les clĂ©s pour tous les domaines n'est pas toujours une option pratique. PremiĂšrement, que faire si la clĂ© de domaine est soudainement compromise et doit ĂȘtre modifiĂ©e? DeuxiĂšmement, que faire si vous devez partager une clĂ© de domaine avec une autre personne? Par exemple, entre les membres de la famille. Ou s'agit-il d'un compte d'accĂšs au courrier public d'entreprise. Comment alors "rĂ©cupĂ©rer" votre clĂ© (car en fait elle a Ă©tĂ© compromise)?
Par consĂ©quent, la gĂ©nĂ©ration de clĂ©s de domaine individuelles Ă  l'aide d'un capteur biologique de nombres alĂ©atoires doit ĂȘtre prise en charge par les navigateurs. Mais nous revenons ensuite Ă  la question de notre mobilitĂ© et des problĂšmes de synchronisation, des fonctions d'exportation et d'importation de clĂ©s dans le navigateur et de crĂ©ation de copies de sauvegarde.

Transfert via un appareil physique aliénable


Les cartes Ă  puce et les jetons USB peuvent ĂȘtre tout Ă  fait appropriĂ©s comme stockage sĂ©curisĂ© des informations clĂ©s (car ils ont Ă©tĂ© crĂ©Ă©s pour cela). L'authentification Ă  deux facteurs protĂšge les clĂ©s contre tout accĂšs non autorisĂ© avec un accĂšs direct Ă  l'appareil.
Certes, les cartes à puce nécessitent des lecteurs spéciaux (sans parler des pilotes), ce qui limite leur utilisation uniquement aux postes de travail équipés de tels lecteurs.
Avec des jetons USB un peu plus faciles. Seuls les pilotes sont requis. Mais vous ne pouvez pas coller un tel jeton dans le téléphone. Et bien que pour les téléphones portables il existe des jetons réalisés sous forme de cartes SD, pour ne pas dire que cette solution ajoute à la mobilité. Essayez de tirer une carte d'un téléphone mobile, mais insérez-la dans un autre. Et ce n'est pas que ce soit impossible. Le truc, c'est que ce n'est pas pratique.
Et si le jeton se casse? Ensuite, toutes vos clés iront au Grand Cthulhu.
Il y aura donc une tentation avec un tel schéma d'utiliser plusieurs appareils en double. Mais vous devez encore résoudre le problÚme de synchronisation des clés si vous avez plusieurs cartes à puce.
Et, franchement, ces appareils ne sont pas protĂ©gĂ©s contre les enregistreurs de frappe. Maintenant, si le code PIN devait ĂȘtre entrĂ© Ă  partir de la carte / du jeton lui-mĂȘme. Puis autre chose. Mais je n'en ai pas vu dans la nature.

Avantages: des clĂ©s alĂ©atoires de 256 bits peuvent ĂȘtre utilisĂ©es; haute sĂ©curitĂ© grĂące Ă  l'utilisation d'une authentification Ă  deux facteurs; le plus haut niveau de protection contre la falsification directe.
Inconvénients: dépendance de l'appareil; nécessite des coûts financiers; faible mobilité; la nécessité de réserver des cartes et, par conséquent, de synchroniser les données entre elles; la vulnérabilité aux enregistreurs de frappe demeure.

Synchronisation via le service en ligne


La «technologie du cloud» est désormais mise en avant dans la mesure du possible. Il semble qu'ils, avec la blockchain, soient devenus un substitut à la «technologie de la banane». Naturellement, on souhaite utiliser une certaine plate-forme Internet pour l'échange d'informations clés. Une sorte de carte à puce "en ligne".
Quoi? Vous vous connectez en utilisant notre systĂšme de maniĂšre anonyme sur un tel site; envoyez-y vos clĂ©s cryptĂ©es avec un mot de passe; Vous passez d'un autre appareil au mĂȘme site avec la mĂȘme clĂ© / mot de passe; vous obtenez les clĂ©s de lĂ ; Vous synchronisez les modifications par date de modification. Semblable au gestionnaire de mots de passe, seul celui-ci est en ligne.
C'est juste, personne ne garantit que le service en ligne ne sera pas piraté ou ne fusionnera pas vos clés, bien que cryptées, «si nécessaire». Qui mettra en place un tel service gratuitement. Voilà.
Bien sûr, le mot de passe protÚge les clés contre une utilisation directe. Mais votre mot de passe résiste-t-il à la force brute "hors ligne"? Voilà une autre question.
Avantages: haute mobilité des diplÎmes; indépendance de l'appareil et du navigateur; vous n'avez besoin que d'un seul mot de passe (bien qu'ils n'aient pas laissé le mot de passe, c'est déjà mieux).
Inconvénients: moins sûr que de stocker des clés sur un support aliénable. En fait, la sécurité des clés repose sur la force du mot de passe à sélectionner.

Vous pouvez bien sûr utiliser une clé principale pour crypter d'autres clés. Celui avec lequel les autres clés de domaine sont calculées. En option.

2 Description technique du protocole



2.0 Algorithme de génération de clés de domaine


Ce protocole définit seulement 2 méthodes pour générer des clés de domaine.

  • basĂ© sur un gĂ©nĂ©rateur de nombres alĂ©atoires (de prĂ©fĂ©rence biologique)
  • basĂ© sur une clĂ© principale de 256 bits

Dans ce dernier cas, la clé de domaine est calculée comme suit:

$ K = HMAC_ {M_ {clé}} (domaine) $

oĂč $ M_ {clĂ©} $ - ClĂ© maĂźtre 256 bits, Domaine - nom de domaine pour lequel la clĂ© est crĂ©Ă©e.
Ci-aprÚs, HMAC est un algorithme cryptographique de hachage basé sur une implémentation de 256 bits de la fonction de hachage SHA-2 .
La divulgation de compromis ou volontaire d'une clé de domaine ne compromet pas la clé principale d'origine.

La clé principale fournit un mécanisme pour la mobilité des informations d'identification de l'utilisateur.
Remarque
Dans la version initiale du protocole, l'option de génération de clés de domaine basée sur le mot de passe de l'utilisateur était considérée comme garantissant la mobilité de l'utilisateur et la protection contre la compromission du mot de passe lors du piratage d'un site. Mais dans le chapitre «3 Consignes de sécurité», des explications seront données sur les raisons pour lesquelles il a été décidé de refuser un tel schéma.

Si la clĂ© crĂ©Ă©e sur la base du «maĂźtre» a Ă©tĂ© compromise ou si le jeton calculĂ© Ă  partir d'une telle clĂ© (Ă  la suite d'un piratage du site) a Ă©tĂ© compromis, la clĂ© doit ĂȘtre modifiĂ©e. Vous pouvez la changer en une clĂ© alĂ©atoire de 256 bits, ou la gĂ©nĂ©rer Ă  partir du mĂȘme «assistant», avec l'ajout d'une version:

$ K = HMAC_ {Mkey} (version Domain \ cup) $

Ci-aprÚs, le symbole $ \ cup $ sera utilisé pour l'opération de concaténation de chaßnes (tableaux d'octets).

2.1 l'algorithme de calcul du jeton source


Le jeton d'authentification de l'utilisateur est calculé avec chaque demande de n'importe quelle ressource de domaine. Pour calculer le jeton de demande, les données suivantes sont prises:

  • ExpĂ©diteur - le nom de domaine de l'initiateur de la demande (il peut s'agir d'une page avec une iframe ou un script du domaine de quelqu'un d'autre qui effectue la rĂ©cupĂ©ration),
  • Destinataire - nom de domaine du destinataire (oĂč la demande est envoyĂ©e),
  • Contexte - contexte d'exĂ©cution de la demande,
  • Protection - une sĂ©quence alĂ©atoire de 32 octets (256 bits), si le contexte est vide; sinon vide

Ces donnĂ©es sont concatĂ©nĂ©es et hachĂ©es avec SHA-2 256 bits sur la clĂ© K du domaine initiant la requĂȘte :

$ K = HMAC_M (Expéditeur \ Destinataire de la tasse \ Contexte de la tasse \ Protection de la tasse) $

Un jeton valide est obtenu lorsque le contexte n'est pas vide. Pour une identification correcte sur le site cible, la condition Sender = Recipient = Context doit ĂȘtre remplie.

Le champ Contexte, avec Protection, est utilisé pour se protéger contre les attaques XSS et CSRF , ainsi que contre le suivi des utilisateurs.
Des explications plus détaillées sur les rÚgles de détermination de l'expéditeur / destinataire / contexte seront fournies ci-dessous.

2.2 Algorithme de protection des jetons pendant le transfert


Le jeton client d'origine est transmis extrĂȘmement rarement. Uniquement lors du transfert d'un jeton non enregistrĂ© au moment de la crĂ©ation de la session.
Un jeton est considéré comme non enregistré s'il: est créé sur la base d'une clé aléatoire (non fixe); n'a pas été accepté par le serveur aprÚs l'envoi de la clé de remplacement ou permanente. Pour plus de détails, voir «Traitement des jetons sur le serveur» .
Le navigateur et le serveur génÚrent conjointement une paire de nombres aléatoires, appelés salt (Salt), avec lequel les 128 bits inférieurs du jeton sont hachés. Les deux échangent ces numéros selon le protocole. Pour plus de détails, voir «Salt Swap Procedure Browser-Server» .
Ainsi, le serveur de site voit le jeton suivant:

$ T = Hi (T_s) \ cup HMAC_ {salt} (Lo (T_s)) $

oĂč $ Salut (T_s) $ - haute 128 bits, $ Lo (T_s) $ - les 128 bits infĂ©rieurs du jeton d'origine, $ \ cup $ - concatĂ©nation de chaĂźnes. Dans ce cas, le jeton initial $ T_s $ devrait dĂ©jĂ  ĂȘtre connu du serveur.

IdĂ©alement, CSI-Salt devrait changer chaque fois qu'un navigateur demande un serveur. Cependant, cela peut ĂȘtre une exigence coĂ»teuse en termes de ressources informatiques. De plus, il peut «tuer» la possibilitĂ© d'envoyer des requĂȘtes parallĂšles au serveur.
Par consĂ©quent, afin d'optimiser les calculs, il est autorisĂ© de conserver les valeurs CSI-Salt inchangĂ©es dans diffĂ©rentes demandes, mais pas plus d'une session . Cela peut ĂȘtre une limite de temps (changement de CSI-Salt toutes les 5 minutes), ou une rĂ©action Ă  l'intensitĂ© des requĂȘtes (changement de CSI-Salt toutes les 100 requĂȘtes), ou aprĂšs chaque sĂ©rie de requĂȘtes (au moment de la pause, client-serveur), ou une version mixte. Ici, la dĂ©cision est laissĂ©e aux dĂ©veloppeurs de navigateurs.
Garder CSI-Salt inchangé trop longtemps affaiblit la protection du jeton transmis, permettant à l'attaquant d'intercepter le jeton pendant que l'utilisateur légitime a terminé la déconnexion et d'exécuter une demande non autorisée au nom de la victime.

2.3 Procédure d'échange de sel entre le navigateur et le serveur


2.3.1 Jeton basé sur une clé de serveur aléatoire ou non enregistrée [1] .
NavigateurServeur
Demande initiale (initialisation de session utilisateur)
Le navigateur envoie le jeton tel quel.
Votre demande manque CSI-Salt.
Le serveur voit d'abord un tel jeton.
au fait
Le serveur n'est peut-ĂȘtre pas le premier Ă  voir un tel jeton. Et le navigateur est considĂ©rĂ© comme non enregistrĂ©. Cela peut se produire lorsque vous recrĂ©ez la clĂ© en fonction de la clĂ© principale sur un autre appareil . Par consĂ©quent, cette situation doit Ă©galement ĂȘtre prise en compte.

Le perçoit tel qu'il est (le considÚre comme non protégé). Utilise ce jeton comme identifiant de session.
GĂ©nĂšre son sel S.
Le renvoie dans la rĂ©ponse de l'en-tĂȘte CSI-Salt.
DeuxiĂšme demande
GĂ©nĂšre du sel Avec du sel .
Le navigateur connecte [3] son sel et le sel du serveur.
Le navigateur envoie la demande, en passant un jeton de sel partagé.
Envoie du sel CSI.
Le serveur reçoit la demande et récupÚre le client CSI-Salt .
Le serveur connecte le sel du navigateur au sien et l'utilise pour vérifier le jeton.

Si la validation du jeton réussit, elle fournit à l'utilisateur un contenu conforme à ses droits.

En cas d'erreurs de vĂ©rification, renvoie l'en - tĂȘte CSI-Token-Action: invalide au client. Renvoyer du contenu ou renvoyer une rĂ©ponse vide: dĂ©pend du serveur.
Demandes ultérieures
Le navigateur envoie la demande, en passant un jeton de sel partagé.
Votre demande manque CSI-Salt.
Le serveur reçoit la demande et vérifie son jeton.

Si la validation du jeton réussit, elle fournit à l'utilisateur un contenu conforme à ses droits.

En cas d'erreurs de vĂ©rification, renvoie l'en - tĂȘte CSI-Token-Action: invalide au client. Renvoyer du contenu ou renvoyer une rĂ©ponse vide: dĂ©pend du serveur.
AprĂšs un certain temps [2]
GĂ©nĂšre un nouveau sel C sel .
Connectez le nouveau sel au sel du serveur.
Envoie une requĂȘte, en passant un jeton protĂ©gĂ© par un nouveau sel commun.
Envoie du sel CSI.
Le serveur reçoit la demande et récupÚre le nouveau client CSI-Salt .
Le serveur connecte le sel du navigateur au sien et l'utilise pour vérifier le jeton.

Si la validation du jeton réussit, elle fournit à l'utilisateur un contenu conforme à ses droits.

En cas d'erreurs de vĂ©rification, renvoie l'en - tĂȘte CSI-Token-Action: invalide au client. Renvoyer du contenu ou renvoyer une rĂ©ponse vide: dĂ©pend du serveur.

2.3.2 Jeton basé sur la clé enregistrée par le serveur [1] .
NavigateurServeur
Demande initiale (initialisation de session utilisateur)
GĂ©nĂšre du sel Avec du sel .
Envoie du sel CSI.
TransfÚre le jeton sous une forme protégée.
Le serveur reçoit la demande et récupÚre le client CSI-Salt .
Lit un jeton protégé.
Recherche le jeton client complet dans sa base de données (utilise le premier jeton 128 bits reçu dans la demande de recherche).
Parce que il s'agit de la demande initiale, le serveur n'a pas envoyé de sel au client, puis la validation du jeton à ce stade est effectuée uniquement par le sel du client .

En cas d'erreurs de vĂ©rification, renvoie l'en - tĂȘte CSI-Token-Action: invalide au client. Renvoyer du contenu ou renvoyer une rĂ©ponse vide: dĂ©pend du serveur.

Si la validation du jeton réussit, elle fournit à l'utilisateur un contenu conforme à ses droits.

GĂ©nĂšre son sel S.
Le renvoie dans la rĂ©ponse de l'en-tĂȘte CSI-Salt .
Demandes ultérieures
Le navigateur combine son sel et son sel de serveur.
Le navigateur envoie la demande, en passant un jeton de sel partagé.
Votre demande manque CSI-Salt .
Le serveur reçoit la demande et vérifie son jeton.

Si la validation du jeton réussit, elle fournit à l'utilisateur un contenu conforme à ses droits.

En cas d'erreurs de vĂ©rification, renvoie l'en - tĂȘte CSI-Token-Action: invalide au client. Renvoyer du contenu ou renvoyer une rĂ©ponse vide: dĂ©pend du serveur.
AprĂšs un certain temps [2]
GĂ©nĂšre un nouveau sel C sel .
Le navigateur connecte le nouveau sel au sel du serveur.
Le navigateur envoie la demande, en passant un jeton protégé par le nouveau sel partagé.
Envoie du sel CSI .
Le serveur reçoit la demande et récupÚre le nouveau client CSI-Salt .
Le serveur connecte le sel du navigateur au sien et l'utilise pour vérifier le jeton.

Si la validation du jeton réussit, elle fournit à l'utilisateur le contenu conformément à ses droits.

En cas d'erreurs de vĂ©rification, renvoie l'en - tĂȘte CSI-Token-Action: invalide au client. Renvoyer du contenu ou renvoyer une rĂ©ponse vide: dĂ©pend du serveur.

[1] Un jeton est considéré comme non enregistré s'il: est créé sur la base d'une clé aléatoire; n'a pas été accepté par le serveur aprÚs l'envoi de la clé de modification ou permanente avec la réponse CSI-Token-Action: succÚs.
[2] Le temps pendant lequel le changement CSI-Salt est effectuĂ© est dĂ©terminĂ© par les navigateurs eux-mĂȘmes. Cela peut se produire aprĂšs une sĂ©rie de demandes, aprĂšs un dĂ©lai d'attente, aprĂšs un certain nombre de demandes. – CSI-Salt .
[3] 16- 128- . , : salt || S salt . – , . , , .


2.4 Context


. , - . .
, . , .

Nous appellerons le nĂŽtre le domaine dont nous chargeons la page (affichĂ©e dans la barre d'adresse du navigateur). Les domaines restants seront appelĂ©s externes . MĂȘme si ce sont des domaines enfants d'un donnĂ©.

Nous appelons la ressource externe si elle a Ă©tĂ© tĂ©lĂ©chargĂ©e Ă  partir d'un domaine externe. Nous appellerons la ressource interne si elle a Ă©tĂ© tĂ©lĂ©chargĂ©e depuis notre domaine. La ressource peut ĂȘtre un script, une image, une requĂȘte ajax et tout autre fichier.

Un script est considĂ©rĂ© comme externe s'il a Ă©tĂ© tĂ©lĂ©chargĂ© Ă  partir d'un domaine externe. Le script placĂ© dans la balise <script> crĂ©Ă©e, crĂ©Ă© par un script externe, sera Ă©galement considĂ©rĂ© comme externe. Le script situĂ© dans la balise <script> modifiĂ©e est dĂ©clarĂ© externe s'il a Ă©tĂ© modifiĂ© par un script externe, ou si un script externe Ă©tait prĂ©sent dans la chaĂźne d'appel lorsque son contenu a changĂ©. MĂȘme si en mĂȘme temps ce <script> Ă©tait Ă  l'origine sur la page ou a Ă©tĂ© crĂ©Ă© par un script interne.

Nous nommerons les balises LINK, SCRIPT, IMG, IFAME et autres, qui nécessitent que le navigateur charge une ressource dÚs qu'elle est rencontrée par l'analyseur DOM - balises de ressource .

Nous nommerons les balises FORM, A, META et autres, qui peuvent lancer le chargement des pages sous certaines conditions (soumettre, cliquer,timeout) - lancement de balises.

Nous appellerons la balise statique si elle était à l'origine présente sur la page lors de sa premiÚre émission par le serveur. Nous appellerons la balise dynamique si elle a été créée lors de l'exécution des scripts.

La balise FORM est dĂ©clarĂ©e dynamique, mĂȘme si non seulement la balise elle-mĂȘme a changĂ©, mais aussi les valeurs de tous les champs INPUT associĂ©s Ă  ce formulaire.

Nous appellerons notre propre balise dynamique si le script qui l'a créée appartient à notre domaine, et la chaßne d'appel de l'instruction qui a généré cette balise n'avait pas de fonction appartenant à un script externe. Sinon, nous considérons une telle balise dynamique incorrecte .

Le chargement de la page est dĂ©clenchĂ© par le lancement de balises.La balise initiatrice peut ĂȘtre activĂ©e directement par l'utilisateur, ou activĂ©e par le script, en exĂ©cutant la commande click (pour le lien) et soumettre (pour le formulaire), ou par le script gĂ©nĂ©rant les Ă©vĂ©nements onclick / onsubmit correspondants.

De plus, la balise initiatrice peut ĂȘtre activĂ©e par le navigateur. Un exemple d'une telle balise est META avec les paramĂštres http-equiv = "refresh" content = "0".

Tableau P. Valeurs de contexte dans différentes conditions d'ouverture de page
Méthode d'ouvertureQui a déclenché le chargement de la page?
Utilisateurpropre. Jsext. Jsle navigateur
tag 1StatiqueP1. RéférentP2. Varariant 3P3. VideP4. Hériter
DynamiquePropreP5. HĂ©riterP6. Varariant 3P7 VideP8. HĂ©riter
IncorrectP9. VidePA. VidePB. VidePC. Vide
DirectementPD. DomainePE. Varariant 3Pf. VidePG. Varariant 4

mĂȘme tableau, seule image

Si la balise de ressource a été modifiée par un script (par exemple, l'attribut SRC d'IMG), puis que la ressource a été automatiquement chargée par le navigateur, nous pensons que le contenu / la ressource a été déclenché par l'analyseur, la méthode de chargement est la balise, mais le statut de cette balise devient «dynamique».

Tableau R. Valeurs de contexte dans différentes conditions de chargement de contenu / ressource
Méthode de téléchargementQui a provoqué le téléchargement du contenu?
Analyseur Dompropre. Jsext. Js
tag 2StatiqueR1. La page
DynamiquePropreR4. La page
IncorrectR7. Vide
DirectementRA. RéférentRB. La pageRC Référent

mĂȘme tableau, seule image


[1] Balise de lancement
[2] Balise de ressource
[3] HĂ©riter de ses propres pages, vide lors de l'ouverture de pages de domaines Ă©trangers
[4] HĂ©riter lors de la redirection de serveurs vers leurs pages, vide lors de la redirection vers d'autres domaines ou lors de l'ouverture d'une page Ă  partir de sources externes (voir . clarification )


Abréviations
Referrer – Referrer.
Page – (Tab) .
Empty – .
Domain – Context
Inherit – Context
Variant – Context «-»

Des marques de la forme P1..PF, R1..RC seront utilisées pour faire référence à la cellule correspondante dans le tableau lors de l'analyse de situations spécifiques.
Remarquez le rĂ©fĂ©rent et le domaine en surbrillance dans le premier tableau. Vous ne pouvez ĂȘtre autorisĂ© sur un site que lorsque vous ouvrez vous-mĂȘme le site Ă  une adresse directe ou par un lien Ă  partir d'un autre site, avec un rechargement ultĂ©rieur de la page de votre propre initiative.


2.5 RÚgles de définition des champs expéditeur et destinataire


L'expĂ©diteur est le domaine de la page / du script / du style d'oĂč provient la demande. La page demande des styles, des images, des scripts. Les scripts demandent du contenu via ajax. Les styles peuvent charger d'autres styles. Ce sont les initiateurs de la demande.

Le destinataire est le domaine auquel la demande va vraiment.

Pour qu'il n'y ait plus de questions, considérons des exemples spécifiques.

Qu'il y ait un site site.net. Sur la page principale du site:
  • style site.net/css/common.css
  • les styles common.css importent les styles fonts.google.com/fonts/Roboto.css
  • Le style Roboto.css importe la police fonts.google.com/fonts/Roboto.ttf
  • image menant Ă  img.site.net/picture1.jpg
  • trame chargĂ©e depuis adriver.ru/frame
  • script de adm.site.net/admin.js

Laissez dans le cadre (avec adriver.ru) vous connecter:
  • style de adriver.ru/style.css
  • image de img.adriver.ru/img/01.png
  • script de adriver.ru/libs.js
  • script de api.adriver.ru/v1/ad.js

Valeurs de l'expéditeur / destinataire lors du chargement des ressources avec l'analyseur DOM
Ressource téléchargeableValeur de l'expéditeurValeur du destinataire
site.net/css/common.csssite.netsite.net
fonts.google.com/fonts/Roboto.csssite.netfonts.google.com
fonts.google.com/fonts/Roboto.ttffonts.google.comfonts.google.com
img.site.net/picture1.jpgsite.netimg.site.net
adriver.ru/framesite.netadriver.ru
adm.site.net/admin.jssite.netadm.site.net
adriver.ru/style.cssadriver.ruadriver.ru
img.adriver.ru/img/01.pngadriver.ruimg.adriver.ru
adriver.ru/libs.jsadriver.ruadriver.ru
api.adriver.ru/v1/ad.jsadriver.ruapi.adriver.ru

Maintenant, regardons les valeurs de Sender / Recipient lors du chargement de contenu avec des scripts lors de l'exĂ©cution des requĂȘtes ajax.

Valeurs de l'expéditeur / destinataire lors du chargement de contenu avec des scripts
Script exĂ©cutableOĂč va la demande?ExpĂ©diteurDestinataire
adm.site.net/admin.jssite.net/api/adm.site.netsite.net
adriver.ru/libs.jsadriver.ru/api/adriver.ruadriver.ru
api.adriver.ru/v1/ad.jsapi.2gis.ru / ...api.adriver.ruapi.2gis.ru


2.6 Détails sur les tables de définition de contexte


Examinons plus en détail les options d'ouverture de pages (onglets du navigateur) dont nous disposons et la valeur de contexte qui sera obtenue.

P1 - l'utilisateur de la page précédente a cliqué sur le lien ou cliquez sur le bouton soumettre du formulaire. Le gestionnaire de navigateur d'événements standard pour le lien / formulaire a redirigé l'utilisateur vers cette page. Situation normale. Transition sécurisée entre les pages d'un domaine ou différents domaines.

Lorsque vous passez Ă  site.net Ă  partir d'un autre domaine google.com, le contexte sera Ă©gal au domaine prĂ©cĂ©dent (google.com). Et l'utilisateur sur le nouveau domaine site.net ne sera pas autorisĂ© (mĂȘme si l'onglet voisin de ce site oĂč l'utilisateur est autorisĂ© est ouvert).

Une transition indĂ©pendante rĂ©pĂ©tĂ©e de l'utilisateur (sans l'aide de scripts) via le lien vers le mĂȘme site conduira Ă  nouveau Ă  la situation P1 , mais le contexte sera dĂ©jĂ  Ă©gal au domaine site.net, car par la rĂšgle Context = Referrer.

Il est fait pour protéger contreAttaque CSRF .

P5 - l'utilisateur de la page précédente a cliqué sur le lien créé / modifié par un script téléchargé depuis le domaine de la page précédente; ou l'utilisateur de la page précédente a cliqué sur le bouton d'envoi du formulaire créé / modifié par le script (en changeant la balise FORM, y compris ses champs INPUT). Le gestionnaire de navigateur d'événements standard pour le lien / formulaire a redirigé l'utilisateur vers cette page.

P9 est identique Ă  P5 , seul le script Ă©tait externe, ou il existe une fonction d'un script externe dans la chaĂźne d'appel (protection contre la modification des fonctions de script du script de site par un script tiers).

PD - l'utilisateur a ouvert la page à une adresse directe. Ouverture sûre.
L'utilisateur doit ouvrir la page en entrant l'URL dans la barre d'adresse. Ou ouvrez un site Ă  partir des signets du navigateur.

L'ouverture d'un lien Ă  partir d'un raccourci sur le bureau d'un autre programme, toute autre situation oĂč le systĂšme d'exploitation envoie une commande au navigateur pour ouvrir le lien doit ĂȘtre considĂ©rĂ©e comme un cas PG (l'ouverture du lien est initiĂ©e par le navigateur). MĂȘme si l'utilisateur appuie sur F5 pour recharger la page, cela doit ĂȘtre considĂ©rĂ© comme un cas PG . Ce n'est que si l'utilisateur entre dans la barre d'adresse et appuie sur EntrĂ©e que le navigateur sera considĂ©rĂ© comme un PD .

Ceci est fait pour protéger les attaques CSRF contre d'autres programmes.

Le fait de suivre le lien d'un autre programme mĂšnera l'utilisateur vers le site attaquĂ© avec un jeton invalide et un contexte vide, qui seront enregistrĂ©s mĂȘme si l'utilisateur appuie sur F5 (actualiser la page). Vous ne pouvez pas vous connecter tant que l'utilisateur n'a ouvert aucun lien vers les pages du site (situation P1 ).

Ainsi, si un attaquant d'un autre programme décide de faire glisser à un utilisateur autorisé un lien vers la page du site site.net qui exécute une commande, il ne pourra pas le faire facilement. Il faudra forcer l'utilisateur à cliquer sur un autre lien sur cette page, puis forcer l'utilisateur à s'y authentifier, et alors seulement ... Ensuite, l'utilisateur sera trÚs probablement sur une autre page de site.net.

P2 - sur la page précédente pour un lien ou un formulaire placé à l'origine sur la page, un script natif de la page précédente a généré un événement click / submit. Aucune fonction de la chaßne d'appels n'appartenait à des scripts externes. Le navigateur a redirigé l'utilisateur vers cette page.

Si la nouvelle page appartient au mĂȘme domaine, le contexte est hĂ©ritĂ© de la page prĂ©cĂ©dente. Si la nouvelle page appartient Ă  un domaine Ă©tranger, le contexte sera vide.

P6 est le mĂȘme que P2 , seul le lien / formulaire a Ă©tĂ© crĂ©Ă© / modifiĂ© par son propre script.

PA est le mĂȘme que P2 , seul le lien / formulaire a Ă©tĂ© crĂ©Ă© / modifiĂ© par un script externe.

PE - le script de la page précédente a provoqué l'ouverture de cette page avec la commande window.location.href ou window.open (...).

Si le script de page site.net redirige l'utilisateur vers la page du mĂȘme domaine, le champ Contexte sera hĂ©ritĂ© de la page de gĂ©nĂ©ration. Dans ce cas, Context = site.net.

Si la page ya.ru a été ouverte et que le script nous a transférés sur maps.ya.ru, le contexte de la nouvelle page sera déjà vide. Dans les actions ultérieures de l'utilisateur, le contexte restera presque toujours vide, ce qui compliquera l'autorisation de l'utilisateur sur le site.

Le protocole implique que l'ouverture d'un site sur un autre est une opération dangereuse. Cela protÚge l'utilisateur contre le suivi non autorisé par ces sites et contre les attaques CSRF.

P3 - similaire à P2 , seul l'événement click / submit a été déclenché par un script externe. Le contexte devient vide (une séquence aléatoire d'octets est envoyée à la place), ce qui protÚge les sites tiers du suivi du site (réseaux de banniÚres).

P7 - similaire à P6 , seul le lien / formulaire a été créé / modifié par un script externe.

PB - similaire à PA , seul le lien / formulaire a été créé / modifié par un script externe.

PF - similaire Ă  PE , seul le script provocateur Ă©tait externe.

P4 - le navigateur a rechargé la page suite au traitement de la balise <META>. La balise était à l'origine sur la page. Redirection légale. Le contexte persistera à partir de la page d'origine. Comme c'est le cas avec PE .

P8 - le navigateur a rechargé la page suite au traitement de la balise <META>. Mais la balise a été créée / modifiée par son propre script. Ceci est valide, mais le contexte persistera à partir de la page d'origine. Comme c'est le cas avec PE . Il ne sera pas possible d'attirer le jeton légal de l'utilisateur de cette maniÚre.

PC - similaire à P8 , seul script externe. Le site ouvert recevra un nombre aléatoire comme contexte.

PG - le navigateur ouvre des liens sur commande à partir du systÚme d'exploitation. Il se peut que vous cliquiez sur un lien d'un autre programme, ouvriez un raccourci sur le bureau. Il peut s'agir d'une commande d'un autre programme, à votre insu. Dans ce cas, la source n'est pas approuvée et le champ Contexte restera vide lors de toute manipulation utilisateur.

Ceci est fait pour protéger les attaques CSRF contre d'autres programmes.

Si le navigateur lui-mĂȘme ouvre les onglets prĂ©cĂ©demment enregistrĂ©s, le contexte de la page est dĂ©fini Ă©gal Ă  la valeur de cette page au moment de la fermeture du navigateur.

De plus, cette catĂ©gorie comprend toutes les situations oĂč le navigateur est redirigĂ© par le serveur vers une autre page (de son propre domaine ou de quelqu'un d'autre) suite au traitement de l'en-tĂȘte HTTP Header. Si la redirection va vers votre propre page, la valeur de contexte est hĂ©ritĂ©e. Si la redirection va Ă  quelqu'un d'autre, elle est rĂ©initialisĂ©e.

Ceci est fait pour protéger contre le suivi des attaques des serveurs Web.

Soit dit en passant, une telle rùgle peut entraüner des problùmes avec la mise en Ɠuvre actuelle de l'autorisation interdomaine. Si aprùs autorisation, le serveur SSO redirige l'utilisateur vers le site cible, ce dernier y sera anonyme.

Pour Ă©viter Ă  l'utilisateur de «perdre» l'autorisation d'origine sur le site cible, il est nĂ©cessaire de transmettre des informations d'authentification entre les requĂȘtes du serveur. L'algorithme peut ĂȘtre le suivant:

  1. l'utilisateur crée et active une clé permanente pour le site cible;
  2. Passe du site cible au serveur SSO lui-mĂȘme en cliquant sur le lien appropriĂ©;
  3. active la clé permanente existante à partir du serveur SSO;
  4. AprĂšs avoir reçu la clĂ© Changed-To, le serveur SSO envoie une requĂȘte inter-serveur au site cible;
  5. l'utilisateur clique sur le bouton «Continuer» de la page d'autorisation, ce qui le renvoie au site cible;
  6. afin de respecter la rÚgle P1 , le site cible propose à l'utilisateur de cliquer à nouveau sur le bouton de lien pour y accéder (par exemple, vers la page d'accueil d'un participant autorisé).
  7. l'utilisateur clique sur le bouton de lien, la page se recharge et l'utilisateur est déjà autorisé sur le site cible.

La description de l'algorithme semble en fait plus compliquĂ©e que sa mise en Ɠuvre. Une implĂ©mentation de l'interface utilisateur pourrait ressembler Ă  ceci:

Une nouvelle entrée sur le site cible ne nécessite plus l'autorisation SSO de l'utilisateur. Il suffit d'activer la clé permanente.


Examinons maintenant de plus prĂšs les options de chargement de contenu sur les pages et la valeur de contexte qui sera obtenue sur demande.

R1 - la ressource est chargée par le navigateur suite à l'analyse de la page (le navigateur a rencontré une balise de ressource). La valeur de contexte lors de la génération d'une demande de ressource est extraite de la page Contexte contenant la balise de ressource.

Par exemple, si site.net a un cadre adriver.ru dans lequel l'image de img.disk.com est chargĂ©e, puis lors de la gĂ©nĂ©ration d'une requĂȘte HTTP vers img.disk.com, le navigateur prend la valeur calculĂ©e pour la page comme contexte site.net.

R4 est identique à R1 . Seule la balise de ressource a été créée / modifiée par son propre script, à la suite de quoi le navigateur DOM Parser a fonctionné. Par exemple, sur la page site.net/index.html, notre propre script site.net/require.js a inséré un autre script personnalisé (<script src = ...> tag) site.net/min.js, ce qui a forcé le navigateur à générer une demande de téléchargement de fichier main.js. Le champ Contexte de cette demande sera défini sur la valeur calculée pour la page site.net.

R7 est identique à R1 . Mais comme la balise de ressource a été créée / modifiée par un script externe, lorsque la ressource est demandée, le navigateur générera un jeton basé sur un contexte vide et une séquence aléatoire de 256 bits. En conséquence, le script de l'attaquant externe evil.com/drop.js, intégré à la page du domaine site.net attaqué, essayant de répondre à une demande adressée au site.net cible au nom de la victime échouera, car le serveur recevra une demande avec un jeton aléatoire et ne pourra pas identifier l'expéditeur de la demande.

RA - l'analyseur télécharge le contenu suite à l'analyse d'un autre contenu Par exemple, la feuille de style site.net/css/common.css, téléchargée pour la page site.net/index.html, importe la feuille de style fonts.google.com/fonts/Roboto.css, ce qui oblige le navigateur à demander fonts.google .com au nom de Referrer = site.net/css/common.css. La valeur de contexte dans ce cas sera égale à Referrer. Ensuite, le fichier de styles Roboto.css importe la police Roboto.ttf, ce qui oblige le navigateur à demander fonts.google.com/fonts/Roboto.ttf au nom de Referrer = fonts.google.com/fonts/Roboto.css. La valeur de contexte sera égale à Referrer dans ce cas, mais elle est différente.

Supposons, hypothétiquement, que le fichier Roboto.css (ressource externe) n'importe pas de police / style, mais essaie de mener une attaque CSRF avec cette instruction:
@import "https://site.net/api/payment?victim_params" 
dans l'espoir de répondre à la demande sur site.net au nom d'un utilisateur autorisé. Mais le problÚme pour l'attaquant est que site.net s'attend à recevoir un jeton de l'utilisateur:

$ T_s ^ 1 = HMAC_k (site.net \ cup site.net \ cup site.net) $


Ensuite, comme avec une telle demande CSRF, le navigateur créera un jeton:

$ T_s ^ 2 = HMAC_k (fonts.google.com \ cup site.net \ cup fonts.google.com) $


Et une demande adressée au site viendra de la part d'un site anonyme qui ne dispose pas de droits d'accÚs pour effectuer ces opérations.

RB - le contenu est tĂ©lĂ©chargĂ© par le propre script du site. Dans ce cas, Context est utilisĂ© pour calculer le jeton de demande, qui est Ă©gal Ă  la page contenant le script. Pour le script site.net/1.js de la page Contexte site.net, il sera Ă©gal au contexte de la page elle-mĂȘme.
Notez que le contexte de la page elle-mĂȘme n'est pas toujours Ă©gal au nom de domaine de la page et dĂ©pend de la façon dont elle a Ă©tĂ© ouverte Ă  l'origine.
Supposons que le site de l'attaquant evil.com ouvre la page du site attaquĂ© site.net, oĂč le script site.net/util.js exĂ©cute une requĂȘte avec les paramĂštres transmis via l'URL de la page. L'attaquant espĂšre, en glissant «ses paramĂštres» via l'URL, forcer son propre script site.net/util.js Ă  exĂ©cuter une requĂȘte ajax pour effectuer des actions importantes au nom de la victime.

Supposons que l'utilisateur lui-mĂȘme soit allĂ© sur evil.com via un lien direct. Le contexte de evil.com sera alors evil.com. De plus evil.com ouvre le script site.net/api/payment?victim_params avec un script , dans l'espoir de mener une attaque, mais le champ Contexte de site.net sera vide (cas PE / PF). Le script site.net/utils.js, exĂ©cutant une requĂȘte ajax, forcera le navigateur Ă  prendre Context depuis la page site.net. Et c'est vide chez nous. Mais alors site.net recevra une demande ajax avec ce jeton:

$ T = HMAC_ {site.ru-key} (site.net \ cup site.net \ cup random) $


alors que pour un utilisateur autorisé, il est prévu:

$ T_s = HMAC_ {site.ru-key} (site.net \ cup site.net \ cup site.net) $


site.net verra un jeton inconnu et ne pourra pas identifier l'utilisateur. La protection a fonctionné.
Soit dit en passant, Ă  cause d'un tel schĂ©ma, la rĂ©alisation d'une autorisation interdomaine via des fenĂȘtres contextuelles sera irrĂ©aliste.
Pour implĂ©menter l'authentification unique sous le protocole, vous devez ouvrir un nouvel onglet pour la page du serveur d'autorisation. Et en mĂȘme temps, l'utilisateur doit ouvrir un tel onglet. La meilleure option est d'ouvrir Ă  l'utilisateur le lien appropriĂ© depuis le site cible.

RC - le contenu est chargé avec un script de site Web externe. Dans ce cas, Context est utilisé pour calculer le jeton de demande, qui est égal au champ Request Referrer.

MalgrĂ© le fait que RA , RB et RC protĂšgent contre les attaques CSRF, ils conduisent nĂ©anmoins Ă  la gĂ©nĂ©ration de jetons constants. Et cela vous permet d'implĂ©menter l'authentification interdomaine et l' authentification utilisateur interdomaine (lorsque vous devez dĂ©terminer que plusieurs demandes adressĂ©es Ă  diffĂ©rents serveurs provenaient de cet utilisateur). Ce qui peut ĂȘtre mis en Ɠuvre pour lui donner une autoritĂ© Ă©gale sur un groupe de domaines connexes.

Si la page du site a Ă©tĂ© ouverte automatiquement Ă  partir d'un autre site, vous ne pourrez pas vous y connecter, mĂȘme si vous rechargez ce site vous-mĂȘme. Parce que Source hĂ©ritera d'une valeur nulle. Le navigateur doit signaler Ă  l'utilisateur ce fait (Source = alĂ©atoire):

Ceci est fait pour se protĂ©ger contre les sites qui forcent d'autres fenĂȘtres contextuelles Ă  s'ouvrir (elles-mĂȘmes ou leurs scripts externes), et sur les sites qui s'ouvrent, ils redĂ©marreront ou crĂ©eront de faux boutons de fermeture sur tout l'Ă©cran menant aux mĂȘmes sites. C'est-Ă -dire cela empĂȘche une tentative de suivi, dans l'espoir d'obtenir un jeton valide.

Toute tentative par le site d'imiter vos actions avec un script externe , ou une tentative par un script externe de créer directement ou indirectement une balise initiatrice et de vous la glisser, conduira à une source vide et à l'ajout d'octets aléatoires au moment du calcul du hachage de jeton.

L'astuce pour créer ou modifier la balise <script> dans la page attaquée dans le DOM n'aidera pas. Le champ Source restera vide.

Mais dans les mĂȘmes conditions, les scripts internes conduiront Ă  des requĂȘtes avec Source Ă©gale Ă  sa valeur prĂ©cĂ©dente. Et si la page d'origine avait Source = Domain, tout irait bien. L'utilisateur restera autorisĂ© pour de telles demandes.

Mais avec des scripts téléchargés à partir de ressources tierces (CDN), des problÚmes peuvent survenir dans certains cas. Et c'est vrai, car L'intégrité du code CDN n'est pas garantie. Si vous ne voulez pas perdre l'autorisation de l'utilisateur, conservez les scripts sur votre site et téléchargez-les depuis votre domaine. Cela ressemble à l'interdiction d'utiliser des liens http sur les pages https.

Nous dĂ©crivons la situation dans laquelle un dĂ©veloppeur peut tomber. À la suite des actions de l'utilisateur, votre script redirige un utilisateur autorisĂ© vers l'une des pages du site (par exemple, cela se fait par un formulaire), ce qui nĂ©cessite que l'utilisateur reste autorisĂ©. Votre script appelle, par exemple, $ (form) .submit () Ă  l'aide d'un script jQuery chargĂ© Ă  partir du CDN. Dans ce cas, le navigateur voit que dans la pile d'appels qui a dĂ©clenchĂ© l'Ă©vĂ©nement d'envoi du formulaire, il existe une fonction d'un script externe. Pour empĂȘcher les attaques XSS / CSRF , le navigateur rend le champ Source vide et ajoute des octets alĂ©atoires Ă  la gĂ©nĂ©ration du jeton (cas P9 ). En consĂ©quence, l'utilisateur sur la nouvelle page devient soudainement non autorisĂ© et ne peut pas terminer l'opĂ©ration. Cela peut ĂȘtre dĂ©routant pour les dĂ©veloppeurs habituĂ©s Ă  utiliser les CDN.

2.7 Scénarios de protocole


Voici les principaux scĂ©narios probables de l'utilisateur travaillant avec le site, affectant toutes les situations possibles et les Ă©tapes de leur mise en Ɠuvre (connexion anonyme, «se souvenir de moi», «oublie-moi», passer Ă  l'utilisation d'une clĂ© permanente, autorisation et sortie, enregistrement et authentification Ă  deux facteurs, exportation / importation de clĂ©s, remplacement de clĂ©s, etc.)
1 Forum, Blog, Wikipédia
UtilisateurNavigateurServeur de site
1.1 Premier accÚs à ce site.GénÚre une clé aléatoire. Envoie un jeton non sécurisé à partir d'une clé aléatoire.Nous considérons l'utilisateur anonyme. Nous utilisons ce jeton comme identifiant de la session utilisateur.
1.2 Afficher les pages.Envoie un jeton sécurisé contre une clé aléatoire.Fournit du contenu public. Vérifie le bit de jeton inférieur de 128 bits.
1.3 Essayer de faire des actions (ajouter des commentaires, etc.)Envoie un jeton sĂ©curisĂ© contre une clĂ© alĂ©atoire.Indique Ă  l'utilisateur qu'il doit se prĂ©senter au systĂšme. À ce stade, le site est convaincu que la clĂ© est alĂ©atoire.
1.4 Indique au navigateur de faire en sorte que le site s'en souvienne.Corrige la clé actuelle. Envoie une clé permanente. Le jeton, comme précédemment, est transmis sous une forme protégée. Envoie cette clé jusqu'à ce qu'elle reçoive le succÚs du serveur.Maintenant, le site sait que la clé est fixe. Envoie CSI-Token-Action: succÚs. Il peut appliquer la technique de mémorisation de l'utilisateur pendant une longue période: il enregistre un jeton dans la base de données pour la récupération de session future avec l'utilisateur. Ou maintient la session plus longtemps (enregistrer dans un fichier).
1.5 Effectue des actions (ajout de messages, vote, etc.)Envoie un jeton CSI sécurisé à partir d'une clé fixe.Enregistre les actions de cet utilisateur.
1.6 Ferme l'onglet du navigateur.Rien.Il attend les demandes des utilisateurs suivantes.
1.7 Retourne sur le site.Envoie une clé fixe sécurisée.Continue de travailler avec l'utilisateur. Les données de session sont extraites de la base de données ou du fichier temporaire par jeton.
1.8 Annule la fixation des clés (oubliez-moi sur ce site)Envoie une clé de déconnexionSupprime les données utilisateur dans la base de données, comme il s'agissait d'une clé fixe et l'utilisateur ne pourra plus jamais la récupérer. Met fin à la session. Le navigateur n'enverra plus jamais un tel jeton.
1.9 Lorsque vous accédez au site pour la premiÚre fois aprÚs la déconnexion.GénÚre une clé aléatoire. Envoie un jeton non sécurisé à partir d'une clé aléatoire.Ce site est déjà un nouvel utilisateur. Nous considérons l'utilisateur anonyme. Nous utilisons le jeton comme identifiant de la session utilisateur.
1.10 Parcourir les pages.Envoie un jeton sécurisé contre une clé aléatoire.Fournit du contenu public. Vérifie le bit de jeton inférieur de 128 bits.
1.11 Ferme l'onglet du navigateur.Rien.Interrompt une session aprĂšs une temporisation.
1.12 Retourne sur le site.GénÚre une clé aléatoire. Envoie un jeton non sécurisé à partir d'une clé aléatoire.Nous considérons l'utilisateur anonyme. Nous utilisons ce jeton comme identifiant de la session utilisateur.
1.13 Crée une clé de site permanente.Rien.
1.14 Activation de la clĂ© permanente.Demande Ă  l'utilisateur: voulez-vous vraiment que le site se souvienne de votre clĂ©? Assurez-vous que ce site est bien celui qu'il prĂ©tend ĂȘtre.
Envoie le changement vers. Ce n'est qu'à ce moment que le navigateur transmet le jeton aux personnes non protégées. Dans tous les cas suivants, le navigateur transmettra toujours un jeton protégé lors de la connexion. Mais pour cela, le site doit confirmer le changement de jetons via CSI-Token-Action: succÚs.
N'oubliez pas le nouveau jeton utilisateur dans la base de données. Modifie l'ID de session. Continue d'attendre les demandes du nouveau jeton. Envoie CSI-Token-Action: succÚs.
1.15 Effectue des actions (ajout de messages, vote, etc.)Envoie un jeton sécurisé à partir d'une clé permanenteEnregistre les actions de cet utilisateur. Vérifie le jeton inférieur de 128 bits.
1.16 Effectue la "Sortie".Envoie une clé de déconnexionRompre la session
1.17 Retourne sur le site.GénÚre une clé aléatoire. Envoie un jeton non sécurisé à partir d'une clé aléatoire.Nous considérons l'utilisateur anonyme. Nous utilisons le jeton comme identifiant de la session utilisateur.
1.18 Activation de la clé permanente.Envoie le changement vers. Le jeton est déjà protégé, car la derniÚre fois que le site nous a répondu CSI-Token-Action: succÚs.Nous chargeons les données utilisateur enregistrées à partir de la base de données. Modifie l'ID de session. Nous travaillons avec le jeton enregistré. Nous savons qu'un jeton est basé sur une clé permanente.
1.19 Ferme l'onglet du navigateur.Rien. Ou la clé de déconnexion, si "sortie automatique" est configuré lorsque l'onglet est fermé.Interrompt une session aprÚs un délai d'expiration ou à la réception d'une clé de déconnexion.
2 Boutique en ligne ou site d'annonces
UtilisateurNavigateurServeur de site
2.1 D'abord inclus sur ce site.GénÚre une clé aléatoire. Envoie un jeton non sécurisé à partir d'une clé aléatoire.Nous considérons l'utilisateur anonyme. Nous utilisons ce jeton comme identifiant de la session utilisateur.
2.2 Afficher les pages.Envoie un jeton sécurisé contre une clé aléatoire.Fournit du contenu public. Vérifie le bit de jeton inférieur de 128 bits.
2.3 Essayer de faire des actions (ajouter des publicitĂ©s, des achats, etc.)Envoie un jeton sĂ©curisĂ© contre une clĂ© alĂ©atoire.Indique Ă  l'utilisateur qu'il doit se prĂ©senter au systĂšme. À ce stade, le site est convaincu que la clĂ© est alĂ©atoire.
2.4 Indique au navigateur de faire en sorte que le site s'en souvienne.Corrige la clĂ© actuelle. Avant la premiĂšre demande, il envoie un jeton CSI sĂ©curisĂ© avec la clĂ© permanente. AprĂšs avoir rĂ©ussi, il arrĂȘte d'envoyer cette clĂ©.Maintenant, le site sait que la clĂ© est fixe. Il peut appliquer la technique de la mĂ©morisation de l'utilisateur pendant une longue pĂ©riode: soit il enregistre le jeton dans la base de donnĂ©es pour une rĂ©cupĂ©ration future de la session avec l'utilisateur. Ou tient la session plus longtemps (plusieurs jours).
2.5 Effectue des actions (ajout d'annonces, d'achats, etc.)Envoie un jeton CSI sécurisé à partir d'une clé fixe.Enregistre les actions de cet utilisateur. Vérifie le jeton.
2.6 Ferme l'onglet du navigateur.Rien.Tient la session. Avec une inactivité prolongée, il enregistre les données de session de la RAM dans un fichier ou une base de données.
2.7 Se connecte à nouveau au site.Envoie une clé fixe sécurisée.La séance se poursuit. Nous travaillons avec l'utilisateur, comme si de rien n'était.
2.8 Crée ou importe une clé de site persistante.Rien.
2.9 Activation de la clé permanente. Ici, en fait, il y a une transition de l'utilisation d'une clé fixe à une clé permanente.Envoie une clé de modification. Le jeton est transmis sans protection pour la clé nouvellement créée et le jeton non enregistré sur le serveur. Le jeton est transféré protégé pour la clé importée.2.9.A. Jeton basé sur la nouvelle clé.
Si l'ancien jeton a été enregistré dans la base de données - changez simplement le jeton dans la base de données.

2.9.V. Jeton basé sur la clé importée.
Si l'ancien jeton a été enregistré dans la base de données - supprimez-le. Lors de la fusion de deux profils d'un utilisateur (ce que vous pouvez lui demander) - car en fait, l'utilisateur a deux jetons stockés dans la base de données: à partir d'une clé fixe et d'une clé importée. Modifie l'ID de session. Envoie CSI-Token-Action: succÚs. Il continue d'attendre les demandes du nouveau jeton.
2.10 Effectue des actions (achats, affichage d'annonces, panier d'achat, favoris, avis, comparaisons)Envoie un jeton sécurisé à partir d'une clé permanenteEnregistre les actions de cet utilisateur. Vérifie le jeton inférieur de 128 bits.
2.11 Ferme l'onglet du navigateur.Rien. Ou la clé de déconnexion, si "sortie automatique" est configuré lorsque l'onglet est fermé.Interrompt une session aprÚs un délai d'expiration ou à la réception d'une clé de déconnexion.
3 sites avec pré-inscription obligatoire (réseau social)
UtilisateurNavigateurServeur de site
3.1 Inclus sur ce site.GénÚre une clé aléatoire. Envoie un jeton non sécurisé à partir d'une clé aléatoire.Nous considérons l'utilisateur anonyme. Nous utilisons ce jeton comme identifiant de la session utilisateur. Nous ne laissons que dans les sections publiques. Lorsque vous essayez d'accéder au contenu fermé, nous traduisons dans le formulaire d'autorisation.
3.2 Crée une clé de site permanenteRien
3.3 Activation de la clĂ© permanente.Demande Ă  l'utilisateur: voulez-vous vraiment que le site se souvienne de votre clĂ©? Assurez-vous que ce site est bien celui qu'il prĂ©tend ĂȘtre.

Envoie le changement vers.
Le jeton est transmis en clair .
N'oubliez pas le nouveau jeton. Nous ne sommes pas pressés d'enregistrer dans la base de données tant que l'enregistrement n'est pas encore terminé. Nous gardons l'utilisateur sur le formulaire «Inscription» jusqu'à confirmation de la propriété (par téléphone, courrier). Envoie CSI-Token-Action: enregistrement
3.4 Entrez vos coordonnĂ©es.Envoie des requĂȘtes ajax. Envoie le changement vers. Ancien jeton sur la mĂȘme clĂ© alĂ©atoire.
Le nouveau jeton est déjà transféré sous une forme protégée .

DÚs qu'il réussit, il passe à l'utilisation d'un nouveau jeton (clé permanente).
Vérifie les coordonnées. Si tout réussit, il envoie CSI-Token-Action: succÚs. Sinon: CSI-Token-Action: inscription. Si CSI-Token-Action: abandon est envoyé, l'enregistrement ne réussit pas. Le navigateur devrait revenir à l'utilisation d'un nombre aléatoire (annulation de la saisie). Et signalez cela à l'utilisateur.
3.5 Va dans la section fermée du siteEnvoie un jeton sécurisé à partir d'une clé permanente.Fournit un accÚs en vérifiant le jeton inférieur de 128 bits.
3.6 Effectue des actions (achats, affichage d'annonces, panier d'achat, favoris, avis, comparaisons)Envoie un jeton sécurisé à partir d'une clé permanente.Enregistre les actions de cet utilisateur. Vérifie le jeton inférieur de 128 bits.
3.7 Ferme l'onglet du navigateur.Rien. Ou la clé de déconnexion, si "sortie automatique" est configuré lorsque l'onglet est fermé.Interrompt une session aprÚs un délai d'expiration ou à la réception d'une clé de déconnexion.
3.8 Inclus dans ce site.GénÚre une clé aléatoire. Envoie un jeton non sécurisé à partir d'une clé aléatoire.Nous considérons l'utilisateur anonyme. Nous utilisons ce jeton comme identifiant de la session utilisateur. Nous ne laissons que dans les sections publiques. Lorsque nous essayons d'accéder à un contenu fermé, nous informons l'utilisateur qu'il est un utilisateur anonyme.
3.9 Activation de la clé permanente.Envoie le changement vers. Les deux jetons sont transmis de maniÚre sécurisée.Nous chargeons les données utilisateur de la base de données par jeton (le 128 bits le plus élevé). Maintenant, le site sait qui est cet utilisateur.
3.10 Modifie la clĂ© permanente du domaine (en un autre permanent)Demande Ă  l'utilisateur: voulez-vous vraiment que le site se souvienne de votre nouvelle clĂ©? Assurez-vous que ce site est bien celui qu'il prĂ©tend ĂȘtre.

Envoie le changement vers.
Le nouveau jeton est transféré en clair; vieux - dans protégé
Remplace le jeton de la base de données par un nouveau. Charge les données de profil. Utilise un nouveau jeton à partir des demandes suivantes. Envoie CSI-Token-Action: succÚs
3.11 Effectue des actions (ajout de messages, vote, etc.)Envoie un jeton sécurisé à partir d'une nouvelle cléEnregistre les actions de cet utilisateur. Vérifie le jeton inférieur de 128 bits.
3.12 Effectue une "sortie".Envoie une clé de déconnexionRompre la session
3.13 Inclus sur ce site.GénÚre une clé aléatoire. Envoie un jeton non sécurisé à partir d'une clé aléatoire.Nous considérons l'utilisateur anonyme. Nous utilisons ce jeton comme identifiant de la session utilisateur. Nous traduisons vers le formulaire d'autorisation.
3.14 Activation d'une clé permanenteEnvoie le changement vers. Les deux jetons sont transmis de maniÚre sécurisée.Nous chargeons les données utilisateur de la base de données par jeton (le 128 bits le plus élevé).
3.15 Importe une clé différente pour ce domaine.
Important: la clĂ© importĂ©e doit ĂȘtre enregistrĂ©e sur le serveur.
Envoie une clé Déconnexion Passe à l'utilisation d'une clé aléatoire.Rompre la session
3.16 Active une nouvelle cléEnvoie le changement vers.
Les deux jetons sont transmis de maniÚre sécurisée.

Veuillez noter que la clé «précédente» est déjà une clé aléatoire (voir 3.15).
Cette clĂ© doit ĂȘtre connue de la base de donnĂ©es. L'exportation de clĂ© Ă  partir du navigateur n'est autorisĂ©e que pour les jetons enregistrĂ©s. Ainsi, le navigateur est sĂ»r que la clĂ© importĂ©e est connue du serveur et l'envoie sĂ©curisĂ©e. Sinon, le serveur ne peut pas reconnaĂźtre le jeton utilisateur et ne peut pas l'autoriser.
3.17 Effectue des actions (ajout de messages, vote, etc.)Envoie un jeton sécurisé à partir d'une nouvelle cléEnregistre les actions de cet utilisateur. Vérifie le jeton inférieur de 128 bits.
3.18 sortEnvoie une clé de déconnexionRompre la session
4 sites avec autorisation Ă  deux facteurs (Sberbank Online)
UtilisateurNavigateurServeur de site
4.1 Inclus sur ce site.GénÚre une clé aléatoire. Envoie un jeton non sécurisé à partir d'une clé aléatoire.Nous considérons l'utilisateur anonyme. Nous utilisons ce jeton comme identifiant de la session utilisateur. Nous traduisons vers le formulaire d'autorisation.
4.2 Crée une clé de site permanenteRien
4.3 Activation de la clĂ© permanente.Demande Ă  l'utilisateur: voulez-vous vraiment que le site se souvienne de votre clĂ©? Assurez-vous que ce site est bien celui qu'il prĂ©tend ĂȘtre.

Envoie le changement vers.
Le jeton est transmis en clair .
Le jeton n'est pas connu du site. N'oubliez pas le nouveau jeton. . CSI-Token-Action: registration.
4.4 . «»Change-To success. .
.
. .
4.5 .ajax-. Change-To.

success, ( ).
. ( ). CSI-Token-Action: success
.
, CSI-Token-Action: registration.

CSI-Token-Action: abort. , .
4.6 .Token.
4.7 «»Logout
4.8 .. .. . «».
4.9 .Change-To.
(.. ; ).
( 128-). , . , . . CSI-Token-Action: success
4.10 .ajax-. .. . . .
4.11 .Token ..
4.12 «»Logout
4.12 ().Logout, «» . ., Logout. .
5 : ESXi
UtilisateurNavigateur
5.1 .. .. . .
5.2 .
5.3 ( , ). , .
5.4 (SSH, RDP). ( .htaccess – . )
5.5
5.6 .. .. . .
5.7 .Change-To.
(.. , ; ).
(. ).

( 128-).
128-. .
CSI-Token-Action: success.
CSI-Token-Action: abort ( ), 403 – Forbidden.
.
5.8..
5.9Logout, «» . ., Logout. .
6 :
UtilisateurNavigateur
6.1 .. .. . . CSI-Support: yes;
6.2 .
6.3 .: , ? , , .

Change-To.
.
, CSI-Token-Action: registration, .. .
6.4 / « »/ POST- . Change-To, ./. . . CSI-Token-Action: success
6.5 «»Token/. .
6.6Logout
6.7 .. .ConsidÚre l'utilisateur anonyme. Affiche le message "AccÚs refusé"
6.8 Activation de la clé permanente.Envoie le changement vers. Le jeton est transmis sous une forme protégée (car il est déjà connu de l'appareil; nous avons passé l'enregistrement plus tÎt).Identifie l'utilisateur par le jeton 128 bits le plus élevé. Vérifie les bits faibles.
6.9 Effectue des actions privilégiéesEnvoie un jeton sécurisé à partir d'une clé permanenteEffectue des actions conformément aux privilÚges de l'utilisateur.
6.10 SortEnvoie une clé de déconnexionRompre la session

Un exemple de configuration d'accÚs aux jetons basé sur le fichier .htaccess.
 <Directory "/var/www/html"> AuthType CSI AuthName "Restricted Content" AuthTokensFile /etc/apache2/.csi_keys Require valid-user </Directory> 

 chat /etc/apache2/.csi_keys 
 # # Client Self Identification tokens file # # CSI-Domain-Key UserName Role 84bc3da1b3e33a18e8d5e1bdd7a18d7a166d77ac1b46a1ec38aa35ab7e628ab5 MelnikovIN admin 6d7fce9fee471194aa8b5b6e47267f0348a24b70a0b376535542b996af517398 BoshirovAM user 


2.7.1 Algorithme de calcul des jetons utilisateur possibles d'un site à l'aide d'une clé connue


Si nous connaissons la clĂ© de domaine K, nous pouvons facilement calculer le jeton T "valide" possible de l'utilisateur qui viendra avec ses demandes. Pour cela, il faut que la condition soit remplie: l'initiateur des requĂȘtes, le destinataire des requĂȘtes et le contexte d'exĂ©cution doivent correspondre et ĂȘtre Ă©gaux au domaine. En d'autres termes, si nous avons le nom de domaine vsphere.local, alors:
 Sender = Recipient = Context = vsphere.local 

À partir de lĂ , le jeton d'origine (brut) est calculĂ© comme suit:

$T_s = HMAC_{K}(Sender \cup Recipient \cup Context)$


Lors de la transmission, le jeton d'origine sera davantage protĂ©gĂ©. Les 128 bits infĂ©rieurs du jeton seront hachĂ©s avec le sel passĂ© dans l'en-tĂȘte de demande CSI-Salt * . Ainsi, le site verra le jeton suivant:

$T = Hi(T_s) \cup HMAC_{salt}( Lo(T_s) )$


OĂč Hi correspond aux 128 bits supĂ©rieurs, Lo correspond aux 128 bits infĂ©rieurs du jeton d'origine.
Habituellement, pour les consoles de gestion fermées sur un réseau d'entreprise, les consoles Web ne chargent pas de scripts, de cadres, etc. externes. Par conséquent, cette condition sera remplie dans la plupart des cas.

* Pour la méthode de formation du sel, voir la section «Procédure d'échange de sel entre le navigateur et le serveur».

2.8 Traitement des jetons sur le serveur


Envoi d'un token au serveur (sans clés)


État du jeton T dans la session de siteActions du serveur de site
Inconnu, .

. .
128 .
. CSI-Salt.

( 128 ).
CSI-Salt – .
. CSI-Token.

, CSI-Token-Action: invalid. 400.

– 200.



Permanent


Le navigateur verrouille la clé client. L'utilisateur souhaite que le site se souvienne du client pendant plusieurs sessions. Le stockage du jeton utilisateur dans sa base de données est la décision du serveur. Nous renvoyons CSI-Token-Action: succÚs ou CSI-Token-Action: abandon au client.

Envoi d'un jeton avec une clé de déconnexion


Indique que le jeton actuel ne sera plus utilisé par le navigateur. Envoyé lorsque l'utilisateur clique sur "Quitter" dans le navigateur, ou ferme l'onglet et l'option est configurée (sortie automatique lorsque l'onglet est fermé), ou refuse d'utiliser une clé fixe ("oublie-moi sur ce site").
Soit dit en passant, l'autologin ne devrait pas l'ĂȘtre. Pour des raisons de sĂ©curitĂ©.


Envoi d'un jeton avec une clé de modification


Appelons l'ancien jeton T, le nouveau - T '.

IMPORTANT: en tant que nouveau jeton T ', la valeur réelle du jeton est envoyée (pour la premiÚre fois, pour les non enregistrés), tandis que l'ancien jeton est envoyé haché (les 128 bits inférieurs).
Statut du jeton dans la base de données du serveur *Actions du serveur de site
TT '
nonnonMotif: enregistrement légal de l' utilisateur.

Remplacez l'identifiant de session utilisateur par T '
Envoyer le client CSI-Token-Action: succĂšs.

L'utilisateur a créé une clé permanente pour le site et a effectué la «connexion». Le serveur peut stocker un tel jeton sur son cÎté. Et avant cela, proposez de remplir le formulaire d'inscription (si nécessaire).

CSI-Token-Action: registration, , ( ). Change-To ( ) , success abort. , , . – ( ).
nonest lĂ : Login .

T' . . . CSI-Token-Action: success.

. Change-To , CSI-Token-Action: success, Change-To .
, . .
, «» . , -. Parce que « », .
est lĂ non: .

T T'. .
CSI-Token-Action: success.
,


est lĂ :

, , -. - .

( ). – .

. CSI-Token-Action: success
,


.
est lĂ . . . CSI-Token-Action: abort. .

256- SHA-2. ( ) .

:
  • ;
  • ;
. , – - .
, . Logout . Login . .

* , .

2.9 -


Comme mentionné précédemment, les sites peuvent interagir avec d'autres sites partenaires ou leurs sous-domaines pour fournir à l'utilisateur certaines des fonctionnalités. L'exemple le plus courant est lorsque sur le site site.ru certaines des ressources sont chargées à partir des sous-domaines img.site.ru, une partie de download.site.ru et une autre partie d'autres.

Dans ce cas, le site site.ru doit pouvoir informer ses domaines partenaires dont les demandes lui parviennent exactement. En effet, si vous ĂȘtes autorisĂ© sur site.ru, cela ne vous rend pas automatiquement autorisĂ© sur d'autres sites, y compris les sous-domaines du site. Ils verront d'autres jetons de votre part.

Voyons comment le jeton est calculé et comment cela peut nous aider.
Laissez l'utilisateur se connecter à site.ru avec une clé permanente et y avoir un jeton:

$T_1 = HMAC_{site.ru-key}(site.ru \cup site.ru \cup site.ru)$


Toutes les demandes provenant de la page du site site.ru vers le domaine site.ru et causées par:
  • balises de ressource de page (dynamique statique ou native)
  • propres scripts
aura un jeton T 1 (voir rÚgles R1 , R4 , RB ). Ce sont des demandes légitimes à site.ru.

Maintenant, laissez le client télécharger le fichier restreint à partir de la page site.ru, mais le lien mÚne à download.site.ru. Dans ce cas, le sous-domaine recevra le jeton suivant (rÚgles R1 , R4 ):

$T_2 = HMAC_{site.ru-key}(site.ru \cup download.site.ru \cup site.ru)$



Exactement le mĂȘme jeton download.site.ru recevra si une demande ajax de la page du site site.ru est exĂ©cutĂ©e dessus (rĂšgles RB , RC ).

Un autre domaine de domaine recevra un jeton:

$T_3 = HMAC_{site.ru-key}(site.ru \cup domain \cup site.ru)$



Mais, notez que si les conditions pour répondre aux demandes ne changent pas, alors pour un ensemble donné de domaines A, B, C, le navigateur générera toujours un jeton constant. Nous pouvons donc effectuer une identification interdomaines. Par exemple, comme ça.

Depuis site.ru, nous faisons des demandes ajax pour les sous-domaines. Nous passons l'identifiant ID! = T 1 de l' utilisateur, qui lui est dĂ©livrĂ© par site.ru. Les sous-domaines recevront des jetons T x pour le mĂȘme utilisateur . Chacun des sous-domaines fera un tas de son jeton avec l'ID utilisateur. Les sous-domaines partageront dĂ©jĂ  des informations sur l'ID utilisateur et ses droits avec les demandes de serveur Ă  serveur.

Le bouquet est fait une fois. Par la suite, les sous-domaines seront guidés par leurs propres jetons, comme ils seront également permanents pour la clé permanente site.ru.

3 Recommandations de sécurité


Remarque
. .


3.1 Protection des informations clés contre les accÚs non autorisés


Le protocole d'autorisation proposé protÚge l'utilisateur contre les enregistreurs de frappe qui volent vos mots de passe, car le schéma proposé n'utilise aucun mot de passe.

Mais les moyens de protĂ©ger les clĂ©s contre les compromis doivent ĂȘtre examinĂ©s plus en dĂ©tail.

Les clĂ©s peuvent ĂȘtre compromises par:

  • copie des informations clĂ©s par un logiciel malveillant (accĂšs Ă  distance)
  • accĂšs direct au fichier avec les informations clĂ©s "hors ligne" (accĂšs direct)
  • au moment de la distribution entre les appareils

En supposant que les informations clés sont stockées sur une carte à puce (nous avons considéré cette option dans la section «Mobilité du compte» ), la tùche de protection des informations clés est transférée sur la puce. Certes, il existe une vulnérabilité aux enregistreurs de frappe qui peuvent intercepter le code PIN saisi; Eh bien, désagrément à utiliser.

En plus des cartes Ă  puce, le cryptage symĂ©trique peut ĂȘtre utilisĂ© pour se protĂ©ger contre l'accĂšs direct aux informations clĂ©s. Mais la question est: quelle clĂ© prendre pour le chiffrement?

Si cette clé est générée sur la base du mot de passe de l'utilisateur, alors, d'une part, nous obtenons une vulnérabilité à la sélection du mot de passe «hors ligne», et d'autre part, en fait, de ce qu'ils ont laissé, ils en sont venus à: «encore une fois, certains mots de passe».

Une option plus correcte consiste à coudre d'une maniÚre spéciale *une telle clé dans l'assemblage du navigateur (ou l'une de ses bibliothÚques spécialisées). Chaque mise à jour du navigateur modifie à la fois la clé et son emplacement dans le fichier compilé. Cette approche ne donnera pas une garantie de protection à 100%, mais compliquera sérieusement la tùche de décryptage. Tout d'abord, l'attaquant devra trouver la version exacte de l'assemblage, puis la trouver, la démonter et découvrir comment la clé est assemblée.

De plus, les clĂ©s de domaine elles-mĂȘmes doivent ĂȘtre directement stockĂ©es dans un fichier sĂ©parĂ©, et non avec la configuration pour leur utilisation (c'est-Ă -dire uniquement les clĂ©s et rien de plus). Ensuite, leur dĂ©chiffrement par sĂ©lection de clĂ© (Ă  partir d'assemblages connus) sera impossible, car il est impossible de distinguer une clĂ© correctement dĂ©chiffrĂ©e d'une sĂ©quence alĂ©atoire d'octets. Ensuite, les tentatives de rĂ©cupĂ©ration d'une clĂ© principale sans connaĂźtre la version exacte de l'assemblage du navigateur et le dĂ©montage direct de son code deviendront impossible.

Vous pouvez utiliser l'option combinée: cryptage avec la clé du navigateur + cryptage avec le mot de passe utilisateur du compte OS (si l'API OS le permet). De plus, la clé est toujours générée à la volée. La force brute hors ligne deviendra alors encore plus chÚre.

De plus, aprĂšs avoir changĂ© le mot de passe utilisateur dans le systĂšme d'exploitation, la clĂ© changera Ă©galement. Et si vous ne prĂ©-dĂ©cryptez pas sur l'ancienne clĂ©, cela vous protĂ©gera contre les situations oĂč l'administrateur de l'ordinateur change votre mot de passe afin d'accĂ©der Ă  votre compte et d'effectuer des actions en votre nom. Situations du type: quitter son emploi.

Vous allez d'abord faire une copie de sauvegarde des clés (exporter les clés dans un fichier). Sauf si, bien sûr, vous l'avez déjà fait lors de la distribution de clés à d'autres appareils.

* Par exemple, une clé de 32 octets est distribuée de maniÚre aléatoire dans la section 64 Ko d'un fichier exécutable. Et seul le code source sait comment récupérer la clé précieuse de ces octets.

3.2 À propos des mots de passe en tant que clĂ©s de domaine


Dans l'une des versions initiales du protocole, la clĂ© de domaine pouvait ĂȘtre gĂ©nĂ©rĂ©e en fonction du mot de passe de l'utilisateur. L'algorithme Ă©tait dĂ©licat, Ă  l'exclusion des clĂ©s en double pour diffĂ©rents domaines pour le mĂȘme mot de passe.

Cela a été positionné comme un moyen pratique d'accéder aux comptes de mobilité. Saisie d'un mot de passe et ne vous inquiétez de rien. Mais il s'est avéré ce qui suit:

  1. , «» , , . , -, .

    (), 8- , , .: ~!@#$%^&. : 26 + 26 + 10 + 8 = 70 . 8- 70 8 .

    , , 10 12 . 70 8 / 10 12 = ~576 . C'est-Ă -dire ~10 . 5 . 10- 15 . 10 , 1-2 .

    , .
  2. , .
  3. , . C'est-Ă -dire ( SHA-2).
  4. , , , . .


3.3 /


Et si je perds la clé principale?

Cela peut se produire si vous modifiez votre mot de passe ou réinstallez le systÚme d'exploitation. Quels sont les risques?

Eh bien, vous n'irez pas sur les sites oĂč vous Ă©tiez auparavant. Perdez votre historique d'achat sur les boutiques en ligne, vos annonces sur les sites en ligne, le karma sur les forums. Peu importe.

Mais qui empĂȘche de refaire la procĂ©dure d'enregistrement avec un nouveau token et de le confirmer via le numĂ©ro de tĂ©lĂ©phone indiquĂ© dans la mĂȘme annonce? Il s'avĂšre que le site doit faire une forme de rĂ©-enregistrement du token (un analogue de "rĂ©cupĂ©ration de mot de passe")? OĂč est l'absence promise de «toutes sortes de» formes?

En fait, un site qui doit non seulement identifier le visiteur, mais aussi savoir qui il est, devrafaire un formulaire d'inscription. En fait, ce formulaire peut ĂȘtre utilisĂ© pour une rĂ©inscription. Vous spĂ©cifiez exactement les mĂȘmes donnĂ©es qu'auparavant (email, mobile). Confirmez que vous disposez de ces donnĂ©es (lettre, SMS). Le systĂšme voit qu'un tel compte existe dĂ©jĂ , les donnĂ©es vous appartiennent Ă  100%, mais le jeton est diffĂ©rent - il rĂ©Ă©crit le jeton.

Mais encore, il vaut mieux ne pas perdre la clé principale.
Comment éviter les pertes? Créez une copie de sauvegarde, protégez-la avec un mot de passe et stockez-la sur un support jetable. De plus, en fait, comme cela se fait avec les clés pour Bitcoin. En principe, vous pouvez traduire les clés principales sous forme imprimée et les enregistrer sur une feuille de papier. D'ailleurs. Et puis restaurer par entrée manuelle. Mais c'est pour des gens assez «paranoïaques» comme moi.

Mais que se passe-t-il si on me vole une clé principale?
C'est dĂ©jĂ  grave. Bien que les recommandations dĂ©crites ici pour le stockage de la clĂ© principale (non incluses dans le protocole) les protĂšgent contre la falsification directe, les enregistreurs de frappe et les chevaux de Troie, nĂ©anmoins, le risque de compromettre la clĂ© principale demeure. Malheureusement, une protection parfaite n'existe pas. La clĂ© peut ĂȘtre dĂ©tournĂ©e directement de la mĂ©moire du navigateur via une vulnĂ©rabilitĂ© du moteur javascript. Par exemple. Ou perdez-vous votre tĂ©lĂ©phone portable ...

Alors, quels sont les risques de voler une clé principale?

Indispensable pour recevoir des informations sur vous et mĂȘme pour agir en votre nom. Obtenir la possibilitĂ© pour un attaquant de se connecter sous vous et en mode lecture pour accĂ©der Ă  des informations sensibles. Calme et tranquille.Ou tĂ©lĂ©chargez simultanĂ©ment toutes vos vidĂ©os privĂ©es de vos camarades de classe. C'est dĂ©sagrĂ©able pour toi. Les fans de phoques se rĂ©jouissent.

Ici, vous devez vous réinscrire rapidement avec une nouvelle clé sur des sites importants. Et, si quelque chose de terrible s'est produit, l'enregistrement de votre nouveau jeton dans la base de données du fournisseur de services de maniÚre officielle est la seule bonne option. Vous pouvez penser à de nombreuses méthodes d'enregistrement: de la fixation du papier dans une lettre officielle, à une demande via le service d'assistance technique du site avec confirmation de votre identité de maniÚre acceptable. Mais ce n'est que pour les sites sérieux, comme les services bancaires en ligne.
Façons de minimiser les risques. L'utilisation de clés individuelles pour les domaines (mais cela réduit la mobilité des comptes). Authentification à deux facteurs via des canaux indépendants. Le site affiche les adresses IP et les appareils sur lesquels la connexion était établie la derniÚre fois, afin que vous remarquiez au moins un compromis.


4 Attaques contre le régime d'autorisation



4.1 Suivi des utilisateurs


Un site de confiance peut fusionner sans vergogne des informations vous concernant avec d'autres sites. Sur Internet, il existe des sites collecteurs qui regroupent ces informations et les vendent Ă  tout le monde. Statistiques Yandex, Google Analytics - un site rare s'en passe.

Pour que deux sites diffĂ©rents puissent dĂ©terminer qu'ils travaillent avec le mĂȘme client, deux techniques sont utilisĂ©es:

  1. ( , ).
  2. ( ) .

Il y a un léger inconvénient dans le schéma 2: non pas l'utilisateur est identifié , mais le navigateur. Mais souvent, le navigateur == client.

Il semble que le jeton soit le mieux adaptĂ© pour une utilisation dans le schĂ©ma n ° 2. AprĂšs tout, si l'utilisateur a permis Ă  deux sites (agissant en couple) de se «souvenir» d'eux-mĂȘmes, notre jeton permanent peut agir comme une telle «empreinte digitale», non seulement le navigateur, mais l'utilisateur lui-mĂȘme. Le problĂšme pour les sites ici est qu'ils recevront des jetons diffĂ©rents .

Mais les sites peuvent essayer d'appliquer également le schéma n ° 1.

Le site 1 recevra le code H 1 du navigateur et le site 2, exĂ©cutĂ© dans le contexte du site 1, recevra le code H 2 . Il semble maintenant que les sites peuvent former une paire (H 1 , H2 ) et mĂȘme le transmettre Ă  un site d'agrĂ©gateur.
Qu'un autre site 3, associé au site 2, essaie de vous suivre. Le site 3 recevra le jeton H 3 du navigateur , et le site 2, exécuté dans le contexte du site 3, recevra le jeton H 2 ' ! = H 2 (voir comment les jetons sont formés). En conséquence, la combinaison des données obtenues est impossible, car ils n'ont pas de parties qui se chevauchent.

Mais cela ne signifie pas que les sites ne pourront pas utiliser un navigateur d'empreintes digitales pour surveiller . Il indique seulement que le schĂ©ma de gĂ©nĂ©ration de jetons lui-mĂȘme est assez fiable et protĂšge contre le suivi.

Option de protection:DĂ©connectez-vous des sites avec lesquels vous avez fini de travailler. Le navigateur peut le faire automatiquement lorsque vous fermez l'onglet.

4.2 Attaque XSS



XSS est un type d'attaque impliquant l'introduction de code malveillant sur la page du site Web victim.com. Par exemple, via un script d'affiliation ou un CDN piraté d'un framework populaire.

Un code malveillant peut utiliser l'autorisation de l'utilisateur sur le site pour y accĂ©der ou pour voler des donnĂ©es d'authentification de l'utilisateur. Un code malveillant peut ĂȘtre insĂ©rĂ© dans une page via une vulnĂ©rabilitĂ© dans un serveur Web (piratage trivial), via des rĂ©seaux affiliĂ©s (sources peu fiables), via une vulnĂ©rabilitĂ© sur l'ordinateur d'un utilisateur (crawling de chevaux de Troie).

La protection principale contre de telles attaques pour notre schéma d'autorisation est constituée de rÚgles spéciales pour générer le champ Source lors du calcul des jetons.

VulnĂ©rabilitĂ©: pour XSS stockĂ© (lorsque le script est directement insĂ©rĂ© dans le site attaquĂ© et chargĂ© Ă  partir de celui-ci suite au piratage du serveur), la protection ne fonctionnera pas. Parce que le navigateur ne pourra pas identifier un tel script comme «externe». Le mĂȘme problĂšme se produit lorsqu'un attaquant effectue un proxy sur le trafic client-serveur.

4.3 Attaque CSRF



La victime visite le site evil.com, crĂ©Ă© par un attaquant. En son nom, une requĂȘte (GET / POST / HEAD / PUT / DELETE) est exĂ©cutĂ©e vers un site oĂč l'utilisateur est dĂ©jĂ  autorisĂ© (par exemple, vers un serveur de systĂšme de paiement). La demande elle-mĂȘme effectue une sorte d'opĂ©ration malveillante (par exemple, le transfert d'argent sur le compte de l'attaquant). Selon la supervision des dĂ©veloppeurs, le site ne vĂ©rifie pas les champs Referer et ne demande pas d'informations de vĂ©rification supplĂ©mentaires Ă  l'utilisateur. En consĂ©quence, l'attaque est rĂ©ussie.

Le schĂ©ma d'autorisation de site proposĂ© supprime la plupart des scĂ©narios d'attaque CSRF, en raison de l'algorithme de gĂ©nĂ©ration de jetons. Toute demande intersite entraĂźnera la rĂ©ception par le site attaquĂ© d'un jeton non valide de l'utilisateur. Par consĂ©quent, dans cette situation, l'utilisateur du site attaquĂ© sera anonyme anonyme. MĂȘme une tentative d'exĂ©cution d'une demande GET inoffensive d'un site attaquant Ă  un site attaquĂ© (tĂ©lĂ©chargement d'une image) entraĂźnera la rĂ©ception par ce dernier d'un jeton invalide.

Cela devrait grandement simplifier la vie des développeurs de sites.

4.4 Suivi Ă  l'aide de l'authentification unique


Deux sites S 1 et S 2 , auxquels l'utilisateur fait confiance et dont il dispose les clĂ©s, dĂ©cident d'appliquer une technologie similaire Ă  SSO pour le suivi des utilisateurs. Mais depuis vous ne pouvez pas intĂ©grer un site dans un autre (l'un d'eux recevra un jeton non valide), vous ne pouvez pas ouvrir le site d'un partenaire avec un script (pour la mĂȘme raison), puis le site S 1 dĂ©cide d'utiliser une technique dĂ©licate.

Sur l'une des pages, il place une Ă©tiquette translucide A, couvrant toute la fenĂȘtre. Le lien mĂšne au site S 2 , et l'identifiant utilisateur (Ă  partir de S 1 ) et le jeton H 1 sont transmis dans l'adresse . L'utilisateur ne voit pas le lien. En cliquant sur n'importe quelle zone du site S 1 , il dĂ©clenche l'ouverture d'un nouvel onglet sur le site S 2.

Pour le moment, S 2 ne recevra pas de jeton valide. L'auto-rechargement avec une balise ne l'aidera pas non plus
 <meta http-equiv="refresh" content="0"> 
ou un script.

Mais S 2 peut créer la balise A sur toute sa page sous la forme d'un faux bouton Fermer:

Ce lien rechargera d'abord le site, puis le fermera. Au moment du redĂ©marrage, le navigateur enverra le token H 2 dĂ©jĂ  valide au site S 2 (car la rĂšgle 2.4 P1 a Ă©tĂ© respectĂ©e: l'utilisateur a personnellement ouvert les deux liens). En consĂ©quence, S 2 recevra des informations sur les actions de son utilisateur sur le site S 1 , associera le jeton H 1 Ă  son H 2 et enverra Ă  H 2 une requĂȘte interserveur Ă  S 1 . A l'avenir, les sites S 1 et S 2 pourront Ă©changer toute information sur l'utilisateur par Ă©change de serveur, comme maintenant, ils peuvent l'identifier de maniĂšre unique sĂ©parĂ©ment les uns des autres

.
Les utilisateurs mobiles sont particuliÚrement vulnérables à cette attaque, car essayer de fermer une page inutile peut accidentellement cliquer sur un faux lien qui occupe tout l'écran mobile.
MĂ©thode de protection: interrompez automatiquement la session lorsque l'onglet est fermĂ©. Ensuite, le site S 2 n'a pas pu recevoir de jeton valide tant que l'utilisateur lui-mĂȘme ne s'est pas connectĂ©. Certes, cela ne protĂ©gera pas contre les situations oĂč l'utilisateur lui-mĂȘme a ouvert les onglets et s'est connectĂ© Ă  S 1 et S 2 . Et c'est seulement alors que les sites ont menĂ© une telle attaque.

4.5 Compromis clé pour l'authentification unique


Laissez un compte d'utilisateur sur un serveur d'authentification qui prend en charge l'authentification unique ĂȘtre compromis. Nous Ă©valuerons les risques possibles avec notre schĂ©ma d'authentification.

Les jetons pour chaque site sont calculés individuellement en fonction des clés de domaine.
Compromettre une clé de domaine ne compromet pas automatiquement toutes les autres.
La plupart des sites sur lesquels vous vous ĂȘtes dĂ©jĂ  connectĂ© en utilisant SSO enregistreront probablement votre jeton avec votre profil depuis le serveur SSO dans leur base de donnĂ©es. Dans notre schĂ©ma, le site extraira simplement un jeton de la base de donnĂ©es et vous reconnaĂźtra. C'est-Ă -direLe serveur SSO n'est plus nĂ©cessaire sur ces sites - il a rempli sa fonction au stade de l'enregistrement.

En d'autres termes, vous ne perdez pas automatiquement tous vos accĂšs Ă  la fois. Un attaquant sera identifiĂ© sur les mĂȘmes sites qu'une autre personne.

Une tentative de reconduction de l'authentification entre domaines n'aidera pas non plus l'attaquant: le site devrait bloquer les tentatives de crĂ©ation d'un nouveau compte avec l'ancien identifiant SSO et le nouveau jeton de site. Ou bien, les tentatives de rĂ©Ă©criture du jeton utilisateur pour un ID existant dans le processus SSO doivent ĂȘtre bloquĂ©es. Le fait de cela devrait susciter une suspicion raisonnable du cĂŽtĂ© du site.
Un jeton utilisateur ne peut ĂȘtre lĂ©galement modifiĂ© que d'une seule maniĂšre (voir «ScĂ©narios de fonctionnement du protocole» ).

Risque.Si le site n'enregistre pas votre jeton et votre profil dans sa base de données, mais s'appuie entiÚrement sur le mécanisme SSO, un attaquant n'a qu'à effectuer une authentification interdomaine pour se connecter en utilisant votre nom.

Minimisation des risques en cas de compromis. Curieusement, mais c'est la prĂ©servation par les sites de tokens et de profils utilisateurs de leur cĂŽtĂ©. Une tentative par un attaquant de mener une authentification interdomaine peut provoquer un conflit entre l'ancien utilisateur Id et son nouveau jeton. La situation elle-mĂȘme, lorsque l'utilisateur a modifiĂ© le jeton d'une maniĂšre autre que celle spĂ©cifiĂ©e dans le protocole, doit ĂȘtre perçue de maniĂšre suspecte ou rejetĂ©e complĂštement.

Risque maximum:autorisation en votre nom sur d'autres sites (oĂč vous n'ĂȘtes pas allĂ©). AccĂ©dez Ă  vos donnĂ©es de profil. Commettre des actes illĂ©gaux en votre nom. Et pour que le propriĂ©taire lĂ©gitime ne puisse rien retourner, un attaquant peut changer son jeton sur le serveur d'autorisation de maniĂšre lĂ©gale. Ce risque coĂŻncide cependant avec les risques liĂ©s Ă  l'utilisation des rĂ©gimes d'autorisation traditionnels.

Moyens de protection. Refus d'utiliser l'authentification unique (d'autant que le schĂ©ma proposĂ© a Ă©tĂ© conçu comme un moyen de s'Ă©loigner des schĂ©mas d'authentification centralisĂ©e). Utilisez plusieurs SSO (ne stockez pas tous les Ɠufs dans le mĂȘme panier!).

Si SSO prend en charge l'authentification à deux facteurs avec authentification par d'autres attributs (courrier, téléphone), il est alors possible de reprendre le contrÎle du compte du serveur d'autorisation.

4.6 Compromission de jetons pendant le transfert


Il est clair que le mĂ©canisme proposĂ© pour hacher les jetons pendant le transfert ne donne pas une garantie Ă  100% de leur protection. Un attaquant peut intercepter le trafic de la victime au moment du transfert d'un jeton non sĂ©curisĂ© (lors de l'enregistrement principal de la clĂ© permanente), Ă  ​​titre d'exemple. Et puis utilisez-le.

Par conséquent, l'utilisation de SSL est encouragée. Mais ne prenez pas le HTTPS comme panacée. Ce protocole est également exposé, ainsi que HTTP. Seulement un peu plus dur.

Certes, un transfert aussi rare d'un jeton ouvert, ainsi que l'utilisation d'un jeton individuel pour chaque domaine, réduit le risque d'exploiter la vulnérabilité. Néanmoins.

Un autre danger est l'interception et la rĂ©utilisation du jeton dans la session en cours de l'utilisateur. Comme je l'ai dit plus tĂŽt, idĂ©alement, le jeton devrait ĂȘtre hachĂ© avec un nouveau sel Ă  chaque demande du client. Cependant, cela supprimera la possibilitĂ© de traitement parallĂšle des demandes sur le serveur et rendra impossible l'envoi de demandes parallĂšles Ă  partir du client. Le calcul et la vĂ©rification des hachages sont gĂ©nĂ©ralement une opĂ©ration coĂ»teuse qui rĂ©duit les performances.
De plus, le jeton passĂ© dans l'en-tĂȘte ne doit jamais ĂȘtre disponible depuis Javascript. Similaire Ă  Cookie avec le drapeau HttpOnly. MĂȘme lors de la rĂ©ception de requĂȘtes ajax par scripts.
MĂ©thode de fonctionnement: intercepter la demande d'un utilisateur, extraire la valeur actuelle du jeton, envoyer une autre opĂ©ration avec le mĂȘme jeton (comme pour le mĂȘme utilisateur). Certes, le systĂšme classique basĂ© sur les cookies de session est Ă©galement vulnĂ©rable Ă  ce type d'attaque.

Méthode de protection: confirmation des opérations importantes via d'autres canaux de communication, par exemple par SMS ou courrier; pré-enregistrement du token via d'autres canaux de communication (certificat papier, par exemple).

4.7 Piratage d'un site Web et compromission de jetons


Les sites de piratage se produisent constamment. MĂȘme les grands sites bien protĂ©gĂ©s se brisent. Il existe de nombreuses façons de pirater: d'une injection triviale Ă  un «drain» d'initiĂ©. Par consĂ©quent, la compromission de votre jeton sur n'importe quel site est un Ă©vĂ©nement trĂšs probable.

Mais le protocole proposĂ©, tout de mĂȘme, rend l'Ă©vĂ©nement de piratage du site le moins douloureux pour vous.
La compromission du jeton n'entraßne pas la compromission de la clé de domaine sur la base de laquelle elle a été calculée. De plus, cet événement ne conduit pas au compromis de vos autres jetons . Et si c'est le cas, l'accÚs à d'autres sites reste inaccessible.
Ceci est particuliÚrement agréable lorsque des clés sont apportées à la plupart des sites à l'aide d'une clé principale: il est impossible de la restaurer par reverse engineering.

Mais en mĂȘme temps, il est impossible d'utiliser la clĂ© de domaine dont le jeton a Ă©tĂ© compromis, pour des raisons Ă©videntes. Je dois changer la clĂ©.

La clĂ© du domaine oĂč la fuite officielle s'est produite peut ĂȘtre effectuĂ©e soit sur la base d'un nombre alĂ©atoire, soit sur la base d'une clĂ© principale, avec l'ajout d'un numĂ©ro de version:

$DomainKey = HMAC_{M_{key}}( DomainName \cup VersionNumber )$



Conclusion


Plusieurs de mes amis Ă  qui j'ai montrĂ© l'article m'ont posĂ© essentiellement la mĂȘme question: "Quelle est la principale chose ici?"

Vu d'en haut
, ( ), (?) , .

, , - . , , , . ( , ). , « » «-».

- « ». , «». , . ( Google , Facebook – ). ( DDOS- . – ) - . , SSO , . ?

, , , . , - -. , ., . email, . . , . ?

-. ? SSO – .

, « ». . . . . , .

- «» . , « ». , .

-, ?

Oh, il n'y a pas de puce principale! Hélas.Mais il existe un certain nombre de détails qui rendent le protocole plus rentable que le schéma de connexion / mot de passe traditionnel.

1. Vous avez probablement remarqué ce popup ennuyeux sur de nombreux sites.
«Notre site enregistre les cookies! Mettez votre casque et soyez vigilant, car le grand frÚre vous regarde! Cliquez sur "Oui", car vous n'avez toujours pas le choix. "
Ceci est un autre popup pour un tas d'autres tout aussi intrusifs et trÚs nécessaires. Et tout cela grùce au RGPD européen (un analogue de notre loi PD).

Alors voilà. Dans notre systÚme, les cookies ne sont plus nécessaires à des fins d'identification! Du mot «complÚtement». L'utilisateur décide d'autoriser ou non le site à l'identifier, et quand et pendant combien de temps. Moins un popup ennuyeux, +1 au karma du protocole.

2. Le dĂ©veloppeur n'a plus besoin de faire des formulaires d'autorisation et de rĂ©cupĂ©ration de mot de passe. Il n'est pas nĂ©cessaire d'implĂ©menter des algorithmes SSO complexes et de maĂźtriser des bibliothĂšques complexes: OAuth, SAML, Kerberos, etc., suivez la procĂ©dure d'enregistrement de votre site, modifiez les clĂ©s d'autorisation, surveillez leur sĂ©curitĂ©; et si quelque chose a mal tournĂ© avec SSO, comprenez de toute urgence: "qu'est-ce qui a mal tournĂ© et pourquoi." De plus, le serveur d'autorisation peut bloquer votre site pour des raisons inconnues. Allez le dĂ©couvrir. Hier, tout a fonctionnĂ©, mais aujourd'hui ... Et ici, il suffit de lire le jeton dans l'en-tĂȘte et de vĂ©rifier s'il y en a un dans notre base de donnĂ©es. Simple = fiable .

juste dire ...
. . , - - . . . .

-, -, « » .


3. L'utilisateur n'a pas besoin d'entrer et de se souvenir d'un tas de mots de passe. Utilisez les services de sites tiers ou on ne sait pas par qui et comment les programmes écrits. Vous ne pouvez pas avoir peur de l'accÚs à un ordinateur par des tiers, des enregistreurs de frappe et des chevaux de Troie. Il suffit de faire une copie de sauvegarde de la clé principale, de la protéger avec un mot de passe et de la stocker quelque part sur une clé USB. Comme un portefeuille Bitcoin. Qu'est-ce qui n'est pas une fonctionnalité?

4. Si le site est piraté, vous ne risquez rien. Eh bien, régénérez à nouveau la clé. Alors que le mot de passe divulgué aux crackers du site peut causer beaucoup de problÚmes.

5. Le protocole a été créé en tenant compte de l'expérience des attaques de réseau connues. Son architecture comprend déjà une protection de base contre XSS, CSRF. Encore une fois, les webmasters trouveront plus facile de développer des sites. Et leurs utilisateurs - plus calmes.

6. Indépendance du protocole vis-à-vis d'un fournisseur de services spécifique et de ses caprices. Le protocole vous rend libre.

7. Enfin, le protocole proposĂ© revendique la future norme ouverte . Et la norme, si elle est adoptĂ©e par les participants, impose des obligations de mettre en Ɠuvre la fonctionnalitĂ© conformĂ©ment au cahier des charges , et de ne pas exclure la ferme collective de ses propres dĂ©cisions d'autorisation, inventant une fois de plus la forme de connexion, d'enregistrement, de rĂ©cupĂ©ration de mot de passe, de dĂ©connexion. Et ne plaisante pas avec le hachage de mot de passe ou l'injection SQL.

Et surtout, comme tout standard ouvert, il peut et doit ĂȘtre vĂ©rifiĂ© experts indĂ©pendants.MĂȘme si l'auteur de la version originale du protocole a «foiré» les dĂ©tails, la communautĂ© en ligne peut identifier ce correctif en temps opportun. Eh bien, ou envoyez mon protocole Ă  la ferraille. HĂ©las pour moi, et "pooh-carry" pour tout le monde.

- Je pense que je devrais m'arrĂȘter lĂ -dessus
E. Wiles



PS
Vous pouvez vous familiariser avec l'option d'un article complet dans un format hors ligne. Lors de la composition de documents sur Habr, je pouvais faire des fautes de frappe. Si vous avez des commentaires sérieux, il est préférable de vérifier l'original et de laisser les commentaires d'article (critiques) dans ce fichier . Envoyez-moi vos modifications sur le mail sergey201991 [] gmail. Je ne suis pas une pieuvre, mais je vais essayer de répondre. J'ajouterai plusieurs commentaires correspondants / intéressants à cet article. Avec leurs réponses. Une variante d'un article de commentaire séparé n'est pas exclue.

Oui, je sais que le protocole peut avoir des problĂšmes:
  1. il n'y a aucun moyen de se connecter sous votre compte sur l'appareil de quelqu'un d'autre si vous n'avez pas de clé en main, mais vous en avez besoin de toute urgence; les mots de passe sont plus pratiques ici
  2. ; , SSO
  3. «», - : - ( )
  4. -

En ce qui concerne la page 1 - je pensais sérieusement à revenir à l'idée de générer une clé de domaine basée sur un mot de passe, en faisant une protection contre la force brute en compliquant le processus de génération de la clé: disons, augmenter le nombre de tours de hachage à 1000. Mais le problÚme avec une possible collision de mots de passe pour différents utilisateurs sur un seul Le site me hante.

Concernant la page 2 - cela est traité par le temps. Vous devez vous habituer aux nouvelles interfaces. Au début, ce ne sera pas clair, puis ce sera simple. Donner à un homme des années 80 un smartphone moderne, il n'aurait pas non plus deviné comment le gérer.

Merci beaucoup si vous le lisez jusqu'au bout!

Source: https://habr.com/ru/post/fr472310/


All Articles