【问题标题】:Can a "man in the middle" attack on an https READ all the communication?对 https 的“中间人”攻击可以读取所有通信吗?
【发布时间】:2018-04-26 23:54:55
【问题描述】:

如果攻击者在握手之前进行了 MIM 攻击并进行了哪些操作,则获取公共证书并充当侦听器。

不要试图充当当事方之一,只需阅读所有通信以获取有用的信息,例如 JWT 令牌和有关用户在该网站上所做的其他信息。

鉴于攻击者能够在连接安全之前拦截证书,它可以在握手完成后打开所有数据包,我错了吗?

这可能吗?

【问题讨论】:

  • MITM 能够成功的唯一方法是客户端接受他的证书,换句话说,如果他可以在客户端看来是服务器。

标签: ssl https handshake man-in-the-middle


【解决方案1】:

是与否,这取决于游戏中的其他一些元素...

如果没有 SSL 证书,答案是肯定的!

怎么做?

让我们考虑一下经典案例,其中 2 个对等方是 Alice 和 Bob,他们试图通过 HTTPs 进行通信。

MITM 只能从 Alice 和 Bob 那里获得公钥。不是私钥。即使在原来的情况下,Alice 也只能使用 Bob 的公钥加密给 Bob 的信息,而 Bob 也只能使用 Alice 的公钥加密给 Alice 的信息。

“智能”中间人会做的是替换在通道中为每对传递的公钥。换句话说:Alice 发送 Bob 应该收到的密钥。 MITM 会截获这个密钥,而不是将其传递给 Bob,而是将其替换为自己的密钥(我们称之为黑客密钥),然后将这个黑客密钥传递给 Bob。

上述相同的事情将发生在另一个方向,Bob 应该发送给 Alice 的密钥。

嗯...现在 Alice 和 Bob 都收到了黑客密钥,他们认为密钥是来自其他对等方的原始密钥(因为没有证书),但原始密钥由黑客保存。 你有看到?黑客只能从一方接收信息并解密(因为它是用黑客的公钥加密的),然后用另一方的原始公钥重新加密。就这么简单!

...但如果有 SSL 证书,答案是否定的。

为什么?

因为证书的存在正是为了解决上述问题。这意味着,如果来自 Alice/Bob 的公钥实际上属于 Alice 和 Bob,则可以通过数字签名进行验证,因此,如果他们使用 SSL 证书,Alice 和 Bob 能够检测到某些 MITM 交换了原始密钥.这是如何工作的超出了这个问题的范围,但是“作为一个简短的答案”,两个站点都将“预装”第三方证书,可用于验证正在交换的公钥的真实性。

【讨论】:

  • 即使有证书...如果中间人欺骗终端客户端接受自己的证书(而不是真正的服务器证书),同时连接到真正的最终服务器,因此它只是代理流量,但由于它终止客户端 TLS 连接,它可以访问其所有明文数据。
  • 是的,没错。但显然在这个范围内,我们假设 MITM 只是一个 MITM。 “从数学上讲”,Alice 和 Bob 没有妥协。您所描述的这种攻击是 MITM 之外的一种不同类型的攻击。如果您破坏了根证书,那么一切都会改变。
  • 不,这不是对任何证书的妥协。只是欺骗客户接受另一个证书。这种情况经常发生。对于最近的案例,请参阅我的答案中的链接(不是 MITM 只是偷窃):人们只是接受自签名证书而不是真实证书。它是在椅子和键盘之间对人的攻击,不太安全的部分。连接是 TLS ......只是不是真正的预期接收者。这说明了一个不太被理解的观点:与感觉相反,身份验证比完整性更重要,或者至少你首先需要它。但它也更复杂!
  • 接受另一个证书是另一个细节。它仍然不会使我的答案无效。我说的是由第三方签署的有效证书。你有什么问题?
  • 我没有“问题”。我只是认为“但如果有 SSL 证书,答案是否定的”。在一般情况下是错误的,因此我的详细信息。它也有点宣传只要你有证书就可以使用 TLS 的想法,显然不是这样。请参阅我的答案以获得完整的推理。
【解决方案2】:

因此,您得出了错误的结论:“鉴于攻击者能够在连接安全之前拦截证书”。

在用于 TLS 通信的经典 PKI 模型(如 HTTPS)中,基本上只有客户端对服务器进行身份验证(也可能是相互的),客户端有一个受信任的证书颁发机构列表。这些当局应该只有在仔细审查后才能提供证书。

所以“通常”只有“www.example.com”的真正所有者才能获得它的证书。因此,客户端将验证证书,因为它在其本地存储中有一个受信任的 CA(它有它的“根”以及最终颁发此证书的中间证书)

证书本身并不能识别某些东西,因为它是公开的。它是从受信任的 CA 到应由其签名的最终证书的整个信任路径。

如果中间有一个人,证书要么是另一个名字,要么是由未知的 CA 颁发,通常是由它自己签名时(例如,最新著名的此类案例:https://blog.cloudflare.com/bgp-leaks-and-crypto-currencies/

现在,这种网络 PKI 模型的全部问题是客户端需要信任数百个 CA,并且任何 CA 都可以为任何名称提供证书。因此,一旦你发现了一个流氓证书或一个故障,理论上你就可以为你并不真正拥有的资源获得第二个证书。这在过去发生过多次。

在客户端或服务器端都有各种选项可以处理这个问题。客户端可以修剪其允许的 CA 列表。服务器可以使用 DNS 中的 DANE 来准确发布客户端在连接到它时应该看到的证书或 CA(由于 DANE 受 DNSSEC 保护,MiTM 将无法阻止这一点)。

【讨论】:

    猜你喜欢
    • 2012-04-07
    • 2014-09-29
    • 2017-01-04
    • 2011-03-05
    • 2012-12-31
    • 1970-01-01
    • 2016-06-08
    • 2018-08-31
    • 2010-10-25
    相关资源
    最近更新 更多