我注意到关于密码的一件奇怪的事(根据我的说法)。例如,如果我在登录时输入了错误的密码,则系统会提示我几秒钟的延迟。当我尝试使用错误的密码sudo时,我还必须等待外壳说“对不起,再试一次”。在我使用的多个发行版(甚至是OSX)上都可以看到这一点,所以我认为这不是发行版特定的东西。

评论

我注意到,这不仅在终端中出现,而且在启动后或笔记本电脑处于睡眠模式时在初始会话登录中也注意到。解锁正确的密码是瞬间的,很高兴看到这个问题:)

#1 楼

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


这会限制登录尝试,这意味着有人无法像尝试破解它那样快地对其进行重击(每秒1M次尝试?知道)。
如果在确认您的凭据不正确后立即执行此操作,则可以使用花费的时间使凭据无效,以帮助猜测部分凭据是否正确,从而大大减少猜测时间。

要防止这两种情况,系统只需要花费一定的时间即可完成操作,我想您可以使用PAM配置等待时间(请参阅Michaels答案)。

Security Engineering(2ed,亚马逊| 1ed,免费)对这些问题给出了更好的解释。

评论


// offtopic g不是bug,而是功能;-)

– echox
2010-09-16 8:18

您的会员链接已自动重写为SE,顺便说一句。

–明胶
2010-09-18 20:50



@Tshepang:请参阅第2章,尤其是第2.4节和第2.5.3.3节。

–吉尔斯'所以-不再是邪恶的'
2010年12月1日在18:42

比较密码哈希时,早期和晚期故障之间的差异以纳秒为单位。通过适当的编码(恒定时间存储器比较),根本没有区别。这没有理由增加延迟。

– CodesInChaos
13年3月23日在8:50

我同意CodesInChaos:答案的第二点是错误的。实际发生的情况如下:1.计算输入的哈希值; 2.将该哈希与存储的哈希进行比较(即使已发现差异,也将其每个字节);请注意,这两个步骤决不会加快或减慢,具体取决于您输入的密码是否正确。 (正如其他人已经指出的那样,如果可能的话,增加睡眠时间并不能解决定时攻击问题)

–示例
15年7月20日在9:35

#2 楼

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

评论


这不仅可以防止暴力破解。但由于知道在何处进行配置而获得了加分。

– xenoterracide
2010-09-16 5:33

我认为fail_delay也可以在/etc/pam.d/login中进行配置。寻找pam_faildelay.so delay =

–史蒂文·D
2010-09-16 5:40



是什么导致您无法为sudo编写包装程序,而一旦尝试在0.1秒内不起作用,该包装程序将启动新的sudo实例?

– Janus Troelsen
2014年11月20日下午16:35

@xenoterracide还有什么?

– Wouter
20年7月31日在23:28

#3 楼

在现代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


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

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

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

评论


与Fedora相同。很棒的分析

– Freedom_Ben
16年7月29日在4:27

辉煌的答案。我还认为FAIL_DELAY在现代桌面系统中已过时。您应该依靠分区/硬盘驱动器加密而已。通常,没有第二个用户可能尝试暴力破解root密码。但是,潜在的恶意程序可能滥用不安全的FAIL_DELAY,从而获得root用户访问权限。

– phil294
18年6月21日在15:14

将pam-unix设置为nodelay将会把等待时间设置为0,然后FAIL_DELAY被忽略。

– phil294
18年6月21日在15:20

为什么不禁用延迟,然后禁用远程密码登录(仅SSH)?如果不引入任何安全漏洞,就不能解决问题吗?

–拉登·罗斯伯勒(Radon Rosborough)
19年1月7日,3:20

我使用manjaro,前段时间我的sudo设置出现问题,并且在tty中多次输入错误的密码后,我的用户帐户被锁定,因此我求助于passwd -u对其进行解锁.SSH就是这种情况远程登录?我的意思是,如果尝试使用错误的密码几次后锁定帐户,那么就不会存在有关暴力攻击的安全漏洞。我认为这与nodelay无关。如果我输入错误,请更正我。

–帕尔萨·穆萨维(Parsa Mousavi)
20 Dec 18'在22:10