fatihpurtas/ReversiblePwd-scanner

GitHub: fatihpurtas/ReversiblePwd-scanner

一款无需管理员权限和 AD 模块即可扫描 Active Directory 中启用了可逆加密密码账户的 PowerShell 审计脚本。

Stars: 0 | Forks: 0

# 可逆密码加密扫描器 此 PowerShell 脚本会审计 **Active Directory** 中存储的密码启用了**可逆加密**的账户,并将结果导出到 CSV 文件中。 ## 目的 当设置了 `ENCRYPTED_TEXT_PWD_ALLOWED` 标志(`userAccountControl` 位 `0x80`)时,Active Directory 会以可**解密还原为明文**的形式存储账户密码。任何能够读取目录数据库的人(例如具备 DCSync 能力的攻击者)都可以恢复明文密码。这实际上与以明文形式存储密码的风险相同,并且是一种常见的合规性失败问题。 - 检测所有设置了 `userAccountControl` 位 `0x80` (128) 的用户账户。 - 标记特权账户(`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:=128)) (除非使用 `-IncludeDisabled`,否则会附加 `(!(...:=2))` 子句以跳过已禁用的账户) 3. 提取相关属性,将 FileTime 值转换为可读的 UTC 时间。 4. 导出结果并打印摘要。 ## 用法 ``` .\ReversiblePwd.ps1 .\ReversiblePwd.ps1 -Server dc01.example.com -OutputPath C:\Audit\reversible.csv .\ReversiblePwd.ps1 -IncludeDisabled ``` | 参数 | 描述 | |-----------|-------------| | `-Server` | 直接查询的域控制器(`dc01.example.com` 或 `:636`)。 | | `-SearchBase` | 用于限定搜索范围的 Distinguished Name(可分辨名称)。 | | `-OutputPath` | CSV 输出路径。默认为 `.\reversible_pwd_.csv`。 | | `-IncludeDisabled` | 包含已禁用的账户(默认排除)。 | ## CSV 列 Name, SamAccountName, Enabled, AdminCount, PwdLastSet, LastLogon, DistinguishedName. ## 环境要求 - PowerShell 5.1 或更高版本 - 域连接(已加入域,或可通过 `-Server` 访问的 DC) - 对 Active Directory 的读取权限 ## 安全影响 - 在 GPO 级别(“Store passwords using reversible encryption” = 已禁用)以及每个账户上**禁用可逆加密**,然后**强制更改密码**。可逆存储的副本仅在下一次设置密码时才会清除。 - **优先处理特权账户。** - 该标志通常是为了支持旧版身份验证(CHAP、摘要身份验证、某些 RADIUS 设置)而启用的;请查找并替换这些依赖项,而不是保留该标志。 - **合规性:** 大多数框架(PCI-DSS、CIS、NIST)明确禁止存储可逆密码。
标签:Active Directory, AI合规, Checkov, IPv6, Libemu, Plaso, PowerShell, 多人体追踪