哪个最容易受到 MITM 攻击,SSL 还是 SSH?

信息安全 tls SSH
2021-08-30 02:35:45

哪个最容易受到 MITM 攻击,SSL 还是 SSH?

这是场景,您有 20 分钟的时间来设置这样的 Web 代理:

笔记本电脑 -> Chrome 浏览器 -> 网络代理 -> 互联网

您必须保护笔记本电脑和 Web 代理服务器之间的连接,在代理之后什么都没有,我们现在关心的只是笔记本电脑到代理服务器的连接。

您可以使用 SSL,也可以通过 SSH 隧道传输 Web 流量,我们关心的是安全性,而不是性能。你会使用哪一个,SSL 还是 SSH,为什么?

4个回答

使用 SSH,事情是这样完成的:

  • 在笔记本电脑上,运行ssh -N -D 5000 proxy-machineproxy-machine“Web 代理”机器的 DNS 名称在哪里);
  • localhost将浏览器配置为在端口 5000上使用 SOCKS 协议。

这很方便,并且在不到 20 分钟的时间内激活。但是,它具有以下后果:

  • ssh只要笔记本电脑用户希望通过代理浏览 Internet,就必须运行该命令并使其保持运行。
  • ssh命令必须安装在笔记本电脑上(这是 MacOS X、Linux 和所有类 Unix 系统的标准问题,但不是Windows)。
  • Web 代理机器必须运行 SSH 服务器。
  • 膝上型电脑用户必须在 Web 代理机器上有一个帐户(可以将该帐户限制为像上面那样设置隧道,但配置起来并不容易)。

使用 SSL,您必须在 Web 代理上安装一些代理软件(例如squid)并使用 X.509 证书对其进行配置,以便客户端(笔记本电脑)https://proxy-machine:9000/用作代理 URL(端口号可以随意更改,我以 9000 为例)。笔记本电脑上没有要安装的软件;只需将浏览器配置为使用正确的 URL 作为 HTTP 级代理。警惕代理自动配置脚本,它们可能是攻击者强制另一个代理配置的方法;你最好手动配置代理。


SSL 和 SSH 使用不同的保护措施来抵御中间人攻击。SSH 客户端记录目标机器的公钥(在$HOME/.ssh/known_hosts类 Unix 系统的文件中),以便检查服务器公钥是否正确;只有第一个连接是脆弱的。SSH 公钥具有指纹(即哈希值),可用于检查密钥是否正确(想法是您可以致电系统管理员,他会拼出指纹;这很乏味,但只需要完成一次每个 SSH 服务器)。除非笔记本电脑或代理受到威胁,或者密码算法被愤怒的密码分析家彻底破坏,否则 SSH 方式是安全的。

SSL 依赖于X.509 证书安全性来自已嵌入浏览器(或操作系统)中的一组信任锚(又名“根证书”)。认证机构应该只向经过正式认证的实体颁发证书,而数字签名是浏览器可以用来验证证书内容没有被篡改的加密工具,并且只涉及接受的认证机构。要安装 MitM,攻击者必须贿赂 CA 以颁发假证书,名称为proxy-machine,但使用攻击者拥有的公钥。

X.509 安全性依赖于比 SSH 安全性更多的假设,SSH 安全性在本地处理,发生的事情非常简单。但是 SSH 场景需要笔记本电脑用户更加了解正在发生的事情。我来说,我会使用 SSH(确实,我就是这样做的);对于有很多用户的组织,我会遵循 SSL 路径(但“20 分钟”的要求是个笑话)。

我的两分钱:

  • 两者都需要最新的客户端/服务器
  • 两者都依赖于知道服务器密钥/证书的公共指纹。

为了防止 MITM,找到一种方法让您的客户端主机上的指纹可用。使用 SSH 很容易实现,因为它存储了密钥,并且如果它已更改,将拒绝连接到服务器,一旦正确,就可以了。

使用此命令将降低 MITM 成功的可能性:

ssh -o VisualHostKey=yes -2

使用 SSH 的另一点,主要实现来自于OpenSSH 项目分发的 openssh-server 。他们设计并实现了它,众所周知,他们会审核他们的代码并使每个版本更加安全。

现在,SSL 将提供比 SSH 更少的控制,浏览器通常以用户友好的方式实现指纹检查,并依靠信任链来验证证书/站点。

如果您可以选择,SSH 不太容易受到 MITM 的攻击:

  • 它不会外包信任
  • 检查密钥/证书更改很容易

从我的角度来看,使用 SSL 的唯一原因是为用户提供一种简单的方法来获取数据流的非对称加密,当然还有身份验证。可用性总会在某些时候牺牲安全性。SSH 较少关注可用性,而更多关注安全性。很容易理解,机器上的 shell 访问比防止窃听网络流量更重要。对于技术人员来说,使用 SSH 应该很容易,但如果你想在代理场景中使用它,它需要你在弹跳机器上获得访问权限,而使用 SSL,他们已经是许多免费代理,它更方便。

出于以下原因,我个人会使用 SSH。

  1. 我已经在几台启用了 SSH 的机器上拥有帐户
  2. 我以前登录过这些帐户,所以我已经缓存了他们的公钥(将有效地防止中间人攻击)
  3. 这是设置连接的单个命令(请参阅 Thomas 的答案)和浏览器中的简单更改(甚至可以通过命令行使用 --proxy-server=: 在 Chrome 中完成)

两种协议的 MITM 攻击机制完全相同,缓解技术也是如此。在这两种情况下,您都依赖于在连接时检查主机密钥/证书的差异。

但是,在这种情况下,我会更信任 SSH,因为 SSL 依赖于全局 SSL PKI(证书颁发机构等),而 SSH 只是希望主机密钥永远不会改变。因此,虽然 SSH在第一次连接时容易受到 MITM 攻击,但它会可靠地检测任何后续连接的 MITM 尝试,因为将跟踪最后受信任的主机密钥,并在此后的每次连接尝试中进行比较。

虽然攻击者不太可能获得您的主机名的有效 SSL 证书并能够对您使用它,但它并非闻所未闻,有时确实会发生。