信息安全管理实践:渗透
将用户权限提升到Windows域管理员级别引言
一个好的信息安全管理系统(ISMS)需要对其有效性进行定期评估。 这种评估有不同的方法,其中之一就是所谓的评估。 “渗透测试”或渗透测试-对信息系统上的黑客攻击的授权模拟,目的是在真正的攻击者检测到漏洞之前识别其保护漏洞。 在这种情况下,可以使用现实生活中可用的任何黑客工具,漏洞利用,方法等。
本文介绍了这些反黑客实践之一,旨在将普通Microsoft Windows域用户的特权提高到域管理员级别。 这篇文章是基于一份关于已付诸实践的测试结果的报告的。 为了保密起见,删除或更改了所有允许标识场所的信息(域名和主机名,帐户等)。 本文介绍了基本技术,为了更好地理解,我给出了用于特定版本的操作系统的理论基础和漏洞,以及有关保护的一般建议。 而且,尽管大多数这些版本的Windows在发布时都将被视为已过时,但本文对于新手系统管理员可能会很有用,以便更好地了解Windows环境中保护凭据的方法。
测试对象的描述
测试对象是相当标准的-一家专门从事软件开发的小型(少于200名员工)公司的信息系统。 公司的内部网络也很典型:拨号千兆以太网,Microsoft Windows域(我们将其称为CORP.LOCAL)。 内部主机根据其功能隶属关系划分为IP子网(例如:一组开发人员,质量工程师,人力资源部,会计,市场,高层管理人员,设施等),所有分段均在L3交换机上完成。 还有一个专用于单独IP子网的内部服务器园区,其中包含:两个具有集成DNS的Windows Server 2008域控制器,一个运行Exchange的内部邮件服务器,一个文件服务器,一个终端服务器以及一些其他运行Windows和Linux的辅助服务器。 另外,值得一提的是,一个测试实验室拥有大量运行不同版本的Microsoft Windows(台式机和服务器)并设计为测试开发的软件的计算机。 所有员工都可以访问测试实验室的主机。 台式机操作系统的主要版本是Windows7。台式机和服务器上安装了来自不同制造商的配置较差的防病毒软件(来自Symantec,Kaspersky和Trend Micro,为什么稍后将讨论配置较差的防病毒软件)。
入侵者模型
入侵者-内部雇员,在域中具有无特权的用户帐户,台式计算机,对测试计算机的物理访问权限(可能具有公司的便携式计算机),但对任何这些计算机都没有本地管理员特权。 此外,入侵者帐户无法更改防病毒软件的设置。 攻击者的目的是获得与管理员对域控制器和/或文件服务器的访问等效的访问。
如我们所见,入侵者的模型和公司的描述都是非常典型的。
攻击实施
步骤0.收集有关内部网络的信息
因此,我们代表罪犯行事。 在这一步,我们需要收集有关以下信息:
- 内部寻址和子网划分
- 主机名和IP地址,首先我们对服务器列表感兴趣
- 使用NetBIOS协议。
首先,使用ipconfig实用程序,获得DNS服务器的IP地址:192.168.12.1和192.168.12.2。 因为 DNS与Active Directory集成在一起,这使我们有理由相信我们知道域控制器的IP地址。 接下来,以交互方式使用nslookup实用程序,我们尝试获取corp.local区域中所有主机的列表:
> ls –d corp.local>文件实际上,此命令将启动完整的DNS区域传输,并将其保存到文件中。 许多管理员忘记为内部网络的区域传输设置限制,这使潜在的攻击者更容易收集有关公司基础结构的信息,有关更多详细信息,请参见[12]。
结果。 成功。 不受保护的区域传输为我们提供了内部主机名的完整列表,包括服务器及其IP地址。 使用实用程序nbtstat,telnet以及任何常见的漏洞扫描程序,攻击者可以在他感兴趣的主机上收集有关平台,正在运行的服务以及操作系统版本的信息。
步骤1.获得本地管理员特权
理论 要获取本地管理员密码,将对存储在系统注册表中的该密码的哈希值进行攻击。 尽管哈希函数在数学上是不可逆的,但可以通过直接枚举其值以及进行字典攻击来进行密码计算。 Windows历史上使用两种算法来计算密码哈希函数:旧版LM算法和更新的NT算法(有时也称为NTLM)。 LM散列函数由于其计算复杂度低而容易受到攻击,因此即使在性能较弱的计算机上也可以枚举其值。 系统注册表中同时存在LM和NT密码哈希,确保攻击者可以在可接受的时间内破解它。 默认设置下的LM哈希值存储在Windows XP / 2003的注册表中,这使这些系统对黑客特别有吸引力。 NT哈希函数的计算更加复杂,但是,由于存在可用的预先计算的值表(所谓的Rainbow表),因此大大简化了枚举其值的过程–它们将哈希值的计算减少到了搜索所需哈希值的过程中预先计算的值。
攻击对象。 SAM数据库(注册表)中的密码哈希。 在我们的情况下,这些都是我们可以物理访问的所有机器。 首先,这是我们的工作桌面,其次是用于执行测试的主机。
实施。 对于具有物理访问权限的计算机,我们执行以下操作:从外部介质启动(使用Windows预安装环境CD或Linux Live CD),装入NTFS系统分区,然后复制注册表分支HKLM \ SYSTEM和HKLM \ SAM(%WINDIR文件) %\ System32 \ Config \ System和%WINDIR%\ System32 \ Config \ Sam)。 我们特别注意运行Windows XP \ Windows 2003的计算机,很可能会在其中找到LM哈希。 要从复制的注册表文件中转储密码,我们使用工具[1],[2](所有链接位于文章结尾)。 结果:

