攻击战术9:利用影子凭证进行权限提升
本次网络研讨会最初发布于2025年1月9日。在该视频中,Kent Ickler和Jordan Drysdale讨论了攻击战术9:主要对象的影子凭证,重点介绍了Black Hills Information Security在渗透测试服务中使用的一种特定技术。他们深入探讨了这种本地权限提升方法如何利用Active Directory中的功能来获得未经授权的访问。谈话还涵盖了针对此类攻击的缓解策略,强调了审计和实施安全措施以防止利用的重要性。
网络研讨会重点关注使用影子凭证作为网络安全攻击中本地权限提升(LPE)的一种技术。使用影子凭证的技术利用了Active Directory中的功能而非漏洞,使其成为攻击者复杂但有效的方法。防御措施如LDAP签名和通道绑定对于防止在Active Directory环境中滥用影子凭证至关重要。
亮点
- 影子凭证是一种用于本地权限提升的技术。
- 该技术利用Active Directory中的功能,而非漏洞。
- LDAP签名和通道绑定是关键的防御措施。
完整视频
[视频链接]
文字记录
Jason Blanchard:大家好,欢迎来到今天的Black Hills Information Security网络研讨会。我是Jason Blanchard,是Black Hills的内容和社区总监。我们没有传统的营销团队,我们有一个内容和社区团队。这意味着我们喜欢创建内容,我们喜欢将喜欢这些内容的人聚集在一起,给他们机会互相讨论这些内容。这就是为什么我们有Discord。我们有很多机会让你们互相见面。
今天我们有Kent和Jordan在这里进行攻击战术9:利用影子凭证进行权限提升。我们已经做了攻击战术1、2、3、4、5、6、7、8,现在是9。我在这里已经六年了。我想我六年前来这里时,可能从4开始。所以这是一个长期的系列。如果我们愿意,我们可能每月可以做一次。但现在我们进行攻击战术9,Kent和Jordan将深入探讨我们在Black Hills进行渗透测试服务时的一些攻击。
如果你需要渗透测试、红队、威胁狩猎、ANTISOC(即与友好的APT组进行持续渗透测试),那么可以找到我们。说到这里,我将交给Kent和Jordan。如果你需要任何东西,请在Discord中询问。如果你需要更多,请在Zoom中询问。我们很高兴你今天在这里。好了,Kent和Jordan,交给你们了。
Kent Ickler:谢谢。Jason,你是最棒的之一。我们感谢你所做的一切,你建立的社区,以及很多爱,先生。谢谢。
Jordan Drysdale:真的,Jason,你很棒。最好。最好的。
Jason Blanchard:天啊。
Jordan Drysdale:所以,是的,之前有八个这样的战术,它们很大程度上是我们在BHIS进行一些渗透测试时使用的方法论。不是全部,不是我们所有的方法论。但今天我们将讨论一个特定的、新兴的战术。事实上,如果你看过我们最近的一些网络研讨会,其中一个最近我们讨论了一个特定的攻击向量,我们从检测的角度进行了深入探讨,深入探讨了检测的工作原理。现在我们将深入探讨实际攻击的工作原理。
Kent Ickler:是的,那里的检测相对复杂。我们将在最后谈到这一点。我们将稍后讨论一下。在那个网络研讨会上,我们也与你分享了一些这种方法论。但我们很快地过了一遍,对吧?那个网络研讨会的目的是演示检测,讨论防御,为什么这是一种相对阴险的攻击向量,因为它是一个功能而非漏洞。所以那个网络研讨会也在那里,讨论了防御、检测以及所有这些都是什么。但在这里,我们将非常具体地从攻击者的角度讨论这一点。这是因为这是一种持续有效的本地权限提升技术。Lpe,我们今天会多次使用这个缩写。这已经存在将近四年了。我们想向所有为此工作过的人致敬。Elad Shamir,还有很多人编写了这方面的后端。我们有一些内部人员使这成为我们最常用的技术。所以,Gabe,致敬,因为他基本上构建并与团队分享了这些知识,让整个团队了解其功能,从而在过去的两年中将其推为我们本地权限提升的首要技术。
所以,我们开始吧。为什么这次谈话?一些常见的攻击战术是什么?影子凭证是其中之一。它们是如何被使用的?它们被用来接管你的系统和域。为什么关注本地权限提升?通常是因为你的管理员设置了一些东西,并在端点上留下了凭证材料。所以,如果你能获得一个端点,猜猜看?那是通过域移动的第一步。微软是否意识到这些风险?是的。这些不是漏洞,这些是功能。我们如何检测和防御这种攻击?我们将在网络研讨会结束时总结一下。所以,我们将在这里滑动一下。你以前见过Kent。他40多岁。道德、破坏者、 disruption、 instigator,无论什么,他在公司里非常公开和清晰地表达自己的想法,这不断推动我们前进。培训师,就这样。你想描述一下自己吗?那很完美。
Jordan Drysdale:我们继续吧。
Kent Ickler:滑动右,我们开始吧。我们在找实习生。当我们说实习生时,我们更希望你在大学或两年制项目的网络安全项目中。我们需要有编码技能的人。对吧?这就是我们成长和变得更好的方式。我们可以分享。Ken,我没有太多时间开发,所以有人帮忙很好。我可以说,嘿,你能帮我完成这个小项目吗,复活一个10年前的死项目Mininet?是的,当然,明白了。砰。被雇佣了。我,我觉得我大多数早上醒来时像67岁。我17岁时放屁还会笑,对吧。就像所有那些东西,但我在40多岁,所以,试着,我试着专业。我不经常这样,但我喜欢分享知识,无论如何,再滑动一次。再次,如果你是一名学生,正在寻找东西,我们确实有时需要一两个实习生,我们会培养那个实习生,帮助成长并从那里开始。
但无论如何,再滑动一次,你想谈谈这个吗?为什么影子凭证?
Jordan Drysdale:为什么影子凭证?
Kent Ickler:所以,下一张幻灯片是影子凭证是什么?
Jordan Drysdale:所以,好吧,为什么影子凭证?我们将讨论一个lpe,对吧?本地权限提升或Privez C。好吧,有很多不同的LPE。有些已经存在很久了,而这个是较新的,因为它基于一个功能,而且通常当有新功能被配置时,随之而来的是可能有机会利用该功能做一些并非其本意的事情。这真的是影子凭证的意义,对吧?我们将使用Active Directory中的一个属性进行认证。我们将误用它,滥用该功能来进行本地权限提升。所以,有几种不同的方式,但今天我们将专注于一种方式,我们将向你展示如何做到的完整路径。这对我们非常有效。我们现在讨论它的原因之一,以及去年年底我们讨论了一点的是,去年它引起了大量关注,就像两年前是adcs,对吧?所以,这一直是一个持续的事情,每年我们都有这个新的重大漏洞,成为我们获取本地权限和破坏域的最常见路径。从这个角度来看,这是去年我们最常见的一个。这是一个从2016年Active Directory架构引入的功能。所以任何功能级别2016及以上的都会拥有它。好吧。它相对容易。我的意思是,今天我们将通过一些命令。你会说,哇,这有很多部分。但现实是,如果你退一步看,意识到我们只是在滥用一个功能。所以从这个角度看一下。但我们将给出命令并在这里演示。再次,这是我们在2024年的头号LPE。
Kent Ickler:是的。当我们演示实际攻击时,如果你减去所有准备工作,捕获GIF和点击的时间大约是16秒。所以你强制系统,中继它,你必须开始操作这个攻击。这有点吓人。就像很多事情一样,当你第一次看到NTLM中继转储凭证时,你会说,哦,天哪,哇,那真的很容易,真的很吓人,真的很快。所以无论如何,它相对容易。但再次,如Ken所提到的,这种攻击有一些细微差别。所以你想谈谈这些功能吗?
Jordan Drysdale:当然。所以让我们谈谈影子凭证。就像我们正在讨论的是这种使用影子凭证的LPE。为什么它像这个影子凭证?我们想到凭证,我们通常认为它是用户名和密码之类的东西。对吧。是一个凭证,我们都认可这一点。我们可以接着说,像多因素认证有那个第三个凭证组件。对吧。你需要别的东西。也许是一个一次性认证令牌,类似的东西。所以我们想到影子凭证,我们想到的是一个我们不一定看到的凭证。我们不一定看到它的原因是,尽管我们认为那些凭证是用户名和密码,我们知道在Active Directory中,它们存储在属性中。但它们对我们来说相对明显。对吧。如果我们退一步思考影子凭证。好吧,它对我们不明显。为什么它对我们不明显?嗯,它存储在Active Directory中的一个特定属性中,称为msds key credential link,那是Active Directory中的一个属性,2016及以上功能级别。通常作为功能集的一部分存储在那里的是必要的凭证组件,以允许诸如Azure ad、sso、无密码认证、fido、两个Windows、hello、Azure AD混合设备再次用于SSO以及基于设备的认证。所以它本质上是本地Active Directory中的一个属性,你可以在其中存储这种额外的凭证机制,用于诸如Windows hello之类的事情。因此,由于这是一个功能,记住?计算机如何能够管理它?嗯,对于计算机本身来说,要能够管理它,它必须能够写入该属性。而这基本上就是我们现在看的东西,一台计算机可以写入它自己的属性,如果我们能控制计算机并获取计算机的上下文,我们可以把任何东西放入该属性。所以是的,它本应是计算机的一种认证机制,但如果我们往里面塞别的东西,允许我们除此之外进行认证呢?所以有多个影子凭证可以与特定的AD对象关联。所以你不能只放一个东西到Ms. Key credential link。你可以,但你也可以放多个,所以你可以开始往Ms. Key credential link里堆东西。不是只能存储一个凭证,而是多个。所以当我们进行这种攻击时,我们确实需要一件东西来使其工作,那就是用于中继的HTTP认证。我们将作为演示的一部分设置这个中继,所以有多个组件与本地权限提升相关,并能够滥用它以至于你危及整个域。再次,这是一个功能。
Kent Ickler:哎呀。那里多点击了一次。所以这里有一个但是。
Jordan Drysdale:权限提升部分,本地权限提升部分,中继部分。我们怎么做?
Kent Ickler:所以它需要几个服务。Windows 10我们将依赖web client服务,我们需要操纵它启动,这是可能的,作为一个低权限用户,我们会展示如何做到,或者如果你运行的是Windows 11,那种强制似乎对web client不那么有效或不那么一致,而是如果你能强制EFS启动或加密文件系统,你可以强制该服务。这两个在强制时都支持HTTP认证,因此我们将尝试在强制服务启动后使用用户态技术进行强制。
Jordan Drysdale:但为什么我们需要那些服务启动?我们确实需要思考一下。对吧?我们讨论强制服务启动,因为之后我们将强制该服务做别的事情。
Kent Ickler:是的,那很公平。然后我们将使用这个我们现在拥有的计算机对象上的证书来请求一个服务票据,我们可以用它来升级。对吧。那是,那是要点吗?是的,差不多,是的。所以这基本上是一种通过功能升级权限的阴险手段。我们在端点上启动一些服务,我们强制这些服务使用磁盘上的东西运行,然后建立一个隧道回传那个隧道。我们将发送一些指令给那些服务,说嘿,向我认证,从而将其中继回ldap。这里有一个我们很少看到的防御措施。LDAP签名和通道绑定。你可以通过那些功能实现来阻止这两种针对LDAP LDAPs的攻击,即通道绑定和LDAP签名。它基本上是说,我需要在我的域控制器上发生的认证事件的消息完整性。这些是,这些是我们现在编写的功能,或者这些是我们在很多测试中编写的发现。我们有凭证,这是我们检查的东西,如果你没有它,你会因此被扣分,因为这些是确保返回你的域控制器的认证材料确实有效的功能。
所以这是我们的实验室设置。相当高级。你可以用几次点击部署其中一个。现在好的是,从Doaz Lab.com,你会看到一个ARM模板。那个ARM模板只是一个点击,如果你在一个认证会话中并且可以创建对象。这是一个大约每天3美元的实验室,或者4美元左右, somewhere in there。所以基本上这是全部。有几个Windows虚拟机你可以通过RDP访问。在这个云基础设施的边缘,还有一个Linux盒子你也可以通过ssh访问。在这个云基础设施的边缘,内部,Windows系统在同一个子网上,然后Linux盒子在一个不同的子网上,有路由能力到那个子网。所以你有一个攻击装备。你可以在doazlab.com构建上用几次点击完成整个事情。所以这里的概述是如提到的,对吧?我们将从端点建立一些隧道,我们将在一分钟内讨论为什么我们在这里使用SSH。但我们需要几个SSH隧道用于工具,然后我们将强制一些服务启动。我们将使用NTL和Relay X针对ldap进行中继。然后我们需要中继机器认证,而不是用户认证。我们将向你展示用户认证失败,因为那是我们强制这些服务启动的方式之一。Petite podem用于强制。如果你还没有使用过这个工具并且你是进攻性的,这可能是你应该看看的东西。有一些其他工具跟随了它的脚步。我认为Coercer是其中之一。但强制是一种强制认证,并再次成为一种功能,而非漏洞。虽然petiteprodem最初利用的一些功能是未认证的强制,你仍然可以用凭证强制系统和机器认证。我们将使用PK init工具进行票据。我们将创建一个请求一个S4U2服务票据用于特权用户来执行那个升级,然后建立远程命令执行rce来实际执行。
好吧,所以实验室设置。幻灯片说recuerda este cuenta。记住这个账户?所以Theodore Nichols是我们要针对的D.A.。我们为什么要这样做?我们之后需要一个DA来挑选。所以我们在设置阶段。我们进行一些初始侦察或情境感知,如果你愿意。我在哪个盒子上?我是谁?系统的管理员是谁?然后我们去看看谁是域。
Jordan Drysdale:所以上下文中的nopriv用户没有任何额外权限,它只是一个域用户。就这样。组织中最低权限的用户账户。
Kent Ickler:所以这是第一步,情境感知。我在哪里?我 targeting 谁?是否可能逃离这个系统的限制?现在,再次,如提到的,不是系统或域的管理员。
Jordan Drysdale:我们有一个低权限用户可以登录。可以登录WS05。
Kent Ickler:隧道一号。这是你的前几个命令。现在,它们看起来有点奇怪,对吧?
Jordan Drysdale:从工作站运行。
Kent Ickler:是的,从工作运行。
Jordan Drysdale:使用原生Windows ssh。
Kent Ickler:原生Windows Windows ssh。如你所见,对吧,我们在云中某处的Linux盒子上创建一个用户。这个IP不应该被攻击。它不再是我们的了。它在这个幻灯片 deck 上线之前被释放了。
Jordan Drysdale:别人拥有它。
Kent Ickler:别人拥有它。你没有权限去戳20.7.32.198,也不应该。它不是我们的。只是一个提醒,黑客系统是非法的。在美国的每个州都是州犯罪,是联邦犯罪。所以这意味着如果你选择尝试窃听,你要去法庭两次。现在我们创建两个隧道。第一个隧道我们将用于建立一个远程隧道。这意味着我想在SSH隧道的远端,我们以低权限登录,打开9050,并允许我运行工具回传那条链。这不打开一个本地套接字,这打开一个远程套接字。所以在云中运行的SSH服务器上,9050现在正在监听。一个快速的Google搜索应该告诉你那是Tor,没关系。
Jordan Drysdale:所以好吧,为了上下文,没关系。Windows工作站,你正在从Windows到我们拥有的Linux系统建立SSH出站连接。不必是Linux,但在这个案例中是,他们正在做那个tachr9050。所以当连接进入打开SSH在Linux系统上时,现在该Linux系统上的任何其他人将看到Port 9050正在监听,这实际上是用于。它实际上是一个隧道到Windows工作站的本地网络。对吧。所以我们现在能够跨填充x填充 infill 进入那个LAN跨互联网到一个不受信任的位置,只需一个命令。所以如果你说,嘿,我希望能够将我的内部网络暴露给互联网上的某个服务器,给你,我们正在做,因为SSH现在原生安装在Windows 10及以上。
Kent Ickler:所以。好吧,所以你想解释下一个吗?本地端口转发。所以我们在这个上打开两个端口。
Jordan Drysdale:是的。好吧,所以下一个命令我们将。所以我们让第一个隧道运行。
Kent Ickler:在广泛开放,准备好去。
Jordan Drysdale:在工作站上的新窗口,我们将打开另一个,PowerShell,我们将运行另一个SSH命令。这次我们将监听本地主机,工作站的本地主机127001,对吧。本地主机在端口80上。所以在本地工作站上,对于88我们将监听,我们将把它推送到Linux盒子上的端口8080。所以有点令人困惑,但保持。
Kent Ickler:移动所以你可以执行这个攻击。这是你开始的地方。建立SSH隧道。这是C2,这个命令和控制。所以合法地现在我们看到对手使用ssh。我要诚实地说,这是我们将尝试的第一种技术之一。现在作为bhis的测试者,当我们进行假设妥协时,当我们在端点上获得立足点时,如果我们能SSH出去,我们已经通过隧道建立了连接到你的环境,并可以运行工具直接通过它。现在有趣的是,它绕过了很多EDR,因为我们不必在磁盘上丢弃二进制文件。我们只是用SSH来逃离限制和可信二进制文件。我认为下一个正好说明了我现在在谈论的内容。
Jordan Drysdale:哦是的,它默认在磁盘上带有Windows。
Kent Ickler:我们为什么还要做别的事情?为什么我们要丢弃恶意软件?
Jordan Drysdale:当我们可以只使用原生Windows SSH时,我们不必再创建恶意负载来创建C2通道。顺便说一下,如果你现在是一个客户,想着,哦我的上帝,这是什么。是的,你应该一直在阻塞端口22。你应该一直阻塞SSH。
Kent Ickler:协议检查也是。对吧?你会想要看。
Jordan Drysdale:你的协议检查,不只是22因为我会只是切换到端口80。
Kent Ickler:当我们说可塑端口配置时,我们的意思是我们可以把SSH移动到任何我们想要的套接字。所以如果你允许443出站,那就是它,你得到了。是的,那就是它。我们可以只使用443来逃离,并且我们可以代理很多工具。我们说所有工具因为所有事情但我们在说你可以代理一吨工具回通过基于代理的工具。是的,是的,确实。
Jordan Drysdale:这是我们使用的大多数。是的。
Kent Ickler:所以稳定长时间连接。如果我们运行这些并且在那个Linux盒子上,我甚至不必再挂在端点上了。我有所有我在Linux中习惯的工具,所以我可以逃离。
Jordan Drysdale:你可以在那个工作站上拥有所有你想要的端点控制。一旦我们能够促进那个SSH出站连接并创建那个隧道。我们甚至不再尝试在那个工作站上运行恶意软件了。我们通过那个隧道在我们控制的系统上做。所以如果你允许任何端口上的SSH出站连接,那成为运行恶意代码的机制,因为我们不再需要在工作站上做了,我们可以通过那个隧道在任何别的地方做。
Kent Ickler:所以我们需要