安全产品致盲
“安全产品致盲”不是单指结束杀毒进程,而是攻击者让防护体系看不见、报不出、传不上去或无法处置的一组动作。目标可能是 AV、EDR、日志、云端信誉、更新服务、网络传感器,也可能是它们之间的通信链路。
先说结论:
关闭进程只是最显眼的一种
更隐蔽的致盲会保留进程外观
却让采集、检测、上报、更新或响应能力失效
因此,“安全软件进程还在”不等于安全产品健康。
能力链
可以把终端安全产品抽象成五个连续环节:
传感器采集
↓
本地分析与策略执行
↓
事件缓存和日志记录
↓
网络上报与云端判定
↓
响应、隔离与恢复
攻击者只需破坏其中一个关键环节,就可能制造检测缺口。例如驱动仍在但用户态服务无法读取事件;服务仍在但证书、代理或防火墙规则阻断上报;控制台仍显示设备在线,但策略和病毒库长期无法更新。
常见手法
停止或终止组件
最直接的方式是终止进程、停止服务、禁用驱动或改变启动类型。优点是见效快,缺点是痕迹明显,容易触发自保护和看门狗。
高价值检测点包括:
- 非产品自身进程打开安全进程的终止权限。
- 服务停止、启动类型变化与提权事件紧邻。
- 安全进程反复退出和重启。
- 驱动卸载、设备对象消失或系统重启后组件未恢复。
篡改配置与策略
攻击者可能关闭实时防护、排除特定路径或进程、降低日志级别、禁用防篡改、改变扫描范围,或者利用应用控制和软件限制策略反向禁止安全组件启动。
这种方式比直接杀进程更隐蔽,因为系统可能认为它只是在执行一项“管理员策略”。判断关键是:谁改的、从哪里改的、是否经过受管控制面,以及策略目标是否集中指向安全工具。
反用 SRP 禁止安全组件启动
SRP(Software Restriction Policies,软件限制策略)本来用于企业管控软件运行,但高权限攻击者也可能反向利用它,把安全产品组件加入禁止运行规则。需要重点关注的策略位置是:
HKLM\SOFTWARE\Policies\Microsoft\Windows\Safer\CodeIdentifiers
可以把相关结构抽象理解为:
CodeIdentifiers
├── DefaultLevel
├── PolicyScope
├── TransparentEnabled
├── 0\Paths\{Rule-GUID}
│ ├── ItemData
│ ├── SaferFlags
│ ├── Description
│ └── LastModified
└── 262144\Paths\{Rule-GUID}
其中 0 通常表示 Disallowed 规则级别,262144 是十进制的 0x40000,对应 Unrestricted。ItemData 记录被规则命中的文件或目录路径,常见目标可能是安全软件 EXE、服务程序、更新器或安装目录。
研判时不能只看单独一个 SaferFlags 就判断规则语义,应结合父级安全级别、规则类型、ItemData、DefaultLevel 和策略来源一起看。还要注意,.sys 路径出现在 SRP 规则里,并不等于所有 Windows 版本、所有启动阶段都会阻止驱动加载;最终效果还会受到服务配置、代码完整性、WDAC、HVCI 和启动时序影响。
这类致盲链路可以抽象为:
获得管理员或 SYSTEM 权限
↓
枚举安全产品目录和关键组件
↓
在 0\Paths\{GUID} 下创建限制规则
↓
ItemData 指向安全软件 EXE、更新器、服务程序或目录
↓
策略刷新,或等待服务 / 主机重启
↓
安全组件后续启动时被系统策略拒绝
几个边界要一起记住:修改 HKLM 下策略通常需要高权限;已经运行的组件不一定立即退出,效果可能在服务重启、产品升级或主机重启后才暴露;域 GPO、MDM 或配置管理平台可能覆盖本地篡改;目录级规则影响范围大,但也更容易受到安装路径、升级路径和重解析点影响;安全产品防篡改、WDAC 和应用控制策略会改变最终结果。
检测时可以重点关联:
非受管进程写入 Safer\CodeIdentifiers
+
新增或修改 0\Paths\{GUID}\ItemData
+
目标命中安全产品路径
+
策略刷新、服务重启或安全组件启动失败
建议采集修改进程、用户、完整性级别、父进程和来源;记录新旧注册表值、规则 GUID、父级安全级别和规范化后的 ItemData 路径;统计短时间创建的规则数量和涉及的安全厂商数量;再关联后续策略刷新、服务重启、启动失败、更新停止和中心心跳下降。还应比较本地策略与域 GPO、MDM、配置管理平台之间是否出现漂移。
正常管理员也可能通过 GPO 或 MDM 限制软件运行,收敛误报时应先核对策略来源、操作者、维护窗口和审批工单;再判断 ItemData 是否集中命中 EDR、AV、日志代理、更新器或恢复工具;关注短时间创建多个随机 GUID、覆盖多家安全产品的批量特征;最后结合安全服务启动失败、策略或特征停止更新、中心心跳中断来确认影响。即使写入者是微软签名白进程,只要本地策略偏离受管基线,也不能直接放行。
阻断更新、信誉与遥测
通过防火墙、代理、DNS、hosts、路由或证书配置阻断安全产品访问云端,可以让它无法更新特征、查询信誉、上传事件或接收响应命令。
此时终端上的 UI 可能仍然正常,但会出现:
- 病毒库、引擎或策略版本长期落后。
- 控制台心跳间歇或只有部分通道在线。
- 本地事件存在,中心平台缺失。
- 对更新和信誉域名的解析或 TLS 连接持续失败。
破坏文件、注册信息与依赖
删除、替换、重命名组件,修改 ACL 或所有者,破坏注册表和 WMI 状态,都可能让产品无法启动或升级。攻击者也可能只破坏某个关键依赖,使故障看起来像普通软件损坏。
对已签名组件的修改通常会破坏签名;但攻击者可以替换配置、侧加载依赖或改变加载路径,因此需要同时校验文件完整性和模块加载。
干预用户态监控
部分攻击会在进程内取消 Hook、绕过用户态拦截、直接使用更底层接口,或让恶意代码运行在传感器覆盖不足的宿主中。此类动作不一定“关闭 EDR”,而是让特定行为绕过采集。
如果同一事件在内核遥测、ETW、系统日志和产品日志之间出现矛盾,应考虑采集路径被绕过或受损,而不是简单认为“行为没有发生”。
滥用高权限驱动
合法签名但存在已知漏洞的驱动可能被用来获得内核读写能力,随后针对安全进程、回调、驱动和受保护进程实施更强干预。常见概念是 BYOVD。
这类风险的关键不只是“加载了一个签名驱动”,而是:
- 驱动是否在已知易受攻击驱动清单中。
- 谁在什么路径释放并加载它。
- 加载后安全组件是否立即异常。
- 系统是否启用了易受攻击驱动阻止规则和 HVCI。
日志与审计致盲
攻击者可能停止日志服务、修改审计策略、清除特定日志、缩短保留、破坏转发或制造大量噪声。成熟攻击更可能只削弱与后续动作相关的日志,而不是清空所有内容。
判断时应比较本地日志、中心转发、网络侧记录和身份平台事件。单点日志缺失可能是故障,多源数据在同一时刻共同断层才更有说服力。
规避扫描而不关闭产品
排除项、受信任路径、合法签名宿主、白加黑、内存执行和安装扩展都可能让安全产品保持运行,却不再检查关键载荷。这属于信任链滥用,和直接停用工具一样应归入防御削弱。
LSASS 或高权限进程注入致盲
部分木马会尝试把代码写入 lsass.exe、winlogon.exe、services.exe、svchost.exe 等高权限或长期运行进程。这里需要区分两种目的:
访问 LSASS
→ 凭据、令牌或认证材料获取
注入安全相关 / 高权限宿主
→ 借用进程上下文、隐藏载荷或绕过部分用户态监控
注入本身不一定直接“关闭”安全产品,但可能通过以下方式形成致盲效果:
- 让恶意逻辑运行在安全产品较少重点关注的合法进程上下文中;
- 借助高权限进程访问安全组件、策略和受保护资源;
- 通过进程内执行、内存加载或线程控制,减少独立恶意进程暴露;
- 干扰用户态 Hook、事件采集或安全产品与目标进程之间的观测链路;
- 为后续停止服务、修改策略或加载驱动提供更高权限。
现代 Windows 对 lsass.exe 等目标可能启用 PPL、Credential Guard 等保护,因此注入未必成功。检测时应同时关注成功和失败事件:攻击者反复申请 PROCESS_VM_WRITE、PROCESS_CREATE_THREAD、PROCESS_DUP_HANDLE 等访问权限,即使最终返回拒绝,也能说明其正在尝试突破高价值进程边界。
重点关联:
提权 / 启用 SeDebugPrivilege
→ NtOpenProcess(LSASS 或其他高权限进程)
→ VirtualAllocEx / NtWriteVirtualMemory
→ APC、远程线程或线程上下文修改
→ 安全服务、遥测或后续防护能力异常
不能仅凭 OpenProcess(lsass.exe) 判定“安全产品被致盲”,需要查看目标进程是否为安全组件宿主、是否发生实际内存执行,以及之后是否出现采集缺失、告警不上报或保护策略失效。
白驱动与 BYOVD 致盲
BYOVD(Bring Your Own Vulnerable Driver)是攻击者携带合法签名但存在已知漏洞、设计缺陷或过高权限接口的驱动,并利用它获得内核级操作能力。与普通用户态注入相比,BYOVD 的危险之处在于它可能直接干预安全产品依赖的内核边界:
释放或加载异常驱动
→ 与驱动设备对象通信
→ 获取内核读写或进程操作能力
→ 终止 / 挂起安全进程、修改回调或绕过保护
→ 关闭、削弱或伪造安全产品状态
可能的致盲目标包括:
- 安全产品用户态服务和 Agent;
- 安全产品驱动、设备对象和内核回调;
- 受保护进程、进程句柄和线程控制;
- ETW、日志、文件过滤和网络过滤相关能力;
- EDR 自保护、隔离和响应模块。
常见线索包括 NtLoadDriver、服务注册、异常 .sys 文件、驱动设备对象创建,以及驱动加载后安全服务或遥测突然中断。需要注意,“签名有效”只说明驱动满足某种签名校验,不等于驱动安全;应结合驱动哈希、厂商、版本、漏洞状态、加载路径和使用时序判断。
检测重点:
- 用户目录、临时目录或随机路径释放并加载驱动;
- 非正常安装、更新或硬件管理流程触发驱动加载;
- 驱动加载后短时间内出现安全进程终止、句柄异常或遥测断层;
- 驱动不在企业软件清单、易受攻击驱动阻止策略或批准的硬件驱动范围内;
- 同一进程同时完成提权、驱动加载、服务操作和安全产品配置修改。
如果怀疑内核边界已被破坏,不应只依赖被影响主机上的用户态日志,应结合内核日志、驱动清单、网络侧心跳、中心平台接收情况和离线取证进行确认。
为什么木马会写入 Program Files
木马在完成提权后,有时会把自身或组件写入 C:\Program Files、C:\Program Files (x86) 或其子目录。常见动机不是“Program Files 天然安全”,而是利用它的目录外观、权限和软件生态:
伪装成已安装软件
Program Files 是用户和管理员习惯认可的软件安装位置。木马可以创建看似正常的产品目录、版本目录和组件结构,让文件更像正式安装的软件,降低人工排查时的异常感。
利用高权限和安装语义
普通用户通常不能直接向 Program Files 写入文件。木马选择该路径,往往说明它已经获得管理员、SYSTEM 或安装服务上下文,或者借助了一个本来就具备安装权限的进程。
因此,下面的组合比“文件位于 Program Files”本身更有价值:
提权 / 令牌操纵
→ 创建 Program Files 子目录
→ 写入 EXE、DLL、配置或驱动
→ 创建服务、计划任务或启动项
借用软件目录和加载关系
木马可能把黑 DLL、配置或后续模块放入某个软件目录,利用白加黑、DLL 搜索顺序或插件机制启动。也可能伪造软件名称、版本信息和目录层级,使进程路径看起来像合法产品。
降低清理和重启后的不确定性
相较于随机临时目录,Program Files 下的文件更可能被安装逻辑、服务、升级器或计划任务长期保留。木马还可能把主模块、配置、更新组件和备用载荷分开放置,形成持久化和恢复链。
不能把路径当作信任凭证
Program Files 不会自动赋予文件签名、白名单身份或系统信任。以下情况仍然应高度关注:
- 目录由用户目录进程、脚本解释器或异常安装程序创建;
- 文件没有有效签名,或签名者与产品目录不匹配;
- 原始文件名、产品名、版本信息与路径不一致;
- 同目录出现未签名 DLL、异常配置或刚落地的驱动;
- 文件写入后立即创建服务、计划任务、C2 连接或进程注入;
- 目录名称仿冒知名软件,但缺少完整安装文件和正常升级关系。
检测时应记录创建者、写入权限、父子进程、文件时间线、签名、哈希、模块加载和持久化关系,而不是简单把 Program Files 加入白名单。
抽象案例
反向利用软件限制策略
某个已取得高权限的进程没有终止任何安全软件,而是在系统策略区域创建多条“禁止运行”规则,目标集中指向若干安全产品的程序目录、服务组件和驱动路径。随后它触发策略刷新。
短期内,正在运行的部分组件可能看起来正常;但在服务重启、产品升级或主机重启后,系统会按策略拒绝相应组件加载。其危险之处在于,拦截动作由 Windows 自己执行,安全软件可能只表现为启动失败。
防守侧应关注:
- 非域策略引擎、非受管工具直接修改软件限制或应用控制策略。
- 短时间内批量写入多个安全厂商路径。
- 策略写入后紧跟强制刷新、服务重启或系统重启。
- 本地策略与域控制面、变更记录不一致。
阻断云端但保留本地外观
另一个场景中,攻击者新增出站阻断规则,只针对系统更新、安全产品更新和云端信誉地址。安全界面仍显示“实时保护已开启”,但特征更新停滞,未知文件无法查询信誉,告警也不能及时上传。
这类情况需要从网络控制面检查规则创建者、目标域名或服务、规则生效时间,并与终端最后更新时间和最后上报时间关联。
提权后的组合清场
更完整的攻击链可能是:
获得管理员 / SYSTEM
↓
枚举安全产品、服务、驱动和更新通道
↓
选择停用、策略封禁、网络阻断或驱动干预
↓
确认告警和自保护是否失效
↓
再执行凭据访问、持久化、横向移动或数据外传
所以安全产品异常往往不是孤立故障,而是提权之后、核心恶意动作之前的“清场”阶段。
检测框架
看“健康度”而不只看进程
安全产品健康度至少应覆盖:
| 层面 | 检查项 |
|---|---|
| 进程与服务 | 运行状态、退出原因、自保护、启动类型 |
| 驱动与传感器 | 加载状态、版本、回调或事件是否持续产生 |
| 策略 | 来源、版本、关键开关、排除项、最近修改者 |
| 内容更新 | 引擎、规则、病毒库和易受攻击驱动清单版本 |
| 网络 | 心跳、事件上传、信誉查询、更新通道 |
| 数据质量 | 事件速率、字段完整性、时间连续性、跨源一致性 |
| 响应 | 隔离、查杀、远程命令和回滚是否可用 |
高风险关联
以下时序组合应优先升级:
- 提权成功后立即枚举并修改安全产品。
- 用户可写目录进程修改系统级防护策略。
- 安全产品排除项新增后,同一路径马上出现新载荷。
- 异常驱动加载后,安全服务、日志或网络心跳消失。
- 防火墙、代理或 DNS 变化只影响安全与更新基础设施。
- 本地仍有事件,中心平台在同一时刻停止接收。
- 多家安全产品或多个组件被同一进程批量针对。
基线与误报
管理员、软件升级、故障修复和企业策略部署也会改变安全产品。收敛误报时应核对:
- 变更是否来自批准的管理平台或签名脚本。
- 是否有工单、维护窗口和对应操作者。
- 策略是否由域或 MDM 下发,而不是终端本地私建。
- 修改是否与正常升级版本、官方卸载流程一致。
- 动作之后是健康恢复,还是传感器和上报持续下降。
不要用静态进程白名单过滤全部管理工具。合法工具被非预期父进程、非预期账户或非维护窗口调用,同样值得检查。
调查与处置
调查顺序
- 确认异常是单个组件故障、网络中断,还是多层能力同时失效。
- 以最后正常心跳和第一条异常为时间锚点,查找提权、策略、服务、驱动和网络变化。
- 对比本地与中心日志,确定是“没采到”还是“采到了但没传上去”。
- 查明修改主体、父进程、用户、令牌、落地文件和远程来源。
- 检查致盲之后发生的凭据访问、注入、持久化、横向移动和外传。
- 从可信介质或受管控制面恢复策略与组件,并验证端到端遥测和响应能力。
处置原则
- 不要只手工重启安全服务;如果策略、驱动或网络阻断仍在,服务会再次失效。
- 不要只删除最初载荷;致盲通常为后续动作服务,必须扩大时间线和影响范围。
- 恢复前保存策略、注册表、驱动、日志和网络配置证据。
- 若内核或产品自保护可能已被破坏,优先隔离主机并从可信环境取证。
- 恢复后验证事件采集、中心上报、策略更新、信誉查询和远程响应,而不只是看 UI 变绿。
缓解
- 启用防篡改、HVCI 和易受攻击驱动阻止规则,并保持系统与产品更新。
- 把安全产品配置纳入受管控制面,监控本地策略与中心策略漂移。
- 对安全服务、驱动、策略、排除项和防火墙规则建立独立审计。
- 让关键日志实时转发到终端之外,避免主机失陷后唯一证据被清除。
- 使用独立网络监控验证终端遥测通道,发现“进程在线但数据消失”。
- 限制本地管理员,保护产品卸载口令、管理令牌和部署凭据。
- 对白加黑、CustomAction 和其他合法宿主保留行为分析,避免签名即全信任。
ATT&CK 对照
| Technique | 适用含义 |
|---|---|
| T1562.001 Disable or Modify Tools | 停止、修改、绕过或破坏安全工具 |
| T1562.002 Disable Windows Event Logging | 停止或削弱 Windows 事件记录 |
| T1562.004 Disable or Modify System Firewall | 篡改防火墙以阻断安全通道或放行攻击流量 |
| T1562.006 Indicator Blocking | 阻止或修改遥测、日志与检测所需信息 |
| T1070 Indicator Removal | 清除日志、文件或其他入侵痕迹 |
具体标签应跟随证据选择。例如新增防火墙规则以阻断安全云端时,可同时考虑防火墙修改和工具削弱;不要为了覆盖面把所有子技术都机械打上。
小结
安全产品致盲的本质,是破坏安全能力链,而不一定让安全软件消失。最危险的状态往往是:
进程还在
界面正常
但传感器不采、策略不执行、事件不上报、特征不更新
因此检测和恢复都必须从进程状态扩展到驱动、策略、日志、网络、数据质量和响应闭环,并把致盲前后的提权与后续攻击行为串成完整时间线。