
哎,兄弟们,最近后台私信快被问爆了,十个里有八个都在问:“ETW绕过到底可行不?” 说实话,看到这个问题我嘴角都忍不住抽了一下——这玩意儿哪是“可行不”能简单概括的?简直就是一场“猫鼠游戏”的极限拉扯啊!今天咱就放下那些晦涩的论文腔,以一个干了五六年安全攻防的“老油条”视角,跟大伙儿好好唠唠这个让人又爱又恨的ETW。
咱得先搞明白ETW是个啥玩意儿,你别看它名字挺唬人(Event Tracing for Windows),实际上就是Windows系统里那个啥都爱记一笔的“小本本”,从进程创建、网络连接到文件读写,它恨不得把你电脑上每根汗毛的抖动都记录下来,安全软件正是靠这个“小本本”来发现坏蛋的,而咱们做红队、做渗透的,想安安静静搞点动作,自然就盯上了这个“小本本”——能不能给它涂改液抹了?这就是所谓的“ETW绕过”。
我的真实感受是:绕?能绕!但绝对没那么轻松愉快! 你以为绕过就是改个注册表、调个API?天真!我当初第一次尝试的时候,差点把系统搞崩了蓝屏,当时心里那个卧槽啊,真不是闹着玩的,ETW的核心是内核级别的Provider,你一旦想对它动手,稍有不慎,轻则日志记录异常引起蓝队报警,重则直接引发系统自我保护机制,当场把你揪出来。
要说完全没戏,那是泄气话。目前比较可行的“绕过”思路,我更愿意称之为“欺骗”或“盲区利用”——注意啦,这里可是有深水区的学问!
第一招:Patch Guard的“灰色擦边球”
我知道网上有些文章教大家直接Patch内核里的EtwWrite函数,让它变成啥也不干的“僵尸函数”,兄弟,这可是一条不归路啊!Windows的Patch Guard(内核补丁保护)就像是保安队长,你哪怕动错一个字节,它直接给你来一个“致命蓝屏”(CRITICAL_STRUCTURE_CORRUPTION),这哪是绕过啊,这分明是自杀式袭击!我当时不信邪,用驱动加载器试了一下,好家伙,当场重启,客户的项目差点泡汤,我那个悔啊,大腿都拍青了。这种粗暴的内核Patch,除非你能在VM里完美适配每一个版本,否则绝不可行,风险指数我给满星。
第二招:利用ETW本身的“潜规则”
既然硬的不行,咱来软的,ETW的会话其实有“审计级别”和“权限要求”,很多情况下,攻击者会选择先获取一个SYSTEM权限,然后通过打开一个你懂的句柄,去禁用或模糊特定的日志提供程序,我们经常碰到的,用wmic或Powershell注入,然后恢复原始的状态,这种算是“瞬态绕过”,因为恢复后管理员在Event Viewer里看到的信息依旧是断断续续的,但问题来了,这种绕过高度依赖系统版本,Win10 20H2之后,ETW的检索机制变强了,同时还加了不少“解码器”,你恢复源的时候稍微慢那么一下,就会被EDR抓个正着,那种随时会被发现的紧张感,真的比看恐怖片还刺激,心脏不好的朋友建议慎玩。
第三招:更高级的——双人三足逻辑逃避
哈哈,到这儿肯定有兄弟要问:“你说那么多,到底能不能绕过?” 我的结论是:在特定的前置条件下(比如拿到合法签名驱动、或者利用像ProcMon这样的合法调试接口),你可以做到“不触发”——但你说“完全绕过对抗所有ETW消费者”,那我得泼冷水,目前来看,可行性极低
为什么?因为ETW不仅是一个关于“记录”的机制,它更是一个关于“信任”的体系,微软早就把安全阀值拉满了,你在内存里操作它的元数据,一旦被那些带内核权限的EDR(比如CrowdStrike)嗅探到异常的内存访问,你还没跑路呢,人家SLA预警已经发到SOC大屏上了,我现在做项目,更倾向于“不碰ETW”的横向移动,比如用WMI事件订阅或者Kerberoasting,或者干脆把流量混淆得让ETW看不懂,这叫做“我不绕你,但你也别想看懂我”。
所以啊,兄弟们,别再幻想有一个一劳永逸的ETW绕过脚本了,你要真想搞明白“ETW绕过可行不”,不如老老实实研究PowerShell日志的脚本块日志记录,或者Sysmon的驱动加载,这些才是现代EDR最硬的骨头,那种代码一跑,整个监控瞎掉的时代,在如今的Windows内核面前,早就成了过去式。
真心建议:如果你是在合规的攻防演练中碰ETW,一定要先做“版本适配性测试”,并且准备一个快速回滚机制,别一上来就就追求“全消音”,咱们做安全的,更讲究的是“隐蔽存在”和“最小暴露”,别不当回事,这玩意儿搞不好,拘留所套餐等你哦!行了,今天先说这么多,心里话都抖落出来了,你们要是也有啥有趣的ETW踩坑经历,欢迎底下留言,咱们一起乐呵乐呵!
友情链接,点我看看:
ETW绕过技术深度杂谈,从入门到放弃的全过程
另一种思路:用蓝队思维谈日志防篡改的硬核手段
红队工具箱:那些不需要碰ETW的骚操作大全