@Oros :
C'est bien d'ajouter tous les entêtes HTTP «de sécurité». Mais quand tu as quelqu'un qui faire du MITM sur ta connexion, ça vaut plus rien.
Vrai uniquement si l'attaquant est actif, qu'il modifie les paquets IP sur le réseau (et cette limite est clairement mentionnée dans les RFC qui normalisent les entêtes). Or, ce n'est pas le modèle de menace que t'as présenté lors de notre dernier échange sur le sujet. J'ai bien compris que cette phrase est une entrée en matière, mais je précise pour les autres lecteurs.
Pour ça j'ai développé un plugin Firefox qui permet de détecter ces attaques :-)
Documentation et codes sources : https://github.com/Oros42/checkcertif
J'ai regardé tout ça. Première chose : bien joué. Moi : :O :) \o/
Mes remarques :
- Je me suis renseigné un minimum afin de vérifier que tu ne ré-inventes pas la roue et, a priori, non, il n'y a pas de """"produit"""" équivalent. On avait Certificate Patrol, mais cette extension Firefox est morte. On a Certificate Pinner dont je ne sais pas encore quoi penser. De toute façon, cet outil utilise le modèle de sécurité TOFU (Trust On First Use, on fait confiance la première fois, et si le certificat x509 change, on génère une alerte, ce qui suppose d'avoir surfé au préalable sur tous les sites qui sont susceptibles de nous intéresser à partir d'un accès à Internet propre), ce qui n'est pas ce que tu proposes ;
- Ton serveur, https://chkcrt-dev.ecirtam.net/, semble être hors service ;
- Lors de la configuration de GnuPG sur le serveur, tu laisses le choix du nom du dossier de config' GPG, donc, dans la doc' du serveur, mentionne bien de changer la valeur de la variable « _gnupgHome » dans le fichier « config_chkcrt.php ». J'ai perdu un temps fou avec ça ! ;
- Quel est l'intérêt du panneau latéral qui apparaît à l'installation / activation de l'extension ? ;
- J'ai essayé d'ajouter un serveur dans la configuration de l'extension. Ça ne fonctionne pas : quand je clique sur le bouton « Save », pouf, le formulaire se vide. Aucune requête est faite au serveur indiqué, donc j'imagine qu'il y a un contrôle local de la saisie, mais j'ai rien vu d'évident dans le code JS ;
- J'ai exporté la config', je l'ai modifiée afin d'ajouter un serveur, puis je l'ai importée. Tous les sites web sont marqués « en danger » alors que le panneau latéral de l'extension montre qu'elle a ni les hashs calculés en local ni les distants. Normal : d'après mon journal Apache et mon
wireshark
, aucune requête a été effectuée ;
- La nouvelle config' n'est pas prise en compte (
wireshark
montre que l'extension cause toujours à l'ancienne URL, par exemple). Le seul remède que j'ai trouvé, c'est de désactiver / activer l'extension ;
- Si l'extension n'arrive pas à contacter un serveur, elle affiche une icône croix rouge et le message « Danger ». Il faudrait un code retour différent, je pense. Même chose si le site web est en HTTP ;
- La modification d'un serveur ne fonctionne pas : cliquer sur le bouton « Save » ne fait pas revenir à l'affichage par défaut (« add server »), même si l'on modifie un serveur valide comme le tien ;
- Le taux d'échec est important. Sur Twitter, les requêtes pour les contenus médias imbriqués sont marquées « ? ». En permanence. Sur Youtube, tantôt ça met tout en « … » (wait), tantôt ça marque « i.ytimg.com » en rouge / danger. En permanence. Sur ton shaarli ou le mien ou d'autres sites propres (sans xxxxx contenus tiers), ça échoue, mais si on redémarre l'extension, ça fonctionne ;
- À quoi sert la liste de domaines embarquée dans l'extension ? ;
- A priori, l'extension met en cache les résultats. Véridique ? Tu pourrais différencier le cache positif et le négatif (quand échec ou absence de réponse) ;
- Conceptuellement, j'ai deux remarques :
- Ton procédé n'est pas discret. Dans ton modèle de menace, ça passe, mais dans notre échange, tu parlais de pays autoritaires, et là, ça se voit sur deux points : en volume de requêtes et si jamais le nom de l'outil est dans le nom d'un serveur. Dans certains de ces pays, rien que le fait de tenter de feinter met les gens en danger ;
- Les CDN / routage anycast, bref, tout ce qui réparti la charge, est susceptible de générer des fausses alertes car le serveur ne tombera pas sur la même instance que l'extension, donc le certificat pourra être différent (pas la même date d'expiration, par exemple). Ça posait problème avec Certificate Patrol. On pouvait vérifier le certificat intermédiaire plutôt que le final, mais ça générait aussi de fausses alertes trop fréquentes.