web-dev-qa-db-fra.com

Comment mon employeur peut-il être un homme du milieu lorsque je me connecte à Gmail?

J'essaie de comprendre SSL/TLS. Ce qui suit est une description d'un scénario et quelques hypothèses que j'espère que vous pourrez confirmer ou réfuter.

Question

Comment mon employeur peut-il être un homme du milieu lorsque je me connecte à Gmail? Peut-il du tout?

C'est-à-dire: est-il possible pour l'employeur de décrypter la connexion entre le navigateur de mon ordinateur de travail et le serveur proxy Web de l'employeur, de lire les données en texte brut, par exemple pour les analyses antivirus, de rechiffrer les données et de les envoyer à Google sans que je le remarque?

Navigateur sur l'ordinateur de l'employé <--> serveur proxy Web de l'employeur <--> serveur Gmail

L'employeur peut installer n'importe quel certificat auto-signé sur les ordinateurs de l'entreprise. C'est son infrastructure après tout.

Scénario: ce que je fais

  1. Avec un navigateur, ouvrez http://www.gmail.com (notez http, pas https)
  2. Je suis redirigé vers la page de connexion Google: https://accounts.google.com/ServiceLogin?service=mail&passive=true&rm=false&continue=https://mail.google.com/mail/&ss=1&scc=1&ltmpl = par défaut & ltmplcache = 2 & emr = 1
  3. J'entre mon nom d'utilisateur et mon mot de passe
  4. Je suis redirigé vers Gmail: https://mail.google.com/mail/u/0/?pli=1#inbox
  5. Je clique sur l'icône de verrouillage SSL dans le navigateur ...

... et voyez ce qui suit:

  • Délivré à: mail.google.com
  • Délivré par: "nom de l'entreprise employeur"
  • Valable du: 01.01.2014 - 31.12.2014
  • Chemin de certification: "nom de l'entreprise employeur" -> "nom du serveur proxy Web employeur" -> mail.google.com

Hypothèse

Je suppose maintenant que l'icône de verrouillage SSL dans le navigateur devient verte, mais en fait, je n'ai pas de connexion sécurisée entre le navigateur et le serveur Gmail.

Est-ce exact?

Sources

J'ai lu ces sources mais je ne les comprends toujours pas:

Résumé

  1. Est-il possible pour quelqu'un d'être un homme du milieu s'il contrôle l'infrastructure informatique? Si oui, comment exactement?
  2. Mon identifiant et mon mot de passe sont-ils lus en texte clair sur le serveur proxy Web de l'employeur?
  3. Que dois-je vérifier dans le navigateur pour vérifier que j'ai une connexion sécurisée depuis le navigateur jusqu'au serveur Gmail?

MODIFIER, 18.07.2014

  • La confidentialité n'est pas une préoccupation. Je suis simplement curieux de savoir comment TLS fonctionne dans ce scénario particulier. Les autres moyens dont dispose l'employeur pour intercepter la communication (enregistreur de frappe, etc.) ne sont pas pertinents dans ce cas particulier.
  • Les questions juridiques ne sont pas une préoccupation. Les employés sont autorisés à utiliser l'équipement informatique de l'entreprise pour la communication privée dans certaines limites. En revanche, l'employeur se réserve le droit de faire un suivi sans violer la vie privée.
99
Lernkurve

Vous avez absolument raison dans vos hypothèses.

Si vous utilisez un ordinateur détenu et exploité par votre employeur, il a effectivement un contrôle total sur vos communications. Sur la base de ce que vous avez fourni, ils ont installé un certificat d'autorité de certification racine qui leur permet de signer eux-mêmes un certificat pour Google.

Ce n'est pas si rare dans l'entreprise, car cela permet d'inspecter le trafic crypté à la recherche de virus ou de fuites de données.

Pour répondre à vos trois questions:

  1. Oui, c'est très possible et probable. On ne sait pas à quel point ils sont actifs pour surveiller ces choses.

  2. Votre mot de passe peut être lu en clair par votre employeur. Je ne sais pas ce que tu veux dire sur le serveur web.

  3. Vous pouvez vérifier le certificat pour voir qui l'a signé, comme vous l'avez déjà fait. Vous pouvez également comparer l'empreinte digitale à celle de Google (vérifiée auprès d'un tiers hors du contrôle de l'entreprise)

Éditer:

Comment mon employeur est-il capable de décrypter cela exactement? Pourriez-vous peut-être nous en dire un peu plus à ce sujet?

