是否应将服务帐户设置为永不锁定

信息安全 服务帐户
2021-08-24 08:04:54

我最近一直在与我们的安全团队进行讨论,我想从这个小组中得到答案。

目前我们的安全政策规定域帐户将在 5 次尝试失败后锁定。这适用于所有域帐户,包括服务帐户。为了清楚起见,我将服务帐户称为应用程序用来以该用户身份进行身份验证和“运行”的帐户。

我发现允许服务帐户锁定存在一个大问题,它为该服务创建了一个简单的 DoS。任何知道该帐户的流氓员工都可以简单地失败 5 次登录尝试,并且该服务将停止,因为它无法再与数据库和其他服务器通信。我已经锁定了设置新服务器的帐户并在密码末尾有一个额外的空间。

我问,考虑到风险,为什么要在 x 次登录失败后允许服务帐户被锁定?

2个回答

自动锁定是一种针对在线字典攻击的防御机制:攻击者想要反复尝试潜在的密码,直到找到正确的密码。在 5 次尝试后阻止会阻止攻击实际起作用。

这只有在密码容易受到字典攻击时才有意义,即如果密码是在人脑的隐私中生成的。这样的生物实体根本不擅长随机化。所以人为选择的密码不强,需要额外的保护。

服务帐户不应具有由人工选择的弱密码此类密码仅在配置阶段由管理员输入,无需记住。服务帐户密码应由计算机生成,并且非常随机。使用 16 个随机字符(大写和小写字母、数字和几个标点符号),您将拥有 96 位熵,足以抵御字典攻击。这是您的服务帐户应具有的密码类型。如果您使用这样的密码,那么自动锁定将变得无用,您可以将其停用,因为(正如您所发现的)它有一些不方便的副作用。


要生成这样的随机密码,请在任何 Linux 机器上使用以下命令行:

(dd if=/dev/urandom bs=12 count=1 2>/dev/null) | openssl base64 -a -e

在 Windows 上,使用 PowerShell:

$rng = New-Object System.Security.Cryptography.RNGCryptoServiceProvider
$buf = New-Object byte[] 12
$rng.GetBytes($buf)
[System.Convert]::ToBase64String($buf)

我认为好处超过了用户被锁定的烦恼。是的,流氓员工可以拒绝你,但现在你有一个可以处理的问题。你需要找到这个流氓员工,好好谈谈。这比流氓员工暴力破解弱密码要好得多。如果您遇到 5 次尝试被锁定的问题,请将其推至 10 次。这个数字足够低,不应该对暴力破解有太多好处。