安全性

了解共享帐户密码的管理

Chris Stoneff

 

概览:

  • 共享和特权帐户密码的风险
  • 密码的存储方式
  • 管理和保护共享密码
  • 符合性

目录

了解问题
越长越好
滥用域
借口,借口,借口
规章制定者的意图
自动化方法
思考

越来越多地需要管理员来处理的一个常见任务是定期更改共享和特权帐户(如内置

管理员或根帐户、应急帐户甚至进程帐户)的密码。从定义可知,内置管理员或根帐户是每个版本的 Windows®、Linux 和 UNIX 都会附带的帐户,它总是使用相同的安全标识符 (SID) 或用户标识符 (UID)。应急帐户是创建用来便于紧急访问安全系统的其他帐户。出现问题时,其他非特权用户有时会使用这些应急或管理员帐户来访问关键系统。最后一个,进程帐户是用于运行服务、任务、COM+ 应用程序和嵌入项目(如必须登录的脚本和其他二进制文件)的帐户。

现在,您一般会使用安装脚本或映像来部署系统。此外,所有工作站或服务器可能都使用相同的管理员帐户名和相同的 8 位字符密码,并且很可能在系统部署后就一直没有更改过。为此,对于密码一词,我使用的是单数 "password" 而非复数 "passwords"。

为了使用最佳实践或满足符合性要求(如萨班-奥西利 (SOX) 法案、支付卡行业 (PCI) 或健康保险可携性与责任法案 (HIPAA) 的规定),管理员可能不得不更改这些密码。有时,当知道这些密码的前任管理员或技术人员离开公司时,为避免安全漏洞被公开或无法处理信用卡,管理员需要主动更改密码。除去这些因素,管理员也有责任更改密码以保证公司以及公司需要保护的数据的安全性。

了解问题

在处理这些帐户和密码时,必须了解以下几个要素:

  1. 密码使用时间越长,其安全性就越差。
  2. 通常情况下,密码越长就越难破解。
  3. 计算机的身份验证方式不会由于所属域的不同而发生改变。每个域中都存在工作组的核心。

“密码使用时间越长,其安全性就越差”这一说法有误导之嫌。它真正的意思是指如果想要侵入某台计算机,需要的只是时间。如果有人问“多长时间可以破解密码?”,通常情况下,我认为并没有确切的答案,但对于某个给定系统,以下线索可以帮助确定答案:

  • 有多少人知道此密码?
  • 是否这些人仍在本公司工作?
  • 如果知道帐户密码的其中一些人离开了公司,他们是否是未怀不满离开的?
  • 是否禁止从软盘、CD、DVD 驱动器或者网络进行引导访问?
  • 计算机的用户是否也是本地管理员?
  • 是否所有系统的特权帐户都使用完全相同的密码?

让我们从这份列表的开头说起,可以这样说,知道一个秘密的人越多,该秘密变得人尽皆知的可能性就越大。我记得在许多公司工作时,管理员觉得将共享密码设为相同值并告诉 IT 员工和实习生密码内容会更加方便,而不是在需要的时候为他们键入密码。不可避免地,随着时间的推移,公司就会开始发现计算机有了各种未经批准的设置,并且普通网络用户也可以登录这些帐户了。

如果知道密码的所有人员都仍在公司工作而且都是忠实可靠的员工,则此类访问风险并不算太大。但您永远不会知道何时会遇到一个必须对付的恶意用户。如果有这样的用户由于关系不睦而离开公司,您就有了一个敌对方知道如何使用难以跟踪的帐户侵入您的网络。

如果没有禁止从硬盘以外的位置进行引导访问,则可能会使用户能够使用未经授权的映像(如 Windows PE 或各种 Linux 系统)进行引导,这些系统可以直接读取计算机的文件系统并获取对计算机保护存储的访问权限。(应当指出的是,许多漏洞实际来自于内部因素。即使所有员工和实习生都仍在公司工作,也无法保证密码和系统是安全的。)

我知道许多之前的员工之所以继续登录网络只是因为他们可以登录。他们只是在指出不更改系统密码是一种不好的做法,他们的举动让人觉得很有趣,但如果想到他们一旦具有恶意企图时可能造成的损失,也会让人感到非常恐惧。