Vous utilisez le mauvais certificat pour vous connecter à un appareil intermédiaire tel que le pare-feu, cet appareil se connecte alors à Google à l'aide du bon certificat. La communication est cryptée de votre client vers le MITM, décryptée, puis rechiffrée sur son chemin vers Google.

82
David Houde

1 et 2 ont reçu une réponse de David Houde

3:

Il n'y a en fait aucun moyen de savoir avec certitude si vous parlez en toute sécurité à Gmail lors de l'utilisation de la machine de votre entreprise (à part l'audit de la machine dans le détail). Même s'ils n'ont pas modifié le certificat, ils peuvent simplement modifier le navigateur Web pour transférer tout le trafic décrypté quelque part. Il y a un million d'autres choses qu'ils pourraient faire. Il se trouve que dans ce cas, ils ont installé leur propre certificat racine qui vous permet de voir ce qu'ils ont fait.

21
Harold R. Eason

Je ne vois personne le mentionner, alors permettez-moi de souligner quelque chose. Peut-être que je me trompe mais pas épinglage de certificat implémenté dans Google Chrome (il existe un plugin pour Firefox comme bien) empêche l'usurpation de certificat?

Connexes questions et réponses.

Bien sûr, il est possible de renifler le trafic de quelqu'un si vous contrôlez l'infrastructure. Mais cela est possible dans une certaine mesure et, à mon avis, cela dépend de la façon dont les actions des utilisateurs sont restreintes et de leurs connaissances. Google Chrome est le navigateur qui peut être installé dans le profil utilisateur et je pense qu'il ne nécessite pas de privilège administratif. Vous pouvez également vérifier la somme de contrôle du package d'installation pour vérifier qu'il n'a pas été modifié sur- Depuis Google Chrome utilise l'épinglage de certificat indépendamment du magasin de certificats du système d'exploitation - est-il toujours vulnérable au MITM ?

Je ne vois aucun moyen d'empêcher les utilisateurs d'utiliser la version portable de VirtualBox avec le système d'exploitation client qui aura un tas d'outils axés sur la confidentialité qui augmenteront considérablement les chances de sécuriser la communication sur n'importe quel site Web/domaine.

N'hésitez pas à me corriger si je me trompe dans l'une des situations ci-dessus.

----------

Éditer.

D'accord. J'ai donc trouvé une solution pour vérifier si le certificat a été usurpé . Il ne fonctionnerait pas parfaitement pour Google et Apple mais cela pourrait être ce que vous recherchez dans le cas d'autres domaines.

Jusqu'au point:

Il existe un site https://www.grc.com/fingerprints.htm qui peut vérifier l'empreinte digitale du certificat à distance pour vous . Vous pouvez ensuite le comparer avec celui que vous voyez dans votre navigateur pour vérifier s'ils correspondent. S'ils ne correspondent pas - ce certificat est usurpé (Exception is mentioned in the section *What can go wrong with this test?* on the mentioned page.).

Voici la preuve que cela fonctionne. Cert navigateur: enter image description here

Empreinte digitale issue de la vérification de grc.com enter image description here

Je pense que puisque vous mentionnez quelque chose dans le sens de la surveillance de masse, l'usurpation de certificat sera également sur plusieurs sites https. Dans ce cas, s'il est confirmé que l'un est falsifié, je pense que vous pouvez supposer que tous le sont.


Prochaine modification.

Juste pour compléter la réponse. Étant donné que cela peut être le cas lorsqu'un État ou une organisation modifie complètement le navigateur et que le navigateur ne peut pas faire confiance pour confirmer la validité du certificat. J'ai trouvé une fonction PowerShell qui effectue une connexion SSL à l'adresse spécifiée et affiche des informations utiles sur le certificat.

Voici le code (alias est le mien):

function Test-WebServerSSL {
[CmdletBinding()]
    param(
        [Parameter(Mandatory = $true, ValueFromPipeline = $true, Position = 0)]
        [string]$URL,
        [Parameter(Position = 1)]
        [ValidateRange(1,65535)]
        [int]$Port = 443,
        [Parameter(Position = 2)]
        [Net.WebProxy]$Proxy,
        [Parameter(Position = 3)]
        [int]$Timeout = 15000,
        [switch]$UseUserContext
    )
Add-Type @"
using System;
using System.Net;
using System.Security.Cryptography.X509Certificates;
namespace PKI {
    namespace Web {
        public class WebSSL {
            public Uri OriginalURi;
            public Uri ReturnedURi;
            public X509Certificate2 Certificate;
            //public X500DistinguishedName Issuer;
            //public X500DistinguishedName Subject;
            public string Issuer;
            public string Subject;
            public string[] SubjectAlternativeNames;
            public bool CertificateIsValid;
            //public X509ChainStatus[] ErrorInformation;
            public string[] ErrorInformation;
            public HttpWebResponse Response;
        }
    }
}
"@
    $ConnectString = "https://$url`:$port"
    $WebRequest = [Net.WebRequest]::Create($ConnectString)
    $WebRequest.Proxy = $Proxy
    $WebRequest.Credentials = $null
    $WebRequest.Timeout = $Timeout
    $WebRequest.AllowAutoRedirect = $true
    [Net.ServicePointManager]::ServerCertificateValidationCallback = {$true}
    try {$Response = $WebRequest.GetResponse()}
    catch {}
    if ($WebRequest.ServicePoint.Certificate -ne $null) {
        $Cert = [Security.Cryptography.X509Certificates.X509Certificate2]$WebRequest.ServicePoint.Certificate.Handle
        try {$SAN = ($Cert.Extensions | Where-Object {$_.Oid.Value -eq "2.5.29.17"}).Format(0) -split ", "}
        catch {$SAN = $null}
        $chain = New-Object Security.Cryptography.X509Certificates.X509Chain -ArgumentList (!$UseUserContext)
        [void]$chain.ChainPolicy.ApplicationPolicy.Add("1.3.6.1.5.5.7.3.1")
        $Status = $chain.Build($Cert)
        New-Object PKI.Web.WebSSL -Property @{
            OriginalUri = $ConnectString;
            ReturnedUri = $Response.ResponseUri;
            Certificate = $WebRequest.ServicePoint.Certificate;
            Issuer = $WebRequest.ServicePoint.Certificate.Issuer;
            Subject = $WebRequest.ServicePoint.Certificate.Subject;
            SubjectAlternativeNames = $SAN;
            CertificateIsValid = $Status;
            Response = $Response;
            ErrorInformation = $chain.ChainStatus | ForEach-Object {$_.Status}
        }
        $chain.Reset()
        [Net.ServicePointManager]::ServerCertificateValidationCallback = $null
    } else {
        Write-Error $Error[0]
    }
}

Set-Alias TSSL Test-WebServerSSL

Vous pouvez le coller dans la console PowerShell - cela enregistrera la fonction pour l'heure de la session en cours (jusqu'à ce que vous fermiez la fenêtre de la console PowerShell pour ne laisser aucune trace).

