Phant0m | Windows事件日志终结者
Svchost在实现所谓的共享服务进程中至关重要,多个服务可以共享一个进程以减少资源消耗。将多个服务组合到一个进程中可以节省计算资源,这一考虑对NT设计者来说尤为重要,因为创建Windows进程比其他操作系统(如Unix系列)需要更多时间和内存。
这简单来说意味着:在Windows操作系统上,svchost.exe管理服务,服务实际上作为线程运行在svchost.exe下。Phant0m针对事件日志服务,找到负责事件日志服务的进程,然后检测并终止负责事件日志服务的线程。因此,尽管事件日志服务在系统中看似在运行(因为Phant0m没有终止进程),但实际上并未运行(因为Phant0m终止了线程),系统也不会收集日志。
工作原理及使用方法
检测事件日志服务
Phant0m使用两种不同的选项来检测事件日志服务的进程ID。第一种是通过SCM(服务控制管理器)检测,第二种是通过WMI(Windows管理规范)检测。你可以在main.cpp文件中更改以下行,选择Phant0m检测事件日志服务进程ID的方法。
例如,如果你希望通过SCM检测进程ID,应该按如下方式编辑(不要同时设置所有值,只设置你想要的一种技术):
// PID检测技术配置部分
#define PID_FROM_SCM 1 // 如果设置为1,将从服务管理器获取事件日志服务的PID
#define PID_FROM_WMI 0 // 如果设置为1,将从WMI获取事件日志服务的PID
例如,如果你希望使用技术1终止线程,应该按如下方式编辑(不要同时设置所有值,只设置你想要的一种技术):
// TID检测和终止技术配置部分
#define KILL_WITH_T1 1 // 如果设置为1,将使用技术1。更多信息请访问:https://github.com/hlldz/Phant0m
#define KILL_WITH_T2 0 // 如果设置为1,将使用技术2。更多信息请访问:https://github.com/hlldz/Phant0m
检测和终止线程
Phant0m使用两种不同的选项来检测和终止事件日志服务的线程。
技术1
在运行Windows Vista或更高版本的机器上,当每个服务注册时,服务控制管理器(SCM)会为服务分配一个唯一的数字标签(按升序)。然后,在服务创建时,该标签被分配给主服务线程的TEB。这个标签随后会传播到主服务线程创建的每个线程。例如,如果Foo服务线程创建了一个RPC工作线程(注意:RPC工作线程不使用线程池机制,稍后会详细介绍),该线程将具有Foo服务的服务标签。
因此,在这种技术中,Phant0m 将使用 NtQueryInformationThread API 检测事件日志服务的线程,以获取线程的 TEB 地址并从 TEB 中读取 SubProcessTag。然后它会终止与事件日志服务相关的线程。这种技术的代码在 technique_1.h
文件中。
技术-2
在这种技术中,Phant0m 检测与线程相关的 DLL 名称。Windows 事件日志服务使用 wevtsvc.dll
。完整路径是 %WinDir%\System32\wevtsvc.dll
。如果线程正在使用该 DLL,那么它就是 Windows 事件日志服务的线程,然后 Phant0m 会终止该线程。这种技术的代码在 technique_2.h
文件中。
使用方法
你可以将 Phant0m 作为独立的 EXE 文件使用,也可以作为反射式 DLL 使用。在 Microsoft Visual Studio 中打开项目,进行设置(选择检测和终止技术)并编译。你还可以将反射式 DLL 版本与 Cobalt Strike 一起使用,为此仓库中有一个 Aggressor 脚本文件(phant0m.cna)。
在 Cobalt Strike 的 Aggressor 脚本(phant0m.cna)的执行类型中使用了 bdllspawn
的 Fork 和注入方法。如果你想将 Phant0m 注入到现有进程并运行,你可以查看这个项目(https://github.com/rxwx/cs-rdll-ipc-example)并轻松实现。你还可以使用 Donut 将代码转换为 DLL,然后转换为 Shellcode。
注意:该项目仅支持 x64 架构。
特别感谢提到 Phant0m 的人
- 使用 Sysmon 和 Azure 安全中心检测内存攻击 - https://azure.microsoft.com/tr-tr/blog/detecting-in-memory-attacks-with-sysmon-and-azure-security-center/
- Invoke-Phant0m 实验 - http://www.insomniacsecurity.com/2017/08/27/phant0m.html
- 事件日志篡改第 1 部分:破坏事件日志服务 - https://medium.com/@7a616368/event-log-tampering-part-1-disrupting-the-eventlog-service-8d4b7d67335c
- 雷达下飞行 - https://www.exploit-db.com/docs/english/45898-flying-under-the-radar.pdf?rss
- 审计和日志记录的五十种色调 - https://gallery.technet.microsoft.com/Denetim-ve-Loglamann-Elli-cbed0000
- 通过暂停事件日志服务线程禁用 Windows 事件日志 - https://www.ired.team/offensive-security/defense-evasion/disabling-windows-event-logs-by-suspending-eventlog-service-threads
- 事件日志服务 – 在攻防之间 - https://blog.cybercastle.io/event-log-service-between-offensive-and-defensive/
- 追踪事件日志掩盖 - https://malwarenailed.blogspot.com/2017/10/update-to-hunting-mimikatz-using-sysmon.html
- 防御规避:Windows 事件日志记录(T1562.002)- https://hacker.observer/defense-evasion-windows-event-logging-t1562-002/
- 使用 YARA 规则攻克 Windows 事件日志记录 - https://labs.jumpsec.com/pwning-windows-event-logging-with-yara-rules/
- 各种笔记 - 针对攻击者事件日志技巧的事件响应 - https://hannahsuarez.github.io/2019/IncidentResponseNotes-Attackers-EventLog/