从hash传递攻击谈相关Windows安全机制

简介:

前言

path-the-hash,中文直译过来就是hash传递,在域中是一种比较常用的攻击方式。在网上所找到的资料,大多数是介绍如何实现此类攻击,但对于它背后所隐藏的关于Windows安全机制的一些知识,却鲜有探讨。本文的目的就是从pass-the-hash这一古老的话题切入,由攻击过程中Windows的行为引出它背后的安全机制,让大家对Windows有更深入的了解。

攻击方式

通常来说,pass-the-hash的攻击模式是这样的:

获取一台域主机高权限

利用mimikatz等工具导出密码hash

用导出的hash尝试登陆其他域主机

下面简单演示一下一般的攻击方法:

mimikatz抓取密码

传递hash

可以看到,已经能够访问到远程的机器了。

一个试验引出的问题

虽然pth是一个比较老的套路了,但实际上关于这个话题能谈到的还有很多。其中值得注意的包括微软发布的补丁kb2871997。据说这个补丁能够阻止pth,并且还能阻止mimikatz抓取明文密码。

有意思的是,事情并不是那么简单,我们做一个实验:

攻击机:192.168.1.109

windows server 2008 r2

靶机:192.168.1.103

windows server 2008 r2

这里有两点需要注意,一是pth所使用的账户User并不是RID为500的账户,但它是本地管理员组的成员,二是这并非在域环境中进行实验,所有的账户都不是域账户

首先在靶机上查看一下补丁情况

可以看到,没有安装kb2871997

然后在攻击机上传递hash

提示拒绝访问

接下来我们再尝试以RID为500的Administrator用户pth,

这下成功了。那如果我们在域环境下,使用域账户情况又如何呢?

这次使用域账户User,User是一个RID非500的域管理员组成员

从上面的实验中我们可以得出一个结论:即便没有打KB2871997,windows server 2008 r2依然阻止了RID非500,也即非内置管理员账户的远程登陆,但这条规则对于域账户并不适用。下面我们来深入探究原因。

UAC与令牌完整性

微软在文章Description of User Account Control and remote restrictions in Windows Vista中提到:

When a user who is a member of the local administrators group on the target remote computer establishes a remote administrative connection…they will not connect as a full administrator. The user has no elevation potential on the remote computer, and the user cannot perform administrative tasks. If the user wants to administer the workstation with a Security Account Manager (SAM) account, the user must interactively log on to the computer that is to be administered with Remote Assistance or Remote Desktop.

根据微软的描述,当一个本地管理员组的用户远程登陆时,它不是以一个“完全”的管理员身份登陆。什么是“完全”呢?

在Pass-the-Hash Is Dead(强烈推荐!)中,有这么一段话:

for any non-RID 500 local admin account remotely connecting to a Windows Vista+ machine, whether through WMI, PSEXEC, or other methods, the token returned is “filtered” (i.e. medium integrity) even though the user is a local administrator. Since there isn’t a method to remotely escalate to a high-integrity context, except through RDP (which needs a plaintext password unless ‘Restricted Admin’ mode is enabled) the token remains medium integrity. So when the user attempts to access a privileged resource remotely, e.g. ADMIN$, they receive an “Access is Denied” message despite technically having administrative access. I’ll get to the RID 500 exception in a bit

以作者的观点来看,返回的令牌被过滤了,它仅有一个“中等完整性”。也就是说,这个令牌不是“完全”的。这里的完全,就是指令牌的完整性级别。

完整性级别

“……完整性级别能够修改自主访问行为,以便区分以同一用户身份运行,并被同一用户拥有的不同进程和对象,从而提供在同一用户账户内隔离代码和数据的能力。强制完整性级别(MIC,mandatory integrity control)机制通过把调用者关联到一个完整性级别,让SRM能够得到调用者自身属性的更详细信息。它给要访问的对象定义了一个完整性级别,从而指出了要访问该对象的调用者必须拥有的信任信息。” ——《深入解析windows操作系统 第六版(上册)》.P.487