Après cela, vous pouvez taper dans la même fenêtre:

TSSL www.ipko.pl

La sortie ressemblera à ça: enter image description here

J'ai trouvé un code de fonction ici .

9
mnmnc

Comme d'autres l'ont fait remarquer: oui, c'est possible et cela se fait dans ce cas.

Essayer de détailler davantage les étapes de ce MITM:

Vous savez que le certificat 028CA85E6765… appartient à gmail car une autorité de certification (GeoTrust, Verisign…) l'a affirmé. Votre système d'exploitation/navigateur contient une liste d'autorités de certification en qui il a confiance pour faire la bonne chose (ne pas mentir, être correctement sécurisé…).

  • Votre employeur a installé sur votre ordinateur sa propre autorité de certification.
  • Lorsque vous vous connectez à accounts.google.com avec TLS, le proxy émet lui-même un nouveau certificat pour accounts.google.com signé par cette autorité de certification (si elle n'en a pas déjà une).
  • Votre connexion au proxy se fait à l'aide du faux accounts.google.com certificat. Le proxy se mêle du contenu comme il le souhaite, puis se connecte au vrai accounts.google.com (en utilisant le certificat de Google) et envoie les contenus que vous et gmail vous transmettez.
  • Comme votre ordinateur fait confiance à l'autorité de certification proxy, il considère que le accounts.google.com le certificat délivré par votre employeur est légitime¹, c'est pourquoi il n'y a pas d'avertissement.

¹ La plupart des gens considéreraient que ce n'est pas légitime car ce n'est pas le certificat de Google, mais c'est est le certificat attendu au sein de cette entreprise. Cependant, les employés peuvent ne pas être d'accord. :-)

7
Ángel

Pour ajouter à d'autres réponses, la seule façon de garantir, avec une certitude raisonnable, que vous disposez d'une connexion sécurisée de votre navigateur au serveur Web, est d'utiliser votre propre équipement. L'équipement et le réseau appartenant à l'employeur ne sont pas sous votre contrôle, et il peut être difficile de déterminer ce qui est inclus dans leur système d'exploitation et leurs applications standard. Même si c'est illégal dans le pays où vous vous trouvez, si la confidentialité est un problème, vous devriez probablement utiliser votre téléphone portable ou votre ordinateur portable personnel.

6
Jay