如果允许从 DVD 或网络进行引导,则可能无法审核用户所执行的操作。也就是说,Linux 引导盘或网络映像经常可以获取直接访问文件系统的权限。如果系统的特权帐户全部使用相同的用户名和密码,则系统很容易受到重大攻击。对此会在稍后进行详细介绍。

密码的使用期限和长度是相关的,具体取决于用来破解密码的方法。如果使用暴力方法破解密码,时间实际上是所面临的核心问题。密码更改频率越低,破解者获取密码所需的时间就越长。

与此类似,密码越长,字符组合变化可能会呈指数级递增,因此需要更多的时间才能破解。所以必须考虑密码字符数是少于 7 个、8 到 14 个,还是 15 个甚至更多。如果密码少于 15 个字符且使用的是 Windows 系统,那么是通过系统配置还是组策略来禁用 LAN Manager (LM) 哈希呢?

密码的长度有哪些影响?对于 Windows,答案很简单。略去 Microsoft 哈希运算进程的历史不表,Microsoft 针对密码实施以下两种类型的哈希运算:LM 哈希和消息摘要 4 哈希 (MD4)。默认情况下,Microsoft 使用 LM 哈希,并且除非显式关闭这些哈希的存储,否则针对所有密码存储的值最多为 14 个字符。这些密码被分为两个各由 7 个字符组成的值 — 第一个值用于前 7 个字符,第二个值用于后 7 个字符,如图 1 所示。

图 1 示例哈希表

帐户名 RID LM 哈希 NT 哈希 密码 注释
Administrator 500 aad3b435b51404ee:aad3b435b51404ee 31d6cfe0d16ae931:b73c59d7e0c089c0 Blank PW 此 LM 哈希与 20 个字符的密码 LM 哈希完全相同。

Administrator 500 0182bd0bd4444bf8:aad3b435b51404ee 328727b81ca05805:a68ef26acb252039 7 Char PW = 1234567 代表前 7 个字符的第一部分与 8 个字符的密码完全相同。

Administrator 500 0182bd0bd4444bf8:36077a718ccdf409 0182bd0bd4444bf8:36077a718ccdf409 8 Char PW = 12345678 代表前 7 个字符的第一部分与 8 个字符的密码完全相同,但第二部分并不相同。

Administrator 500 aad3b435b51404ee:aad3b435b51404ee b79d07c2ecb3d565:033ece663f5a0b2e 20 Char PW = 9876543210 9876543210 此 LM 哈希与空密码完全相同,因为无法针对长于 14 个字符的密码创建 LM 哈希。

Fred 1221 e52cac67419a9a:224a3b108f3fa6cb6d 8846f7eaee8fb117:ad06bdd830b7586c Identical 在这三个示例中,看看 LM 和 NT 哈希为什么完全相同?这意味着对所有帐户而言,密码都完全相同。Microsoft 从未改变过哈希算法。

Monday 1385 e52cac67419a9a:224a3b108f3fa6cb6d 8846f7eaee8fb117:ad06bdd830b7586c Identical
SvcAcctX 1314 e52cac67419a9a:224a3b108f3fa6cb6d 8846f7eaee8fb117:ad06bdd830b7586c Identical

因此,如果密码只有 7 个字符长,它会包含在单个 LM 哈希中。多年来,Microsoft 一直建议密码至少使用 8 个字符。原因是第 8 个字符会强制将密码拆分成两个 LM 哈希值。

但必须注意,LM 哈希已广为人知,非常容易攻破。在目前的解决方案中使用它们的唯一目的是维护与旧版系统(如 Windows NT® 4.0)的向后兼容性。

现在,应使用至少为 15 个字符或者最好更长的密码,因为根据定义,它们不会生成 LM 哈希。如果强制使用 15 个字符的密码在您的环境中并不可行,应同时在映像创建过程(通过使用本地策略)和 Active Directory® 组策略中禁用 LM 哈希的存储。

此策略位于以下位置:计算机配置\Windows 设置\安全设置\本地策略\安全选项。只需将策略“网络安全:不要在下次更改密码时存储 LAN Manager 的 Hash 值”设为“已启用”即可。

必须注意,尽管一个良好的策略会规定大小写字母以及数字或特定字符的使用,但一个更好的策略还会规定长度为 15 个字符或更多。

越长越好

