fatihpurtas/PasswdNotReqd-scanner

GitHub: fatihpurtas/PasswdNotReqd-scanner

一款轻量级 PowerShell 脚本,用于审计 Active Directory 中存在 PASSWD_NOTREQD 标志的高风险账户,无需管理员权限或 AD 模块即可运行。

Stars: 0 | Forks: 0

# PASSWD_NOTREQD 扫描器 此 PowerShell 脚本会审计 **Active Directory** 中被标记为 **`PASSWD_NOTREQD`**(无需密码)的账户,并将结果导出为 CSV 文件。 ## 目的 `PASSWD_NOTREQD` 标志(`userAccountControl` 位 `0x20`)使得账户可以豁免 域的**最小密码长度**策略。此类账户可以被设置 **空密码或极短的密码**,使其成为密码喷洒攻击的首选目标,并成为入侵域的轻松跳板。 - 检测所有设置了 `userAccountControl` 位 `0x20` (32) 的用户账户。 - 标记特权账户(`adminCount >= 1`)以及**从未设置**密码的账户。 - 默认排除已禁用的账户。 ## 关键特性 - 仅使用内置的 **System.DirectoryServices** 类,**不需要 ActiveDirectory 模块**。 - **无需管理员权限**即可运行;只需对 AD 具有读取权限。 - 适用于已加入域的环境,或通过 `-Server` 针对特定 DC 运行。 - 分页 LDAP 查询(每页 1000 条),适用于大型域。 ## 工作原理 1. 绑定到 `RootDSE` 以发现默认命名上下文(或使用 `-SearchBase`)。 2. 运行 LDAP 过滤器: (&(objectCategory=person)(objectClass=user)(userAccountControl:1.2.840.113556.1.4.803:=32)) (除非使用 `-IncludeDisabled`,否则会追加 `(!(...:=2))` 子句以跳过已禁用的账户) 3. 提取相关属性,将 FileTime 值转换为可读的 UTC 时间。 4. 导出结果并打印摘要。 ## 用法 ``` .\PasswdNotReqd.ps1 .\PasswdNotReqd.ps1 -Server dc01.example.com -OutputPath C:\Audit\passwd_notreqd.csv .\PasswdNotReqd.ps1 -IncludeDisabled ``` | 参数 | 描述 | |-----------|-------------| | `-Server` | 直接查询的域控制器(`dc01.example.com` 或 `:636`)。 | | `-SearchBase` | 用于限定搜索范围的可分辨名称。 | | `-OutputPath` | CSV 输出路径。默认为 `.\passwd_notreqd_.csv`。 | | `-IncludeDisabled` | 包含已禁用的账户(默认排除)。 | ## CSV 列 Name, SamAccountName, Enabled, AdminCount, PwdLastSet, NeverSetPassword, LastLogon, DistinguishedName。 ## 要求 - PowerShell 5.1 或更高版本 - 域连接(已加入域或可通过 `-Server` 连接到 DC) - 对 Active Directory 具有读取权限 ## 安全影响 - 对任何并非真正需要该标志的账户**清除该标志**。该标志通常是账户配置脚本或迁移遗留的产物。 - 在清除标志后,**重置受影响账户**的密码为一个强密码,以替换任何现有的空/弱密码。 - **优先处理特权账户**以及 `NeverSetPassword = True` 的账户,这些账户当前可能拥有空白密码。 - **监控**这些账户的成功登录情况,在修复之前将其视为高风险账户。
标签:Active Directory, AI合规, Checkov, IPv6, LDAP, Libemu, Plaso, PowerShell, Terraform 安全, 多人体追踪