ring3层摘取令牌致盲火绒
一、前言
今天就讲讲怎么ring3层致盲火绒吧,这是一个很老的技术,大概22年的时候就有公开文章进行讲解了,不过关它针对的是defend,在我实际测试中依然对火绒有效(2月份的时候就已经发现依然有效了,但是我一直不太想更新,哈哈,因为写东西也比较麻烦,再加上这个其实国内也有很多大佬师傅早就讲过了)。
二、背景介绍
这个技术大概是首发在elastic的一篇研究文章(https://elastic.github.io/security-research/whitepapers/2022/02/02.sandboxing-antimalware-products-for-fun-and-profit/article/),但是现在的话已经找不到了。现成的项目还能找到代码
- pwn1sher/KillDefender最早放出来的 PoC,直接对 MsMpEng.exe 调用 OpenProcessToken + AdjustTokenPrivileges + SetTokenInformation ,把令牌权限全部移除并把完整性设为 Untrusted,Defender 会立即“哑巴”。需要 SYSTEM 权限才能运行。
仓库地址:https://github.com/pwn1sher/KillDefender - Octoberfest7/KillDefender
在前者基础上做了代码整理与稳定性改进,同样通过“剥光”令牌权限让 Defender 失效,也是 SYSTEM 权限前提。
仓库地址:https://github.com/Octoberfest7/KillDefender - Octoberfest7/KDStab
把 KillDefender 的剥令牌逻辑做成 Cobalt Strike 的 BOF(Beacon Object File),方便在红队行动中内存加载执行,进一步降低落地被杀风险。
仓库地址:https://github.com/Octoberfest7/KDStab
并且原来的文章我找到了pdf存档
https://archive.orkl.eu/60c5c1324abb7a0057fb05322fae83d783810ac2.pdf
三、简单介绍原理
Windows 令牌(Token)是一种安全凭证。它标识了你的身份以及你被允许执行的操作。通常情况下,当用户运行一个进程时,该进程会以该用户的令牌运行,并可以执行该用户能够执行的任何操作。令牌中一些最重要的数据包括:
- 用户身份
- 组成员身份(例如:Administrators)
- 特权(例如:SeDebugPrivilege)
- 完整性级别(Integrity level)
令牌是 Windows 授权的关键部分。每当 Windows 线程访问一个可安全对象(securable object)时,操作系统都会执行安全检查。它会将线程的有效令牌(effective token)与被访问对象的访问控制描述符(Access Control Descriptor, ACD)进行比较。
你可以在以下资源中了解更多关于令牌的内容:
Windows 提供的 OpenProcessToken 用于获取进程令牌的句柄。MSDN 文档声称,调用者必须拥有 PROCESS_QUERY_INFORMATION 权限;对受 PPL(Protected Process Light)保护的进程,则只能拿到 PROCESS_QUERY_LIMITED_INFORMATION——似乎意味着“拿不到完整令牌”。
但文档写得并不准确。实测表明,仅凭 PROCESS_QUERY_LIMITED_INFORMATION 就足以调用 OpenProcessToken 成功,把 PPL 进程的令牌句柄拿回来。James Forshaw 曾在一篇文章里用内核反编译代码解释过这一偏差:NtOpenProcessToken 实际只校验进程句柄的最低限度访问权,而不管你是不是“受限信息”级别。
拿到句柄只是第一步。令牌本身也是一个带有安全描述符的可受保护对象,后续任何操作(TOKEN_QUERY、TOKEN_WRITE、TOKEN_IMPERSONATE…)都要再走一次常规访问检查:系统会把调用线程当前有效令牌的权限,与目标令牌安全描述符里要求的访问权限做比对,只有比对通过才真正授予对应权限。换句话来说OpenProcessToken 的门槛比文档低。
总结成一句话就是,我们的Openprocess还是可以拿到PPL进程的令牌,我们可以将令牌的权限全部移除从而达到致盲的效果。(之前了)
用这种技术,攻击者可以强制移除杀软令牌中的所有特权,并将其完整性级别从 System 降至 Untrusted。
被削弱到 Untrusted 完整性级别后,受害进程将无法访问系统上的大多数可安全对象资源,从而在不终止进程的情况下悄然使其丧失能力。
Elastic从 2022 年 1 月 5 日向微软安全响应中心(MSRC)披露了这个漏洞,并提出了修复方案。微软他们在 2022 年 1 月 24 日回复称,他们认为该漏洞的严重程度为中等,不会通过安全更新来处理。不过,他们可能会在未来版本的 Windows 中处理这个问题。
当然这种思路对我们的非PPL进程也肯定有用(火绒)
国内的话其实也早就有师傅提出和讲解这个漏洞来致盲杀软了,比如老鑫师傅在24年的公众号中列举的手法就包括这一项
https://mp.weixin.qq.com/s/iwF92aEaAD5TVsvnan9SJQ?scene=1
四、演示
完整代码
https://github.com/Octoberfest7/KillDefender
简单把defend名字改成火绒的就可以了
未运行前,火绒令牌完整性为system
然后我们使用未做任何内存处理的loader上线执行命令 验证火绒的内存查杀功能有效
然后我们开始尝试运行致盲火绒程序
此时火绒的令牌完整性降低为不可信
此时点击快速查杀则会发现根本没有用处,上线再执行命令就不会被内存查杀
但是文件实时防护没有失效,因为文件实时防护利用的是微过滤驱动(我们fltmc可以看见,也有手法利用这个机制致盲的,后面我再写)
本文作者:lingxisec
本文链接:https://blog.lingxisec.com/archives/ring3-layer-token-stealing-blind-huorong.html
版权声明:本博客所有文章除特别声明外,均默认采用 CC BY-NC-SA 4.0 许可协议。
法律说明:
文章声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由用户承担全部法律及连带责任,文章作者不承担任何法律及连带责任,本人坚决反对利用文章内容进行恶意攻击行为,推荐大家在了解技术原理的前提下,更好的维护个人信息安全、企业安全、国家安全,本文内容未隐讳任何个人、群体、公司。非文学作品,请勿过度理解,根据《计算机软件保护条例》第十七条,本站所有软件请仅用于学习研究用途。
关于凌曦安全(LingXisec):
凌曦安全团队(LingXi Security Team)成立于 2023 年,专注于 SRC 漏洞挖掘、Web 安全、红蓝攻防、渗透测试、云安全、JavaScript 逆向、应急响应等网络安全技术研究与实战实践。团队成员来自安全厂商、互联网企业、高校和独立研究者,持续分享漏洞分析、攻防案例、云安全研究和安全工具经验,并提供面向零基础学员的网络安全培训,课程采用“零基础红队入门、安服与渗透案例、SRC 漏洞挖掘”三合一体系,通过线上录播、直播课程和社群答疑,结合真实案例、内部靶场、漏洞挖掘活动、简历修改与模拟面试,帮助学员建立系统的安全知识和持续学习能力。同时在 Bilibili 提供免费的网络安全入门与案例讲解视频,致力于推动网络安全技术交流。









