人们总是低估 Ring 3 的代码执行,因为它在网络攻击的情况下似乎毫无用处。反病毒代理通常会在恶意软件开始造成严重破坏之前将其击败,与在第 0 环中不同,攻击者只需覆盖回调和钩子并继续为所欲为。
但是,这些钩子从未用于阻止受信任的代理操作。因此,在大多数情况下,在防病毒代理的上下文中执行代码将绕过挂钩。
我将首先从 Windows Defender 开始,它在技术上是最简单的。为了实现在防病毒服务“MsMpEng.exe”的上下文中执行代码的目标,我们需要以下内容作为要求。
1. 想办法在不重新启动的情况下关闭或终止 Windows Defender 进程。 2. 绕过或禁用进程上设置的 PsProtectedSignerAntimalware-Light 保护 3. 对具有完全访问权限的进程有一个句柄,或者至少找出一种在进程中注入 dll 的方法。
假设我们已经完成了 ring 3 的代码执行,它不会那么难,甚至还有一步一步的描述如何做到这 一点。
如前所述,我们首先需要一个受信任的安装程序令牌。简单的任务,可以通过从trustedinstaller进程中窃取它来完成,也可以使用LogonUserExExW .或NtCreateToken创建令牌......
我还必须调查为什么会发生这种情况,尽管 Forshaw 在他的票中提到了它,但还有另一个原因。
我注意到服务 ACL 根本不允许 SYSTEM 用户和管理员组修改或停止 Windows Defender 服务。但它反而允许 WinDefend 和 TrustedInstaller 做到这一点,因此从技术上讲,绑架一个受信任的安装程序令牌并将服务作为 ring 3 进程停止并不难。
所以我使用以下步骤来停止 Windows Defender 进程。
1. 模拟受信任的安装程序令牌。
2. 现在您可以打开进程本身或终止服务。
显然,它完美无缺!
关于“保护”的快速背景
保护进程最初出现在 windows vista 中,作为对关键 windows 用户模式服务的增强,后来在 windows 8.1 中演变为 Protect Process Light (PPL),听起来相当强大。
当然,微软员工不是白痴,他们不会把这个强大的原语提供给任何人,所以他们可以滥用它来启动你自己的受保护进程。为了启动 PPL 进程,您的可执行文件必须使用特殊证书进行签名,然后才能完成。
在对如何从 Windows Defender 中删除 PPL 保护进行了太多研究之后,它几乎就在我的眼前,但我没有看到。
根据 Microsoft 文档ChangeServiceConfig2W,只要您对服务对象有足够的访问权限,就可以更改服务保护。现在,我们已经从上一步中获得了对 Windows Defender 服务的完全访问句柄。
简单地说,我只是调用 了ChangeServiceConfig2W 并重新启动了服务,效果很好。
您可以在进程资源管理器中看到 Windows Defender 在没有 PsProtectedSignerAntimalware-Light 的情况下运行,这使下一步更容易!
这是最具挑战性的问题,即使 PsProtectSignerAntimalware-Light 被禁用,微软实际上在保护进程方面做得很好。
经典的进程注入技术没有按预期工作,导致 Windows Defender 内核模式驱动程序启动。此功能也称为“篡改保护”,可防止任何无人看管的注入任何用户模式 Windows Defender 服务。
不幸的是,我不得不转向 DLL 劫持错误来完成这项工作。耻辱...
我遇到了一个问题,实际上,Microsoft 实施了一个难以绕过的缓解ProcessSignaturePolicy ,这是一个严峻的挑战。所以总而言之,我们不能注入代码,也不能注入 DLL,也不能劫持反恶意软件可执行文件(例如 DLL)。
不幸的是,微软在那里允许了一个小缺陷。作为受信任的安装程序或任何启用了 SeRestorePrivelege 的进程,我们被允许对 C:\ProgramData\Microsoft\Windows Defender\Platform <- 此文件夹包含带有一些 DLL 的 windows Defender 可执行文件的写入权限。我通过逆向工程注意到 ProcessSignaturePolicy 直到所有的windefend dll都被加载后才被启用。这意味着如果我们在进程初始化时加载了一个 DLL,我们可以在 Windows Defender 进程中执行任意代码。我还注意到 dll 加载行为存在一个小缺陷。
在 Windows Defender 加载 dll 之前,它会尝试使用 WinVerifyTrusted 验证文件的完整性,我注意到此功能存在一个小缺陷。
一旦 Windows Defender 启动它就会查询
C:\ProgramData\Microsoft\Windows Defender\Platform 用于文件夹,将根据字符串版本确定工作目录,我们以目录查询为例返回以下结果
4.18.2106.6-0
4.18.2107.4-0
4.18.2108.2-0
在这种情况下,Windows Defender 将使用最新版本 4.18.2108.2-0。
在这种情况下,Windows Defender 会验证 MpSvc.dll 和 MpClient.dll 的真实性
我通过一些 RE 注意到,如果 WinVerifyTrusted 返回失败值,则 MpSvc.dll 将立即从以前的版本字符串加载
老实说,这非常适合防病毒软件,如果我是微软,我肯定会考虑解决这个问题。
旁注,我还有另一个障碍。在中创建文件
%ProgramData%\Microsoft\Windows Defender\Platform 并不像我想象的那么容易,
WdFilter.sys 是一个内核模式的微型过滤器驱动程序,专门用于保护 Windows Defender 文件。允许 Windows Defender 服务关闭的相同缺陷也将允许我们卸载驱动程序,因为 fs 驱动程序似乎没有任何“特殊”错误控制,所以如果它被关闭。Windows 不会蓝屏,将继续正常运行,因此我们将被允许在 %ProgramData%\Microsoft\Windows Defender\Platform中删除任意二进制文件
综上所述,可以采取以下步骤在 Windows Defender 防病毒软件中加载恶意 dll。
1. 捕获 TrustedInstaller 令牌并模拟它。
2. 停止 AV 并使用ChangeServiceConfig2W从服务中删除 PsProtectSignerAntimalware-Light 。
3. 创建
%ProgramData%\Microsoft\Windows Defender\Platform\10.18.3009.5-0\MpSvc.dll(mpsvc.dll 必须是一个目录,这样我们才能导致 WinVerifyTrust 失败)
4. 将我们的恶意 dll 放入
%ProgramData%\Microsoft\Windows Defender\Platform\8.18.3009.5-0
5. 使用StartService启动 WinDefend
6. 加密用户文件并强制他们支付赎金。
7.如果他们付款,请务必解密,享受并重复!
你可以在这里找到一个小的概念证明
https://github.com/klinix5/WinDefendInjectPoC
本文系外文翻译,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文系外文翻译,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有