问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

如何使用双因素认证保护SSH

创作时间:
作者:
@小白创作中心

如何使用双因素认证保护SSH

引用
CSDN
1.
https://m.blog.csdn.net/2401_86544677/article/details/143320240

SSH(Secure Shell)作为一种广泛使用的远程访问工具,在现代IT基础设施中扮演着关键角色。然而,随着网络安全威胁日益复杂,SSH面临着严峻挑战。近期发现的“水龟攻击”凸显了这一问题的严重性,该攻击利用SSH传输层协议的弱点,能在握手过程中操纵序列值,损害SSH通道的完整性。全球约1100万台SSH服务器可能易受此类攻击影响,占被监控IP空间的52%,主要分布在美、中、德等国家。这些统计数据突显了加强SSH安全措施的紧迫性,特别是考虑到攻击者可能已渗透目标网络,正伺机发动攻击的情况。

双因素认证概述

什么是双因素认证

双因素认证是一种加强版的身份验证机制,它在传统的用户名和静态密码之外,增加了第二层验证因素。这种方法通过结合两种或更多种不同的认证方式,显著提高了系统的安全性。常见的双因素认证方式包括:

  • 某些知道的东西:密码、PIN码
  • 某些拥有的东西:手机、智能卡
  • 生理特征:指纹、面部识别

这种多层次的验证策略能有效防止未授权访问,即使攻击者获取了一个因素,也无法轻易突破整个防御体系。例如,在SSH远程登录中,双因素认证可以阻止未经授权的访问,即使攻击者获得了用户的静态密码。

SSH安全的重要性

SSH(Secure Shell)作为一种广泛使用的远程访问工具,在现代IT基础设施中扮演着关键角色。然而,随着网络安全威胁日益复杂,SSH面临着严峻挑战。近期发现的“水龟攻击”凸显了这一问题的严重性,该攻击利用SSH传输层协议的弱点,能在握手过程中操纵序列值,损害SSH通道的完整性。

更令人担忧的是,全球约1100万台SSH服务器可能易受此类攻击影响,占被监控IP空间的52%,主要分布在美、中、德等国家。这些统计数据突显了加强SSH安全措施的紧迫性,特别是考虑到攻击者可能已渗透目标网络,正伺机发动攻击的情况。

SSH双因素认证实现方法

Google Authenticator

Google Authenticator是一款广受欢迎的双因素认证工具,它可以与SSH服务无缝集成,显著提升远程登录的安全性。本节将详细介绍如何在Linux系统上安装、配置Google Authenticator,并将其与SSH服务相结合。

安装Google Authenticator PAM插件

首先,需要在服务器上安装Google Authenticator的PAM插件。以CentOS系统为例,可以通过以下步骤完成安装:

yum install epel-release
yum install google-authenticator

配置SSH服务

接下来,需要修改SSH服务的相关配置文件,使其能够调用Google Authenticator PAM插件。编辑/etc/pam.d/sshd文件,在文件开头添加以下配置:

auth required pam_google_authenticator.so

这使得SSH服务在进行身份验证时会调用Google Authenticator插件。

启用ChallengeResponse认证

此外,还需修改/etc/ssh/sshd_config文件,启用ChallengeResponse认证:

ChallengeResponseAuthentication yes

生成动态验证码

完成以上配置后,为特定用户生成动态验证码。以root用户为例:

su - root -c google-authenticator

在随后的交互式提示中,建议选择以下配置:

  • 使用时间为基础的令牌(y)
  • 更新/root/.google_authenticator文件(y)
  • 禁止多次使用同一令牌(y)

安装和配置客户端

在移动设备上安装Google Authenticator应用后,可以通过扫描生成的二维码或手动输入密钥来完成配置。值得注意的是,系统会自动生成5个紧急备用码,这些一次性密码可在无法获取动态验证码时使用。

测试SSH登录

完成所有配置后,重启SSH服务使更改生效:

systemctl restart sshd

现在,当用户尝试通过SSH登录时,系统会要求输入动态验证码,然后再输入常规密码。这种双因素认证机制大大增强了SSH登录的安全性。

通过以上步骤,您可以有效地将Google Authenticator与SSH服务集成,为远程访问提供更强有力的安全保障。这种方法不仅能有效抵御暴力破解攻击,还能降低因密码泄露导致的安全风险。

YubiKey

YubiKey是一种先进的物理安全设备,专门设计用于增强双因素认证的安全性。作为SSH双因素认证的重要实现方法之一,YubiKey在保护远程访问方面发挥着关键作用。

YubiKey的工作原理基于时间同步的一次性密码(TOTP)技术。这种技术的核心思想是在用户设备和服务端之间建立时间同步,从而生成动态变化的密码。具体而言,YubiKey内部存储了一个预设的密钥,并结合当前时间来生成一个44个字符的临时密码。这个密码由两部分组成:

  • 前12个字符:固定的部分,代表YubiKey的唯一标识符
  • 后32个字符:随机生成的部分,确保每次生成的密码都是唯一的

