如果攻击者在握手之前进行了MIM攻击并且正在做什么,那么就获得两个公共证书并充当听众。
不要试图充当其中一方,只需阅读所有通信,即可获得有用的信息,如JWT令牌和其他有关用户在该网站上所做工作的信息。
鉴于攻击者能够在连接安全之前拦截证书,它可以在握手完成后打开所有数据包,我错了吗?
这可能吗?
答案 0 :(得分:2)
是和否,这取决于游戏中的其他一些元素......
如果没有SSL证书,答案是肯定的!
如何吗
让我们考虑两个对等方是Alice和Bob试图通过HTTP进行通信的经典案例。
MITM只能获取Alice和Bob的公钥。不是私钥。即使在最初的情况下,Alice也只能使用Bob的公钥加密信息给Bob,而Bob只能使用Alice的公钥加密给Alice的信息。
什么"聪明" MITM会做的是替换每对通道中传递的公钥。换句话说:Alice发送Bob应该接收的密钥。 MITM将拦截此密钥而不是将其传递给Bob,而是将他/她替换为自己的密钥(让我们调用黑客密钥),然后将此黑客密钥交给Bob。
上面的相同内容将在另一个方向上发生,Bob应该发送给Alice的密钥。
嗯......现在Alice和Bob都收到了一个黑客密钥,他们认为密钥是来自其他对等方的原始密钥(因为没有证书),但原始密码由黑客保存。 你有看到?黑客只能从一方接收信息并解密(因为它是用黑客的公钥加密的),然后用另一方的原始公钥重新加密。很简单!
...但如果有SSL证书,答案为否。
<强>为什么吗
因为证书确实存在以解决上述问题。这意味着,来自Alice / Bob的公钥可以通过数字签名验证,如果它们实际上属于Alice和Bob,那么,如果他们使用SSL证书,Alice和Bob能够检测到某些MITM交换了原始密钥。如何工作超出了这个问题的范围,但作为一个简短的答案&#34;这两个站点都将拥有第三方证书&#34;预先安装&#34;可用于验证正在交换的公钥的真实性。
答案 1 :(得分:1)
由于这个原因,你得出了错误的结论:“鉴于攻击者能够在连接安全之前拦截证书”。
在用于TLS通信的经典PKI模型中,如HTTPS,基本上只有客户端对服务器进行身份验证(它也可能是相互的),客户端有一个受信任的证书颁发机构列表。这些当局只有在仔细审查后才能提供证书。
所以“通常”只有“www.example.com”的真正所有者才能获得证书。因此,客户端将验证证书,因为它在其本地存储中具有受信任的CA(它具有“root”并且最终颁发了此证书的中间证书)
证明某些东西不是证书本身,因为这是公开的。它是从受信任的CA到应由其签名的最终证书的完整信任路径。
如果中间有人,则证书将用于其他名称,或者由未知CA颁发,通常是在自己签名时(例如最新的着名案例:https://blog.cloudflare.com/bgp-leaks-and-crypto-currencies/ )
现在,这个用于Web的PKI模型的整个问题是客户端需要信任数百个CA,并且任何CA都可以为任何名称提供证书。因此,一旦你发现一个流氓或一个故障,理论上你可以获得一个你并不真正拥有的资源的第二个证书。这在过去多次发生过。
在客户端或服务器端,有各种方法可以解决这个问题。客户端可以修剪其允许的CA列表。服务器可以在DNS中使用DANE准确地发布哪个证书或客户端在连接时应该看到哪个CA(并且由于DANE受DNSSEC保护,MiTM将无法击败它)。