目前有一种被用于侵入计算机的方法是 Rainbow Tables,它利用的就是 LM 哈希。但如果增加密码长度即可使 Rainbow Tables 失效。

许多戴着安全帽的管理员似乎对 Rainbow Tables 知之甚少(甚至一无所知),我对此感到非常惊讶。有许多方法都可以创建 Rainbow Tables 以应对不同的算法。但它们仅是 0-14 个字符的所有 LM 哈希的预计算列表。

对于 Rainbow Tables,攻击者必须首先获取 LM 哈希。这就产生了之前的问题,即如何引导系统(引导到 CD 或 DVD)或用户是否为本地管理员。最终,可使用各种免费工具(如 pwdump)在几秒钟之内提取这些 LM 哈希。通过使用 Rainbow Tables,对这些哈希值进行搜索并最终确定密码。

为了满足自己的好奇心,我针对系统的内置管理员帐户设置了一个密码。它包含 14 字符,其中有各种大小写字母以及特殊字符和数字。然后我使用了从 Internet 免费下载的 Rainbow Tables,在不到两分钟的时间里,我就提取了系统上所有帐户的密码哈希并确定了管理员密码。

必须承认,看到第一个 LM 哈希被攻破时的感觉真的是相当酷,接下来第二个哈希又被攻破,把它们放到一起就得到了密码。在此重申,如果使用之前介绍的策略禁用了 LM 哈希,即使不能彻底阻拦这一特殊的攻击平台,也可以使其受到严格的限制。

滥用域

即使位于域中也并不能解决问题。域中的计算机仍使用相同的身份验证方式。而且正如我先前所说,每个域中都存在工作组的核心。这一简单的说法并非始终显而易见。我曾做过许多有关此主题的交流,我发现自己经常会提醒管理员究竟是使用什么来访问计算机 — 用户名和密码。然后,我必须深入探讨 Windows 在工作组中的工作原理。

如果尝试访问某个系统,将会需要向远程系统提供用户名和密码。通过使用集成的身份验证功能,Windows 会尝试为您完成此操作。这意味着如果您访问另一个 Windows 系统,Windows 会使用您当前登录的用户名和密码。因此,当您尝试访问另一个 Windows 系统时,如果远程系统已经有了相同的用户名和密码,则系统不会再提示您输入该用户名和密码。

这也称为“传递身份验证”。此过程在工作组中和跨域时同样起作用。系统最多要求您输入用户名和密码,这意味着您只需重新键入登录信息即可。

现在,即使将某个工作站或服务器加入域并且 Active Directory 成为中心帐户存储库,存储在这些系统中的所有本地安全帐户管理器 (SAM) 或本地帐户并不会魔术般地消失。针对这些本地 SAM 所发生的唯一事情是它们不再受到管理和保护,而这正是问题的根源所在。您最后一次更改系统的内置管理员或根帐户是什么时间?更好的做法是,下载一个报告实用程序,以显示所有帐户的密码使用期限并查看结果是否能通过审核。

如果仍不明白我的意思,可以选择其中一个域工作站,然后以具有管理员权限的域帐户登录。打开系统的计算机管理并创建一个名为 ToldYouSo 的本地用户。为此帐户设置一个密码并将其添加到系统的本地管理员组中。在另一个域系统中重复此过程。

现在,在其中任意一个系统中,以本地 ToldYouSo 帐户身份登录并尝试通过转到 \\systemName\c$ 来访问另一台计算机。您将能够访问管理共享,甚至不会提示您输入密码!我希望这一示例并不会令您感到惊讶。但如果的确如此,您应从中吸取教训并允许我重申一下:所有系统都像属于某个工作组一样运行,这一事实并不会仅仅因为系统属于某个域而改变。

问题的关键在于,如果从不或很少更改共享和特权帐户的密码,则共享和特权帐户会面临着风险。整个网络遭到破坏只是时间早晚的问题。

借口,借口,借口

在与管理员甚至是 CIO 交谈时,我经常听到以下有关不更改这些帐户密码的主要原因:

  • 我们有成千上万个系统,没有足够的时间或人力来更改这些帐户。
  • 我们没有必要的预算。
  • 我们完全禁用了管理员帐户。
  • 我们至今还没有受到过威胁,因此我们并不认为这是个问题。
  • 审核人员并没有注意到。

