This document is structured as a practitioner reference rather than a tutorial. Each section covers a distinct artifact family in the Server 2025 / Entra ID forensic landscape. Within each section you will find: what the artifact is, where it lives (registry keys, filesystem paths, process-resident locations), what it records at field-level detail, how to collect it with command syntax, event IDs to target, and investigative scenarios where the artifact changes the outcome. All paths and registry keys were verified against Server 2025 (Build 26100) as of March 2025.
Server 2025 is a rapidly evolving platform. Entra ID artifact locations and structures are subject to change across Windows Feature Updates. Validate against your specific build before relying on exact paths in production workflows.
Section 1 — The Shifted Forensic Landscape
What Changes When You Move From AD to Entra ID
Traditional Windows Server forensics is built around assumptions stable since Windows 2000: a domain controller to image, Kerberos tickets backed by a local KDC, credentials in NTDS.dit, group policy telemetry pointing to SYSVOL, and the security boundary at the on-premises network perimeter.
Every one of those assumptions breaks on an Entra ID-joined Server 2025 instance. The investigation does not get simpler — it gets bifurcated. Some evidence lives on the server in forms with no traditional equivalent. Other evidence lives in Microsoft's cloud infrastructure and requires Entra audit log collection via the Graph API or a legal preservation request. The analyst who applies a traditional investigation methodology to an Entra-joined server will miss significant evidence classes entirely.
The Evidence Bifurcation Problem
| Evidence Location | What Lives There & How to Collect It |
|---|---|
| On the server (local) | Device join records, credential caches, WAM token stores, conditional access evaluation logs, MDM compliance state, Arc agent logs, local security event log. Collected via imaging or live triage — standard DFIR workflow applies. |
| In Entra ID / Azure (cloud) | Sign-in logs (interactive and non-interactive), audit logs (admin actions, LAPS password retrievals, device registration changes), Conditional Access policy evaluation results, risky sign-in detections. Requires Graph API access or Microsoft Entra admin centre export. |
| In Intune (cloud) | Device compliance history, policy application logs, remote action history (wipe commands, lock commands), diagnostic report submissions. Requires Intune admin access or eDiscovery export. |
| In Azure Monitor / Sentinel | If configured: forwarded security events, sign-in anomaly detections, UEBA data. Not always present — check whether the tenant has log forwarding configured. |
An investigation that only examines the server will have a systematic blind spot: it will see what the device did, but not how the attacker authenticated to it. The authentication record — successful or failed MFA, Conditional Access policy outcome, sign-in risk score — lives in Entra, not on the server. Always pull both sides.
What Disappears Compared to Traditional AD Forensics
| Traditional AD Artifact | Status on Entra ID-Joined Server 2025 |
|---|---|
| NTDS.dit (credential store) | Does not exist. No local copy of directory credentials. Credential material stored in LSASS (CloudAP plugin) as PRTs and short-lived access tokens. |
| Local KDC / Kerberos TGT | No on-prem KDC queried. Kerberos authentication uses Entra Kerberos — cloud-issued tickets with a different issuer. See Section 4. |
| SYSVOL / GPOs | No SYSVOL. Policy delivered via Intune MDM (CSP-based). Policy application artifacts in MDM diagnostic logs, not traditional GPO event log sources. |
| netlogon.log | No Netlogon service in the traditional sense. Authentication disputes go to the AAD operational log. |
| Pass-the-Hash / Pass-the-Ticket | Largely irrelevant for cloud-only auth. Lateral movement artifacts shift to token theft (PRT stealing, refresh token replay) which leaves entirely different traces. |
| Lateral movement via NTLM to DCs | No on-prem DC to target. Lateral movement targets are cloud resources authenticated via OAuth/OIDC access tokens. |
Section 2 — Device Join & Identity Artifacts
The Join Record
When a Windows Server 2025 instance joins Entra ID, the join process writes artifacts across multiple locations: the registry, the certificate store, and a device-specific key container. These artifacts collectively constitute the device's identity proof and establish which tenant the device belongs to, when it joined, and whether it has ever belonged to a different tenant.
HKLM\SYSTEM\CurrentControlSet\Control\CloudDomainJoin\JoinInfo\<DeviceID>\
Key fields: TenantId (GUID of Entra tenant), TenantName (display name at join time), UserEmail (UPN of account that performed join), IdpDomain (identity provider domain), DeviceId (Entra Object ID), JoinType (0=Workplace Join, 6=Entra ID Join, 4=Hybrid Join), KeyContainerName (DPAPI-protected device key container)
A device previously joined to a different tenant will have a residual registry key for the old join under a different DeviceID subkey. Multiple DeviceID subkeys under JoinInfo is evidence of a prior join event — potentially a compromised tenant or a tenant migration that was not fully documented.
Device Certificates — The Cryptographic Identity
| Artifact | Path / Key | Forensic Value |
|---|---|---|
| MS-Device-ID cert | Cert:\LocalMachine\My (CN=<DeviceId>) | Primary device identity certificate. Issued by Microsoft Device Registration Service. Subject CN is the Entra Device Object ID. Valid 1 year, auto-renewed. Compare cert thumbprint on disk against Entra audit log to verify authenticity. |
| MS-Organization-P2P-Access cert | Cert:\LocalMachine\My (CN=<TenantId>) | Peer-to-peer access certificate. Issued per-tenant. Useful for establishing tenant membership timeline. |
| DPAPI device key | %ALLUSERSPROFILE%\Microsoft\Crypto\Keys\<container> | Private key material backing device certificates, DPAPI-protected. Relevant if investigating key export or device identity cloning. |
| NGC (Windows Hello) keys | HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\NGC\ | Per-user Windows Hello for Business keys. Each enrolled credential has key container reference and creation timestamp. |
dsregcmd — The Join Status Diagnostic
# Standard join status — AzureAdJoined, DeviceId, TenantId, JoinType dsregcmd /status # Full debug output including PRT status, token state, and NGC key list dsregcmd /status /debug # Dump detailed device info including certificate thumbprints and key container paths dsregcmd /status /verbose # List all enrolled credentials (useful for WHFB investigation) dsregcmd /listAdAccounts # Force a re-join status check and log the result dsregcmd /refreshprt
Join History Event IDs
| Event ID | Log Source | Description & Forensic Significance |
|---|---|---|
| 306 | User Device Registration\Admin | Device successfully joined Entra ID. Contains DeviceId, TenantId, and correlation ID. First event of device's cloud identity lifecycle. |
| 304 | User Device Registration\Admin | Join attempt failed. Contains error code and identity that attempted join. Repeated 304 events indicate a failed join loop, possibly due to CA blocking enrollment. |
| 200 | User Device Registration\Admin | Device re-joined (certificate renewal or forced re-registration). New DeviceId on re-join can indicate eviction from tenant and re-enrollment. |
| 100 | User Device Registration\Admin | Workplace Join initiated. May indicate incomplete join or user-level Workplace Join rather than device-level Entra Join. |
Section 3 — Primary Refresh Tokens & WAM
What the Primary Refresh Token Is
The Primary Refresh Token (PRT) is the master credential for an Entra ID-joined device. It functions as the equivalent of a Kerberos TGT in the cloud identity model: a long-lived token (typically 14 days, renewable) that the device uses to silently obtain short-lived access tokens for individual cloud resources without prompting the user to re-authenticate.
Understanding the PRT is fundamental to Entra ID forensics because it is the credential that an attacker steals, forges, or replays in the most significant cloud identity attacks. It is stored in a way that differs fundamentally from every credential artifact a traditional Windows forensics analyst is trained to look for.
How the PRT Is Stored — CloudAP in LSASS
The PRT is not stored in the registry, not stored on disk in a plaintext file, and not in Windows Credential Manager in an accessible form. It is held in memory within the LSASS process, managed by a Security Support Provider (SSP) called CloudAP (Cloud Authentication Provider). CloudAP is a plugin to the Windows LSA that handles all Entra ID authentication flows.
The in-memory PRT blob is protected by a session key derived from the device's TPM (on TPM-equipped servers) or by DPAPI (on non-TPM systems). On TPM-backed systems, the PRT cannot be exported without the TPM's cooperation. On systems without TPM, the protection falls back to DPAPI, which is significantly weaker.
Memory (live): LSASS process — CloudAP SSP heap (TPM-bound: non-exportable; DPAPI: extractable)
Disk cache: %SystemRoot%\System32\config\systemprofile\AppData\Local\Microsoft\Windows\CloudAPCache\MicrosoftAad\<hash>\Cache\
Offline cache: %SystemDrive%\Users\<user>\AppData\Local\Microsoft\Windows\CloudAPCache\MicrosoftAad\<hash>\Cache\
LSA secrets: HKLM\SECURITY\Policy\Secrets (legacy compatibility — may contain Entra-related secrets in hybrid configurations)
WAM — Web Account Manager Token Broker
The Web Account Manager (WAM) brokers OAuth 2.0 token requests for applications. Every time an application needs an access token for a cloud resource, it requests through WAM rather than directly from Entra. WAM caches the resulting tokens and refresh tokens, creating an artifact store that is the cloud equivalent of the traditional Kerberos ticket cache.
| Artifact | Path / Key | Forensic Value |
|---|---|---|
| WAM token cache (registry) | HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\AAD\Storage\<AppId>\ | Per-application OAuth token cache. Contains DPAPI-encrypted access token blobs, token expiry metadata, and UPN. Short-lived (1 hour) but expired tokens still forensically relevant. |
| WAM token cache (files) | %LOCALAPPDATA%\Microsoft\TokenBroker\Cache\ | Filesystem-based token cache. DPAPI-protected. More durable than registry — persists across registry cache invalidation events. |
| WAM accounts database | %LOCALAPPDATA%\Microsoft\Windows\CloudStore\ | LevelDB-format store with account metadata: enrolled accounts, associated tenants, token acquisition history. Requires LevelDB parsing tools. |
| Office token cache | %APPDATA%\Microsoft\Office\16.0\Common\Identity\ | Office-specific refresh token cache. Long-lived refresh tokens for Office 365. DPAPI-protected .dat files. |
| MSAL token cache | Varies — app's %APPDATA% or %LOCALAPPDATA% | Application-specific MSAL caches. Common for Azure SDK, PowerShell Az module, and custom enterprise apps. |
Detecting PRT Theft and Token Replay
| Attack Stage | Forensic Trace on Server |
|---|---|
| PRT extraction from LSASS | Process access to LSASS (Event 4656/4663 on LSASS handle, or Sysmon Event 10 for process injection). Tools: AADInternals, ROADtoken, custom LSASS dump + CloudAP parsing. |
| PRT encryption key extraction | Attempt to access TPM (tcg.log) or DPAPI master key (Events 4695/4694). On non-TPM systems, DPAPI master key access leaves Event 4694. |
| Nonce request for PRT use | Event 1006 in AAD Operational log. Unusual nonce requests (especially from unexpected processes) are a signal. |
| Token broker invoked by unusual process | WAM broker (runtimebroker.exe, backgroundtaskhost.exe) invoked by a process that does not normally request cloud tokens. Sysmon process creation chain analysis. |
| Successful token acquisition, then silence | Access tokens obtained on server, then no subsequent Azure activity from that IP. Tokens may have been extracted and replayed from external infrastructure. |
Key Event IDs — Authentication & Credential Events
| Event ID | Log Source | Description & Forensic Significance |
|---|---|---|
| 1000 | Microsoft\Windows\AAD\Operational | CloudAP token acquisition attempt. Contains resource URI, result (success/failure), correlation ID linkable to Entra sign-in log. The most important event for tracing cloud authentication activity. |
| 1006 | Microsoft\Windows\AAD\Operational | Nonce acquisition event — precedes PRT use. Unusual processes generating nonce requests warrant investigation. |
| 1098 | Microsoft\Windows\AAD\Operational | Authentication error with extended detail. Includes specific AADSTS error code. AADSTS50076 (MFA required) vs AADSTS65001 (consent required) tell very different stories. |
| 1102 | Microsoft\Windows\AAD\Operational | PRT refresh event. Gap between expected and actual refresh schedule can indicate PRT being used on a different device. |
| 4624 | Security | Successful logon. Authentication Package = 'CloudAP' indicates Entra ID-authenticated network logon rather than NTLM or Kerberos. |
| 4648 | Security | Explicit credential logon attempt. Combined with non-local source IP, indicates remote credential use. |
| 4776 | Security | NTLM authentication attempt. On a pure Entra-joined server, NTLM should rarely appear for user logons. Unexpected NTLM indicates legacy auth abuse. |
| 4695 | Security | DPAPI unprotect call on audited data. Cloud-protected (Entra-backed) data operations appear here. |
Collection Commands — PRT and WAM Artifacts
# Dump WAM token cache registry keys (run as SYSTEM or elevated user) reg export "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\AAD\Storage" wam_tokens.reg # Copy TokenBroker cache files (DPAPI-encrypted) robocopy "%LOCALAPPDATA%\Microsoft\TokenBroker\Cache" C:\Triage\WAM /E /COPYALL # Copy CloudAP cache for system account (requires SYSTEM privileges) robocopy "%SystemRoot%\System32\config\systemprofile\AppData\Local\Microsoft\Windows\CloudAPCache" C:\Triage\CloudAP /E /COPYALL # Check current PRT status live dsregcmd /status | findstr /i "PRT" # AAD Operational log — export authentication events wevtutil epl "Microsoft-Windows-AAD/Operational" C:\Triage\AAD_Operational.evtx # User Device Registration log wevtutil epl "Microsoft-Windows-User Device Registration/Admin" C:\Triage\UDR_Admin.evtx
Section 4 — Entra Kerberos: Cloud-Issued Tickets
Entra Kerberos (formerly Azure AD Kerberos) allows Entra ID to issue Kerberos tickets for on-premises resources — primarily for passwordless authentication scenarios and for accessing on-premises file shares from Entra-joined devices without requiring a line of sight to an on-premises DC. A special Read-Only Domain Controller (RODC) account is created in the on-premises AD forest, and Entra ID uses its keys to issue Kerberos TGTs.
Distinguishing Entra Kerberos Tickets
Traditional Kerberos TGT: Realm = CONTOSO.COM (your AD domain realm) Issuer = CN=CONTOSO-DC01,OU=Domain Controllers,DC=contoso,DC=com SPN = krbtgt/CONTOSO.COM Entra Kerberos TGT: Realm = CONTOSO.COM (same realm) Issuer = CN=AzureADKerberos,OU=Domain Controllers,DC=contoso,DC=com SPN = krbtgt/CONTOSO.COM PAC = Contains additional Entra-specific claims Key distinction: The issuer CN is 'AzureADKerberos' rather than a DC hostname. On a pure Entra-joined server, ALL Kerberos tickets should have this issuer. Any ticket with a real DC as issuer indicates on-prem DC connectivity occurred.
Examining the Ticket Cache
# List all Kerberos tickets in the current logon session klist # List tickets for all logon sessions (requires elevation) klist sessions klist -li <LogonId> tickets # PowerShell: enumerate tickets with full detail including issuer [System.Security.Principal.WindowsIdentity]::GetCurrent() | Select-Object * # Rubeus: dump ticket details from memory (document if used in investigation) Rubeus.exe triage # list all tickets without dumping Rubeus.exe dump /nowrap # dump for analysis
Entra Kerberos Event IDs
| Event ID | Log | Description & Forensic Significance |
|---|---|---|
| 4768 | Security | Kerberos TGT request (AS-REQ). On Entra-joined servers, Certificate Information references the Entra device certificate rather than a smart card or password. |
| 4769 | Security | Kerberos service ticket request (TGS-REQ). Unusual SPNs — particularly for on-premises services from an Entra-joined server — warrant review of the backing TGT. |
| 4771 | Security | Kerberos pre-authentication failure. On Entra Kerberos, can indicate ticket forging attempt (attacker has Entra Kerberos key from NTDS.dit of virtual RODC). Rare but significant. |
Section 5 — Conditional Access Enforcement Artifacts
Conditional Access (CA) policies are evaluated and enforced by Entra ID in the cloud — the server itself does not make CA decisions. However, Server 2025 logs the results of CA evaluations in a dedicated event log channel distinct from the traditional Security log. This log records which policies were evaluated, the outcome, and whether any fallbacks or exclusions were applied.
This log is almost universally overlooked because it sits in a non-standard event log location and is not collected by most default SIEM agents. It is one of the most valuable logs for detecting authentication bypass — an attacker using legacy authentication protocols to circumvent MFA will leave a clear signature here.
Log path: Applications and Services Logs\Microsoft\Windows\AAD\Operational
File path: %SystemRoot%\System32\winevt\Logs\Microsoft-Windows-AAD%4Operational.evtx
Default size: 1MB (critically small — increase to 50MB+ on investigated systems)
Default retention: Overwrite as needed — evidence loss is common on default settings
Triage: wevtutil epl "Microsoft-Windows-AAD/Operational" C:\Triage\AAD_Operational.evtx
Critical Conditional Access Event IDs
| Event ID | Log Source | Description & Forensic Significance |
|---|---|---|
| 1006 | AAD\Operational | Token acquisition success with CA policy context. The most important CA event. Fields include: resource URI, client app ID, correlation ID (links to Entra sign-in log), CA policy names evaluated, result for each policy. An attacker who bypasses CA will still generate this event with a policy result of 'notApplied' or 'granted' on policies that should have blocked. |
| 1098 | AAD\Operational | Authentication failure with CA context. Contains AADSTS error code: AADSTS53003 = CA block policy applied, AADSTS50076 = MFA required but not satisfied, AADSTS53000 = device compliance required but not compliant. |
| 1064 | AAD\Operational | Legacy authentication protocol used. Legacy auth (basic auth, NTLM to cloud, older ADAL, SMTP AUTH, IMAP) cannot satisfy MFA. Any 1064 event on a server that should only use modern auth is anomalous. |
| 1007 | AAD\Operational | Token refresh with CA re-evaluation. Establishes timeline of when a policy change block took effect vs. when the attacker last had valid tokens. |
| 1018 | AAD\Operational | Continuous Access Evaluation (CAE) revocation event. Records when a token was revoked by CAE — evidence the attacker was actively using the token at revocation time. |
Correlating Server-Side CA Events with Entra Sign-In Logs
The correlation ID present in Event 1006 links server-side CA events with Entra cloud-side sign-in logs. This GUID is consistent across the entire authentication flow — from the initial token request on the server, through Entra evaluation, to the sign-in log entry in the cloud.
# Extract correlation IDs from AAD Operational log for cross-referencing Get-WinEvent -LogName 'Microsoft-Windows-AAD/Operational' -MaxEvents 500 | Where-Object { $_.Id -eq 1006 } | ForEach-Object { $xml = [xml]$_.ToXml() [PSCustomObject]@{ Time = $_.TimeCreated CorrelationId = $xml.Event.EventData.Data | Where-Object {$_.Name -eq 'correlationId'} | Select -Exp '#text' Resource = $xml.Event.EventData.Data | Where-Object {$_.Name -eq 'resource'} | Select -Exp '#text' Result = $xml.Event.EventData.Data | Where-Object {$_.Name -eq 'errorCode'} | Select -Exp '#text' } } | Export-Csv C:\Triage\CA_Events.csv -NoTypeInformation
Detecting Legacy Authentication Abuse
Legacy authentication protocols — Basic Auth, NTLM to cloud resources, older OAuth flows, SMTP AUTH, IMAP — cannot satisfy MFA challenges and cannot be protected by most Conditional Access policies. On Server 2025, legacy authentication use is traceable through several converging artifacts:
- Event 1064 in AAD Operational — direct record of legacy auth protocol use, with application ID and specific legacy protocol
- Authentication Package = NTLM in Event 4624 — network logons using NTLM to a cloud resource. On a modern Entra-joined server, NTLM to cloud services should be absent
- Absence of MFA claim in WAM token cache — access tokens obtained via legacy auth lack the MFA authentication method claim (
amrclaim value 'mfa'). Visible in decoded JWT tokens extracted from the WAM cache - User-Agent strings in Entra sign-in logs — legacy clients identify themselves with older user agent strings. Entra flags these as 'Legacy Authentication Client' in the client app field
Section 6 — Azure Arc: The Second Identity Layer
Azure Arc is Microsoft's hybrid management platform that allows Azure management plane operations — policy assignment, monitoring, patch management, extension installation — to reach on-premises servers. An Arc-enrolled server has its own managed identity in Azure (separate from the Entra device identity) and runs a persistent agent (himds.exe and gc_service.exe) that maintains a live authenticated connection to Azure Resource Manager.
Arc creates a second identity layer on the server. Arc abuse is a realistic persistence and lateral movement vector that traditional IR tooling will not detect, and the Arc agent logs all management plane operations independently of the Windows event log.
Arc Agent Identity Artifacts
| Artifact | Path / Key | Forensic Value |
|---|---|---|
| Arc identity cert | C:\ProgramData\AzureConnectedMachineAgent\Certs\ | Agent's managed identity certificate (agentidentitycert.pem). Subject includes Arc resource ID. Valid 90 days, auto-renewed. Compare serial/thumbprint against Azure activity log at issuance. |
| Arc config file | C:\ProgramData\AzureConnectedMachineAgent\Config\agentconfig.json | Contains tenant ID, subscription ID, resource group, location, Arc resource name, connection endpoint. If this differs from expected subscription, server may have been connected to attacker's Azure environment. |
| Arc agent log | C:\ProgramData\AzureConnectedMachineAgent\Log\himds.log | Rolling log of all Arc operations: heartbeats, certificate renewals, extension installs, policy evaluations, management plane commands. ~30 days retention. |
| Arc extension logs | C:\Packages\Plugins\<ExtensionName>\<Version>\Status\ | Each installed extension writes status and execution logs. CustomScriptExtension logs contain the commands executed — a direct record of management-plane code execution. |
| IMDS endpoint | http://localhost:40342 | Arc's local Instance Metadata Service endpoint. Processes querying IMDS for managed identity tokens are visible in Arc agent logs. Suspicious processes querying IMDS warrant investigation. |
| Arc service registry | HKLM\SOFTWARE\Microsoft\Azure Connected Machine Agent\ | Contains enrollment state, resource ID, agent version, proxy config. TenantId and SubscriptionId values should match expected Azure environment. |
Arc as a Persistence and Lateral Movement Vector
An attacker with Azure RBAC permissions on the Arc resource (Contributor, Owner, or 'Azure Connected Machine Resource Administrator') can execute arbitrary code on the server via Arc extensions without any authentication to the server's operating system.
Attack vector: Attacker has compromised Azure credentials with RBAC access to the Arc resource. Installs or modifies a CustomScriptExtension via Azure portal or ARM API. The Arc agent downloads and executes the script with SYSTEM privileges.
On-server evidence:
C:\Packages\Plugins\Microsoft.Compute.CustomScriptExtension\<ver>\Downloads\ — downloaded script
C:\Packages\Plugins\Microsoft.Compute.CustomScriptExtension\<ver>\Status\0.status — execution result
C:\ProgramData\AzureConnectedMachineAgent\Log\himds.log — extension install/run events
Windows Event 4688 / Sysmon Event 1: parent process = gc_service.exe or himds.exe
Cloud evidence (Azure Activity Log):
Microsoft.HybridCompute/machines/extensions/write — extension installation with caller identity and script content
The on-server evidence alone does not show WHO triggered the execution. The Azure Activity Log is the only record of the caller identity.
Arc Investigation Commands
# Check Arc agent status and connection state azcmagent show # List all installed Arc extensions azcmagent extension list # Export Arc agent logs for the last 72 hours azcmagent logs --output C:\Triage\arc_logs.zip # Check which processes are making IMDS calls netstat -ano | findstr :40342 # Collect extension execution logs robocopy "C:\Packages\Plugins" C:\Triage\ArcExtensions /E /COPYALL # Collect Arc agent config for tenant/subscription verification copy "C:\ProgramData\AzureConnectedMachineAgent\Config\agentconfig.json" C:\Triage\
Section 7 — Cloud LAPS: The Credential That Rotated
Server 2025 introduces Cloud LAPS (Windows LAPS with Azure AD), where the rotating local admin password is stored in Entra ID rather than on-premises AD. Traditional LAPS passwords were readable from a DC's NTDS.dit or LDAP. Cloud LAPS passwords are readable from the Entra portal or via Microsoft Graph API — and the record of who retrieved the password exists only in the Entra audit log, not on the server.
Cloud LAPS Artifacts on the Server
| Artifact | Path / Key | Forensic Value |
|---|---|---|
| LAPS policy state | HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\LAPS\State\ | Contains PasswordExpirationTime, PasswdTimestamp, BackupDirectory (2 = Entra ID confirms Cloud LAPS). Compare PasswordExpirationTime against Entra audit logs for rotation timeline. |
| LAPS event log | Microsoft\Windows\LAPS\Operational | Every password rotation: timestamp, new expiry, and whether update was successfully committed to Entra. If rotation succeeded locally but Entra update failed, the password diverges — a potentially exploitable state. |
| LAPS configuration | HKLM\SOFTWARE\Microsoft\Policies\LAPS\ or ...\LAPS\Config\ | Password length, complexity, rotation interval, backup directory. Differing values from expected policy may indicate LAPS configuration tampering. |
| SAM account | HKLM\SAM\SAM\Domains\Account\Users\ | Local admin account. SAM modification timestamp should match LAPS PasswordTimestamp — a discrepancy indicates manual password modification outside of LAPS. |
There is no local log entry when someone retrieves the LAPS password from Entra. If a threat actor retrieves a Cloud LAPS password and uses it to log into a server, Event 4624 shows a local account logon — identical to any other local admin logon. The only way to determine that the LAPS password was retrieved is to examine the Entra audit log entry for 'Get local administrator password' — showing who retrieved it, from what IP, and at what time.
# Microsoft Graph — retrieve LAPS password read audit events for a specific device GET https://graph.microsoft.com/v1.0/auditLogs/directoryAudits ?$filter=activityDisplayName eq 'Get local administrator password' and targetResources/any(t: t/displayName eq '<ComputerName>') &$orderby=activityDateTime desc # PowerShell equivalent using the Az module Get-AzureADAuditDirectoryLogs -Filter "activityDisplayName eq 'Get local administrator password'" | Where-Object { $_.TargetResources.DisplayName -eq '<ComputerName>' }
LAPS Event IDs
| Event ID | Log Source | Description & Forensic Significance |
|---|---|---|
| 10018 | LAPS\Operational | Successfully updated password in Azure AD. Timestamp of last successful rotation. If significantly older than configured interval, investigate why rotation is failing. |
| 10019 | LAPS\Operational | Password update attempt failed. LAPS failures may leave an expired password in use — exploitable if password was retrieved before expiry. |
| 10020 | LAPS\Operational | Password rotation forced by admin action (manual reset). Either legitimate admin action or attacker rotating password after use to eliminate access trail. |
| 10025 | LAPS\Operational | Readable password deleted from directory. Occurs after post-authentication grace period. Timing relative to suspicious logon events is significant. |
Section 8 — Intune & MDM Compliance
When Server 2025 is enrolled in Intune, the MDM stack operates through Windows' built-in MDM client (DMClient) using the OMA-DM protocol. Configuration is delivered as CSP payloads rather than GPOs, creating a fundamentally different artifact landscape.
MDM Enrollment and Policy Artifacts
| Artifact | Path / Key | Forensic Value |
|---|---|---|
| MDM enrollment record | HKLM\SOFTWARE\Microsoft\Enrollments\<GUID>\ | Per-enrollment registry key. EnrollmentType (6 = Intune MDM), ProviderID, UPN, EnrollmentState. Multiple unexpected GUIDs may indicate shadow MDM enrollment by an attacker. |
| DMClient config | HKLM\SOFTWARE\Microsoft\PolicyManager\ | All applied MDM policies. Subkeys: current, device, user. Each policy has last-modified timestamp and applied value. |
| Sync log | C:\Users\<user>\AppData\Local\Temp\MDMDiagnostics\ | Timestamped records of every Intune sync: policies applied, configuration changes, compliance check results, remediation actions. |
| MDM diagnostic report | C:\Windows\Temp\MDMDiagReport_* | Full diagnostic snapshots (ZIP with HTML and XML) documenting complete policy state at a point in time. |
| WNF state | WNF_MDM_... notifications (live) | Windows Notification Facility states tracking MDM client status. Visible in memory forensics — relevant for detecting MDM client suspension or manipulation. |
Intune compliance state feeds into Conditional Access. An attacker who disables AV, modifies firewall rules, or disables audit logging will trigger compliance failures — and even if they re-enable the control immediately, the compliance failure event persists in the MDM diagnostic logs.
MDM Collection Commands
# Generate a full MDM diagnostic report (run elevated) mdmdiagnosticstool.exe -area deviceenrollment;deviceprovisioning;tpm -zip C:\Triage\MDMDiag.zip # Export current policy state from PolicyManager registry reg export "HKLM\SOFTWARE\Microsoft\PolicyManager" C:\Triage\PolicyManager.reg # View sync log for compliance history Get-ChildItem "$env:LOCALAPPDATA\Temp\MDMDiagnostics" | Sort LastWriteTime | Select -Last 5 # Check enrollment details Get-Item "HKLM:\SOFTWARE\Microsoft\Enrollments\*" | Get-ItemProperty
MDM Event IDs
| Event ID | Log Source | Description & Forensic Significance |
|---|---|---|
| 72 | DeviceManagement-Enterprise-Diagnostics-Provider\Admin | MDM policy application result. Contains CSP URI and operation result. Timestamped record of every Intune policy change. |
| 208 | DeviceManagement-Enterprise-Diagnostics-Provider\Admin | MDM compliance check result. Passes/fails with specific non-compliant items. Establishes when non-compliance was detected. |
| 210 | DeviceManagement-Enterprise-Diagnostics-Provider\Admin | MDM remediation action performed. Records what was changed and when. |
| 1009 | DeviceManagement-Enterprise-Diagnostics-Provider\Debug | MDM sync session details. Sync session ID, policies received, failures. Debug log — not enabled by default but invaluable when available. |
Section 9 — New and Changed Event IDs in Server 2025
Authentication & Identity Events
| Event ID | Log | Description & Forensic Significance |
|---|---|---|
| 4649 | Security | Replay attack detected. New significance in Server 2025: can indicate PRT or access token replay, not just traditional Kerberos replay. ReplayedEventCount distinguishes single-use from systematic replay. |
| 4822 | Security | NTLM authentication failed — client in restricted mode. Distinguishes legitimate NTLM block from suspicious attempt to use NTLM where modern auth should be used. |
| 4825 | Security | User denied access to Remote Desktop. Now includes Entra device compliance state of the connecting device — allows detection of access attempts from non-compliant devices. |
| 5379 | Security | Credential Manager credentials read. Enhanced to include cloud credential targets — when a process reads Azure/Entra credentials, the target is now explicitly identified as a cloud resource. |
| 5382 | Security | Vault credentials read. Cloud-backed vault credential access now tagged with the cloud resource type. |
| 6416 | Security | New external device recognized. Higher signal value on a server — USB storage on a production server is anomalous and warrants immediate review. |
Entra-Specific Log Channels — Full Reference
The following event log channels are specific to Entra ID functionality and are not present on standalone or traditional domain-joined servers. All require explicit collection — they are not forwarded by default SIEM agents:
| Channel | Path | Forensic Value |
|---|---|---|
| AAD\Operational | Microsoft-Windows-AAD/Operational | Core Entra authentication log. See Sections 3 and 5. Default max: 1MB — increase to minimum 50MB. |
| UDR\Admin | Microsoft-Windows-User Device Registration/Admin | Device join, re-join, certificate renewal events. Critical for device identity timeline. |
| NGC\Admin | CertificateServicesClient-Lifecycle-User/Operational | Windows Hello for Business key lifecycle: creation, deletion, use. Per-user credential enrollment record. |
| WebAuthN | Microsoft-Windows-WebAuthN/Operational | FIDO2 and WebAuthn authentication events. Records passkey use on Server 2025. |
| LAPS\Operational | Microsoft-Windows-LAPS/Operational | Cloud LAPS password rotation events. See Section 7. |
| DevMgmt\Admin | DeviceManagement-Enterprise-Diagnostics-Provider/Admin | Intune/MDM policy application and compliance. See Section 8. |
| MsixPackaging | AppXDeployment-Server/Operational | Application package installs via Intune. Timeline of admin-plane software installation. |
| CloudAP\Debug | Not enabled by default | CloudAP SSP debug log — highly verbose, records every cloud auth token operation. Enable temporarily: wevtutil sl Microsoft-Windows-CloudAP/Debug /e:true |
Section 10 — Persistence Mechanisms Specific to Entra-Joined Servers
Cloud-Plane Persistence — Evidence Only in Azure/Entra
Traditional Windows Server persistence (startup folders, Run keys, scheduled tasks, services, WMI subscriptions) remains fully applicable. What changes is the addition of cloud-plane persistence mechanisms that have no equivalent in on-premises environments and that leave no trace on the server itself.
| Persistence Method | How It Works & Where Evidence Lives |
|---|---|
| Arc extension persistence | Attacker with Azure RBAC installs a persistent Arc extension that runs a backdoor on every agent heartbeat. Re-executes every sync. Evidence: Azure Activity Log only — nothing on server unless extension examined directly. |
| Entra Application with server permissions | Attacker registers an Entra app with application permissions, configures it to use the server's managed identity as a credential. App accesses cloud resources using server's identity indefinitely. Evidence: Entra App Registration audit log. |
| Conditional Access exclusion | Attacker adds compromised account to a CA policy exclusion group, bypassing MFA permanently. Server sees logons succeed without MFA but cannot detect the exclusion is illegitimate. Evidence: Entra CA policy change audit log only. |
| Intune compliance policy modification | Attacker with Intune admin modifies compliance policies to mark malicious software as compliant, preventing CA from blocking the device. Evidence: Intune audit log only. |
| Named location / Trusted IP modification | Attacker adds attacker-controlled IP ranges as trusted named locations in CA, causing MFA bypass for connections from those IPs. Evidence: Entra CA audit log only. |
| PRT-based persistence | Attacker extracts PRT and caches it externally. PRT is valid for 14 days and renewable. Attacker can return within 14 days without fresh authentication. Evidence: See Section 3 detection artifacts. |
Server-Local Persistence — What's New on Server 2025
- WinGet package manager persistence — Server 2025 includes WinGet natively. Malicious packages installable via WinGet with no UI. Logged in
AppXDeployment-Server\Operational. Enumerate viawinget list - WSL2 persistence on Server 2025 — WSL2 available on Server 2025. Linux-side persistence (cron jobs, .bashrc, systemd units) leaves no trace in Windows event log. Distribution data at
%LOCALAPPDATA%\Packages\<DistroName>\LocalState\ext4.vhdx— requires Linux filesystem tools to examine - Dev Home / Dev Drive persistence — Dev Drive (ReFS-formatted) can host code executing at logon. Not scanned by some AV configurations by default due to performance trust settings
- DPAPI backup to Entra — Server 2025 supports cloud-backed DPAPI master key storage in Entra. An attacker with Entra admin access can decrypt all DPAPI-protected material offline. Evidence:
HKLM\...\CloudDomainJoin\JoinInfo\<DeviceID>\DPAPICloudBackupEnabled = 1
Section 11 — Triage Collection Checklist
# PRT status and token state dsregcmd /status /debug > C:\Triage\dsregcmd.txt # Running process list with full paths Get-Process | Select Name,Id,Path,StartTime | Export-Csv C:\Triage\processes.csv # Network connections with owning PIDs netstat -anob > C:\Triage\netstat.txt # Kerberos ticket cache (all sessions) klist sessions > C:\Triage\klist_sessions.txt klist tgt >> C:\Triage\klist_sessions.txt # Loaded drivers driverquery /v /fo csv > C:\Triage\drivers.csv # Arc agent status azcmagent show > C:\Triage\arc_status.txt azcmagent extension list >> C:\Triage\arc_status.txt # LAPS password expiry (NOT the password itself) reg query HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\LAPS\State > C:\Triage\laps_state.txt
$logs = @( 'Security', 'System', 'Application', 'Microsoft-Windows-AAD/Operational', 'Microsoft-Windows-User Device Registration/Admin', 'Microsoft-Windows-LAPS/Operational', 'Microsoft-Windows-DeviceManagement-Enterprise-Diagnostics-Provider/Admin', 'Microsoft-Windows-CertificateServicesClient-Lifecycle-User/Operational', 'Microsoft-Windows-TaskScheduler/Operational', 'Microsoft-Windows-WinRM/Operational', 'Microsoft-Windows-PowerShell/Operational', 'Microsoft-Windows-Sysmon/Operational' ) foreach ($log in $logs) { $safe = $log -replace '[/\\]','_' wevtutil epl $log "C:\Triage\Logs\$safe.evtx" 2>$null }
$hives = @{
'SYSTEM' = 'C:\Windows\System32\config\SYSTEM'
'SOFTWARE' = 'C:\Windows\System32\config\SOFTWARE'
'SECURITY' = 'C:\Windows\System32\config\SECURITY'
'SAM' = 'C:\Windows\System32\config\SAM'
}
foreach ($h in $hives.GetEnumerator()) {
Copy-Item $h.Value "C:\Triage\Hives\$($h.Key)" -Force
}
# Per-user NTUSER.DAT hives
Get-ChildItem C:\Users | ForEach-Object {
Copy-Item "$($_.FullName)\NTUSER.DAT" "C:\Triage\Hives\NTUSER_$($_.Name).DAT" -Force 2>$null
}
# CloudAP cache (system account — requires SYSTEM privileges) robocopy "$env:SystemRoot\System32\config\systemprofile\AppData\Local\Microsoft\Windows\CloudAPCache" C:\Triage\CloudAP /E /COPYALL # WAM token broker cache robocopy "$env:LOCALAPPDATA\Microsoft\TokenBroker\Cache" C:\Triage\WAM /E /COPYALL # Device certificates — export thumbprints and subjects Get-ChildItem Cert:\LocalMachine\My | Select Subject,Thumbprint,NotBefore,NotAfter | Export-Csv C:\Triage\certs_localmachine.csv # Arc agent identity artifacts robocopy "C:\ProgramData\AzureConnectedMachineAgent" C:\Triage\ArcAgent /E /COPYALL
# Full MDM diagnostic report mdmdiagnosticstool.exe -area deviceenrollment;deviceprovisioning;tpm -zip C:\Triage\MDMDiag.zip # PolicyManager registry export reg export "HKLM\SOFTWARE\Microsoft\PolicyManager" C:\Triage\PolicyManager.reg # Intune enrollment details reg export "HKLM\SOFTWARE\Microsoft\Enrollments" C:\Triage\Enrollments.reg # LAPS state reg export "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\LAPS" C:\Triage\LAPS.reg
| Source | What to Collect |
|---|---|
| Entra Sign-in Logs | Filter by device ID, last 30 days. Export to CSV via Entra portal or Graph API. |
| Entra Audit Logs | Filter for: device registration events, LAPS password retrievals, CA policy changes, role assignment changes, named location modifications. |
| Azure Activity Log | Filter by resource ID of the server (for Arc events) and subscription scope. Look for extension install/modify events. |
| Intune Device History | Device compliance timeline, remote action history, policy change history. Available in Intune portal under the device record. |
| Entra Risky Sign-ins | Microsoft Entra ID Protection risky sign-in detections correlated with server activity dates. |
| Conditional Access Insights | CA policy evaluation report (Entra portal: Monitoring > Sign-in logs > Conditional Access tab per event). |
Closing Notes
The Entra ID-joined Server 2025 investigation is fundamentally a two-site problem, and the most common failure mode is treating it as a single-site problem. Every section in this document has a cloud-side counterpart that contains evidence the server itself cannot provide: who authenticated, from where, with what compliance posture, and whether any cloud-plane persistence or bypass was applied.
The artifacts documented here will evolve rapidly as Microsoft develops the Server 2025 platform. Several features — DPAPI cloud backup, Entra Kerberos for all resources, CAE broad support — are in active development and their artifact footprints will change across future Feature Updates. Treat this document as a baseline, validate paths and event IDs against the specific build under investigation, and build institutional memory as new artifacts are discovered in casework.
Mjolnir Security — Cloud Identity Forensics
Our DFIR team has deep expertise in hybrid and cloud-native identity forensics, including Entra ID, Azure Arc, and Intune environments. We maintain validated artifact references and triage tooling for the latest Windows Server builds.
Contact us at mjolnirsecurity.com or call our 24/7 incident response line.
References
- Microsoft Learn — Entra ID Joined Devices Overview
- Microsoft — Primary Refresh Token documentation
- Microsoft — Windows LAPS (Cloud) documentation
- Dirk-jan Mollema — AADInternals and Entra ID attack research
- Dr. Nestori Syynimaa — PRT research and token theft methodology
- Microsoft Incident Response — Identity playbooks
- CISA Advisory AA23-347A — Cloud Identity Threat Landscape
- Lee Holmes — Windows PowerShell security and AMSI integration documentation
- Azure Arc — Azure Arc documentation
- SANS FOR508 — Advanced Incident Response covering Azure/Entra identity forensics module
Written by Mjolnir Security DFIR team
Published March 2025 · DFIR Reference Series · v1.0
This reference is part of Mjolnir Security's DFIR Knowledge Series. Reproduction with attribution is permitted.
