web-dev-qa-db-fra.com

Une personne utilisant Wireshark peut-elle obtenir l'URL complète si mon programme utilise HTTPS?

En parcourant le contenu des fichiers pcap, j'ai remarqué que certaines URL semblent être visibles malgré le fait qu'elles soient HTTPS. Ceux-ci se produisent principalement à l'intérieur de charges utiles qui contiennent également des URL de cert, mais je vois également des URL HTTPS à l'intérieur de ce qui semble être des charges utiles HTTP.

Quelqu'un peut-il dire avec certitude si les URL HTTPS sont vraiment gardées secrètes?

Cela m'inquiète parce que je veux mettre certains paramètres dans l'URL et je ne veux pas qu'ils soient facilement découverts.

27
Icann

Avec HTTPS, le chemin et la chaîne de requête de l'URL sont chiffrés, tandis que le nom d'hôte est visible à l'intérieur de la négociation SSL en texte brut si le client utilise l'indication de nom de serveur (SNI). Tous les clients modernes utilisent SNI car c'est le seul moyen d'avoir différents hôtes avec leurs propres certificats derrière la même adresse IP.

Le reste de l'URL (c'est-à-dire tout sauf le nom d'hôte) ne sera utilisé qu'à l'intérieur de la connexion cryptée. Ainsi, en théorie, il est caché à l'attaquant à moins que le cryptage lui-même ne soit brisé (compromettant la clé privée, les attaques de l'homme du milieu, etc.). En pratique, un attaquant peut avoir des moyens indirects d'obtenir des informations sur la partie restante de l'URL:

  • Différentes pages sur le même serveur servent un contenu différent avec des tailles différentes, etc. Si l'attaquant scanne le site pour trouver toutes les pages possibles, il pourrait alors être en mesure de savoir quelles pages vous avez consultées simplement en regardant la taille des données transférées .
  • Les liens vers d'autres sites contiennent un en-tête Referer. Habituellement, le référent est supprimé lors de la liaison de https à http, mais si l'attaquant contrôle l'un des sites liés à https, il pourrait être en mesure de savoir d'où provient le lien, c'est-à-dire le site auquel vous avez accédé.

Mais dans la plupart des cas, vous êtes assez sûr avec HTTPS, au moins beaucoup plus sûr qu'avec HTTP simple.

47
Steffen Ullrich

Les en-têtes HTTP (contenant l'URL demandée) et les données d'application dans HTTPS sont chiffrés.

Vous pouvez voir le nom d'hôte demandé, car les navigateurs l'envoient Indication du nom du service extension pendant la prise de contact, afin que le serveur puisse choisir SSL correspondant certificat.

11
zakjan

En utilisant Wireshark, vous pourrez trouver le nom d'hôte, comme mentionné par d'autres réponses, en raison de SNI. De plus, vous pourrez voir certaines parties des certificats. Les URL https que vous avez vues étaient probablement les URL de CRL s ou OCSP s.

Si quelqu'un pouvait accéder à vos URL en parcourant votre site et comparer la taille des pages retournées avec la taille de ce qui est retourné dans votre page chiffrée, il pourrait faire des hypothèses sur la page appelée par votre programme. Mais, comme vous voulez mettre des paramètres dans l'URL et les cacher, ce n'est pas un gros vecteur d'attaque dans votre cas. Si votre URL est https://my.server/api?user=scott&password=tiger&highscore=12345, et votre api renvoie toujours des pages entre 1000 et 1010 octets, voir 1007 octets retournés n'aidera personne à déterminer l'utilisateur ou le mot de passe ou comment entrer un meilleur score.

[~ # ~] cependant [~ # ~]

https n'est sécurisé que si vous empêchez les attaques MITM. Des outils comme violoneux , charles ou mitmproxy redirigent votre trafic vers eux-mêmes, présentent un faux certificat au client, déchiffrent le trafic, connectez-le, re -le crypter et l'envoyer au site d'origine.

Si votre client s'appuie sur le fichier de clés de confiance du système d'exploitation, l'attaquant pourra insérer son propre certificat dans le fichier de clés certifiées et votre client ne remarquera rien. Les fichiers README des outils susmentionnés contiennent des instructions sur la façon de procéder.

Donc, si vous allez https pour empêcher le décryptage, vous devrez vérifier si le certificat retourné par le serveur est correct avant d'envoyer réellement votre URL. Vérifiez comment épinglage de certificat fonctionne pour votre système d'exploitation/langage de programmation et utilisez les outils ci-dessus pour vous assurer que votre client détectera un faux certificat et n'enverra pas l'URL avant de le publier.

Il est possible d'effectuer une analyse du trafic en explorant le site Web et en comparant la taille des paquets, etc. Selon la quantité de contenu dynamique présent ou les images référencées à partir de l'url [~ # ~] [~ # ~] = il est possible de comprendre très précisément quelles URL ont été visitées.

La présentation Attaques d'analyse du trafic SSL - Vincent Berg (YouTube) l'explique et propose quelques démonstrations fonctionnelles.

3
wireghoul

C'est possible si l'attaquant a accès au client, pour une vue d'ensemble voir: https://wiki.wireshark.org/SSL#Using_the_.28Pre.29-Master-Secret

Par exemple, sur les clients Java, un agent comme jSSLKeylog peut être attaché pour intercepter et enregistrer le contenu/URL crypté supposé. Si le PreMaster-Secret d'une communication peut être obtenu par n'importe quel moyen dans le processus, la communication cryptée capturée peut être décodée par la suite.

0
Alim Özdemir