ssh 是否带有公钥认证,没有密码足够安全?

信息安全 SSH
2021-08-13 15:41:58

我设置了一个 Web 服务器,并想使用 Tor 从外部连接到它。Web 服务器只是提供一个简单的网页,作为在机器上运行的程序的接口。它并不意味着其他任何人都可以访问。

如果我使用 SSH 设置另一台计算机并设置使用 SSH 密钥登录以充当 SSH 隧道,这对于大多数攻击者来说是否足够安全?

有了 SSH 隧道和 Tor,是否有理由使用 SSL,或者这一切是否足够安全?哪些攻击仍然是可能的,我该如何防御它们?

3个回答

如果使用 SSH 的公钥认证,没有对应的私钥,任何人都无法登录服务器。这与密码验证一样安全,而且通常更安全。OpenSSH 提供的加密是最先进的;没有已知的方法可以打破它。您可以通过使用授权的隐藏服务进一步提高 Tor 端的安全性这将使除了您的客户之外的所有人都无法访问该域。请注意,这仅适用于 v2 隐藏服务,不适用于最新的 v3。

唯一剩下的攻击将是中间人攻击。您可以将主机密钥从服务器复制到客户端,就像您复制密钥以使公钥身份验证成为可能一样。这将完全缓解中间人攻击,如果检测到尝试,客户端会警告您。

另请参阅SSH 的 authorized_keys 和 known_hosts 文件有什么区别?

森林编写的现有答案详细说明了 SSH/Tor 方面的安全性(如果设置正确,则非常安全),所以我不会在这里重复。

我注意到您主要是在询问客户端安全性(“有人可以干扰我的浏览器吗?”),但我会说服务器端安全性(“有人可以在未经许可的情况下使用我的网站/程序吗?”)也是在设置基于 Web 的程序管理界面时,这是一个非常重要的考虑因素。

将敏感网页向整个互联网开放可能存在很大的风险,因此您确实需要在网络服务器端使用某种安全措施 - 它可能是 Tor 授权的隐藏服务,如 Forest 描述的那样,或者一些保护网站免受随机黑客攻击的其他方法。

假设场景:假设您有一个在 HTTP 上运行的网络服务器(因为不清楚您是使用 Tor 来提供隐藏服务还是作为代理软件的一种形式)。假设您/index.php有一个指向 的链接/my_program_interface.php,为了“安全”,我们也将它放在端口 8080 上,没有域名,但除此之外,您允许它接受来自任何人的连接。好吧,如果有人发现你在那里有一个网络服务器(并且使用 IPv4,一个完整的网络扫描是可行的,所以你的网络服务器可以被发现),他们所要做的就是输入http://[your_ip_here]/index.php一个正常的 off-现成的浏览器,然后他们就可以像你一样控制你的程序。

换句话说:不要忘记服务器端授权检查以及客户端隐私检查很重要!

这取决于您所说的足够安全是什么意思。

没有威胁模型就没有安全性,因为时间旅行、读心术的神可以击败您创建的任何系统。

如果这是一个简单的实用程序,那么有人在您的服务器上为 ssh 烧写 0day 的可能性很小,因为只有更好的目标,而且不值得花时间和精力。

但是,如果您计划运行一个系统来协调网站背后的巨大犯罪帝国,您应该期望大型情报机构可以通过使用对 Tor 网络的攻击,或通过简单的橡胶软管密码学:

相关xkcd

然而,即使您的系统在理论上足够安全,也存在人为因素:您永远无法 100% 确定您已正确设置它,因此入侵可能是微不足道的。

一个非常重要的安全规则是期望您的系统在某个时候会被破坏。安全系统设计的很大一部分是确保当它被破坏时,它不会造成太大的损害。为此,我建议使用 docker 镜像之类的东西,以便在它被入侵时轻松擦洗它。

如果 ssh 背后的实际密码学被破解,你应该更担心收集罐头食品,因为会发生经济崩溃,使大萧条看起来有点悲伤,因为任何安全的网络流量都可以用一个简单的 MitM 解密(密码、服务器证书、银行详细信息等),以及大量被黑客入侵的服务器僵尸网络将攻击任何和所有面向互联网的服务器,有效地扼杀信息时代,并将互联网变成一个战场。