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, 多人体追踪