web-dev-qa-db-fra.com

Comment le tunneling SSH via proxytunnel / https différent de le faire via SSL avec Stunnel?

Dans une réponse à quelle est la différence entre SSL, TLS et HTTPS , il est dit que HTTPS est http sur SSL/TLS. C'est-à-dire qu'une connexion SSL/TLS est établie en premier, puis les données HTTP normales sont échangées sur la connexion SSL/TLS.

Donc, si j'utilise Stunnel pour créer un tunnel SSL, puis transmettez le trafic http à travers elle, serait-ce la même chose que l'utilisation de HTTPS normalement?

Ensuite, si un proxy/pare-feu ne voit qu'une connexion SSL/TLS avec le trafic crypté, comment pourrait-il savoir que le trafic n'est pas http?

En théorie, je pense que si le proxy/pare-feu ne peut pas remarquer la différence, il convient d'être capable de tuner le trafic SSH de tunnel via une connexion SSL/TLS (créée avec Stunnel) au lieu de HTTP. Toutefois, dans la pratique, je n'ai pas vu cela ne fonctionne pas - le proxy/pare-feu apparaît capable de détecter qu'il ne s'agit pas de la circulation HTTPS.

Je pense que c'est pourquoi le proxytunnel est utilisé, mais je ne comprends pas ce que ProxyTunnel fait différemment pour éviter la détection. Cela crée-t-il simplement de faux en-têtes HTTP?

Comment le pare-feu est-il capable de détecter la différence entre HTTP et SSH, quand ils sont tous deux tunnelés via SSL/TLS?

9
emi

TL; DR - Je pense que votre problème n'est pas lié à SSL du tout, mais vous essayez d'utiliser un serveur proxy sans les en-têtes de proxy.

Donc, si j'utilise Stunnel pour créer un tunnel SSL, puis transmettez le trafic http à travers elle, serait-ce la même chose que l'utilisation de HTTPS normalement?

Oui. Nous utilisons HTTP sur Stunnel au travail pour parler à un serveur HTTPS. C'est une solution de contournement pour un bogue dans le Java Client https qui n'est pas capable de parler à un ISS https-serveur dans certaines situations.

Ensuite, si un proxy/pare-feu ne voit qu'une connexion SSL/TLS avec le trafic crypté, comment pourrait-il savoir que le trafic n'est pas http?

Un proxy/pare-feu normal n'est pas capable de dire ce qui est à l'intérieur.

Il y a déchiffrer les proxies HTTPS . Pour qu'ils travaillent, ils ont besoin de tromper le client à accepter leur propre clé publique au lieu de la clé publique du serveur réel. Dans HTTPS, la clé publique fait partie d'un certificat contenant des informations sur le nom du serveur. Les certificats sont généralement signés par CAS, que les navigateurs connaissent comme digne de confiance.

Le serveur proxy doit faux le certificat de serveur afin d'obtenir le client d'utiliser sa propre clé publique. Un client normal affichera un avertissement sur le certificat invalide. Mais le proxy peut signer les certificats fallés avec sa propre ca. Et le administrateur peut installer l'autorité de certification comme conçu sur les clients .

En théorie, je pense que si le proxy/pare-feu ne peut pas remarquer la différence, il convient d'être capable de tuner le trafic SSH de tunnel via une connexion SSL/TLS (créée avec Stunnel) au lieu de HTTP.

Le moyen commun de tunnel SSH fonctionne même sans la couche SSL sur des proxies de HTTPS non décryptants.

Toutefois, dans la pratique, je n'ai pas vu cela ne fonctionne pas - le proxy/pare-feu apparaît capable de détecter qu'il ne s'agit pas de la circulation HTTPS.

Soit vous faites quelque chose de mal ou que vous êtes derrière un HTTPS déchiffrant comme expliqué ci-dessus.

Je pense que c'est pourquoi le proxytunnel est utilisé, mais je ne comprends pas ce que ProxyTunnel fait différemment pour éviter la détection. Cela crée-t-il simplement de faux en-têtes HTTP?

Vous devez distinguer ici un pare-feu et un proxy ici: S'il n'y a qu'un pare-feu réseau, vous pouvez vous connecter à l'adresse IP cible sur le port 443 normalement . Mais s'il y a un proxy, vous devez vous connecter à l'adresse IP et le port du proxy, puis de le connecter à la cible à l'aide du protocole HTTP. La commande est: CONNECT target:port HTTP/1.1 <cr><lf>

Dans la plupart des cas, les serveurs proxy-proxy HTTPS permettent de connecter n'importe quelle adresse IP mais uniquement au port 443. Après avoir envoyé la chaîne de connexion, vous obtenez un en-tête de réponse HTTP. Sur un proxy HTTPS normal, toute autre information est transmise dans toutes les directions. Donc, vous pouvez parler n'importe quel protocole que vous voulez. Utiliser SSH Nativement d'ici les travaux.

