为什么输入错误密码后延迟大?

phu*_*ehe 106 security password authentication pam

我注意到关于密码的一个奇怪的(好吧,据我所知)事情。例如,如果我在登录时输入了错误的密码,系统会延迟几秒钟才告诉我。当我尝试sudo使用错误的密码时,我还必须等待 shell 说“对不起,再试一次”。

我想知道为什么“识别”不正确的密码需要这么长时间?这已经在我使用的几个发行版(甚至 OSX)上看到了,所以我认为这不是发行版特定的东西。

xen*_*ide 107

这是一个安全问题,它实际上并不需要很长时间来实现。这解决了2个漏洞:

  1. 这会限制登录尝试,这意味着有人无法以尝试破解它的速度冲击系统(每秒尝试 100 万次?我不知道)。

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

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

Security Engineering(第 3 版,亚马逊|第 2 版,免费)对这些问题给出了更好的解释。请参阅第 2 章 (PDF) — 特别是 §2.4 和 §2.5.3.3。

  • 比较密码散列时早期失败和晚期失败之间的差异以纳秒为单位。通过适当的编码(恒定时间内存比较),根本没有区别。这不是增加延迟的理由。 (12认同)
  • //offtopic *g* 它不是一个错误,它是一个特性 ;-) (7认同)
  • 我同意 CodesInChaos:答案的第二点不正确。实际发生的情况如下: 1. 计算输入的哈希值;2. 将该散列与存储的散列进行比较(它的每个字节,即使已经发现差异);请注意,这两个步骤决不会更快或更慢,具体取决于您输入的密码是否正确。(正如其他人已经指出的那样,如果可能的话,增加睡眠时间并不能解决定时攻击) (5认同)
  • 顺便说一句,您的附属链接已自动重写为 SE。 (4认同)

Mic*_*zek 49

这是故意的,试图限制蛮力。您通常可以通过在其中查找FAIL_DELAY配置条目/etc/login.defs并更改其值来修改它(3默认情况下我的是秒),尽管该文件中的注释使它听起来像 PAM2无论如何都会强制执行至少第二次延迟

  • 是什么阻止你为 sudo 编写一个包装器,一旦尝试在 0.1 秒内不起作用,它就会启动一个新的 sudo 实例? (14认同)
  • 这不仅仅是为了防止暴力破解。但是知道在哪里配置它的奖励积分。 (10认同)
  • 我认为fail_delay 也可以在`/etc/pam.d/login` 中配置。寻找`pam_faildelay.so delay=` (6认同)

use*_*445 17

在现代 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
Run Code Online (Sandbox Code Playgroud)

并将其更改为:

auth      required  pam_unix.so     try_first_pass nullok nodelay
Run Code Online (Sandbox Code Playgroud)

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

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

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

  • 与 Fedora 相同。很棒的分析 (2认同)
  • 将 pam-unix 设置为 `nodelay` 会将等待时间设置为 0,然后忽略 FAIL_DELAY。 (2认同)