当前位置: 首页 > 科技观察

SSH使用FIDO2USB进行身份验证

时间:2023-03-13 07:01:46 科技观察

在OpenSSH8.2中,提供了对FIDO2的支持。这样,用户就可以使用硬件USBkey证书进行用户认证了。这可以实现简单、高效和安全的SSH身份验证。在本文中,我们将尝试基于FIDO2的SSH身份验证,前提是需要USB密钥设备。FIDO2在硬件认证安全领域的发展WebAuthn和FIDO2给我们带来了更加方便和安全的方法。WebAuthn和FIDO2旨在通过标准化两者的通信方式,使安全设备的使用变得真正容易。这对大家来说是个好消息,现在您可以使用一个随手可得的USBkey,无需额外的安全知识,您就可以非常轻松地保护所有身份验证,彻底避免钓鱼、密码盗窃等恶意攻击只需插入USBkey,按下小按钮/输入PIN码或刷指纹,重新登录。虽然很多人以前可能用过银行的网银,但是由于不是标准通用的方法,不仅需要安装各种驱动,还需要特定版本的IE。而如果支持FIDO2,那么所有OS和任何浏览器都可以支持,当然也包括我们今天要说的SSH。到目前为止,据一些统计,国内已有多家公司加入了FIDO联盟,其中不乏阿里巴巴等大公司。FIDO2分为WebAuthn和CTAP协议。最佳使用场景包括:在设备上通过浏览器使用设备上配置的指纹等生物识别能力进行身份认证;在设备上通过浏览器使用外部安全密钥进行身份认证;在设备上以其他设备作为认证器完成身份认证。FIDO2和SSH的结合使用对于广大使用Linux和Mac的技术人员来说,除了浏览器,SSH是用的最多的了。如果您可以使用FIDO2密钥通过SSH进行身份验证,那将会非常方便和安全。为此,OpenSSH也放弃了一贯对硬件密钥系统的傲慢态度,现在终于支持FIDO(U2F)和FIDO2进行身份验证,而且常驻密钥的FIDO2具有更好的便利性和安全性。过程是USB设备(FIDO2设备不一定是USB,但通常是)生成秘钥。密钥要么存储在设备上(称为常驻密钥)并要求设备支持存储,要么不支持,数据需要存储在其他地方。使用USB密钥设备的好处包括消除网络钓鱼、密码盗窃、身份验证重放和许多其他攻击。由于设备通过特定领域(服务器地址/URL/等)进行身份验证,攻击者无法在另一个站点上重复使用一个站点的身份验证,这使得网络钓鱼变得不可能。密码或私钥无法在设备上复制和提取,任何人都无法窃取密码或私钥。唯一可能的攻击方式是你的USBKey丢失了,但是由于设备有PIN密码,而且有错误次数限制,如果多次错误,设备就会被锁定。对于那些可能使用过Yubikey的人来说,使用SSH内置功能的好处是你不需要专门使用Yubikey,也不需要乱用Yubikey代理、PIV模式或任何其他软件。只需插入任何FIDO2兼容密钥即可将其与SSH一起使用。有一种“驻留密钥”模式仅适用于Yubikey5C和更高版本的FIDO2。如何使用现在您已经了解了所有关于您的设备如何工作的不必要的细节,您已经准备好将其中一个用于SSH。它的设置非常简单,基本上只需一两个命令(取决于方法),并在客户端和服务器上运行OpenSSH8.2,无需安装额外的软件。下面我们分常驻键模式和非常驻模式两种方式。在常驻密钥模式下,如果设备支持FIDO2,使用以下命令生成密钥并存储在设备上。支持的密钥类型包括“ed25519-sk”和“ecdsa-sk”证书类型。ssh-keygen-ted25519-sk-Oresident-f~/.ssh/id_ed25519-skssh-keygen-ted25519-sk-Oresident-f~/.ssh/id_ecdsa-skSSH将要求输入PIN码并触摸设备,然后发送passkey密钥对存储在设置目录中。ssh-keygen会生成两个文件,一个叫id_ecdsa_sk,私钥,一个叫id_ecdsa_sk.pub公钥。只需将公钥添加到服务器上的authorized_keys即可。要将私钥添加到SSH代理,需要将其复制到~/.ssh/目录,或者(如果在新计算机上并且您没有密钥),运行:ssh-add-K到设备。密钥将添加到SSH代理,您将能够连接到服务器。非驻留密钥模式非驻留密钥模式与前面的模式基本相同,不同的是ssh-add-K不能直接从设备加载密钥。和以前一样,运行:ssh-keygen-ted25519-sk-f~/.ssh/id_ed25519-skssh-keygen-ted25519-sk-f~/.ssh/id_ecdsa-skSSH将询问PIN并触摸设备,然后通过thekey密钥对存放在设置的目录中。您需要手动将密钥对存储在~/.ssh/目录中,并将公钥文件添加到您要登录的任何服务器上的authorized_keys中。两者都在尝试登录时,OpenSSH将要求输入PIN并触摸设备。可以在生成密钥的时候设置no-touch-required选项,设置不需要每次都去触摸设备,但是启用并没有取得很好的效果,而且也不是很安全。将密钥存储在设备上意味着没有人可以窃取它(设备设置了PIN或其他身份验证方法),但是一旦连接,不受信任的计算机仍然可以通过SSH会话发送命令。不要从不受信任的计算机上使用SSH服务器,尤其是在使用SSH转发(-A选项)时,因为服务器随后可能将其用作跳板或代理来访问其他服务器以进行身份??验证。Non-FIDO2devicesandnon-openSSH8.2clients对于其他不支持FIDO2的设备(买不起Yubikey,比如国内的飞天Usbkey就几十块钱),其实有办法使用其他ssh客户端,而ssh版本不是8.2,只需要下载一个第三方代理软件WinCryptSSHAgent(github://buptczq/WinCryptSSHAgent)。WinCryptSSHAgent基于Windows证书管理系统。它可以在不安装任何驱动程序的情况下访问智能卡上的证书。本项目实现Windows上各种SSH客户端的私有Agent协议。SSH认证时,客户端向这个Agent发送信息,Agent通过Windows提供的API对信息进行签名,完成认证。目前兼容的SSH客户端有:GitforWindows、WindowsSubsystemforLinux、WindowsOpenSSH、Putty、Jetbrains、SecureCRT、Xshell、Cygwin、MINGW等。启动代理软件,即可使用USBKey登录。当然,使用这个代理软件也有一个缺点。启动代理认证后,完成一次认证后,可以直接登录支持该证书的服务器,可能存在一定的安全问题。您可以通过定期关闭代理来保证它的安全。小结总的来说,OpenSSH对FIDO的支持给我们带来了一种更方便、更安全的认证方式。当然,由于这只是开始,可能还会存在一些问题和错误。希望各种SSH客户端软件也能及时跟进,内置对该协议的支持,让大家的安全级别更上一层楼。