避免泄露信息,无论用户是否被拒绝访问或输入了错误的密码

避免泄露信息,无论用户是否被拒绝访问或输入了错误的密码

我目前正在为一个拥有 10000 多名用户的大型系统修改sshd_config/etc/security/access.d。限制用户访问的方法有很多种,我有点头晕目眩,不知道该找哪种“最佳方法”。简而言之

  • 我们可以使用 ACL 来限制访问
  • 使用本地防火墙限制对负载均衡器的访问
  • 使用 sshd_config 限制访问
  • 使用我们的 PAM 配置限制访问

我们的 sshd 的 PAM 堆栈的一个非常精简的版本如下所示

auth       requisite                              pam_faillock.so preauth deny=9 unlock_time=60
auth       required                               pam_env.so
auth       required                               pam_faildelay.so delay=2000000
auth       [success=2 ignore=ignore default=bad]  pam_ssh_user_auth.so
auth       [success=1 ignore=ignore default=bad]  pam_unix.so nullok
auth       [default=die]                          pam_faillock.so authfail audit deny=9 unlock_time=60
auth       requisite                              pam_access.so
auth       sufficient                             pam_faillock.so authsucc audit deny=9 unlock_time=60
auth       [success=1 ignore=ignore default=bad]  pam_2fa.so 
auth       [default=die]  pam_faillock.so authfail audit deny=9 unlock_time=60
auth       sufficient     pam_faillock.so authsucc audit deny=9 unlock_time=60
auth       include        postlogin

简而言之,这接受用户名+(密码或公钥)登录。由于 2fa 会 ping 用户手机,因此只有在接受第一个因素时才会询问此代码。

攻击者错误猜测用户名/密码的示例

~ ❯❯❯ ssh user@testmachine                                         
(user@testmachine) Password: 
(user@testmachine) Password: 
(user@testmachine) Password: 
user@testmachine: Permission denied (publickey,keyboard-interactive).

正确猜测无登录权限用户密码的示例

~ ❯❯❯ ssh user@testmachine 
(user@machine) Password: 
Connection closed by IP port 22

总结

  • 如果对手输入了错误的密码,密码提示将会出现 3 次。
  • 如果对手正确猜出了不允许登录的用户的密码,则密码提示会出现1次。

有没有什么办法可以不泄露用户是否被拒绝进入系统,以及用户是否输入了正确的密码?

这不使用 PAM 来完成,以尽可能少的信息泄露。

相关内容