尽管我对前两个原因深感同情,但它们并不足以作为借口。每当想到在由于某种原因而未解决这一问题的公司中存储有我的个人信息时,我就会感到不寒而栗。

的确,并非网络中的所有系统都存有敏感信息,但这些计算机的用户的确可能访问到敏感信息,如社会保障号、医疗记录或财务数据等。作为系统管理员应该考虑到,用户可以安装击键记录器和屏幕捕获实用工具、停止组策略的应用、将外挂程序引入各种子系统以捕获和传输数据。当用户在单个计算机上执行此类操作时,很难找出这一恶意用户,因为他的用户名是 Administrator。

您是否知道在 Windows 中禁用内置管理员帐户并不能阻止以该帐户身份登录?请尝试:以安全模式重启系统并以内置管理员帐户身份登录。您可能会能够使用在原始映像中发布给帐户的密码并操作成功。有关此行为的详细信息,请参阅 Microsoft® 知识库文章“如何在禁用 Administrator 帐户后访问计算机”(support.microsoft.com/kb/814777)。

规章制定者的意图

处理 SOX、PCI、HIPAA 和其他规章可能会使您感到头晕。理解其需求可能会相当困难,因为它们的范围非常广而且定义不够明确。通常情况下,对于所有此类规章的目的可总结如下。

首先,需要保证有权访问所有特权帐户和信息的人员能够随时访问并提供一种证明方法。在任何情况下这都是一种良好的行为 — 特权帐户是有权对任何系统执行任何操作的帐户。它是内置的管理员。它是应急帐户。它们是所有技术支持人员和每个管理员都可能知道的帐户。

如果选择实施某个解决方案以管理这些共享的帐户密码,您需要针对内置管理员帐户创建一个当前并不存在的审核跟踪。您将获得一个不固定的密码。由于解决方案是自动化的,因此您不会由于更改这些密码而花费大量生产时间。最后,由于此解决方案可提供审核功能,因此您的公司通过审核的机率也会更大。

自动化方法

处理此类帐户的最有效方法是定期更改帐户以消除两个帐户共享相同密码的情形。如果使用共享密码,对一个系统的危害也意味着对另一个系统的危害。换句话说,不应存在公共的本地帐户或域帐户。

在处理可管理和随机化这些密码的自动化解决方案时,不要仅仅满足审核人员的最低要求。例如,如果无需多花任何精力即可使用包含 15、20 甚至 127 个字符的密码,为什么仅使用 8 个字符呢(请参阅图 2)?

fig02.gif

图 2 使用自动化方法创建长密码(单击图像可查看大图)

此外还要考虑每天随机化特权帐户,如图 3 所示。如果可以每个月或每两个月甚至每天这样做,就没有理由 90 天才执行一次。毕竟,如果程序已自动化,就不会为您带来任何额外的工作量。此外,如果定期执行此操作,则会强制用户从工具的审核检索界面恢复密码,从而提供之前并不存在的另一种审核跟踪。(如果您现在将书写密码放入信封并将信封放在某人办公室的一个安全、隐蔽的角落,则不会有类似使用密码管理解决方案时的那种密码审核跟踪。)

fig03.gif

图 3 每天随机化特权帐户(单击此图像查看大图)

最后,确保在密码恢复后,在经过固定时段后可以并且将会重新随机化它们。我不是指您创建的计划随机化工作,而是说创建仅在几个小时而非几个月内有效的一次性密码。同样,此方法会强制用户从工具的审核检索界面恢复密码,从而提供一个审核跟踪。

思考

共享帐户密码的管理问题必须加以解决。这意味着应采用一种可靠且定期变更密码的方法。解决方案必须可扩展而且足够灵活。它还必须提供对密码的安全访问,并且需要审核通过工具执行的每项操作以及由使用工具的每位用户执行的每项操作。此外,生成的密码在每个系统中必须唯一,以避免由于共享帐户信息而出现系统被侵入的情形。

许多供应商着手解决这一问题已有多年历史,更多的新供应商最近才涉足这一领域。购买前请务必研究并试验所有的新工具,以确保您决定购买的解决方案真正适合您的环境。

Chris Stoneff 是 Lieberman Software 公司 (liebsoft.com) 的产品经理,该公司致力于安全和系统管理软件的开发。他最大的动力在于不仅要了解事物的特定运作方式,而且要了解背后的原因。