最后一行包含本地管理员所需的NT哈希。 在测试实验室的主机上(我们将这些主机称为LAB1和LAB2),我们发现一个非零的LM哈希:


因此,我们得到了NT和LM哈希。 但是如何从他们那里恢复密码? 为此,我们将使用相同的工具[1],[2]以及在线哈希反向服务[8]-[11]:

注意:真实密码由带有小修饰符的公司名称组成,并在受到字典攻击后很快就被破解了)。
结果。 成功。 从我们工作的台式机和两个测试计算机收到的本地管理员帐户的密码(分别为“ Pa $$ word1”和“ Pa $$ word2”)。 但是他们会帮助获得域管理员权限吗? 关于它进一步。
步骤2.获取域管理员凭据
理论 在大多数情况下,为域管理员获取密码的NT哈希值就足够了。 这是由于以下事实:当使用NTLM协议验证用户时,经过身份验证的系统仅向身份验证器提供NT哈希,而不会进行密码验证。 NT哈希可以从所谓的 通过所谓的LSA存储 管理员登录会话(登录会话是Winlogon进程创建的特殊数据区域,其中存储用户名,登录域和NT密码哈希值,统称为LSA秘密)。 NTLMSSP进程使用此NT哈希进行NTLM身份验证。 帐户登录到系统后,登录会话将一直保存。 您还可以拦截来自NTLM管理员身份验证会话的NT哈希。 此外,还可以从域缓存凭据(DCC)缓存中获取管理员密码。 DCC是本地缓存,当用户成功登录到域时,该缓存将填充。 DCC缓存的目的是在域控制器不可用时能够对用户进行身份验证。
攻击对象:- DCC哈希(HKLM \ Security注册表分支)。
- 域管理员登录会话(LSA秘密)。
- 截断NTLM会话(由于更大的实际复杂性而未考虑)。
练习 许多Windows管理员使用域管理员帐户在用户计算机上执行各种类型的操作。 同时,其数据落入DCC缓存中。 因此,首先尝试从DCC缓存中获取密码。 我们转到工作站,保存HKLM \ Security注册表分支并将其导入[1]。 因为 我们具有本地管理员密码,我们不再需要从外部媒体启动计算机来保存注册表:

高速缓存包含三个帐户的密码数据。 最后一个帐户(***用户)对我们不感兴趣,第二个帐户没有所需的特权,但是shadmin用户看起来像您正在寻找的管理员。 不幸的是,MS-CACHE2算法具有很大的计算复杂性,对其直接进行蛮力攻击效率很低。 MS-CACHEv2函数包含一个“计算秘密”-盐(帐户名用作“盐”),从而使其免受彩虹表的攻击。 但是,将来可能会为标准帐户显示“哈希值”表-“管理员”,“管理员”等。 为了感兴趣,我们将找到的“缓存哈希”发送到云服务[8]-[11](有关本文结尾处的此类服务的结果和有效性)。 当云在思考时,我们正在尝试寻找其他DCC。 我们分析在步骤0中获得的主机列表,使用在步骤1中获得的密码检查可以在本地管理员下访问的服务器。由于在域控制器上阻止了本地管理员,并且邮件服务器通常受到更好的保护,因此您需要进行以下实验:辅助服务器。 在我们的案例中,在服务器列表中发现了名称不明显的服务器Upd。 在步骤1中使用密码“ Pa $$ word2”成功登录。 我们在Upd主机上发现:
- 未安装防病毒软件。
- 它运行Apache,这是企业防病毒软件的管理服务器(这意味着还存在一个用于远程安装防病毒软件的帐户的密码,从理论上讲,您可以从那里获得密码)。
- 主机不审核失败的登录尝试。
- 操作系统版本-Windows 2008 R2。
转储HKLM \ Security注册表后,我们获得CORP.LOCAL \ Administrator帐户(和其他几个帐户)的DCC哈希:

从理论上讲,您可以尝试通过云服务找到管理员的密码。 但是,如上所述,对MS-CACHEv2的暴力攻击是没有用的(尽管情况可能会在几年后发生变化)。 让DCC独自一人,继续寻找登录会话。 检查哪个用户登录到Upd主机:

我们看到Upd机器上挂了两个不活动的会话-管理员和用户Shadmin,它们已经为我们所熟悉,这意味着我们可以通过窃取LSA秘密来获得其密码的NT哈希。 这是确定整个攻击是否成功的关键。 要窃取哈希,请使用Lslsass漏洞[3]。 要执行它,您需要拥有我们已经拥有的本地管理员权限(或更确切地说,是调试进程的权限)。 我们获得LSA机密列表(格式为“域\帐户:LM哈希:NT哈希:::”):
lslsass v1.0 - Copyright (C) 2010 Bjorn Brolin, Truesec (www.truesec.com) Found Lsass pid: 520 Lsass process open Found possible primary token Found real token UPD\Administrator::00000000000000000000000000000000:<i>8833c58febc977799520e7536bb2011e</i>::: Found possible primary token Found possible primary token Found possible primary token Found real token UPD\Administrator::00000000000000000000000000000000:8833c58febc977799520e7536bb2011e::: Found possible primary token Found real token UPD\Administrator::00000000000000000000000000000000:8833c58febc977799520e7536bb2011e::: Found possible primary token Found real token CORP.LOCAL\UPD$::00000000000000000000000000000000:68987a0fb5529dbf99d5eac3bfce773b::: Found possible primary token Found real token CORP.LOCAL \UPD$::00000000000000000000000000000000:68987a0fb5529dbf99d5eac3bfce773b::: Found possible primary token Found real token CORP.LOCAL \UPD$::00000000000000000000000000000000:68987a0fb5529dbf99d5eac3bfce773b::: Found possible primary token Found real token CORP.LOCAL \Administrator::00000000000000000000000000000000: <b> c690e441dc78bc5da8b389e78daa6392 </b>::: Found possible primary token Found real token CORP.LOCAL \shadmin::00000000000000000000000000000000: <b> 5794cba8b464364eacf366063ff70e78 </b> :::
粗体突出显示的行包含必需的密码哈希。 还要注意第六行中的斜体哈希。 我们已经在某个地方见过他,对吗?
结果。 成功。 我们手中有域管理员帐户的NT密码哈希。 但是,如果无法在可接受的时间内从哈希中恢复原始密码,那么哈希的用途是什么? 关于下一步。
第3步。作弊NTLM身份验证会话
理论 Windows从不使用纯密码进行身份验证,经过身份验证的系统始终会显示哈希。 这引起了这样的想法:用适当的域管理员值替换登录用户的登录会话中的用户名,登录域和NT哈希,我们可以在将远程系统用作域管理员之前使用NTLM协议进行身份验证。 仅当使用NTLM协议进行身份验证时,这种攻击[7]才可能发生。 尽管Kerberos协议被广泛使用,但NTLM是访问网络共享时唯一不是通过符号名称而是通过IP地址进行身份验证的唯一可行方法[13]。
攻击对象。 本地管理员的登录会话。
练习 有多种利用可利用的漏洞,您可以在Windows Server 2008 x86和x64平台上实施攻击。 主要漏洞利用是Windows凭据编辑器[4]。 为了进行攻击,我们使用凭据“ Administrator” \“ Pa $$ word2”进入LAB2主机。 使用[4],我们用在上一步中获得的相应的Shadmin值替换登录会话中的帐户名,登录域和NT哈希数据:

域管理员帐户名称及其NT哈希作为命令行中的参数传递给wce命令。 结果-哈希已成功更改。 我注意到攻击期间用户在组中的成员身份和访问令牌不会更改:

我们仍然是本地管理员,上面截图中绿色的主机名涂有绿色-LAB2。 但是,在NTLM身份验证期间,将为远程系统提供CORP.LOCAL域名,Shadmin用户名和Shadmin密码哈希。 这是包含NTLM安全Blob会话的单个网络数据包的转储:

域名(CORP.LOCAL)和主机名(LAB2)以灰色显示为灰色),显示一个帐户-Shadmin。 现在,我们尝试使用域控制器的IP地址通过net use命令连接到域控制器上系统卷的根分区:

成功地。 为了验证访问权限,我在根目录中创建了一个文本文件(在屏幕截图中找到了该文件)。 使用所需的命令序列在域控制器的磁盘上创建了批处理文件后,我们可以使用[5]在域控制器上执行必要的操作(例如,将用户添加到域管理员组)。 该操作将使用Shadmin帐户的权限执行。 为了说明这一点,请在添加本地用户的远程主机上创建一个简单的批处理文件:
净用户TstUsr Pa $$字/添加从LAB2主机远程运行它:

它将使用我们当前会话的用户shadmin(即域管理员)的特权在远程系统192.168.13.125上执行。 我们检查:

