powershell 是域环境安全审计的高效工具,聚焦过期账号、弱密码策略、异常权限和未受保护关键组四类高危ad配置,依托原生ad模块分步扫描、自动化调度与告警闭环,并需注意时间属性兼容性、执行环境隔离及人工复核。
powershell 是域环境安全审计的高效工具,尤其适合定期扫描 active directory 中的常见配置风险和权限隐患。关键不在于写复杂脚本,而在于聚焦可验证、易修复的典型漏洞点,并结合 ad 模块与系统内置命令分步执行。
聚焦四类高危AD配置漏洞
日常扫描应优先覆盖以下易被忽视但危害明确的问题:
-
过期/闲置账号:依据
LastLogonDate(推荐)或LastLogonTimestamp查找 90 天未登录且启用的用户,排除管理员组和服务账号 - 弱密码策略对象:检查是否存在未强制密码历史、最小长度低于 8、或允许空密码的 Fine-Grained Password Policy(FGPP)
-
异常权限分配:识别对 Users 或 Domain Controllers OU 具有
WriteDACL、WriteOwner或GenericAll权限的非管理账户 -
未受保护的关键组:确认
Domain Admins、Enterprise Admins等高权限组是否启用了“防止对象被意外删除”(ProtectedFromAccidentalDeletion = $true)
用原生命令快速执行基础扫描
无需第三方模块,仅依赖 Windows Server 自带的 ActiveDirectory 模块即可完成多数检查:
- 查闲置账号:
Search-ADAccount -UsersOnly -AccountInactive -TimeSpan "90",再用Where-Object { $_.Enabled }过滤启用状态 - 查弱密码策略:
Get-ADFineGrainedPasswordPolicy -Filter * | Where-Object { $_.MinPasswordLength -lt 8 -or $_.PasswordHistoryCount -lt 24 } - 查关键组保护状态:
Get-ADGroup "Domain Admins" -Properties ProtectedFromAccidentalDeletion | Select Name,ProtectedFromAccidentalDeletion - 导出结果到 CSV:
... | Export-Csv -Path "C:\ADScan\StaleUsers_$(Get-Date -f yyyyMMdd).csv" -NoTypeInformation
加入自动化与安全闭环
单次扫描价值有限,真正起效的是纳入周期性流程并设置响应机制:
- 用
Register-ScheduledJob创建每日凌晨 2 点自动运行的扫描任务,日志保留最近 7 天 - 扫描结果中若发现高危项(如关键组未受保护),自动触发邮件告警给域管理员,附带修复命令示例
- 禁用账号前先移出敏感组、清除 Kerberos 票据缓存(
klist purge),再执行Disable-ADAccount - 所有修改操作必须记录到自定义事件日志(
New-EventLog+Write-EventLog),便于事后追溯
注意事项与避坑提示
实际运行中几个细节决定成败:
-
LastLogonDate需域功能级别 ≥ 2008 R2;若环境较老,改用LastLogonTimestamp并接受最多 14 天延迟 - 避免在生产域控上直接运行高权限修改脚本,建议在已安装 RSAT 的管理工作站执行
- 排除内置账户时,正则匹配要覆盖
KRBTGT、Administrator、SID 开头为S-1-5-21-...的服务主体 - 权限扫描结果需人工复核——自动标记的
GenericAll可能是合法委托,不能一键清理











