Dracarus08/AD-Audit-Toolkit

GitHub: Dracarus08/AD-Audit-Toolkit

一款只读的 Active Directory 卫生审计工具,通过十项 MITRE ATT&CK 映射检查生成带评分的 HTML 报告,帮助防守方在攻击者之前发现域环境中的身份安全弱点。

Stars: 0 | Forks: 0

# AD-Audit-Toolkit 只读的 Active Directory 卫生审计工具。十项身份安全检查,一份带评分的 HTML 报告。 ![卫生报告](https://static.pigsec.cn/wp-content/uploads/repos/cas/c9/c9690087d1858e84d0b2e48ff7dc865a4dbce01d3c6c01dab7a24216ea9ed523.png) ![许可证](https://img.shields.io/badge/license-MIT-blue) ![PowerShell](https://img.shields.io/badge/PowerShell-5.1%2B-5391FE) ![范围](https://img.shields.io/badge/scope-defensive--security-3fb950) ![CI](https://static.pigsec.cn/wp-content/uploads/repos/cas/ad/ad5834178f7599af9fdda11629d49cae07f2997beec49821b2920eff5bfd50e7.svg) ## 存在的问题 Active Directory 会随着时间发生偏移。账户会过期失效,服务账户会积累大量永不过期的密码,特权组也会因为每次临时添加成员而不断膨胀。大多数环境都没有计划好的方法来监控这种偏移。攻击者一旦进入网络,几分钟内就能枚举出这些确切的弱点。防守方应该抢在他们之前发现这些问题。 本工具会运行攻击者会执行的检查,并以防守方所需的形式生成报告。 ## 核心功能 - 审计失效账户、永不过期密码、空密码标志以及过期密码。 - 查找特权组蔓延,以及处于非活动或禁用状态的特权账户。 - 标记易受 Kerberoasting 攻击的账户、非约束委派以及休眠的计算机对象。 - 根据可靠的基线检查域密码策略。 - 对整体卫生状况进行评分,并生成一份可以直接提交给管理层的独立 HTML 报告。 - 将每项检查映射到其防御的 MITRE ATT&CK 技术。 - 只读模式。本模块不会向 Active Directory 写入任何内容。 ## 截图 报告开头会展示严重性摘要和卫生评分。每项检查都包含详细的解释、被标记的对象列表以及相关建议。 ![完整报告](https://static.pigsec.cn/wp-content/uploads/repos/cas/c9/c9ebf7882a6c3a0365f8d70c4c68c555a0ec923f810b0cae0ad1936bba4f74d8.png) ## 架构 ``` flowchart LR A[Live domain via RSAT] --> C[Normalized objects] B[Synthetic demo dataset] --> C C --> D[Ten hygiene checks] D --> E[Scored findings] E --> F[HTML report] E --> G[PassThru objects] ``` 两种数据源都会被标准化为统一的内部结构。每项检查在针对真实域或演示数据集运行时,其执行方式完全相同。这就是为什么演示模式是对逻辑的真实测试,而不是简单的模拟。 ## 快速开始 演示模式不需要域环境,也不需要 RSAT。它可以在任何地方在几秒钟内运行完毕。 ``` Import-Module .\ADAuditToolkit\ADAuditToolkit.psd1 Invoke-ADAudit -Demo ``` 这会将带有时间戳的 HTML 报告输出到当前目录,并打印摘要。你可以使用任何浏览器打开该报告。 如果针对真实域运行,请在安装了 RSAT ActiveDirectory 模块的机器上执行: ``` Invoke-ADAudit -OutputPath C:\Reports\ad-hygiene.html ``` 使用 `-Server dc01.example.com` 指定特定的域控制器。使用 `-PassThru` 获取结构化的结果数据。 ## 用法示例 运行审计,并在管道中处理检查结果。 ``` $audit = Invoke-ADAudit -Demo -PassThru $audit.Summary.Score $audit.Checks | Where-Object CheckId -eq 'KERBEROASTABLE' | Select-Object -Expand Findings ``` ## 工作原理 每项检查都在回答攻击者针对域会提出的一个问题。 - **失效和休眠对象。** 那些无人使用的已启用账户是隐蔽的入侵落脚点。检查会找出 90 天未登录的已启用用户,以及静默 120 天的已启用计算机。 - **密码弱点。** 永不过期密码、PASSWD_NOTREQD 标志以及陈旧密码都会降低猜测或重用凭据的成本。特权账户上的永不过期密码会被扣减更多分数。 - **特权蔓延。** 工具会递归解析特权组成员身份(包括嵌套组),并将有效数量与保守的基线进行比较。它还会查找处于禁用或非活动状态的特权成员,因为这些账户通常处于无人监管的状态。 - **Kerberoasting 风险。** 任何具有 service principal name (SPN) 的用户账户,其服务票据都可以被任何域用户请求,并在离线状态下被破解。检查会找出这些账户,并给予特权账户更高的风险评分。 - **非约束委派。** 域控制器以外的对象如果被信任进行非约束委派,就可以捕获任何向其进行身份验证的用户的票据。检查会找出这些对象,并排除根据设计本身拥有此权限的域控制器。 - **密码策略。** 默认域策略将根据以下基线进行衡量:最小长度 14 个字符、启用复杂性和锁定策略、关闭可逆加密。 卫生评分是涵盖这十个类别的成熟度视图,而非简单的原始计数。每个类别满分 10 分,并根据其最严重的发现来扣减分数。单个问题较多的检查不会拖垮整个评分系统,而类别中的单个高危发现也会被等同于多个发现一样严肃处理。 ## MITRE ATT&CK 映射 | 检查项 | 技术 | |-------|-----------| | 失效用户账户 | T1078 Valid Accounts | | 密码永不过期 | T1078, T1110 Brute Force | | 不需要密码 | T1078, T1110 | | 陈旧密码 | T1110 | | 特权组蔓延 | T1078 | | 非活动的特权账户 | T1078, T1098 Account Manipulation | | 易受 Kerberoasting 攻击的账户 | T1558.003 Kerberoasting | | 非约束委派 | T1550 Use Alternate Authentication Material | | 休眠的计算机对象 | T1078 | | 密码策略薄弱 | T1110 | ## 演示数据 演示数据集由 `tools/New-DemoDataset.ps1` 生成。其中的每个对象都是虚构的。日期以日期偏移量的形式存储,因此无论何时运行,演示结果都能保持稳定。该数据集预设了正常账户与故意制造的安全发现的组合,以便审查者能看到每项检查都发挥了预期作用。 ## 路线图 - 将检查结果导出为 CSV 和 JSON,以便在流水线中使用。 - 为使用 PSO 的环境提供精细密码策略支持。 - 提供一种对比模式,可以对比两次审计并报告发生了哪些偏移。 - 支持带电子邮件发送功能的计划任务运行选项。 ## 收获与总结 我通过构建实时收集器和演示加载器,使其返回完全相同的对象结构。仅这一个决定就大大简化了工具后续的开发。每项检查都是基于标准化数据的纯函数。测试变得非常简单,因为我可以向检查模块输入一个小巧的手工数据集并对结果进行断言,完全不需要依赖域环境。 我也学到了必须谨慎处理卫生评分。我的第一个版本是对每个发现扣除固定的惩罚分数。混乱的域环境会使其直接降至零分,这对读者毫无参考价值。按类别的成熟度评分更加客观,也更具实用性。 ## 关于本作品集的说明 本作品集中的项目都是通过我的自动化开发流水线构建的。我负责设计它们、审查输出结果,并运维发布它们的系统。这个流水线本身是该系列中的最终项目。 ## 许可证 MIT。详见 [LICENSE](LICENSE)。
标签:Active Directory, AI合规, IPv6, Libemu, Plaso, PowerShell, SOC工具, 关系图谱, 基线检查, 多模态安全, 模拟器, 漏洞发现