net user命令的第二个输出显示新用户。 尽管不可能以这种方式启动需要交互式用户交互的应用程序(例如,MMC管理单元),但是可以使用脚本执行多种操作。
结果。 成功。 可以访问域控制器的文件系统和外壳程序。
总结
简而言之,攻击链如下所示:收集有关网络结构的信息->获取本地管理员密码->使用此密码登录到其中一台辅助服务器->盗窃域管理员凭据(“无人看管”)->修改登录会话并特权升级。
攻击成功的原因是:
- DNS区域保护不足,无法转移到不受信任的主机。
- 弱密码策略。 大多数域计算机为本地管理员帐户使用相同的密码,这很容易受到字典攻击。
- 关键主机上没有防病毒软件或配置较弱。
- 弱密码散列保护-Upd主机上两个非活动的管理员登录会话,SAM数据库中的LM散列。
- 审核政策不佳。
基于此,可以得出一般保护建议:
0.彻底隐藏潜在攻击者的网络内部结构。 因此,用户应该无法获得DNS区域文件的完整内容。 不受信任的用户(例如,受训人员,尚未完成试用期的员工等)很有意义,可以使用NAT转移到单独的子网来欺骗地址(例如,包括修改DNS答案)。
1.为本地管理员分配密码的正确策略。 在具有不同程度的防止未授权访问的主机上,本地管理员密码必须不同。 破坏任何域主机上的本地管理员密码应将攻击者使用此密码的可能性降到最低。
2.安全策略应禁止在SAM中存储LM哈希。
3.请勿将公司名称或其域用作管理员密码的一部分。这将使攻击者难以攻击字典。 但是,即使使用复杂的密码,也不要忘记自己,并使用在线服务定期检查其哈希值是否具有持久性。
4.不建议从域管理员帐户下对域计算机执行例行操作。 这将防止帐户拦截登录会话数据,以及防止密码哈希进入DCC缓存。
5.制定规则,不要让域管理员的登录会话无人值守。 最佳做法:完成工作-注销。
6. LSA欺骗实用程序很小。 跟踪它们的演变并通过公司防病毒软件验证其成功检测是有意义的。
7.即使具有本地管理员权限的用户也不能更改公司防病毒软件的设置。 关闭域工作站上的防病毒服务应该会向域管理员发出通知(从这种意义上说,Symantec Endpoint Protection在测试期间运行良好)。
附录1.防病毒行为
该公司的计算机使用三种类型的防病毒软件:KAV(在Symantec Endpoint Protection测试时有效)和趋势科技的过时产品。 在大多数情况下,攻击期间使用的工具被标识为Hack Tool / Rootkit / Trojan。 KAV毫无预警地删除了它们,SEP(甚至关闭了)发出了警告,并将其移至隔离区以阻止其启动。 但是,拥有本地管理员权限可让您禁用KAV,并且通过再次使用本地管理员帐户手动设置用于验证的异常路径来绕过SEP保护。 安装在某些主机上的趋势科技杀毒软件对漏洞利用程序没有任何反应。
附录2.使用在线哈希验证服务的效率
有许多在线服务可用来测试密码哈希的强度。 它们使您可以处理最常见的哈希-LM,NTLM,MD4,MD5,WPA,带有盐的哈希等。 为了检查哈希,使用了现代GPU的处理能力,字典枚举,混合攻击等直接枚举。 一旦打开,散列可以补充数据库并在将来使用。 该服务可以免费检查短密码(少于8个字符)或收取少量费用。 在测试过程中,我使用了四个这样的服务,在文章结尾给出了链接。 我发送了在第2步中发现的多个哈希,并在15个月后收到在线哈希破解[9]服务的通知,告知其中的一个成功恢复)
参考文献
二手工具[1]
Cain&Abel -Microsoft操作系统的密码恢复工具。 它可以通过嗅探网络,使用字典,蛮力和密码分析攻击破解加密的密码,记录VoIP对话,解码加扰的密码,恢复无线网络密钥,显示密码框,发现缓存的密码并分析路由,轻松恢复多种密码。协议。
[2] L0pht裂纹。
[3] Lslsass攻击。 转储lsass进程中的活动登录会话密码哈希。
[4]
Windows凭据编辑器的利用后。 更改登录凭证的工具。
[5]来自PS Tools的PsExec
详细的漏洞描述[6]在
www.securitylab.ru上的系列文章“在Windows中有效获取密码哈希”
[7]散列传递,通过向远程系统提供被破坏的散列来
描述对远程系统的攻击。
云哈希黑客服务[8] Question-defense.com(发布时似乎乱序()
[9]
www.onlinehashcrack.com[10]
www.cloudcracker.com[11]
在线哈希杀手附加材料[12]
Windows Server中的安全性和DNS调整[13]
当您使用IP地址连接到SMB共享时,不使用Kerberos