web-dev-qa-db-fra.com

SSLSplit est-il le bon outil pour intercepter et re-chiffrer le trafic HTTPS sur un routeur WiFi?

Je cherche à faire une recherche sur la vulnérabilité sur les produits fonctionnant sur une variété d'appareils en interceptant leur trafic HTTPS, mais je ne veux pas modifier les périphériques en dehors de l'installation d'un certificat personnalisé.

Il semble SSLSplit Fait ce que je veux ce que je veux, car cela le permet " les connexions [à] interceptées de manière transparente via un moteur de traduction d'adresses réseau et redirigé vers SSLSplit ". De ce que je comprends, ces NAT Règles ne doivent pas nécessairement être définis sur l'appareil qui exécute l'application étant MitM-ed, et je peux personnaliser iptables à Rediriger le trafic de routeur à travers SSLSplit ​​sur un périphérique exécutant wifi fruité ou OpenWrt.

Est-ce que SSLSplit avec des règles d'IPTABLES modifiées suffisantes et raisonnables d'y aller, ou devrais-je modifier d'autres parties du système de réseau Linux, également?

Remarque: Le système que j'essaie de créer des périphériques requis pour avoir un certificat installé dans le magasin racine de confiance pour "opter" dans cette interception. Je n'essaie pas de construire un système pour intercepter le trafic arbitraire des périphériques réticus.

7
Andrey Fedorov

Vous avez deux parties ici: le SSLSplit qui agit comme les clients du serveur Web se connectant à, et NAT qui sonne les adresses de destination dans des paquets pour les rediriger vers le serveur SSLSPLIT.

NAT doit être configuré sur le routeur que les périphériques clients utilisent, modifiant l'adresse de destination des paquets du serveur de destination réel vers le serveur SSLSPLIT.

Ensuite, SSLSplit peut prendre la connexion et faire sa chose: se connecter à l'hôte étranger (disponible dans la poignée de main TLS) et transférer la réponse.

Donc, la seule chose du point de vue de la mise en réseau est que vous devez vous assurer que les clients obtiennent de telles options réseau que leur passerelle par défaut pointe vers un routeur faisant le NAT.

2
Tero Kilkanen

En bref, oui, il peut s'agir du bon outil, mais cela ne fait en fait aucune cote si vous utilisez SSLRip, SSLSplit, mitmproxy ou tout autre outil capable de faire votre travail, vous ne devez être que ce que vous devez faire attention de la manière dont cela fonctionne.

Comme @Quantim mentionné, cela n'est pas possible sans installer/avoir personnalisé CERT/CA dans le périphérique derrière le routeur car il a besoin de CA personnalisées pour agir comme un homme intermédiaire pour les connexions SSL et doit pouvoir générer et signer des certificats que la victime fiducies. Ainsi, la victime doit avoir le certificat de certification racine de l'attaquant dans son magasin de fiducie. Expliquant la manière dont le travail de CAS et la manière dont vous pouvez atteindre votre résultat souhaitable à l'aide des outils mentionnés dépasse la portée de cette réponse, mais en fonction du type de client - Navigateur de bureau ou téléphone mobile - Vous devez noter que l'installation des certificats racines diffère un peu.

SSLSplit fonctionne assez semblable à d'autres outils de proxy SSL transparents - comme MitmProxy qui a plus de fonctionnalités et est plus complexe. Il agit comme un homme intermédiaire entre le client et le serveur réel. À condition que le trafic soit redirigé vers le serveur sur lequel SSLSplit est en cours d'exécution et à l'écoute de Modification de la passerelle par défaut, Spoofing ARP, Entrées DNS ou tout autre moyen. En d'autres termes, comme vous l'avez peut-être deviné, SSLSplit reprend les connexions SSL d'une manière qui prétend être le serveur réel que le client se connecte et est disposé à communiquer avec. En fait, il génère de manière dynamique un certificat et la signale avec la clé privée d'un certificat de CA que le client doit - va faire confiance.

Donc, pour répondre à votre question "SSLSplit le bon outil pour intercepter et re-chiffrer le trafic HTTPS sur un routeur WiFi?", oui, cela peut être, mais savez-vous assez pour le faire? Si oui, allez-y et frappez le jackpot avec vos recherches.

Et de répondre "est SSLSplit avec des règles modifiées d'IPTABLES suffisantes et une façon raisonnable d'y aller à ce sujet, ou devrais-je modifier d'autres parties du système de réseau Linux, également?", je devrais dire que Si vous avez correctement configuré vos jeux de règles IPTABLES et vos règles NAT/DNAT, et si vos clients peuvent envisager le CA CERT en tant que confiance, oui qui suffiront - avec des ensembles de règles IPTABLES modifiés et redirige le trafic des clients vers le serveur. Vous allez intercepter le trafic des clients, comme mentionné précédemment. Au fait, vous devez noter que le mot " transparent" dans des moyens informatiques (d'un processus ou d'une interface) fonctionnant sans que l'utilisateur soit conscient de sa présence.

Extraits de la documentation originale:

SSLSPLIT prend en charge les connexions TCP, SSL unies, HTTP et HTTPS sur IPv4 et IPv6. Pour les connexions SSL et HTTPS, SSLSplit génère et signe des certificats X509V3 forgés sur la mouche, Basé sur le sujet du certificat de serveur d'origine DN et SubevalTaltName Extension. SSLSplit prend entièrement en charge l'indication du nom du serveur (SNI) et est capable de travailler avec des clés RSA, DSA et ECDSA et DHE et ECDHE Cipher Suites. Selon la version de OpenSSL, SSLSPLIT prend en charge SSL 3.0, TLS 1.0, TLS 1.1 et TLS 1.2, et éventuellement SSL 2.0. SSLSplit peut également utiliser des certificats existants dont la clé privée est disponible, au lieu de générer des informations forgées. SSLSplit prend en charge les certificats NULL-PREFIX CN et peut refuser des demandes OCSP de manière générique. Pour les connexions HTTP et HTTPS, SSLSPLIT supprime les en-têtes de réponse pour HPKP afin d'empêcher la clignotage de la clé publique, pour HST permet à l'utilisateur d'accepter des certificats non approuvés et d'autres protocoles pour empêcher passer à Quic/SPDY. En tant que fonctionnalité expérimentale, SSLSplit prend en charge les mécanismes de démarrage de manière générique.


Redirection

Étant donné que l'OP doit savoir comment rediriger les demandes de SSLSplit mais ne veut pas mettre en place un proxy - comme mentionné dans les commentaires - je vais donner un aperçu rapide de le faire et j'espère que cela aidera:

Scenario 1 : If SSLsplit is on the OpenWRT which you are using - i.e. if SSLsplit is set on the GateWay which victims (clients) are connecting to :


                        |
         VICTIMS        |       ATTACKER
                        |
        +-------~+      |       (GATEWAY)       If SSLsplit is set on the Gateway users are gonna connect to, you only need to redirect some ports to those SSLsplit is listening on
        |        |      |                       SSLsplit will be running on two ports: 8080 for non-SSL TCP connections and 8443 for SSL connections.
        |        | ---> |
        |        |      |                       sysctl -w net.ipv4.ip_forward=1
        +~~~~~~~~+      |                       iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080
                        | \                     iptables -t nat -A PREROUTING -p tcp --dport 443 -j REDIRECT --to-ports 8443    (HTTPS)
        +-------~+      |  \    +~~~~~~~~+      iptables -t nat -A PREROUTING -p tcp --dport 636 -j REDIRECT --to-ports 8443    (LDAPS)
        |        |      |   \   |        |      iptables -t nat -A PREROUTING -p tcp --dport 587 -j REDIRECT --to-ports 8443    (MSA)      Encryption = StartTLS
        |        | ---> | ===➤  |        |      iptables -t nat -A PREROUTING -p tcp --dport 465 -j REDIRECT --to-ports 8443    (SMTPS)    Encryption = SSL
        |        |      |   /   |        |      iptables -t nat -A PREROUTING -p tcp --dport 993 -j REDIRECT --to-ports 8443    (IMAPS)    Encryption = StartTLS
        +~~~~~~~~+      |  /    +~~~~~~~~+      iptables -t nat -A PREROUTING -p tcp --dport 5222 -j REDIRECT --to-ports 8080   (XMPP)
                        | /                     ...
        +-------~+      |
        |        |      |
        |        | ---> |
        |        |      |
        +~~~~~~~~+      |
                        |
                        |

Scenario 2 : AND IF SSLsplit is not set on the GateWay whic clients are connecting to - You will be in need of setting DNAT as the following :



         VICTIMS        |        GATEWAY
                        |
        +-------~+      |
        |        |      |
        |        | ---> |                                                       IPTables will be like this :
        |        |      |
        +~~~~~~~~+      |                                SSLsplit               iptables -t nat -A PREROUTING -d x.x.x.x/CIDR -p tcp -m tcp --dport 443 -j DNAT --to-destination z.z.z.z:8443
                        | \                                                     iptables -t nat -A PREROUTING -d x.x.x.x/CIDR -p tcp -m tcp --dport 465 -j DNAT --to-destination z.z.z.z:8443
        +-------~+      |  \    +~~~~~~~~+              +~~~~~~~~+              ...
        |        |      |   \   |        |              |        |        
        |        | ---> | ===➤  |        |  --------->  |        |              In this scenario, all packets arriving on the router with a destination of x.x.x.x/CIDR will
        |        |      |   /   |        |              |        |              depart from the router with a destination of z.z.z.z
        +~~~~~~~~+      |  /    +~~~~~~~~+              +~~~~~~~~+
                        | /
        +-------~+      |       Redirects desired connection from somewhere
        |        |      |       to somewhere else to desired ports.
        |        | ---> |
        |        |      |
        +~~~~~~~~+      |
                        |
                        |

Faites attention à la définition de la valeur de net.ipv4.ip_forward à 1. La commande que j'ai utilisée ci-dessus en utilisant sysctl -w n'est pas permanent. Si vous souhaitez la définir de manière permanente, vous devez modifier le fichier /etc/sysctl.conf Où vous pouvez ajouter une ligne contenant net.ipv4.ip_forward = 1.

Par défaut, la plupart des distributions Linux auront des renvois IP désactivés. Et IMHO C'est une bonne idée, car la plupart des peuples n'auront pas besoin de l'utiliser, mais que vous configurez un routeur/passerelle Linux - utile pour VPN Server (PPTP ou IPSec). Vous devez activer le transfert. Cela peut être fait de plusieurs manières que je vous l'ai montré.

5
FarazX