以我的理解来讲,当一个用户登陆到windows操作系统中时,所属他的进程在访问不同的对象时,操作系统必须确认它有访问此对象的权限。通过赋予完整性级别这一属性,各对象能够被区分开,并能控制访问的行为。完整性级别是通过一个SID来指定的,系统使用了五个主要级别:

既然以SID的方式定义了完整性级别,那么它就应该存在于用户的令牌中。一个访问令牌的基本结构如下:

实际上,代表完整性级别的SID包含在组SID中。一个进程或线程拥有一个令牌,当它请求访问一个对象时,Windows内核中的SeAccessCheck函数会进行完整性检查。如果它的完整性级别等于或高于请求的对象,它就可以对此对象进行写入操作。但当一个进程或线程想要打开另一个进程或线程时,它不仅要满足完整性检查,还要拥有DACL的授权。

进程与对象的访问权

UAC

UAC大家应该都很熟悉。简单来说,UAC的目的就是让用户以标准的权限,而非管理员权限来执行操作。它能够在一定程度上阻止恶意软件的运行。在我们的印象中,UAC似乎只是对本地使用计算机进行了限制,但事实上,微软也考虑了UAC对远程登陆的安全限制。在微软的知识库文章中,它认为应该保护本地管理员免受来自网络的攻击,因此对网络施加了UAC限制。同时,微软也提到了:

A user who has a domain user account logs on remotely to a Windows Vista computer. And, the domain user is a member of the Administrators group. In this case, the domain user will run with a full administrator access token on the remote computer, and UAC will not be in effect.

在我们的实验中,由于UAC的限制,我们无法以一个高完整性的令牌来登陆远程主机,因而pth攻击并不会成功;而在域环境中,我们以管理员组身份远程登陆时,将会得到一个高完整性的令牌,UAC对我们的行为并不加以限制。文章中也提到了解决问题的方法,通过设置LocalAccountTokenFilterPolicy的值为1来取消UAC的限制。这个键默认并不存在,需要在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System下手动创建。顺便一提,UAC的设置就保存在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System中。通常我们要更改UAC设置并不需要直接修改注册表,而是通过控制面板中的更改用户账户控制设置来更改。下图即为更改用户账户控制设置:

可以看到有四个等级:最高一档(始终通知)、第二档、第三档、最低一档(从不通知)。不同的等级将会影响到注册表中键的值:

回到正题。我们来验证一下微软的方案:

在注册表中HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System下新建一个DWORDLocalAccountTokenFilterPolicy并将值设置为0

pass-the-hash

将LocalAccountTokenFilterPolicy值设置为1,重复攻击过程

没有问题,说明的确是由于令牌被UAC过滤掉导致无法远程登陆。这里我想再介绍两个概念:受限制的令牌和已过滤的管理员令牌。

受限制的令牌

受限制的令牌是通过windows的模仿机制创建的来源令牌的一份拷贝。至于什么是模仿这里暂且不表,感兴趣的同学可以自行google。受限令牌的特征就是能够作为复制品修改源令牌而不对源令牌造成影响。它的修改可以是如下:

从该令牌的特权数组中删除一些特权

可以标记某些SID 为仅仅拒绝(deny-only)

可以将SID标记为受限制的(restricted)

第二点和第三点实际上是对特权做出了限制,但这样的限制并不是直接将特权删除,因为删除特权可能会导致特权覆盖,简单来说就是此令牌不具有某些特权,但如果它的组SID被授予某些权限,那它也将具备这些权限。

已过滤的管理员令牌

UAC会使用受限制的令牌来创建已过滤的管理员令牌。一个已过滤的管理员令牌具有以下特性:

其完整性级别为“中”

管理员SID和管理员类的SID被标记为“仅仅拒绝”

除Change Notify、Shutdown、Undock、Increase Working Set和Time Zone外的特权都被移除

前面我们提到返回的令牌仅有一个“中等完整性”,是由于它是一个已过滤的管理员令牌。根据微软在Vista以后的默认策略,持有此令牌的用户将不得进行远程管理。

总结