YubiKey的一个独特之处在于它的非导出性设计。这意味着密钥永远不会以文件形式存储在磁盘上,而是直接存储在YubiKey内部的硬件中。这种设计极大地增强了密钥的安全性,因为即使设备被盗或丢失,密钥也不会轻易泄露。

在SSH双因素认证的具体实现中,YubiKey通常通过USB接口与计算机相连。用户在登录时,需要按照以下步骤操作:

  1. 输入常规SSH密码
  2. 将YubiKey插入计算机的USB端口
  3. 触摸YubiKey上的感应区域,触发一次性密码的生成
  4. 将生成的密码输入SSH登录界面

值得注意的是,YubiKey支持多插槽功能,允许用户为不同用途分配不同的插槽。例如,插槽1可以用于SSH登录,而插槽2可以用于Web应用的双因素认证。这种灵活性使得YubiKey成为一种多功能的安全工具。

为了进一步提高安全性,YubiKey还集成了PIN码保护功能。用户可以为设备设置一个4-8位的PIN码,作为额外的保护层。只有在正确输入PIN码后,YubiKey才会生成一次性密码。这种多重防护机制大大降低了未授权访问的风险。

在实际部署中,YubiKey的跨平台兼容性是一大亮点。它支持多种操作系统,包括Linux、macOS和Windows,确保了广泛的适用性。这对于需要在不同环境中使用SSH的企业用户来说尤为重要。

通过使用YubiKey,组织可以显著提高其SSH远程访问的安全性,同时保持操作的简便性。这种方法不仅能够有效防范密码猜测攻击,还能抵御各种形式的中间人攻击,为关键系统的保护提供了强有力的保障。

Time-based One-Time Password (TOTP)

TOTP(基于时间的一次性密码)是一种广泛应用于双因素认证的技术,特别适合SSH远程登录场景。其核心原理依赖于共享密钥和当前时间来生成动态密码,既保证了安全性,又兼顾了用户体验。

在SSH环境中实现TOTP认证涉及以下几个关键步骤:

  1. 密钥生成与分发:服务器生成一个随机密钥,并通过安全渠道分发给用户。这个密钥是后续生成动态密码的基础。

  2. 时间同步:客户端和服务器需保持时间同步,通常精度控制在30秒内。这是TOTP算法正确运作的前提。

  3. 动态密码生成:基于HMAC-SHA1算法,结合当前时间戳和共享密钥,生成一个6位或8位的动态密码。这个过程可以用以下伪代码表示:

    password = Truncate(HMAC-SHA1(shared_key, current_timestamp))
    
  4. 密码验证:服务器接收到用户输入的动态密码后,使用相同的算法进行验证。为应对轻微的时间偏差,通常允许前后几个时间周期的密码有效。

在实际部署中,TOTP常与Google Authenticator等移动应用配合使用。这类应用内置了TOTP算法,用户只需扫描二维码即可自动配置并生成动态密码。这种方式大大简化了用户操作,提高了SSH登录的安全性和便利性。

值得注意的是,虽然TOTP显著提升了安全性,但它并非绝对不可攻破。例如,时间同步攻击可能会导致认证失败或被绕过。因此,在实施TOTP认证时,还需考虑以下安全最佳实践:

  • 定期更新密钥:建议每3-6个月更换一次共享密钥,降低长期使用带来的风险。
  • 多因素认证:将TOTP与其他认证方式(如生物特征识别)结合使用,构建更强大的防御体系。
  • 备用认证机制:提供备用认证选项,以防主认证方式失效或不可用。

通过合理配置和使用TOTP,我们可以显著提高SSH远程访问的安全性,同时保持良好的用户体验。

配置SSH服务器

修改SSH配置文件

在配置SSH服务器以支持双因素认证的过程中,修改SSH配置文件是一项关键步骤。通过精心调整这些设置,我们可以显著增强系统的安全性,同时保持远程访问的便捷性。

SSH配置文件通常位于/etc/ssh/sshd_config。为了启用双因素认证,我们需要重点关注以下几个配置选项:

  1. ChallengeResponseAuthentication
    将此选项设置为yes,启用挑战响应认证机制。这为SSH会话添加了一层额外的安全防护。

  2. UsePAM
    设置为yes,指示SSH守护进程使用PAM(Pluggable Authentication Modules)进行身份验证。PAM框架允许灵活地集成多种认证方式,包括双因素认证。

  3. AuthenticationMethods
    这是一个至关重要的设置,用于指定可用的认证方法组合。例如:

    AuthenticationMethods publickey,keyboard-interactive:pam
    

    这个配置表明系统接受两种认证方式:

  • publickey:公钥认证
  • keyboard-interactive:pam:基于PAM的交互式键盘认证(通常用于双因素认证)
  1. PasswordAuthentication
    尽管在双因素认证环境中通常不需要传统密码,但仍建议将此选项设置为no,以禁用纯密码认证。这有助于防止潜在的暴力破解攻击。

  2. PermitRootLogin
    出于安全考虑,建议将此选项设置为no,禁止root用户直接登录。这可以有效减少针对系统管理员账户的攻击尝试。

