adaudit — 用于域审计自动化的PowerShell脚本 | Kitploit
phillips321/adauditadaudit
用于域审计自动化的PowerShell脚本
41410636个月前
adaudit
此 PowerShell 脚本旨在对 Microsoft Active Directory 执行全面审计,重点识别常见安全漏洞与弱点。执行该脚本有助于精准定位需要加固的关键区域,从而抵御针对 Active Directory 的横向移动或权限提升攻击中常用的攻击手法。
_____ ____ _____ _ _ _
| _ | \ | _ |_ _ _| |_| |_
| | | | | | | | . | | _|
|__|__|____/ |__|__|___|___|_|_|
by phillips321
如果您有任何适用于此脚本的实用 PowerShell 单行命令,请告知我。我希望此脚本保持为单一文件,且不依赖外部工具(ntdsutil 和 cmd.exe 除外)。
直接在域控制器上以域管理员身份运行。如果您不信任此代码,建议先阅读它,您会发现它完全无害!(但您从网上下载代码并以域管理员身份运行时,不都应该这样做吗?)
此脚本的功能
- 设备信息
- 域审计
- Get-LastWUDate
- Get-DCEval
- Get-TimeSource
- Get-PrivilegedGroupMembership
- Get-MachineAccountQuota
- Get-DefaultDomainControllersPolicy
- Get-SMB1Support
- Get-FunctionalLevel
- Get-DCsNotOwnedByDA
- Get-ReplicationType
- Get-RecycleBinState
- Get-CriticalServicesStatus
- Get-RODC
- 域信任审计
- 用户账户审计
- Get-InactiveAccounts
- Get-DisabledAccounts
- Get-LockedAccounts
- Get-AdminAccountChecks
- Get-NULLSessions
- Get-PrivilegedGroupAccounts
- Get-ProtectedUsers
- 密码信息审计
- Get-AccountPassDontExpire
- Get-UserPasswordNotChangedRecently
- Get-PasswordPolicy
- Get-PasswordQuality
- 转储 NTDS.dit
- 计算机对象审计
- GPO 审计(并检查 SYSVOL 中的密码)
- Get-GPOtoFile
- Get-GPOsPerOU
- Get-SYSVOLXMLS
- Get-GPOEnum
- 检查通用组 AD 权限
- 检查域中是否存在 LAPS
- 检查是否存在身份验证策略和隔离域
- Get-AuthenticationPoliciesAndSilos
- 检查不安全的 DNS 区域
- 检查新创建的用户和组
- 检查 ADCS 漏洞:ESC1、2、3、4 和 8
- 检查高价值可 Kerberoast 的账户
- 检查可 ASREPRoast 的账户
- 检查用户、组和计算机上的危险 ACL 权限
- 检查 LDAP 和 LDAPs 设置(签名、空会话等)
运行时参数
可组合使用以下开关:
-installdeps 安装可选功能(DSInternals)
-hostdetails 获取主机名及其他有用的审计信息
-domainaudit 获取有关 AD 的信息(如功能级别)
-trusts 获取有关域信任的信息
-accounts 识别账户问题(如过期、禁用等)
-passwordpolicy 获取密码策略信息
-ntds 使用 ntdsutil 转储 NTDS.dit 文件
-oldboxes 识别加入域的过时操作系统(如 XP/2003)
-gpo 以 XML 和 HTML 格式转储 GPO 供后续分析
-ouperms 检查通用 OU 权限问题
-laps 检查是否安装了 LAPS
-authpolsilos 检查是否存在身份验证策略和隔离域
-insecurednszone 检查不安全的 DNS 区域
子域支持
此脚本现已完全支持林根域和子域:
- 在子域中优雅处理 Schema Admins 和 Enterprise Admins(该组仅存在于林根域)
- 脚本成功完成,并为缺少的仅林根域组提供适当的信息提示
- 不会因子域场景中缺少组而导致崩溃或阻止失败
- 已在 Windows Server 2022 子域上测试并验证
错误处理与健壮性
脚本在整个过程中实现了全面的错误处理:
- 可选的审计功能优雅地失败,不会阻塞脚本执行
- GPO 报告生成错误(例如损坏的 GPO)不会阻止其他审计完成
- 防御性检查可防止因可选输出文件缺失而导致的文件未找到异常
- 清晰的错误/警告/信息消息可区分严重故障与预期场景
- 缺少可选模块(DSInternals、LAPS、AdmPwd.PS)不会阻止核心审计功能
Nessus XML 输出
- 生成有效的、格式正确的 Nessus XML,无需后处理
- 所有特殊字符在源文件中正确转义(&、<、>、"、')
- 输出文件可直接导入 Nessus,无需手动修改
- 消除了后处理步骤或额外输出文件的需求
测试环境
- 已在 Windows Server 2022 上验证(包括林根域和子域)
- 支持 Windows Server 2008R2 至 2022
- 成功处理包含损坏 GPO 和混合配置的复杂生产环境
-recentchanges 检查最近 30 天内新创建的用户和组-adcs 检查 ADCS 漏洞:ESC1、2、3、4 和 8-acl 检查用户、组和计算机上的危险 ACL 权限-spn 检查高价值可 Kerberoast 的账户-asrep 检查可 ASREPRoast 的账户-ldapsecurity 检查多个 LDAP 问题-exclude 允许在运行 adaudit.ps1 -all -exclude ouperms,ntds,adcs 时排除特定检查-select 允许在运行 adaudit.ps1 -all "gpo,ntds,acl" 时指定仅运行哪些检查-all 运行所有检查,例如 AdAudit.ps1 -all