it-swarm.cn

为什么输入错误密码后会有很大的延迟?

我注意到关于密码的一件奇怪的事(据我看来)。例如,如果我在登录时输入了错误的密码,则系统会提示我几秒钟的延迟。当我尝试使用错误的密码Sudo时,我还必须等待外壳程序说“抱歉,再试一次”。

我想知道为什么要花这么长时间来“识别”不正确的密码?在我使用的多个发行版(甚至OSX)中都可以看到这一点,所以我认为这不是发行版特定的东西。

93
phunehehe

这是安全的事情,实际上并不需要花费很长时间。解决的2个漏洞:

  1. 这会限制登录尝试,这意味着有人无法像尝试破解它一样快地砸系统(每秒1M次尝试?我不知道)。

  2. 如果它在验证您的凭据不正确后立即执行此操作,则可以使用它花费的时间使凭据无效,以帮助您猜测部分凭据是否正确,从而大大减少了猜测时间。

为了防止这两件事,系统只需要花费一定的时间即可完成,我想您可以使用PAM配置等待时间( 请参阅Michaels的回答 )。

安全工程( 2ed,Amazon | 1ed,free )对这些问题给出了更好的解释。

94
xenoterracide

这是有意的,试图限制暴力破解。通常,您可以通过在FAIL_DELAY中查找/etc/login.defs配置条目并更改其值(默认情况下为3秒)来修改它,尽管该文件中的注释听起来像PAM无论发生什么情况,都会至少延迟2秒的延迟

42
Michael Mrozek

在现代linux系统上,原因是pam_unix.so施加了这样的延迟。如先前所报道,可以通过更改FAIL_DELAY中的/etc/login.defs将其配置为两秒钟。如果要进一步减少延迟,则必须给pam_unix.so提供“ nodelay”选项。例如,在我的系统上,如果您从/etc/pam.d/Sudo跟踪包含内容,则会发现必须编辑/etc/pam.d/system-auth的以下行:

auth      required  pam_unix.so     try_first_pass nullok

并将其更改为:

auth      required  pam_unix.so     try_first_pass nullok nodelay

不幸的是,我的Linux发行版(Arch)配置事物的方式是,sshd使用的system-auth包含了非常相同的system-remote-login文件。

虽然可以安全地消除Sudo上的延迟,但是由于已记录日志,仅由本地用户使用,并且无论如何都可以被本地攻击者绕过,但您可能不想消除远程登录的这种延迟。您当然可以通过编写自定义Sudo来解决此问题,该Sudo不仅仅包含共享的系统身份验证文件。

就我个人而言,我认为Sudo的延迟(忽略SIGINT)是一个大错误。这意味着知道自己输入错误密码的用户将无法终止进程并感到沮丧。当然,您仍然可以使用Ctrl-Z停止Sudo,因为Sudo不能捕获SIGTSTP,并且在停止后可以使用kill -9(SIGKILL)将其杀死。这很烦人。因此,这意味着自动攻击可能会以超高速率触发伪终端上的警报。但是这种延迟使合法用户感到沮丧,并鼓励他们暂停其根shell,而不是退出它们以避免再次不得不使用Sudo。

12
user3188445