这个问题一直困扰着我。
在Linux上,当要求输入密码时,如果您输入的密码正确,它将立即检查,几乎没有延迟。但是,另一方面,如果您输入了错误的密码,则检查时间会更长。这是为什么?
我在所有尝试过的Linux发行版中都观察到了这一点。
这个问题一直困扰着我。
在Linux上,当要求输入密码时,如果您输入的密码正确,它将立即检查,几乎没有延迟。但是,另一方面,如果您输入了错误的密码,则检查时间会更长。这是为什么?
我在所有尝试过的Linux发行版中都观察到了这一点。
Answers:
实际上,这是为了防止暴力攻击每秒尝试数百万个密码。这个想法是为了限制可以多快地检查密码,并且应该遵循许多规则。
最后一个特别重要。这意味着没有有用的消息,例如:
Your user name is correct but your password is wrong, please try again
要么:
Sorry, password wasn't long enough
“无效的用户和密码”和“有效的用户但无效的密码”响应失败之间甚至没有时间差异。
每个失败都应传递完全相同的信息,无论是文字信息还是其他信息。
一些系统甚至更进一步,每次失败都会增加延迟,或者只允许三个失败,然后在允许重试之前会有很大的延迟。
这使得猜测密码的时间更长。
我不确定,但是在输入错误的密码后集成延迟会增加攻击的难度,这种情况很常见。这使得攻击实际上是行不通的,因为仅检查几个密码就需要花费很长时间。
甚至尝试输入几个密码-生日,猫的名字以及类似的东西-都变得毫无乐趣。
123456
可以很好弥补损害占30%(例如),但不太可能是附近的任何地方跨越显著的所有账户。
基本上是为了缓解暴力和字典攻击。
计划延误
extern int pam_fail_delay(pam_handle_t *pamh, unsigned int micro_sec);
Linux-PAM提供了此功能,以简化对pam_authenticate()的失败调用之后,控制权返回给应用程序之前的时间延迟。使用此功能时,应用程序程序员应检查该功能是否可用,
#ifdef PAM_FAIL_DELAY .... #endif /* PAM_FAIL_DELAY */
通常,应用程序通过调用pam_authenticate()或pam_chauthtok()来请求用户通过Linux-PAM进行身份验证。这些功能调用相关Linux-PAM配置文件中列出的每个堆叠的身份验证模块。按照此文件的指示,多个模块之一可能会失败,从而导致pam _...()调用返回错误。希望在应用程序继续之前也要暂停一下。这种延迟的主要原因是安全性:延迟的作用主要是阻止暴力字典的攻击,但同时也有助于阻止定时(隐蔽通道)攻击。
失败的身份验证延迟会降低登录尝试的速度。如果有人尝试对某人进行字典攻击或蛮力攻击,或者可能是用户帐户,则该想法将要求攻击者等待失败延迟,从而迫使他花费更多时间并给您更多机会进行检测。
您可能还想知道,根据您用作登录shell的方式,通常可以使用一种配置此延迟的方法。
在GDM中,延迟是在gdm.conf文件中设置的(通常在/etc/gdm/gdm.conf中)。您需要设置RetryDelay = x,其中x是以秒为单位的值。
如今,大多数Linux发行版还支持在/etc/login.defs中定义FAIL_DELAY,允许您设置登录尝试失败后的等待时间。
最后,PAM还允许您在auth行上设置一个nodelay属性,以绕过故障延迟。(这是有关PAM和Linux的文章)
我不认为这可以像回应所建议的那样简单。
如果对正确密码的响应是(某些值)立即生效,那么您是否不必等到比该值更长的时间才能知道密码是错误的?(至少概率地知道,这对于破解目的是很好的)而且无论如何,您都将并行进行此攻击...这是否就是一大片DoS欢迎垫?
我以前尝试过的方法似乎奏效,但实际上没有奏效。如果您在乎,则必须查看Wiki编辑历史记录...
什么做的工作(对我来说)就是要既降低pam_faildelay.so延迟= X中的值/etc/pam.d/login文件(我把它降低到500000半秒),并且还添加NODELAY(前面有一个空间),以在该行的末端共同-AUTH,在他的回答由加布里埃尔说明。
auth [success=1 default=ignore] pam_unix.so nullok_secure nodelay
至少对我来说(debian sid),尽管仅通过更改/etc/pam.d/login中的值就可以延长延迟时间,但是仅对其中之一进行更改不会将延迟时间明显缩短到默认的3秒以下。
这种胡言乱语足以使一个成年男子哭泣!
在Ubuntu 9.10上,我认为也是新版本,您要查找的文件位于
/etc/pam.d/login
编辑该行:
auth可选pam_faildelay.so delay = 3000000
将数字3更改为您可能想要的另一个数字。
请注意,要获得“ nodelay”身份验证,我认为您应该编辑文件
/etc/pam.d/common-auth
太。在线上:
验证[成功= 1默认=忽略] pam_unix.so nullok_secure
在末尾添加“ nodelay”(不带引号)。但是我认为这是关于“ nodelay”的最终解释。
我想从开发人员的角度添加注释。尽管这肉眼看起来并不明显,但是当找到匹配项时,聪明的开发人员就会退出匹配查询。作为见证,成功的比赛比失败的比赛更快地完成。因为,匹配功能会将凭证与所有已知帐户进行比较,直到找到正确的匹配为止。换句话说,假设按ID顺序有1,000,000个用户帐户;001、002、003等。您的ID是43,001。因此,当您输入正确的用户名和密码时,扫描将在43,001处停止并登录。如果您的凭据不正确,则它将扫描所有1,000,000条记录。双核心服务器上处理时间的差异可能以毫秒为单位。在具有5个用户帐户的Windows Vista上,时间为纳秒。
从技术上讲,这种故意的延迟是为了防止诸如“线性化攻击”之 类的攻击(还有其他攻击和原因)。
为了说明这种攻击,请考虑一个程序(没有故意的延迟),该程序将检查输入的序列以查看其是否与正确的序列匹配,在这种情况下,该序列恰好是“ xyba ”。为了提高效率,程序员决定一次检查一个字符,一旦发现不正确的字符,则立即退出,然后再开始检查长度。
正确的序列长度比不正确的序列长度需要更长的处理时间。甚至更好(对于攻击者而言),具有正确的第一个字符的序列号将比具有不正确的第一个字符的序列号花费更长的时间。等待时间中的后续步骤是因为每次都有一个以上的循环,比较将在正确的输入上进行。
- 因此,攻击者可以选择一个四个字符的字符串,并且以x开头的字符串花费的时间最多。(通过猜测工作)
- 然后,攻击者可以将字符固定为x并改变第二个字符,在这种情况下,他们会发现y花费的时间最长。
- 然后,攻击者可以将前两个字符固定为xy并更改第三个字符,在这种情况下,他们会发现b花费的时间最长。
- 然后,攻击者可以将前三个字符固定为xyb并更改第四个字符,在这种情况下,他们会发现a花费的时间最长。
因此,攻击者可以一次恢复连续的一个字符。
序列号是四个字符长,每个字符有128个可能的值。然后有128 4 = 2 28 = 268,435,456个可能的序列。如果攻击者必须随机猜测完整的序列号,那么她将在大约2 27 = 134,217,728次尝试中猜测序列号 ,这是一项巨大的工作。另一方面,通过使用上面的线性化攻击,每个字母平均只需要128/2 = 64个猜测,预期总工作量约为4 * 64 = 2 8 = 256个猜测, 这是微不足道的数量工作的。
大部分的书面门派改编自本(马克邮票的“信息安全:原理与实践”获得)。同样,以上计算未考虑找出正确序列长度所需的猜测工作量。