6

我正在研究企业 API,它可用于企业服务,MITM 可能会产生可怕的后果。

我们决定使用 HTTPs 而不是 HTTP,但在谷歌搜索之后,我了解到仅 SSL 是不够的。

据我了解,使用 SSL 时有两个主要漏洞:1)现在有很多 CA 提供商公司,所以没有人受到 MITM 攻击的保护,破解者使用普通证书(我找到了一些文章,据说 VeriSign有秘密部门,为 MITM 提供秘密服务,当时 VeriSign 是全球唯一的 CA)2)大多数 MITM 攻击在使用 ARP 缓存中毒时是可能的

所以,我暂时只能看到一个解决方案,但不确定这是否是最佳实践:由于 API 是内部的,我可以使用以下内容:1)使用对称加密算法加密数据 2)限制 ips,即能够使用API(如在应用程序中,如在服务器防火墙中)

这够了吗?也许还有其他最佳实践来建立真正安全的连接,这将使 MITM 成为不可能?

如果此解决方案(SSL + 对称加密算法)可以,您能否为此类问题建议最合适的加密算法?

在此先感谢,将很高兴获得任何帮助/建议。

UPD:VPN(由 frenchie 建议)不适合这种情况

UPD2:公钥-私钥(类似 RSA)是可能的(谢谢 2 Craigy),但在服务器端非常昂贵。

4

3 回答 3

6

我们决定使用 HTTPs 而不是 HTTP,但在谷歌搜索之后,我了解到仅 SSL 是不够的。

我不确定你用谷歌搜索了什么,但如果使用正确,SSL/TLS 可以保护你免受 MITM 攻击。

如果此解决方案(SSL + 对称加密算法)可以,您能否为此类问题建议最合适的加密算法?

SSL/TLS 中的加密已经使用对称加密技术完成。只有身份验证是通过非对称加密完成的。

据我了解,使用 SSL 时有两个主要漏洞:

  1. 现在有很多 CA 提供商公司,所以没有人受到 MITM 攻击的保护,普通证书被黑客使用(我发现了一些文章,据说 VeriSign 有秘密部门,它为 MITM 提供秘密服务,而 VeriSign 是全球唯一的 CA)2)大多数 MITM 攻击在使用 ARP 缓存中毒时都是可能的

防止 MITM 攻击正是证书的目的。客户端 (a) 检查是否在预期时使用了 HTTPS,以及 (b) 检查服务器证书的有效性,这完全是客户端的责任。

第一点可能很明显,但这是像sslstrip这样的工具所做的那种攻击:它们是 MITM 降级攻击,完全阻止用户访问 HTTPS 页面。作为用户,请确保您在应该是 HTTPS 的 HTTPS 页面上。在企业环境中,告诉您的用户他们必须检查他们是否通过 HTTPS 访问您的服务器:只有他们可以知道(除非您也想使用客户端证书身份验证)。

第二点(证书验证)也取决于客户端,尽管其中大部分是在浏览器中自动完成的。用户有责任不忽略浏览器警告。证书验证的其余部分往往通过预先安装的 CA 证书(例如 Verisign 的)来完成。

如果发生 MITM 攻击(可能是通过 ARP 中毒),用户应该得到一个不正确的证书并且不应该继续。正确的 HTTPS 验证应该允许您拥有安全连接或根本没有连接。

您提到的漏洞与证书验证(PKI 模型)有关。实际上,验证服务器证书是否正确取决于您的浏览器信任的 CA 证书。在那里,任何受信任的 CA 原则上都可以为任何服务器颁发证书,因此该模型是列表中最弱的 CA。如果一个受信任的 CA 为一个站点颁发一个假证书并将其提供给另一方,这就像让一个护照办公室颁发一个真正的“假”护照一样好。反击非常棘手,但有一些方法可以解决它。

  • 您可以依赖诸如Perspective Projects之类的扩展,它们监视证书更改,即使两者都是受信任的。此类警告应提示用户调查证书更改是否合法(由您的公司完成)。

  • 更根本的是,您可以部署自己的 CA,从用户浏览器中删除所有受信任的 CA 证书并仅安装您自己的 CA 证书。在这种情况下,用户将只能安全地连接到具有您的 CA 颁发的证书的计算机。这可能是一个问题(如果您的浏览器使用操作系统证书存储库,则包括软件更新)。

  • 原则上,您可以完全避免使用证书并使用预共享密钥密码套件。但是,并非所有 SSL/TLS 堆栈都支持这一点,并且不一定适用于基于 TLS 的 HTTP(据我所知,缺少有关主机名验证的规范)。

您可能还对 Security.SE 上的这些问题感兴趣:

于 2012-08-08T19:41:37.133 回答
4

如果您想防御中间人攻击,那么使用对称密钥加密可以防止数据被第三方泄露是正确的。但是,您将面临分配密钥的问题,这也是非对称密钥密码学吸引人的原因之一。

要在网络上使用非对称密钥加密时防御 MITM 攻击,您可以设置自己的公钥基础设施。您将设置和管理证书颁发机构禁用所有其他证书颁发机构,这样没有人可以伪装成其他人,从而防止 MITM 攻击。如果 CA 被破坏,那么 MITM 攻击将再次成为可能。

只是为了确保我们在同一页面上,这些建议是独立于实现的。您可以将任何对称密钥算法用于第一个建议。

对于第二个建议,您需要一个更复杂的系统,称为非对称或公钥密码学。这些是建立在像RSA这样的算法之上的。

SSL是一种使用公钥密码术进行密钥交换和使用对称密码术发送消息的协议。

于 2012-08-08T17:08:02.560 回答
1

正确防御中间攻击的人需要两件事:

  • 永远不要通过 HTTP 为您的网站提供服务;只监听 HTTPS 流量
  • 在存活时间较长的响应中使用 Strict-Transport-Security 标头

带有 SSLStrip 攻击的 ARP 中毒依赖于浏览器启动与服务器的 HTTP 连接并稍后转换为 HTTPS。正是在这个过渡点,攻击才生效。

但是,如果浏览器将请求作为 HTTPS 请求发起,则握手会在其他任何事情发生之前向浏览器验证服务器。基本上,如果发生中间人攻击,用户将被通知 SSL 连接无法建立,或者服务器不是正确的服务器。

永远不要通过 HTTP 为您的网站提供服务,这会迫使任何链接到它的人在链接中使用 HTTPS。Strict-Transport-Security 标头指示兼容的浏览器将任何通过 HTTP 与您的服务器通信的尝试转换为 HTTPS。

对于您的用例,似乎除了上述两个建议之外的任何其他解决方案都将是矫枉过正。要阅读有关 Strict-Transport-Security 的更多信息,请参阅有关 Strict-Transport-Security的 Wikipedia 文章

于 2013-06-30T23:44:46.480 回答