系统全局环境变量白名单的核心是“控源、限域、可验”,聚焦PATH等关键变量,通过可信路径声明、注册表固化、禁用嵌套引用、阻断用户级叠加及监控告警实现参数污染防御。
配置系统全局环境变量审计白名单,核心不是“加白”,而是“控源、限域、可验”——重点防的是通过PATH劫持、变量覆盖、动态路径注入等手段实施的参数污染类入侵(如命令劫持、提权执行、隐蔽持久化)。白名单在此场景中,本质是可信路径与可信变量的显式声明清单,而非简单放行规则。
全局环境变量中真正影响命令解析与进程启动安全的,主要是PATH,其次为JAVA_HOME、NODE_ENV(若被服务级脚本直接引用)、PYTHONPATH等少数几个。其他如USER、HOSTNAME、PWD等属只读系统变量,无需也不应纳入白名单管理。
白名单需聚焦以下两类实体:
不依赖图形界面“添加”,而用可审计、可回滚的方式落地:
$env:Path -split ';' | ForEach-Object { if (Test-Path $_ -PathType Container) { $_ } else { "⚠️ 无效: $_" } } > C:auditpath_baseline.txt
icacls "$_" 查 Users 组无写权限)、是否由可信软件安装(查官网/安装包哈希)HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSession ManagerEnvironmentSafePath(字符串值),填入审核后的路径,用分号连接;后续审计脚本可比对Path与SafePath是否一致白名单本身不自动拦截,必须配合策略生效:
reg export "HKLMSYSTEMCurrentControlSetControlSession ManagerEnvironment" C:auditenv_snapshot.reg,与基线diff配置后不能只看“能运行命令”,要看防御逻辑是否闭环:
$env:Path = "C:badpath;" + $env:Path,再运行whoami——应成功;但随后启动的服务(如Windows Update)仍使用原始系统PATH,不受会话级污染影响EnvironmentPath完全一致,不含用户临时拼接内容