经过以上的分析,我们可以大概明白为什么pass-the-hash在不同环境下有着迥异的行为。说的浅一点,就是UAC在作祟;深入探讨的话,则能通过pass-the-hash管窥Windows的庞大安全机制。

受限于篇幅及主题的限制,我无法将文章中某些出现的概念进行深入地介绍,希望本文能够抛砖引玉,让大家对Windows操作系统进行深入地研究与思考,看待某些安全问题时能够有更新奇的理解。

作者:existX
来源:51CTO

相关文章
|
安全 数据安全/隐私保护 Windows
解锁安全之门,Windows Server 2019密码修改攻略大揭秘
解锁安全之门,Windows Server 2019密码修改攻略大揭秘
1587 0
|
10月前
|
安全 Linux iOS开发
SonarQube Server 2025 Release 5 (macOS, Linux, Windows) - 代码质量、安全与静态分析工具
SonarQube Server 2025 Release 5 (macOS, Linux, Windows) - 代码质量、安全与静态分析工具
398 0
SonarQube Server 2025 Release 5 (macOS, Linux, Windows) - 代码质量、安全与静态分析工具
|
11月前
|
安全 Linux C++
PVS‑Studio 7.38 for macOS, Linux & Windows - 代码质量安全静态分析
PVS‑Studio 7.38 for macOS, Linux & Windows - 代码质量安全静态分析
444 0
PVS‑Studio 7.38 for macOS, Linux & Windows - 代码质量安全静态分析
|
12月前
|
安全 Linux iOS开发
Burp Suite Professional 2025.7 (macOS, Linux, Windows) - Web 应用安全、测试和扫描
Burp Suite Professional 2025.7 (macOS, Linux, Windows) - Web 应用安全、测试和扫描
839 0
Burp Suite Professional 2025.7 (macOS, Linux, Windows) - Web 应用安全、测试和扫描
|
安全 Linux iOS开发
PVS‑Studio 7.36 for macOS, Linux & Windows - 代码质量安全静态分析
PVS‑Studio 7.36 for macOS, Linux & Windows - 代码质量安全静态分析
319 1
PVS‑Studio 7.36 for macOS, Linux & Windows - 代码质量安全静态分析
|
人工智能 Linux iOS开发
Burp Suite Professional 2025.2 (macOS, Linux, Windows) - Web 应用安全、测试和扫描
Burp Suite Professional 2025.2 (macOS, Linux, Windows) - Web 应用安全、测试和扫描
1062 12
Burp Suite Professional 2025.2 (macOS, Linux, Windows) - Web 应用安全、测试和扫描
|
安全 Windows
【Azure Cloud Service】在Windows系统中抓取网络包 ( 不需要另外安全抓包工具)
通常,在生产环境中,为了保证系统环境的安全和纯粹,是不建议安装其它软件或排查工具(如果可以安装,也是需要走审批流程)。 本文将介绍一种,不用安装Wireshark / tcpdump 等工具,使用Windows系统自带的 netsh trace 命令来获取网络包的步骤
520 32
|
云安全 安全 网络安全
Windows安全:构建稳固的防线,守护数字世界
随着数据保护法规的不断加强,Windows系统需要更好地满足法规遵从和合规性要求。未来,Windows系统将更加注重用户隐私保护和数据安全合规性方面的功能提升
515 54
|
存储 安全 网络安全
Windows Server 本地安全策略
由于广泛使用及历史上存在的漏洞,Windows服务器成为黑客和恶意行为者的主要攻击目标。这些系统通常存储敏感数据并支持关键服务,因此组织需优先缓解风险,保障业务的完整性和连续性。常见的威胁包括勒索软件、拒绝服务攻击、内部威胁、恶意软件感染等。本地安全策略是Windows操作系统中用于管理计算机本地安全性设置的工具,主要包括用户账户策略、安全选项、安全设置等。实施强大的安全措施,如定期补丁更新、网络分段、入侵检测系统、数据加密等,对于加固Windows服务器至关重要。
675 1
|
缓存 安全 网络协议
Windows 安全基础——NetBIOS篇
Windows 安全基础——NetBIOS篇
769 4

热门文章

最新文章