IP 地址可以成为 2 因素身份验证的组成部分吗?

信息安全 网络 验证 SSH
2021-08-12 04:09:50

我有一堆希望通过 Internet 管理的 Linux 机器。我目前使用 SSH 密钥,但建议使用 2 因素身份验证。SSH 密钥是您所知道的。您有 IP 地址吗?(是的,IP 可以被欺骗,但生物识别技术和 atm 卡也可以)。

我可以锁定 SSH 以仅允许来自我的 IP 范围的连接吗?这是否会被视为与 SSH 密钥结合使用的 2 因素?

4个回答

我认为 IP 地址是“你在哪里”,而不是任何传统的“你知道的东西”、“你拥有的东西”和“你现在的东西”,它们是三因素身份验证的一部分。

尽管 IP 地址很容易被欺骗,但 TCP 连接却不是,而且 SSH 是建立在 TCP 之上的协议。TCP 连接的 IP 地址您直接连接到谁的可靠指标。

假设我将 SSH 连接限制为我的办公室 IP 地址,攻击者将不得不执行以下操作之一:

  1. 在或附近(如果他破解无线)我的办公室
  2. 在我的办公室和我的服务器之间的路径上(比如在我们的 ISP 内部)。
  3. 控制我办公室内的一台机器。

第 3 点允许攻击者在世界任何地方,但它增加了攻击的难度。

第 1 点和第 2 点显着减少了能够成功使用其他因素(例如您的 SSH 密钥或密码)的人数,如果他们设法获得它们,因此我认为这是值得的。

IP 地址质量在这里是一个重要因素。我在上面的例子中使用了我的办公室,但是如果你有一个动态 IP 地址,你相信你的 ISP 拥有的整个范围吗?这对攻击者获取其中一个 IP 地址的难易程度有何影响?当您知道 IP 地址背后有 10 台机器被 NAT 隐藏时,其可信度是否会发生变化?如果有 2,000 台机器和 100 个无线接入点怎么办?

我不会认为 IP 地址本身就是一个因素。

如果处理得当,它可能对您的安全协议有所帮助。但是,对于使用它来替换您的身份验证中的预先存在的因素,我会非常犹豫,因为 IP 地址不是秘密信息(您将其提供给您访问的每个网站)并且取决于您获取 IP 的方式/位置地址来自,可能是微不足道的恶搞。但是,如果您将来自 TCP 连接的 IP 地址与存储的安全 http-only cookie 结合使用,则可以增加一些安全性。具体来说,每当 IP 地址发生变化(这可能因良性原因而发生变化,例如您的 ISP 重新分配您的 IP)以及恶意原因(攻击者获取了您的 cookie)时,您都会使 cookie 无效。

正如Ladadadada所说,TCP 连接中的 IP 地址不再容易被欺骗。TCP 需要一个握手过程来从服务器获取一个随机的 32 位序列号,然后才能交换信息。如果您在开始握手过程时伪造了一个完全虚假的随机 IP 地址,那么数据包将不会通过 Internet 路由到您的计算机,因此您无法完成握手。除非您控制 ISP 的中间路由器或同一本地网络之一上的计算机,这些路由器可以捕获路由到其他地方的数据包,在这种情况下,您可以伪造随机 IP 地址。

但是,如果您设计一个 Web 应用程序并记录 IP 地址,则必须小心。假设您有一个带有两个 Web 服务器的 Web 应用程序(例如,一个用于动态内容/一个用于静态),位于负载均衡器或其他代理之后。您可能会通过反复试验看到客户端的 IP 地址仅存在于 HTTP 标头X-Forwarded-For中。但是,该字段很容易更改。例如,telnet www.whatismyip.org 80键入以下带/不带X-Forwarded-For行的内容(请记住在最后一行之后按两次回车以指示您的 HTTP 请求结束)。

GET / HTTP/1.1
Host: www.whatismyip.org
X-Forwarded-For: 1.2.3.4

您会看到这个网络应用认为您的 IP 地址已更改为1.2.3.4. 所以一定要彻底测试。总的来说,我认为自己做这个比它的价值更多,特别是因为它可能会让 IP 地址频繁更改的用户感到沮丧。

编辑:写完这篇文章后我意识到,虽然我回答了标题问题('IP 地址可以是 2 因素身份验证的组成部分吗?'),但不是指 ssh 管理的具体部分。我想说 ssh 密码保护密钥本质上是两因素身份验证:您拥有的东西(ssh 密钥)和您知道的东西(密码短语的密钥)。

从技术上讲是的,但是添加第二个容易伪造的因素并不会大大提高您的安全性。

假设您被建议使用 2 因素,因为某种风险评估表明您需要更强的身份验证,那么您应该考虑更好的控制。

(不过,也要将 IP 白名单列入 - 它不是很强大,但只需一两分钟即可完成,为什么不呢?)

关键是要记住,“2-factor”并不是让你安全的神奇短语。您需要了解风险并实施适当的强有力的控制。

通常,2 因素身份验证是指您“知道”和“拥有”的东西。“know”是密码,“have”是 ssh 密钥。这些可以按照您现在使用的方式使用,也可以在某种智能卡或加密狗上使用(sshd 然后使用 GSSAPI 进行访问;请参阅 参考资料man sshd_config)。

我认为要求您使用 2 因素身份验证的人希望您使用密钥和密码(如果有人窃取您的密钥也没关系,因为他们也不知道密码)。

IP 地址并不是您真正“拥有”的东西,因为正如您所说,它可以被欺骗。与 MAC 地址相同。但是,无论如何,您都可以锁定对某些 IP 地址/范围的 sshd 访问,以使骚扰 ssh 服务器更加困难。例如,在互联网上的默认端口上运行 sshd 会导致很多人试图暴力破解密码等;限制为 IP 地址应该有助于这一点,因为它需要更多的持久性和配置来欺骗 IP。将类似于以下的行放入/etc/hosts.deny

sshd,sshdfwd-X11:ALL

这在 /etc/hosts.allow

sshd,sshdfwd-X11: 192.168.0.0/255.255.255.240
sshd,sshdfwd-X11: 127.0.0.1

(上面的 IP 地址/子网掩码定义了一个地址范围;这只是一个示例)。

进行此类更改时,请务必仔细检查,因为您不想意外将自己锁定在服务器之外。在测试时始终保持会话登录(因为这些更改只会影响新登录)。