通过仔细配置这些选项,我们可以创建一个强大而灵活的SSH认证系统,既能满足安全需求,又能适应不同的用户场景。例如,对于经常使用的设备,用户可以选择使用公钥认证;而对于偶尔使用或不受信任的设备,可以采用双因素认证来增强安全性。

值得注意的是,在修改配置文件后,务必记得重启SSH服务以使更改生效:

sudo systemctl restart sshd

通过这些配置,我们可以显著提高SSH服务的安全性,同时保持其易用性,为远程访问提供一个更加安全可靠的环境。

设置PAM模块

在配置SSH服务器以支持双因素认证的过程中,设置PAM(Pluggable Authentication Modules)模块是一个关键步骤。PAM框架允许我们在系统中灵活地集成多种认证方式,从而实现强大的双因素认证机制。

为了启用双因素认证,我们需要在PAM配置文件中添加特定的模块。通常,这个文件位于/etc/pam.d/sshd。在这个文件中,我们需要添加以下配置:

auth required pam_google_authenticator.so

这行配置指定了使用Google Authenticator PAM模块进行身份验证。auth required表示这个模块是必需的,意味着如果认证失败,用户将无法登录。

值得注意的是,PAM模块的执行顺序至关重要。通常,我们会将双因素认证模块放在其他认证模块之前,以确保双重验证的执行。例如:

auth required pam_google_authenticator.so
auth sufficient pam_unix.so

在这个配置中,pam_unix.so模块用于传统的密码验证。sufficient关键字表示,如果这个模块成功验证了用户身份,就不需要再进行其他验证。但如果失败,系统将继续执行后续的验证步骤。

除了Google Authenticator,我们还可以使用其他PAM模块来实现双因素认证。例如,pam_yubico.so模块可用于YubiKey认证:

auth required pam_yubico.so

为了进一步增强安全性,我们可以结合使用多个PAM模块,创建一个多层面的认证流程。例如:

auth required pam_google_authenticator.so
auth required pam_yubico.so
auth sufficient pam_unix.so

这种配置要求用户同时通过Google Authenticator和YubiKey的验证,然后再进行传统的密码验证。

在配置PAM模块时,还需要注意以下几点:

  1. 模块参数:许多PAM模块支持额外的参数,用于微调其行为。例如,pam_google_authenticator.so模块可以设置rate_limit参数来限制认证尝试的频率:

    auth required pam_google_authenticator.so rate_limit=3
    

    这个配置将认证尝试的速率限制为每30秒不超过3次,有助于防止暴力破解攻击。

  2. 错误处理:在配置文件中添加适当的错误处理机制也很重要。例如,我们可以使用pam_debug模块来捕获和记录可能出现的问题:

    auth optional pam_debug.so
    

通过合理配置PAM模块,我们可以为SSH服务器构建一个强大而灵活的双因素认证系统,显著提高系统的整体安全性。

客户端设置与使用

移动设备上的认证器应用

在移动设备上实现SSH双因素认证的关键组件是认证器应用。这类应用通过生成动态一次性密码(OTP)来增强安全性。以下是几种常用的认证器应用及其特点:

应用名称
特点
Google Authenticator
广泛使用,基于OATH-TOTP标准
Twilio Authy
提供备份功能,支持电话验证
FreeOTP
开源免费,隐私友好

这些应用通常通过扫描QR码或手动输入密钥来与SSH服务器关联。一旦配置完成,用户在SSH登录时需输入由应用生成的动态密码,有效提升了远程访问的安全性。

SSH客户端配置

在SSH客户端配置双因素认证时,需要关注两个关键方面:认证器应用的集成SSH配置文件的调整。首先,在移动设备上安装并配置认证器应用,如Google Authenticator或Authy。然后,修改本地SSH配置文件(~/.ssh/config),添加以下内容:

Host *
AddKeysToAgent yes
UseKeychain yes
IdentitiesOnly yes

这些设置确保了私钥的安全管理和单因素认证的准备。最后,在首次登录时,按提示输入生成的一次性密码,完成双因素认证的设置。这种方法既增强了安全性,又保持了SSH使用的便利性。

安全最佳实践

定期更新密钥

在双因素认证的安全实践中,定期更新密钥是一项关键举措。专家建议每3-6个月更换一次共享密钥,以降低长期使用带来的风险。对于基于时间的一次性密码(TOTP),可通过重新配置认证应用或旋转密钥来实现更新。在实施过程中,应注意保持时间同步的准确性,并为用户提供明确的过渡指南,以确保平稳切换。这种定期更新的做法能有效提高系统的安全性,防止因密钥长期使用而导致的潜在漏洞。

备用认证方式

在双因素认证的主要方式失效时,备用认证方案至关重要。推荐采用基于短信的一次性密码(SMS OTP)备用静态密码作为临时替代。这些方法虽不如主要方式安全,但在紧急情况下可确保系统访问不间断。为平衡安全性和可用性,可实施严格的使用限制,如仅限特定IP地址或限定次数。同时,应立即调查主认证故障原因,尽快恢复正常使用。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号