通过 HTTPS 发布敏感数据“足够安全”?

信息安全 加密 tls Web应用程序 http 网络服务
2021-08-25 17:33:22

我想知道是否要防止 SSL 证书受损的可能性导致敏感信息泄露的可能性,如果进一步加密通过 SSL 传递的数据可能是谨慎的。

想象的场景:两个 Web 应用程序。一个是 Web 应用程序,另一个是提供身份验证 API 的应用程序。

Web 应用程序将 HTTPS POST 发送到包含用户名和密码的身份验证 API。它通过 SSL 加密。

但是,如果攻击者要破坏 SSL 证书,就不能嗅探这些数据吗?

我的想法是添加另一个级别的加密——例如,我们有一个额外的公钥/私钥对,我们也通过它来加密 POST 中的所有信息。

这意味着破坏了您的 SSL 证书的攻击者需要找到额外的私钥才能中断通信。

想法?

4个回答

如果您必须确保安全,请使用双因素身份验证,而不是额外的加密。让用户用户输入用户名、密码和通过电子邮件或短信发送的 6 位随机数。证书受损意味着攻击者可以双向控制整个 SSL 有效负载;包括您发送给客户端以执行与服务器进行身份验证所需的加密的任何代码。

还要考虑将您的应用程序服务器和您的身份验证服务器分开。这使得攻击者更难对获取的用户名和密码列表进行任何有用的操作,如果它们实际上并未被应用程序服务器接受;这是 OAuth2 背后的概念。恢复一台服务器比攻击两台服务器要容易得多(至少在理论上)。

我假设当您说“网络应用程序”发送 POST 时,您的真正意思是用户浏览器中的 html 网页向第三方服务器发出 POST 请求。

外部攻击者(流氓 CA/政府)破坏 SSL/TLS 的事件可能非常低。这留下了两种可能性。

#1。您的服务器受到无关攻击,私钥被盗

如果有人在您的系统中并且可以访问私钥,他们可能可以访问您的应用程序/源并对其进行修改以抽取数据 (MITM)。那时,没有额外的加密货币可以拯救你。

#2。用于创建/部署 SSL/TLS 的设置不好。如果您使用不安全的算法/哈希或旧的 SSL 版本,您可能容易受到 SSL 特定攻击 ( http://en.wikipedia.org/wiki/Transport_Layer_Security#Security )。请记住使用 SSL 3/TLS。最好是 TLS 1.2。

如果您假设私钥被泄露(证书在每笔交易中都会发出,但没有私钥就没有用处),那么它就必须在银行。如果是这种情况,银行提供的任何其他安全机制同样无效。

如果您假设浏览器或应用程序具有额外的 CA 权限(雇主通常会这样做),那么基本上客户端就会受到损害。如果您不信任 CA 列表,您为什么要相信浏览器没有任何挂钩 - 或者就此而言,没有键盘记录器?

如果这是从您正在编写的应用程序中完成的,您应该能够为您的连接获取 TLS 证书。对于浏览器中的 Java,这应该是可能的(尽管显然不是来自 Javascript)。当然,您仍然假设应用程序/java 程序没有被篡改——没有办法在不受信任的平台上运行受信任的代码。

如果您有使用 Diffie-Hellman 的 TLS 连接,则无法解密捕获的数据,即使使用私钥(引用: https: //support.citrix.com/article/CTX116557)也是如此。

即使对于 Diffie-Hellman,中间人攻击仍然有效(如果攻击者拥有私钥和证书,则它们与合法所有者无法区分)。

我个人的观点是,如果有人篡改/试图篡改我的数据,那么我不想要另一层加密,我想被告知(并拒绝服务)。

另请注意:我已经看到反恶意软件安装了额外的 CA 证书,因此它可以扫描由 https 传递的恶意软件。

是的!TLS不安全- 证书替换非常普遍(大多数企业使用内容检查边缘设备,大多数学校和大学,所有良好的防火墙,甚至几个国家都强制用户安装自己的 CA,以便他们可以 MitM 并检查“加密”交通)。大约每 2 个月,就会发现一个新的 CA 也遭到入侵。还有很多恶意软件会在受害者机器上安装自己的 CA。

使用 2FA 不是解决此问题的方法。2FA 是一项已有 35 年历史的身份验证技术,与防止流量拦截无关。