Windows Server 2025 Active Directory权限提升漏洞检测工具

BadSuccessor - Active Directory权限提升漏洞检测工具

项目描述

BadSuccessor是一个针对Windows Server 2025中Active Directory权限提升漏洞的安全检测工具。该工具利用PowerShell脚本帮助安全团队识别环境中存在风险的权限配置,特别是针对新引入的委托管理服务账户(dMSA)功能的滥用风险。

功能特性

  • 权限分析: 自动检测域中具有创建dMSA权限的身份
  • 组织单位识别: 定位存在BadSuccessor攻击风险的OU
  • 安全过滤: 自动排除内置特权组(域管理员、企业管理员等)
  • 轻量级运行: 仅需要域读取权限,无需高级特权
  • 环境兼容: 适用于默认配置的Windows Server 2025环境

安装指南

系统要求

  • Windows PowerShell 5.1或更高版本
  • Active Directory模块
  • 域环境读取权限

安装步骤

  1. 克隆或下载本仓库到本地
  2. 确保已安装Active Directory PowerShell模块
  3. 以域用户身份运行PowerShell
  4. 执行脚本:.\Get-BadSuccessorOUPermissions.ps1

使用说明

基础使用

直接在PowerShell中运行脚本即可获取分析结果:

.\Get-BadSuccessorOUPermissions.ps1

输出示例

脚本执行后将生成类似以下格式的表格输出:

Identity OUs
CORP\svc_app OU=Apps,DC=corp,DC=local
CORP\UserCreators OU=Tier1,OU=IT,DC=corp,DC=local

结果解读

  • Identity: 具有创建dMSA权限的用户或服务账户
  • OUs: 对应身份具有权限的组织单位列表
  • 建议审查每个身份的特权级别和监控状态

核心代码

权限检测核心逻辑

# 获取所有非特权用户具有dMSA创建权限的OU
function Get-dMSACreationPermissions {
    $OUs = Get-ADOrganizationalUnit -Filter * -Properties nTSecurityDescriptor
    $results = @()
    
    foreach ($OU in $OUs) {
        $acl = $OU.nTSecurityDescriptor
        $accessRules = $acl.Access
        
        foreach ($rule in $accessRules) {
            if ($rule.ActiveDirectoryRights -match "CreateChild") {
                if ($rule.ObjectType -eq $dMSA_ObjectGuid) {
                    # 记录具有权限的身份和OU
                    $result = [PSCustomObject]@{
                        Identity = $rule.IdentityReference
                        OU = $OU.DistinguishedName
                    }
                    $results += $result
                }
            }
        }
    }
    return $results
}

特权组过滤机制

# 排除内置特权组
$excludedGroups = @(
    "DOMAIN\Domain Admins",
    "DOMAIN\Enterprise Admins",
    "DOMAIN\Schema Admins",
    "DOMAIN\Administrators"
)

function Filter-PrivilegedIdentities {
    param($results)
    
    $filteredResults = @()
    foreach ($result in $results) {
        $isPrivileged = $false
        foreach ($group in $excludedGroups) {
            if ($result.Identity -like $group) {
                $isPrivileged = $true
                break
            }
        }
        if (-not $isPrivileged) {
            $filteredResults += $result
        }
    }
    return $filteredResults
}

结果汇总与输出

# 主执行逻辑
try {
    Write-Host "正在分析Active Directory权限配置..." -ForegroundColor Green
    
    # 获取dMSA对象GUID
    $dMSA_ObjectGuid = (Get-ADObject -SearchBase (Get-ADRootDSE).schemaNamingContext -Filter {Name -eq "msDS-GroupManagedServiceAccount"}).ObjectGUID
    
    # 检测权限配置
    $rawResults = Get-dMSACreationPermissions
    
    # 过滤特权组
    $finalResults = Filter-PrivilegedIdentities -results $rawResults
    
    # 输出结果
    $finalResults | Format-Table -AutoSize
    
} catch {
    Write-Error "执行过程中发生错误: $($_.Exception.Message)"
}

更多精彩内容 请关注我的个人公众号 公众号(办公AI智能小助手)
公众号二维码

posted @ 2025-09-04 16:18  qife  阅读(11)  评论(0)    收藏  举报