当我连接到 Gmail 时,我的雇主如何成为中间人?

信息安全 加密 tls 验证 中间人
2021-08-21 02:57:19

我正在尝试了解 SSL/TLS。下面是一个场景的描述和一些假设,我希望你能证实或反驳。

问题

当我连接到 Gmail 时,我的雇主如何成为中间人?他可以吗?

那就是:雇主是否可以解密我工作计算机上的浏览器和雇主的网络代理服务器之间的连接,以纯文本格式读取数据(例如用于病毒扫描),重新加密数据并将其发送给谷歌在我不注意的情况下?

员工计算机上的浏览器 <--> 雇主的网络代理服务器 <--> Gmail 服务器

雇主可以在公司计算机上安装任何自签名证书。毕竟这是他的基础设施。

场景:我在做什么

  1. 使用浏览器打开http://www.gmail.com(注意 http,不是 https)
  2. 我被重定向到 Google 登录页面:https ://accounts.google.com/ServiceLogin?service=mail&passive=true&rm=false&continue=https://mail.google.com/mail/&ss=1&scc=1<mpl=default<mplcache=2&emr =1
  3. 我输入我的用户名和密码
  4. 我被重定向到 Gmail:https ://mail.google.com/mail/u/0/?pli=1#inbox
  5. 我单击浏览器中的 SSL 锁定图标...

...并查看以下内容:

  • 发给:mail.google.com
  • 颁发者:《雇主公司名称》
  • 有效期:01.01.2014 - 31.12.2014
  • 认证路径:“雇主公司名称”-->“雇主网络代理服务器名称”--> mail.google.com

假设

我现在假设浏览器中的 SSL 锁定图标变为绿色,但实际上我没有从浏览器到 Gmail 服务器的安全连接。

那是对的吗?

来源

我已经阅读了这些资料,但仍然不太明白:

概括

  1. 如果某人控制 IT 基础架构,是否有可能成为中间人?如果是这样,具体如何?
  2. 我的登录名和密码是否在雇主的网络代理服务器上以纯文本形式读取?
  3. 我应该在浏览器中检查什么来验证我从浏览器到 Gmail 服务器的连接是否安全?

编辑,18.07.2014

  • 隐私不是问题。我只是对 TLS 在这种特定情况下的工作方式感到好奇。在这种特殊情况下,雇主必须拦截通信(键盘记录器等)的其他方式无关紧要。
  • 法律问题不是问题。允许员工在一定限度内使用公司 IT 设备进行私人通信。另一方面,雇主保留在不侵犯隐私的情况下进行监控的权利。
4个回答

你的假设是绝对正确的。

如果您使用的是您的雇主拥有和操作的计算机,他们实际上可以完全控制您的通信。根据您提供的内容,他们安装了根 CA 证书,允许他们自己为 Google 签署证书。

这在企业中并不少见,因为它允许检查加密流量中是否存在病毒或数据泄漏。

回答你的三个问题:

  1. 是的,这很有可能,而且很有可能。他们在监控这些事情方面的积极程度是未知的。

  2. 您的雇主可以以纯文本形式读取您的密码。我不知道你说的网络服务器是什么意思。

  3. 您可以检查证书以查看谁签署了它,就像您已经完成的那样。您还可以将指纹与 Google 的指纹进行比较(从业务控制之外的第三方检查)

编辑:

我的雇主究竟是如何解密的?您能否详细说明一下?

您正在使用错误的证书连接到中间设备(例如防火墙),然后该设备使用正确的证书连接到 Google。从您的客户端到 MITM 的通信经过加密、解密,然后在发送到 Google 的途中重新加密。

1 和 2 由 David Houde 回答

3:

实际上,没有任何方法可以确定您在使用公司的机器时是否安全地与 Gmail 交谈(除了对机器进行全面审核)。即使他们没有更改证书,他们也可以简单地修改网络浏览器以将所有解密的流量转发到某处。他们还可以做一百万件其他事情。碰巧在这种情况下,他们安装了自己的根证书,让您可以看到他们做了什么。

我没有看到有人提到它,所以请允许我指出一些事情。也许我错了,但在谷歌浏览器中实现的证书固定(Firefox 也有一个插件)不能防止证书欺骗吗?

相关问题和答案。

当然,如果您控制基础设施,则可以嗅探某人的流量。但这在某种程度上是可能的,在我看来,这取决于用户操作的限制程度以及用户的知识。谷歌浏览器是可以安装在用户配置文件中的浏览器,我认为它不需要管理权限。您还可以验证安装包的校验和,以验证它没有被即时修改。由于谷歌浏览器使用证书固定而不考虑操作系统证书存储 -它仍然容易受到 MITM 的攻击吗?

我没有看到任何阻止用户使用带有客户端操作系统的便携式版本的 VirtualBox 的方法,这些版本将拥有大量面向隐私的工具,这些工具将显着提高保护与任何网站/域的通信的机会。

如果我在上述任何一个方面有错误,请随时纠正我。

----------

编辑。

行。所以我找到了一个检查证书是否被欺骗的解决方案据说它不适用于谷歌和苹果,但它可能是您在其他域的情况下正在寻找的东西。

重点:

有一个站点https://www.grc.com/fingerprints.htm可以为您检查远程证书指纹然后,您可以将其与您在浏览器中看到的进行比较,以检查它们是否匹配。如果它们不匹配 - 此证书被欺骗(Exception is mentioned in the section *What can go wrong with this test?* on the mentioned page.)。

这是它有效的证据。浏览器证书: 在此处输入图像描述

来自 grc.com 验证的指纹在此处输入图像描述

我认为,由于您提到了大规模监视方面的内容,因此证书欺骗也将出现在多个 https 站点上。在那种情况下,如果一个人被证实是被欺骗的,我想你可以假设他们都是。


下一次编辑。

只是为了完成答案。因为可能是某些国家或组织完全修改了浏览器,无法信任浏览器来确认证书的有效性。我找到了一个 powershell 函数,它执行到指定地址的 SSL 连接并显示有关证书的一些有用信息。

这是代码(别名是我的):

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

您可以将其粘贴到 powershell 控制台中 - 这将在当前会话期间注册该功能(直到您关闭 powershell 控制台窗口,这样您就不会留下任何痕迹)。

之后,您可以在同一窗口中输入:

TSSL www.ipko.pl

输出将如下所示: 在此处输入图像描述

我在这里找到了一个功能代码。

正如其他人指出的那样:是的,这是可能的,并且在这种情况下正在这样做。

尝试详细说明此 MITM 中涉及的步骤:

您知道证书 028CA85E6765... 属于 gmail,因为 CA(GeoTrust、Verisign...)已断言它属于 gmail。您的操作系统/浏览器包含一个它信任的 CA 列表,它可以做正确的事情(不撒谎,得到适当的保护……)。

  • 您的雇主已在您的计算机中安装了自己的 CA。
  • 当您使用 TLS 连接到 accounts.google.com 时,代理会为自己颁发一个accounts.google.com由该 CA 签名的新证书(如果它还没有)。
  • 您与代理的连接是使用假accounts.google.com证书完成的。代理会随心所欲地干预内容,然后连接到真实的accounts.google.com(使用 Google 的证书)并来回发送您和 gmail 给对方的内容。
  • 由于您的计算机信任代理 CA,它认为accounts.google.com您的雇主颁发的证书是合法的¹,因此没有警告。

¹ 大多数人会认为它不合法,因为它不是 Google 的证书,而是公司内部预期的证书。不过,员工可能不同意这是可取的。:-)