揭秘黑科技: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通信流程

  1. 客户端调用wscapi.dll中的公开API
  2. 通过RPC与wscsvc服务通信
  3. wscsvc服务验证调用者身份和完整性
  4. 执行相应操作并返回结果

4. defendnot技术实现详解

4.1 核心原理

  • 模拟构建IWscAVStatus类
  • 通过COM接口与WSC服务交互
  • 关键虚函数:
    • Register:注册防病毒产品
    • UpdateStatus:更新产品状态

4.2 具体实现步骤

  1. 进程注入

    • 使用defendnot-loader.exe将defendnot.dll注入到Taskmgr.exe
    • 选择Taskmgr.exe的原因是其符合WSC的检测要求
  2. COM接口调用

    CoCreateInstance(CLSID_WscIsv, NULL, CLSCTX_LOCAL_SERVER, IID_IWscAVStatus, (void**)&wscAVStatus);
    
  3. 注册安全产品

    wscAVStatus->Register(L"DefendNot", L"1.0.0", WSC_SECURITY_PRODUCT_TYPE_ANTIVIRUS);
    
  4. 更新产品状态

    wscAVStatus->UpdateStatus(WSC_SECURITY_PRODUCT_STATE_ON);
    

4.3 底层调用链

  1. Register函数调用链

    • defendnot.dll → wscisvif.dll!_IWscAVStatus4::Register
    • → CWscIsv::RegisterAV
    • → wscapi!wscRegisterSecurityProduct
    • → RPC调用wscsvc服务
  2. 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 选择标准

  1. 位于System32或SysWOW64目录
  2. 具有有效的数字签名
  3. PE结构符合WSC要求
  4. 不包含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 注入方法

  1. 使用Process Hacker等工具注入
  2. 选择符合条件的宿主进程
  3. 加载defendnot.dll并调用导出函数

8. RPC通信分析

8.1 关键RPC方法

  • s_wscUnregisterSecurityProduct
  • s_wscRegisterSecurityProduct
  • s_wscUpdateProductStatus

8.2 捕获工具

使用RPCMon等工具可捕获通信内容:

  1. 启动RPCMon监控
  2. 运行defendnot工具
  3. 分析捕获的RPC调用

9. 防御与检测

9.1 检测方法

  1. 监控wscsvc服务的RPC调用
  2. 检查异常进程注入行为
  3. 验证WSC注册产品的合法性

9.2 防御措施

  1. 启用受保护的进程
  2. 配置AppLocker限制进程注入
  3. 监控系统关键目录的修改

10. 总结

Defendnot工具通过深入研究WSC服务的未公开API,实现了对Windows Defender的禁用。这项技术揭示了Windows安全机制中一些有趣的实现细节:

  1. WSC服务通过COM接口与安全产品交互
  2. 严格的调用者验证机制
  3. RPC通信作为底层传输方式
  4. 宿主进程选择的特殊要求

理解这些机制不仅有助于安全研究,也能帮助开发更强大的安全产品。同时,微软可能会在未来版本中修改这些实现细节,因此相关技术需要持续跟进研究。

相似文章
相似文章
 全屏