SSH的两因素身份验证

“安全外壳” SSH是一种网络协议,用于在主机之间建立安全连接,标准为端口22(最好更改)。 SSH客户端和SSH服务器可用于大多数操作系统。 SSH几乎可以使用任何其他网络协议,也就是说,您可以在另一台计算机上远程工作,通过加密通道传输音频流或视频等。 此外, 通过远程主机上的SOCKS代理,您可以代表该远程主机连接到其他主机。

身份验证使用密码进行,但是开发人员和系统管理员通常使用SSH密钥。 问题在于密钥可能被盗。 从理论上讲,添加密码短语可以防止私钥被盗,但是实际上,在转发和缓存密钥时, 无需确认可以使用它们。 两因素身份验证解决了这个问题。

如何实施两因素身份验证


蜂窝开发人员最近发布有关如何在客户端和服务器上实现适当基础结构的详细说明

该说明假定您在Internet(堡垒)上打开了某个基本主机。 您想通过互联网从笔记本电脑或计算机连接到该主机,并访问其背后的所有其他设备。 2FA确保攻击者即使通过安装恶意软件也可以访问您的笔记本电脑,也无法做同样的事情。

第一种选择是OTP


OTP-一次性数字密码,在这种情况下,它将与密钥一起用于SSH身份验证。 开发人员写道,这不是理想的选择,因为攻击者可以捡起假堡垒,拦截您的OTP并使用它。 但这总比没有好。

在这种情况下,将以下行写入服务器端的Chef配置:

  • metadata.rb
  • attributes/default.rb (来自attributes.rb
  • files/sshd
  • recipes/default.rb (从recipe.rb复制)
  • templates/default/users.oath.erb

客户端上安装了所有OTP应用程序:安装了Google身份验证器,Authy,Duo,Lastpass, brew install oath-toolkitapt install oathtool openssl ,然后生成一个随机的base16字符串(密钥)。 它转换为Base32格式,供移动身份验证器使用,并直接导入到应用程序中。

结果,您可以连接到堡垒,并确保它现在不仅需要密码,还需要用于身份验证的OTP代码:

 ➜ ssh -A bastion Enter passphrase for key '[snip]': One-time password (OATH) for '[user]': Welcome to Ubuntu 18.04.1 LTS... 

选项二-硬件身份验证


在这种情况下,由于第二个因素是硬件设备或生物识别信息,因此不需要用户每次都输入OTP代码。

这里,Chef的配置稍微复杂一些,并且客户端的配置取决于操作系统。 但是,完成所有步骤之后,MacOS上的客户端可以使用密码短语并用手指触摸传感器来确认SSH中的身份验证(第二个因素)。

iOS和Android的所有者通过按智能手机上的单个按钮来确认输入。 这是Krypt.co的一项特殊技术,它比OTP更安全。

在Linux / ChromeOS上,可以选择使用YubiKey USB令牌。 当然,攻击者可以窃取您的令牌,但是他仍然不知道密码短语。





Source: https://habr.com/ru/post/zh-CN448970/


All Articles