En théorie, un pare-feu ou un proxy muet peut empêcher ce tunnel naturel en détectant le trafic non SSL. Mais c'est très rare. Seul un proxy de déchiffrement HTTPS permettra d'empêcher efficacement ce type de tunnel.

13

Si vous faites http sur le port du serveur d'une instance Stunnel:

client <--- TCP ---> stunnel <--- TCP ---> server
                             <--- TLS --->
       <------------- HTTP -------------->

ce sera presque exactement comme à l'aide de HTTPS, mais pas complètement parce que le client se voit toujours comme utiliser http sur TCP. Par exemple, un navigateur ne sera pas affiché "Secure" dans la barre d'URL et l'exécution de code JavaScript dans le navigateur pourrait refuser de faire des choses si la connexion n'est pas la connexion HTTPS.

Pour le reste de votre question, vous devez déterminer exactement ce qui se passe avec le "pare-feu" ou "proxy" que vous utilisez; Il existe un certain nombre de techniques différentes qu'il peut utiliser pour gérer la connexion qui permettra ou empêchera certaines techniques lorsque vous l'utilisez.

1. Direct TCP Connection

Si vous faites un TCP Connection qui se termine à l'hôte distant (diagramme ci-dessus), même s'il est modifié d'une manière ou d'une autre (par exemple, les adresses changées via NAT) et vous configurez une TLS Connexion sur ce TCP Connection, les routeurs intermédiaires ne pourront voir aucune du trafic au-delà du montant de celui-ci, les adresses IP et TCP ports et Le fait qu'il s'agisse de TLS. Un pare-feu de niveau IP pourrait être configuré pour interdire les connexions aux ports à autre que 443 ou des connexions de gouttes à 443 s'il voit qu'ils ne sont pas TLS. Il pourrait même se connecter au port lui-même d'abord voir si le serveur semble exécuter http/tls sur ce port.

2. Proxy http CONNECT

Si vous allez bien qu'un proxy HTTP à l'aide de [~ # ~ ~] Connectez [~ # ~] Verbe, comme proxytunnel fait, il y a deux TCP Connections impliquées, mais vous faites une connexion TLS sur eux:

client <---- TCP 1 ----> proxy <---- TCP 2 ----> server
                        CONNECT
      <------------------ TLS ---------------->

Vous négociez toujours des TLS avec le serveur réel à l'autre extrémité, et la situation est à peu près la même que n ° 1 ci-dessus. Vous n'avez pas besoin de faire des TLS sur le TCP Connections, en réalité; vous pourriez simplement CONNECT server.mydom.com:22 et commencer à parler ssh sur cette connexion si le proxy ne rejette pas cette demande. Certaines personnes ont des serveurs SSH écoutant sur le port 443 pour exactement cet objectif. Si la proxy est suffisamment sophistiquée pour vérifier le protocole utilisé, cela peut vous déconnecter si vous ne voyez pas une configuration TLS standard, même si une fois que TLS est en hausse, il ne peut pas voir exactement ce qui se passe à cette connexion. .

3. mitm

Certaines organisations font des attaques man-in-hébergées sur les connexions HTTPS (parfois plus poliment appelées "interception SSL"). Lorsque vous essayez de vous connecter au serveur distant, via une connexion directe TCP ou un proxy comme dans l'un des cas ci-dessus, un périphérique réseau prétend que c'est le serveur distant.

client <---- TCP 1 ----> MITM <---- TCP 2 ----> server
       <---- TLS 1 ---->      <---- TLS 2 ---->
       <---------------- HTTP ---------------->

Votre navigateur Web que tente la configuration TLS, la vérification du certificat et la validera non pas parce que c'est le certificat réel, mais que le périphérique a généré un certificat signé par une autorité de certification privée (autorité de certification) et le service informatique a également modifié la liste de certificats le navigateur ou système d'exploitation à la confiance que CA. (Vous pouvez souvent dire que cela se produit en essayant la même connexion avec un autre programme qui utilise une liste de certificats différente sans ce certificat, tel que Firefox si vous le téléchargez de manière indépendante.) Vous avez une connexion sécurisée au périphérique MITM, mais elle décrypte tout et recryptez-le pour une autre connexion sécurisée séparée du serveur lorsqu'il transforme les données.

Dans ce cas, bien que vous pensiez que vous parlez au serveur distant, vous ne parlez de manière sécuritaire que sur le proxy qui a pleinement accès à toutes les données de la connexion et peut le voir et la modifier comme il le souhaite.

0
cjs